I was working on the Wireshark dissector and noticed that a EcDoConnectEx header
was not dissected correctly. Diving into the problem I found that the idl of
AUX_PERF_CLIENTINFO is not correct. It currently reads:

typedef [public,flag(NDR_NOALIGN)] struct {
        uint32          AdapterSpeed;
        uint16          ClientID;
        uint16          MachineNameOffset;
        uint16          UserNameOffset;
        uint16          ClientIPSize;
        uint16          ClientIPOffset;
        uint16          ClientIPMaskSize;
        uint16          ClientIPMaskOffset;
        uint16          AdapterNameOffset;
        uint16          MacAddressSize;
        uint16          MacAddressOffset;
        ClientMode      ClientMode;
        uint16          Reserved;
        uint8           MacAddress[MacAddressSize];
        uint8           ClientIP[ClientIPSize];
        uint8           ClientIPMask[ClientIPMaskSize];
        nstring         MachineName;
        nstring         UserName;
        nstring         AdapterName;
} AUX_PERF_CLIENTINFO;

However the nstring only appear if the corresponding "*Offset" variable has a
value greater than 0. So I'm looking for a syntax like:

...
 [if(MachineNameOffset > 0)] nstring MachineName;
 [if(UserNameOffset > 0)] nstring UserName;
 [if(AdapterNameOffset > 0)] nstring AdapterName;
} AUX_PERF_CLIENTINFO;

I have no knowledge about the DCE/RPC idl syntax, Microsoft's midl or samba's
pidl. Can something like this be expressed with pidl?

If we can get this to work, I can send you a patch to the idl file which adds
some new MAPI aux header structures. To verify that my analysis was correct I
have manually edited the generated Wireshark dissector C code, but of course I'd
like to express this in the idl file for long term maintainability.

-- 
---> Dirk Jagdmann
----> http://cubic.org/~doj
-----> http://llg.cubic.org
_______________________________________________
devel mailing list
[email protected]
http://mailman.openchange.org/listinfo/devel

Reply via email to