Ethereal-dev: Re: [Ethereal-dev] [Patch] revised: tap-tcp_close

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

From: "Ronnie Sahlberg" <ronnie_sahlberg@xxxxxxxxxxxxxx>
Date: Wed, 4 Dec 2002 19:20:50 +1100
The reason the tap system works the way it does with the queue and push
functions are because I
wanted the taps only to be called when the dissectors were called when the
packets were first read.
This was a design mistake.

Since there are valid reasons to have tap listeners to be called whenever a
dissector is called and not
only when the pacekt is read the first time, I think the tap system should
be changed slightly.

Instead of waiting until all dissectors have returned until the tap
listeners are called
I think the tap listeners should be called immediately from the dissectors.
That would remove the need to do the rotating struct trick in dissect_tcp().
This would also get rid of the list handling in tap.c since the list would
become obsolete.

It would also allow tap listeners to be called everytime a dissector is
called. Thus allowing all of
TCP seq/ack analysis to become a tap listener. Cleaning up packet-tcp.c a
bit.

See the current flaw as a design bug.


I think the tap system should be changed so that
register_tap_listener()
takes an extra parameter that describes when the _packet() callback should
be called.

TAP_READ_FIRST   would mean the current behaviour
TAP_READ_NOT_FIRST would mean every time the dissector is invoked EXCEPT the
one above.
TAP_READ_ALWAYS  would mean that the callback would be called every single
time that dissector
is invoked.



I will do this change as soon as the next release is out. I dont want to
change it soo close to the new release.