On 12/12/2011 4:55 PM, Bill Meier wrote:
Summary
-------
I've recently been digging into the tvbuff code.
<snip>
... and then describe how tvbuff can be simplified.
> <snip>
I think the long description boils down to the following:
Consider the collection of tvbs (chain) as a stack of tvbs.
packet.c pushes the initial tvb onto the stack then calls next
dissector; After the dissection is complete, the stack is eventually
free'd via a call to tvb_free_chain in epan_dissect_cleanup.
A dissector:
- can add new tvbs (real, subset, composite) to the stack handed to it;
(Subset and Composite tvbs should reference only tvbs which are
towards the beginning of the same stack).
- must not save a pointer to a tvb from that stack (handed to it)
for use when dissecting another frame (since a
higher level function may very well free the stack);
- can create its own tvb stack which the dissector is free to manage
as desired.