Hi all, I'm finely getting back to working on the TDS dissector. I have the netlib dissector handling multiple netlib packet per physical packet and partial netlib packets in a physical packet. Now the problem (warning! bad ascii art to follow):
tcp netlib tds +----------+ +-------------+ +----------+ | | | | | TDS PDU 1| | | | netlib | +----------+ | tcp | | packet 1 | | | | packet | | | | TDS PDU 2| | | +-------------+ | | | | | | +----------+ | | | netlib | | | | +---+ packet 2 +---+ TDS PDU 3| | | | | | | | | +-------------+ | | | | | | +----------+ | | | netlib | | TDS PDU 4| | | | packet 2 | +----------+ | | | (partial) | | TDS PDU 5| | | | | | (partial)| +----------+ +-------------+ +----------+ so the outer tcp packet can contain any number (of parts) of netlib packets, and in turn each netlib packet contains parts, one, several TDS protocol data units. With netlib I stuff some data in the protocol info during the first run through the packets and that allows me to know where in the next packet the thing is supposed to end. With TDS however I get several get several calls to the dissector with different offsets. I need a way to store data from the previous invocation (and then possibly accessed out of order) about the part of the TDS PDU that came in the last netlib packet. So, after this lengthy explaination, my question is... what is the most elegant way to do this in ethereal? Brian By the way, once I sort this out, much of the dissection code for results/rows/etc... is done so I should be wrapping this up fairly quickly.
