4.5 Asynchronous Progress

The asynchronous progress example describes the contents of the ROP request buffer and ROP response buffer for a successful RopProgress ROP ([MS-OXCROPS] section 2.2.8.13) as described in section 2.2.23. In this example, the user is trying to empty a Folder object, which has 729 items in it, and the RopEmptyFolder ROP ([MS-OXCROPS] section 2.2.4.9) will represent the asynchronous operation that the RopProgress ROP reports progress for.

The sequence in which ROPs get passed between client and server is shown in the following figure.

Sequence in which ROPs are passed between client and server

Figure 1: Sequence in which ROPs are passed between client and server

1.  Client sends a RopEmptyFolder ROP request to the server. The ROP request buffer is formatted as follows.

0000: 58 00 00 01 00

RopId: 0x58 (RopEmptyFolder)

LogonId: 0x00

InputHandleIndex: 0x00

WantAsynchronous: 0x01 (TRUE)

WantDeleteAssociated: 0x00 (FALSE)

2.  Server responds to request by sending the RopProgress ROP response buffer, which is formatted as follows.

0000: 50 00 00 00 00 00 00 1D-00 00 00 D9 02 00 00

RopId: 0x50 (RopProgress)

InputHandleIndex: 0x00

ReturnValue: 0x00000000 (Success)

LogonId: 0x00

CompletedTaskCount: 0x0000001D (29 in decimal)

TotalTaskCount: 0x000002D9 (729 in decimal)

3.  Now client sends a RopProgress ROP request buffer asking server how much progress has been made. The ROP request buffer is formatted as follows.

0000: 50 00 00 00

RopId: 0x50 (RopProgress)

LogonId: 0x00

InputHandleIndex: 0x00

WantCancel: 0x00 (FALSE)

4.  Server responds to request by sending the RopProgress ROP response buffer, which is formatted as follows.

0000: 50 00 00 00 00 00 00 3B-00 00 00 D9 02 00 00

RopId: 0x50 (RopProgress)

InputHandleIndex: 0x00

ReturnValue: 0x00000000 (ecNone: Success)

LogonId: 0x00

CompletedTaskCount: 0x0000003B (59 in decimal)

TotalTaskCount: 0x000002D9 (729 in decimal)

5.  Client keeps sending RopProgress ROP requests, and server keeps sending RopProgress ROP response buffers telling client the current progress status.

Finally, when server has completed the the RopEmptyFolder ROP, instead of sending a RopProgress ROP response buffer, it sends the RopEmptyFolder ROP response buffer back. The following is the last RopProgress ROP request that the client makes.

0000: 50 00 00 00

RopId: 0x50 (RopProgress)

LogonId: 0x00

InputHandleIndex: 0x00

WantCancel: 0x00 (FALSE)

6.  Server responds by sending the RopEmptyFolder ROP response buffer back, formatted as follows.

0000: 58 00 00 00 00 00 00

RopId: 0x58 (RopEmptyFolder)

InputHandleIndex: 0x00

ReturnValue: 0x00000000 (Success)

ParitalCompletion: 0x00 (FALSE)