3.3.4.2.1 Server-to-Client-to-Server Upload

To optimize copying messaging objects between two different mailboxes on two different servers by using FastTransfer upload paired with FastTransfer download, a client can specify the ForUpload flag in the SendOptions field of the RopFastTransferSourceCopy* ROPs, as specified in section 2.2.3.1.1, which instructs the source server to produce a FastTransfer stream that is optimized for the destination server. By setting the ForUpload flag, the client instructs the server to transmit all string properties in an untranslated format to preserve full fidelity on the destination server.

Clients MUST NOT parse the FastTransfer stream produced by the source server, as it can contain optimizations and not adhere to the grammar specified in section 2.2.4.

Clients MUST use the following steps to execute server-to-client-to-server copying:

  1. Send one of the RopFastTransferSourceCopy* ROP requests to server A to configure a FastTransfer download context, while setting the ForUpload flag in the SendOptions field.

  2. Send the RopFastTransferDestinationConfigure ROP (section 2.2.3.1.2.1) request to server B to configure a FastTransfer upload context.

  3. Send the RopTellVersion ROP (section 2.2.3.1.1.6) request on the FastTransfer download context with a version of server B.

  4. Send the RopTellVersion ROP request on the FastTransfer upload context with a version of server A.

  5. Iteratively send the RopFastTransferSourceGetBuffer ROP (section 2.2.3.1.1.5) requests on the FastTransfer download context, followed by the RopFastTransferDestinationPutBuffer ROP (section 2.2.3.1.2.2) requests on the FastTransfer upload context, until there is no more data.

  6. Release both FastTransfer contexts.