Ethereal-dev: [Ethereal-dev] can one plugin call another?

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

From: "Donald White" <dbwhite@xxxxxxx>
Date: Tue, 09 Mar 2004 21:51:13 -0700
Group,

I apologize in advance if this is a user and not a developer problem and I am in the wrong group.
I am new here but not to ethereal.  Last Sunday, I was having an 
experimental protocol hang at school on a project.  This was the third 
time this protocol had failed so I decided it was time for a better 
tool.  To look at the problem, I developed a windows plugin dissector 
for the protocol.  It went much easier than I expected.
It went so well that I mentioned it to my employer.  They are now 
interested in converting two static dissertors that I developed about 
three years ago for Solaris and Linux to windows plugins so they can use 
some windows laptops for network monitoring in the lab.  They are also I 
think interested in not having me periodically rebuild and distribute 
new ethereal versions.  They like the idea of a binary windows 
distribution to which a couple of files are copied to the plugins directory.
In looking at the code there were two problems.  The first dissector 
uses the proto_registrar_get_name() function.  This is because the 
meaning of some fields depends on the values of other fields.  I used 
this function to get the field name and then use a value string array to 
display the alternate meaning.  The code looks like this:
    proto_tree_add_uint_format(XX_opcode_tree, hf_XX_subtype, tvb, 9, 1,
                               subtype, format,
                               proto_registrar_get_name(hf_XX_subtype),
                               val_to_str(subtype,
                                          XX_subtypes,
                                          unknown),
                               subtype);

The difficulty is that the semantics of subtype varies with the value of type. Since it looks like I have to recode this anyway, is there a right or recommended or suggested way to do it?
My second problem is that the second dissector calls the first.  This is 
because the first protocol is sometime encapsulated in the second.  How 
can this work if both are plugins?  I did not see this covered in the 
readmes.
Thanks,

Don