Hi List,
I've committed a few fixes in OpenChange so we now only have 1 remaining
mapitest test failing: OXCTABLE-CATEGORY.
I have been investigating the SetCollapseState/FreeBookmark trying to
solve this last issue and think the problem may come from MS
specifications.
If we compare GetCollapseState reply and SetCollapseState reply:
mapi_GetCollapseState: struct GetCollapseState_repl
CollapseState : SBinary_short cb=217
[0000] AC 00 21 7F 80 00 00 00 7F 07 3F 0E 51 0E 99 07 ..!..... ..?.Q...
[0010] 42 07 02 0E 1A 0E 9F 0E 51 0E 51 0E A7 0C 03 01 B....... Q.Q.....
[0020] 01 01 01 00 21 7F 80 00 00 00 7F 07 3F 0E 51 0E ....!... ....?.Q.
[0030] 99 07 42 07 02 0E 1A 0E 9F 0E 51 0E 51 0E A7 0C ..B..... ..Q.Q...
[0040] 21 01 01 01 01 00 21 7F 80 00 00 00 7F 07 3F 0E !.....!. ......?.
[0050] 51 0E 99 07 42 07 02 0E 1A 0E 9F 0E 51 0E 51 0E Q...B... ....Q.Q.
[0060] A7 0C 33 01 01 01 01 00 21 7F 80 00 00 00 7F 07 ..3..... !.......
[0070] 3F 0E 51 0E 99 07 42 07 02 0E 1A 0E 9F 0E 51 0E ?.Q...B. ......Q.
[0080] 51 0E A7 0C 46 01 01 01 01 00 21 7F 80 00 00 00 Q...F... ..!.....
[0090] 7F 07 3F 0E 51 0E 99 07 42 07 02 0E 1A 0E 9F 0E ..?.Q... B.......
[00A0] 51 0E 51 0E A7 0C 58 01 01 01 01 00 2B 7F 01 7F Q.Q...X. ....+...
[00B0] 07 3F 0E 51 0E 99 07 42 07 02 0E 1A 0E 9F 0E 51 .?.Q...B .......Q
[00C0] 0E 51 0E A7 07 02 0E 23 0E 8A 0E 7C 0E 51 01 01 .Q.....# ...|.Q..
[00D0] 01 01 00 7F 80 00 00 00 00 ........ .
mapi_response : (handles) number=1
mapi_SetCollapseState: struct SetCollapseState_repl
bookmark : SBinary_short cb=87
[0000] 03 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 ........ ........
[0010] 00 1B FC 14 01 00 00 00 00 1C 8D C5 00 00 00 00 ........ ........
[0020] 06 00 00 00 00 00 00 00 00 00 2B 00 7F 01 7F 07 ........ ..+.....
[0030] 3F 0E 51 0E 99 07 42 07 02 0E 1A 0E 9F 0E 51 0E ?.Q...B. ......Q.
[0040] 51 0E A7 07 02 0E 23 0E 8A 0E 7C 0E 51 01 01 01 Q.....#. ..|.Q...
[0050] 01 00 7F 80 00 00 00 .......
mapi_response : (handles) number=1
* The CollapseState blob returned by GetCollapseState specifies
- accordingly to MS specifications - a collapse state for a
categorized table.
* The bookmark blob returned by SetCollapseState specifies the
current cursor position.
Both blobs sounds to have a slightly different meaning but however share
a significant number of bytes starting at offset 0xAD for
GetCollapseState blob and 0x2C for SetCollapsetState reply:
7F 01 7F 07 ........ ..+.....
[0030] 3F 0E 51 0E 99 07 42 07 02 0E 1A 0E 9F 0E 51 0E ?.Q...B. ......Q.
[0040] 51 0E A7 07 02 0E 23 0E 8A 0E 7C 0E 51 01 01 01 Q.....#. ..|.Q...
[0050] 01 00 7F 80 00 00 00
This blob is prefixed with a 2 bytes integer which specifies its size.
Furthermore GetCollapeState first 2 bytes (00 AC) specifies a 0xAC size
which strangely matches with a blob ending where common bytes start.
This made be conclude both the GetCollapseState and SetCollapseState
blobs have more complex structures than what MS specifications say and
the bookmark blob only be part of SetCollapseState returned one.
Using this conclusion, I've been hacking around the potential "real
bookmark" blob returned by SetCollapseState and noticed that
FreeBookmark would return MAPI_E_CALL_FAILED whenever our blob size
extends 0x4 bytes. Hum 0x4 bytes ... uint32_t?
I've truncated the internal bookmark blob to be 4 bytes rather than the
full SetCollapseState returned blob and FreeBookmark no longer return
MAPI_E_CALL_FAILED but MAPI_E_NO_SUPPORT, which despite the error looks
to me like real progress:
EcDoRpc: struct EcDoRpc
in: struct EcDoRpc
handle : *
handle: struct policy_handle
handle_type : 0x00000000 (0)
uuid :
4373d3a6-9b11-4ade-ad03-92fffe51071b
size : 0x0000fff0 (65520)
offset : 0x00000000 (0)
mapi_request : *
mapi_len : 0x0000000f (15)
length : 0x000b (11)
mapi_request: struct EcDoRpc_MAPI_REQ
opnum : 0x89 (137)
logon_id : 0x00 (0)
handle_idx : 0x00 (0)
u : union
EcDoRpc_MAPI_REQ_UNION(case 137)
mapi_FreeBookmark: struct FreeBookmark_req
bookmark : SBinary_short cb=4
[0000] 03 00 00 00 ....
mapi_request : (handles) number=1
handle : 0x00000033 (51)
length : *
length : 0x000f (15)
max_data : 0xfff0 (65520)
rpc request data:
[0000] 00 00 00 00 A6 D3 73 43 11 9B DE 4A AD 03 92 FF ......sC ...J....
[0010] FE 51 07 1B F0 FF 00 00 00 00 00 00 0F 00 00 00 .Q...... ........
[0020] AE A5 2C A5 A5 A1 A5 A6 A5 A5 A5 96 A5 A5 A5 00 ..,..... ........
[0030] 0F 00 F0 FF ....
rpc reply data:
[0000] 00 00 00 00 A6 D3 73 43 11 9B DE 4A AD 03 92 FF ......sC ...J....
[0010] FE 51 07 1B F0 FF 00 00 00 00 00 00 0C 00 00 00 .Q...... ........
[0020] AD A5 2C A5 A7 A4 A1 25 96 A5 A5 A5 0C 00 00 00 ..,....% ........
[0030] 00 00 00 00 ....
EcDoRpc: struct EcDoRpc
out: struct EcDoRpc
handle : *
handle: struct policy_handle
handle_type : 0x00000000 (0)
uuid :
4373d3a6-9b11-4ade-ad03-92fffe51071b
size : 0x0000fff0 (65520)
offset : 0x00000000 (0)
mapi_response : *
mapi_response : length=8
mapi_response: ARRAY(6)
mapi_repl: struct EcDoRpc_MAPI_REPL
opnum : 0x89 (137)
handle_idx : 0x00 (0)
error_code : MAPI_E_NO_SUPPORT
(0x80040102)
mapi_response : (handles) number=1
handle id : 0x00000033 (51)
length : *
length : 0x000c (12)
result : MAPI_E_SUCCESS (0x0)
* FreeBookmark : MAPI_E_NO_SUPPORT
Finally, another thing that may point in this 0x4 sized bookmark's blob:
CreateBookmark always - according to our tests - returns a blob which
size is 0x4 bytes ...
Cheers,
Julien.
Julien Kerihuel
[email protected]
OpenChange Project Manager
GPG Fingerprint: 0B55 783D A781 6329 108A B609 7EF6 FE11 A35F 1F79
_______________________________________________
devel mailing list
[email protected]
http://mailman.openchange.org/listinfo/devel