3.2.5.8.1.5 Receiving a RopFastTransferSourceGetBuffer ROP Request

When the client sends the server a RopFastTransferSourceGetBuffer ROP (section 2.2.3.1.1.5) request, the server MUST parse the request as specified in [MS-OXCROPS] section 2.2.12.7.1 and section 2.2.3.1.1.1 of this specification. The server MUST respond with a RopFastTransferSourceGetBuffer ROP response, as specified in [MS-OXCROPS] section 2.2.12.7.2 and section 2.2.3.1.1.1 of this specification.

If the value of the BufferSize field in the ROP request is 0xBABE, the server determines the buffer size based on the residual size of the rgbOut field of the EcDoRpcExt2 method, as specified in [MS-OXCRPC] section 3.1.4.2, or the rgbRopOut field of the Execute request type response<37>, as specified in [MS-OXCMAPIHTTP] section 2.2.4.2.2.

If the value of the BufferSize field in the ROP request is set to 0xBABE, the server MUST limit the amount of data returned in TransferBuffer field to the residual size of the output buffer minus result structure overhead, or limit the amount of data returned in the TransferBuffer field to MaximumBufferSize, whichever is smaller.

If the value of BufferSize field in the ROP request is set to a value other than 0xBABE, the following semantics apply:

  • The server MUST fail the command before processing the ROP by doing the following:

  • The server MUST return the RopBufferTooSmall ROP ([MS-OXCROPS] section 2.2.15.1) if the resulting BufferSize bytes in the TransferBuffer field are larger than the residual rgbOut field of the EcDoRpcExt2 method, as specified in [MS-OXCRPC] section 3.1.4.2, or the rgbRopOut field of the Execute request type response<38>, as specified in [MS-OXCMAPIHTTP] section 2.2.4.2.2.

  • The server MUST output, at most, the number of bytes specified by the BufferSize field in the TransferBuffer field even if more data is available.

  • The server returns less bytes than the value specified by the BufferSize field, or the server returns the number of bytes specified by the BufferSize field in the TransferBuffer field.

The ReturnValue field is set to 0x00000480 only when the client is version 11.0.0.4920 or higher. For more details about version checking, see [MS-OXCRPC] section 3.2.4.1.3.

Servers SHOULD fail any successive calls to the RopFastTransferSourceGetBuffer ROP if the previous iteration returns a value other than of Success or 0x00000480 in the ReturnValue field. Successive calls should fail with the same error as previous failed operations. The server MUST serialize each portion of the FastTransfer stream using the syntax specified in section 2.2.4 and output it using the TransferBuffer field.