Wireshark-dev: Re: [Wireshark-dev] crash with Preference in Plugin
From: "khushbu thakkar" <thakkar.khushbu@xxxxxxxxx>
Date: Sat, 15 Dec 2007 10:53:55 +0530
Hi Jaap,
Thanx for the response. Attached is the part of plugin code.
Reply Soon,
Thank You,
Khushbu
On 12/15/07, Jaap Keuter <jaap.keuter@xxxxxxxxx> wrote:
Hi,
If you could post at least your proto_register and proto_handoff code we
might be able to get some insight.
Thanx,
Jaap
khushbu thakkar wrote:
> Hello,
>
> I am not actually new to Wireshark, i have build the plugin in
> Wireshark which has to be decoded on the top of UDP. I m using this on
> Window XP SP1 . I have build Wireshark with GTK+ 2.10.12 and Wireshark
> Version is 0.99.6.
>
> The problem with me is *Wireshark Crash* when the "*Preference*"
> of the my *plugin * is set. Whenever the preference value changes from
> the initialized value and if we try to capture or load the recorded file
> having packets of my plugin protocol it crashes. And one more thing is
> if i disable the preference code n use the xxx.dll then it works fine
> i.e. problem is due to preference code.
>
> I m using the Standard code format for registering the
> Preference as in Readme.developer. So anybody could please guide me
> where should the problem actually be. Thank You in advance for the help.
>
> Reply Soon,
> Best Regards,
> Khushbu
>
_______________________________________________
Wireshark-dev mailing list
Wireshark-dev@xxxxxxxxxxxxx
http://www.wireshark.org/mailman/listinfo/wireshark-dev
/* Global sample preference ("controls" display of numbers) */
static const char *gbl_iptConfigDictionary = NULL;
static char *ipt_config_preferencefile = NULL;
/* Register the protocol with Wireshark */
/* this format is require because a script is used to build the C function
that calls all the protocol registration.
*/
void proto_register_ipt_spy(void)
{
module_t *ipt_spy_module;
/* Setup list of header fields See Section 1.6.1 for details*/
static hf_register_info hf[] = {
{ &hf_ipt_spy_timestamp,
{ "Time Stamp (microseconds)", "iptwp.timestamp",
FT_UINT32, BASE_DEC, NULL, 0x0,
"", HFILL }
},
{ &hf_ipt_spy_protocolversion,
{ "Protocol Version", "iptwp.protocolversion",
FT_UINT32, BASE_HEX, VALS(ipt_spy_protocol_ver_vals) , 0x0,
"", HFILL }
},
.
.
.
.
/* Setup protocol subtree array */
static gint *ett[] = {
&ett_ipt_spy,
&ett_ipt_spy_dscpfield,
&ett_ipt_spy_app_data,
&ett_ipt_spy_nestd_app_data,
&ett_ipt_spy_app_data_booleanfield,
&ett_ipt_spy_multiple_app_data,
&ett_ipt_spy_app_data_fcs,
};
ipt_config_preferencefile = g_strdup("");
gbl_iptConfigDictionary = g_strdup(ipt_config_preferencefile);
/* Register the protocol name and description */
proto_ipt_spy = proto_register_protocol("IP Train Wire Protocol", "IPTWP", "iptwp");
register_dissector("IPTWP", dissect_ipt_spy, proto_ipt_spy); /*By Cisco*/
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array(proto_ipt_spy, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
/* Register preferences module (See Section 2.6 for more on preferences) */
ipt_spy_module = prefs_register_protocol(proto_ipt_spy, proto_reg_handoff_ipt_spy);
/* Register a sample preference */
prefs_register_string_preference(ipt_spy_module, "iptfile",
"IPT configuration file",
"IPT configuration file",
&gbl_iptConfigDictionary);
}
/* If this dissector uses sub-dissector registration add a registration routine.
This exact format is required because a script is used to find these routines
and create the code that calls these routines.
This function is also called by preferences whenever "Apply" is pressed
(see prefs_register_protocol above) so it should accommodate being called
more than once.
*/
void proto_reg_handoff_ipt_spy(void)
{
static gboolean inited = FALSE;
dissector_handle_t ipt_spy_handle;
//g_free(ipt_config_pref);
// current_asn1 = g_strdup(asn1_filename);
//ipt_config_pref = g_strdup(gbl_iptConfigDictionary);
if(!inited )
{
ipt_spy_handle = create_dissector_handle(dissect_ipt_spy, proto_ipt_spy);
inited = TRUE;
}
else
{
dissector_delete("udp.port", ipt_spy_UDP_MD_PORT, ipt_spy_handle);
dissector_delete("udp.port", ipt_spy_UDP_PD_PORT, ipt_spy_handle);
}
ipt_config_preferencefile = gbl_iptConfigDictionary;
dissector_add("udp.port", ipt_spy_UDP_MD_PORT, ipt_spy_handle);
dissector_add("udp.port", ipt_spy_UDP_PD_PORT, ipt_spy_handle);
/*
If you perform registration functions which are dependant upon
prefs the you should de-register everything which was associated
with the previous settings and re-register using the new prefs settings
here. In general this means you need to keep track of what value the
preference had at the time you registered using a local static in this
function. ie.
static int currentPort = -1;
if( -1 != currentPort ) {
dissector_delete( "tcp.port", currentPort, ipt_spy_handle);
}
currentPort = gPortPref;
dissector_add("tcp.port", currentPort, ipt_spy_handle);
*/
}
- Follow-Ups:
- Re: [Wireshark-dev] crash with Preference in Plugin
- From: khushbu thakkar
- Re: [Wireshark-dev] crash with Preference in Plugin
- From: Jaap Keuter
- Re: [Wireshark-dev] crash with Preference in Plugin
- References:
- [Wireshark-dev] crash with Preference in Plugin
- From: khushbu thakkar
- Re: [Wireshark-dev] crash with Preference in Plugin
- From: Jaap Keuter
- [Wireshark-dev] crash with Preference in Plugin
- Prev by Date: [Wireshark-dev] Some problems when building Wireshark from source(with more error detail)
- Next by Date: Re: [Wireshark-dev] beginner problem
- Previous by thread: Re: [Wireshark-dev] crash with Preference in Plugin
- Next by thread: Re: [Wireshark-dev] crash with Preference in Plugin
- Index(es):