Wireshark-dev: [Wireshark-dev] Re : Tr : Dissector preferences reuse

Date: Mon, 27 Apr 2009 15:01:12 +0000 (GMT)
Hi,

thanks for this help, Jeff, sharing variable is a good idea. I tried with a range_t used for user-defined udp ports like that:

in packet-plugin1.h:
    extern range_t *bite_udp_range;


in packet-plugin1.c:
#include "packet-plugin1.h"
...
    range_t *bite_udp_range;
...
/*in proto_register_plugin1*/
    range_convert_str(&global_bite_udp_range, BITE_UDP_DEFAULT_RANGE, 65535);
    bite_udp_range = range_empty();
    prefs_register_range_preference(afdx_module, "bite_udp_port",
                "UDP Ports for BITE",
                "Enter ports separated by commas",
                &global_bite_udp_range, 65535);
...
/*in proto_reg_handoff*/
    bite_udp_range = global_bite_udp_range;


in packet-plugin2.c:
#include "packet-plugin1.h"
...
range_t *bite_udp_range;
...
/* in proto_reg_handoff, the dissector_adding() calls dissector_add*/
range_foreach(bite_udp_range, dissector_adding);

The declaration in plugin1 seems good as WS works with this plugin only, but it crashes ("WireShark has encountered a problem and must closed...") with the two together. I copied the header file in the two folders to do that. I was suprised because I needed to declare again bite_udp_range in *.c files to avoid error during linking. Is something wrong? I suppose the range isn't defined when plugin2 is called so it can't add the dissector properly, but I'm not sure...

I also found in proto.h the following statement:
/** The header-field index for the special text pseudo-field. Exported by libwireshark.dll */
WS_VAR_IMPORT int hf_text_only;

I don't know how to use it in plugin1, but could this WS_VAR_IMPORT be a solution to share a variable between 2 dlls?

Thanks for your help

Yvan


De : Jeff Morriss <jeff.morriss.ws@xxxxxxxxx>
À : Developer support list for Wireshark <wireshark-dev@xxxxxxxxxxxxx>
Envoyé le : Jeudi, 23 Avril 2009, 17h50mn 36s
Objet : Re: [Wireshark-dev] Tr : Dissector preferences reuse



yvanmmailbox-web@xxxxxxxx wrote:

> I 'm working on 2 plugin dissectors, and I wish to know if it's possible
> (and if yes, how) to reuse preferences from one plugin to another. I
> need to reuse only a part of the preferences (which is an UAT table, so
> pretty long and boring to define) from plugin1 to plugin2, considering
> that protocol2 is included in plugin1 like this:
> plugin1
>    IP struct
>        UDP struct
>            plugin2
> Can the copy_prefs() function be useful? How must I define the
> preferences in plugin1 to divide it in 2 parts? How to integrate a
> separated part into preferences of plugin2?

Well, the plugins could simply share the variable that stores the
preference.  Basically: make the variable not 'static' (so it is visible
to other modules), put it in a header file (properly 'extern'd), and
have both plugins include the header file and use the variable.

For an example, see the mtp3_standard preference in packet-mtp3.{h,c}.

Note: I know this works for regular dissectors but I don't know if the
rules are different for plugins--especially on Windows.
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev@xxxxxxxxxxxxx>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
            mailto:wireshark-dev-request@xxxxxxxxxxxxx?subject=unsubscribe