Thanks for the reply Guy!  I have some followup questions.

I killed the original error of
ERROR:packet.c:709:dissector_add: assertion failed: (sub_dissectors)
by calling register_dissector_table() in proto_register_..().  Apparently I
didn't know I needed to do that, but it makes sense.

To answer a question you posed me:

> > If I am writing a dissector for a protocol that rides on top of IP but
> then allows any protocol to follow it,
>
> Do you truly mean "any protocol", so that, for example, you could follow it
> with X.25 or HTTP or Ethernet, or do you mean, for example, any protocol
> *that runs atop IP* can follow it?
>
I mean *any protocol that runs atop IP* can follow it.  I am going to work
on all protocols registered with IP to follow it as soon as I get *another*
custom dissector/protocol that I am working on, which can follow it, to
work.  Let's call the custom protocol *custom* and the IP rider *it* to
simplify things.

I have the custom protocol doing dissector_add("[field switch on *it*]",
[macro expansion that matches a field value], *custom*_handle) in its
handoff routine.  However, for some reason it is apparently not being called
upon to dissect because it is not showing up as a header in the packet
window.

I am unsure of why similar code for *it* -> IP doesn't work for *custom* ->
*it*.
I've tooled around with tvb_new_subset() and even tried calling
dissector_next (a routine mentioned in README.developer but that doesn't
actually exist) to no avail yet.  I've tried call_dissector(), but that's
probably not what I want.


As a "by the way," you mentioned in your reply:

> If you mean, for example, "any protocol that runs atop IP", then you should
> grab hold of the "ip.proto" dissector table:
>
>        dissector_table_t ip_proto_dissector_table;
>                ...
>        ip_proto_dissector_table = find_dissector_table("ip.proto");
>
> and then use that to hand off the payload to the next dissector with that
> dissector table, the protocol number, and dissector_try_port().

How do I "hand off the payload to the next dissector with that dissector
table, the protocol number, and dissector_try_port()?"  Is that through a
function call?  And what does dissector_try_port() do?  All I could tell is
that it returns a gboolean.

More questions I haven't been able to find answers to:
*The proto_handoff_..(void) routine's main job is to register the dissector
with other dissectors so it gets called at the right moment, correct?
*What is the difference between create_dissector_handle() and
new_create_dissector_handle()?


Quite a number of questions?  Yes.  I feel like README.developer is good but
it doesn't explain all.  Guidance from you and any other developers is much
appreciated.
-Scott
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <[email protected]>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:[email protected]?subject=unsubscribe

Reply via email to