Ethereal-dev: [Ethereal-dev] subpacket question

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Brian Bruns <camber@xxxxxxx>
Date: Tue, 16 Apr 2002 08:18:30 -0400 (EDT)
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.