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.