3.3.4.3.1 Uploading the ICS State

The ICS state properties, as specified in section 2.2.1.1, are used to determine the differences between the messaging objects on the client and the server. By using the ICS state properties, only differences that are relevant to a client are downloaded and the same information is only downloaded once.

The client passes the ICS state properties to the server immediately after configuring a synchronization context for download or upload by sending the RopSynchronizationConfigure ROP (section 2.2.3.2.1.1) or the RopSynchronizationOpenCollector ROP (section 2.2.3.2.4.1), respectively.

After the synchronization context is acquired, the client MUST send the initial ICS state properties, as specified in section 2.2.1.1, to the server before executing any other ROPs on the synchronization context.

During the first synchronization of a synchronization scope, the client MUST send the initial ICS state properties as zero-length byte arrays.

The following table summarizes the requirements for including the ICS state properties depending on the synchronization context of the operation.

ICS state property

Hierarchy download

Contents download

Hierarchy upload

Contents upload

MetaTagIdsetGiven (section 2.2.1.1.1)

MUST

MUST

Not applicable

Not applicable

MetaTagCnsetSeen (section 2.2.1.1.2)

MUST

MUST

SHOULD

SHOULD

MetaTagCnsetSeenFAI (section 2.2.1.1.3)

Not applicable

MUST

Not applicable

SHOULD

MetaTagCnsetRead (section 2.2.1.1.4)

Not applicable

MUST

Not applicable

SHOULD

Uploading the ICS state properties is done sequentially, property by property. The order in which properties are uploaded does not matter. The upload of each property MUST be initiated by sending the RopSynchronizationUploadStateStreamBegin ROP (section 2.2.3.2.2.1) request, followed by one or more RopSynchronizationUploadStateStreamContinue ROP (section 2.2.3.2.2.2) requests. The upload is finished with the RopSynchronizationUploadStateStreamEnd ROP (section 2.2.3.2.2.3).

At the end of the synchronization operation, the client receives a new ICS state from the server, commonly referred to as the final ICS state. Updated ICS state properties can also be returned to the client in ROP responses, or through the checkpointing process, as specified in section 3.3.5.6. It is the responsibility of the client to persist the ICS state properties.