I just checked in some changes to: rename the current routines for registering dissectors for ports, and heuristic dissectors, by adding "old_" to the beginnings of their names; add new routines, with the original names, that take a pointer to a tvbuffified dissector as the dissector-pointer argument; store, as part of the entry in the dissector tables, a flag indicating whether the dissector is an old-style or tvbuffified dissector; rename the current routines for looking up dissectors in tables and calling them by adding "old_" to the beginnings of their names; add new routines, with the original names, that take new-style dissector arguments (i.e., arguments including a "tvbuff *", rather than "pd" and "offset" arguments, and a "packet_info *" rather than a "frame_data *" argument); made both the old and new "look up a dissector and, if found, call it" routines check whether the dissector is an old-style or new-style one and, if the arguments passed to the routine don't match the arguments to be passed to the dissector, translate them; added a dissector type flag to the conversation structure, and made its dissector pointer a union, and replaced the routine to look for a conversation and, if found, return its dissector pointer with routines, one with old-style and one with new-style arguments, to look for a conversation and, if found and it has a dissector pointer, call the dissector - that routine also does argument translation. This means that one can now have dissectors that take new-style arguments called, via one of those lookup-and-call routines, from a dissector that takes old-style arguments, and *vice versa*; this allowed me to get rid of the hack wherein some new-style dissectors actually took old-style arguments and translated the arguments themselves. This should make it more convenient to convert dissectors one at a time; I shall probably look at converting the IP dissector at some point, and then will probably convert the TCP and UDP dissectors, unless somebody else does so first. (When the TCP and UDP dissectors are converted, I'll probably also convert the plugin API/API so that plugins are expected to be new-style dissectors.) I also renamed "dissect_data()" to "old_dissect_data()", and "dissect_data_tvb()" to "dissect_data()", to reflect the fact that the former should go away once all dissectors have been converted to use tvbuffs. Note, BTW, that tvbuffified dissectors do *NOT* have to check, before fetching data from the frame, whether they're going past the end of the frame; the tvbuff code does it for you. (In fact, checking whether they're past the end of the *captured* data in the frame is the *wrong* thing to do - at least if you're not past the end of the frame, you *want* the tvbuff code to throw an exception if you're past the end of the captured data, so that it puts into the protocol tree an entry that should indicate that it *could've* dissected more had you used a bigger snapshot length....)
Powered by MHonArc 2.6.10