Wireshark-dev: [Wireshark-dev] myProtocol_handle = find_dissector("myprotocol"); is NULL
Hi all,
I have created two dissectors.
I would like one dissector to use the other
one.
I am getting a NULL return value when I call
find_dissector();
The lower level dissector is named mgw and the
pertinent code sections are:
From file packet-mgw.c:
---8<---
void
proto_register_mgw();
void
proto_reg_handoff_mgw();
static void dissect_mgw(tvbuff_t *tvb, packet_info
*pinfo, proto_tree *tree);
static
int proto_mgw = -1;
static dissector_handle_t
mgw_handle;
void
proto_register_mgw(void)
{
static
hf_register_info hf[] = {
/* MGW header */
{
&hf_mgw_hdr,
{ "Message Header",
"mgw.hdr",
FT_PROTOCOL,
BASE_NONE,
NULL,
0x0,
"",
HFILL
}},
...
proto_mgw = proto_register_protocol ("LSI MGW Framework
Transport Protocol", "LSI MGW", "mgw");
proto_register_field_array(proto_mgw, hf,
array_length(hf));
proto_register_subtree_array(ett,
array_length(ett));
}
void
proto_reg_handoff_mgw(void)
{
static
gboolean initialized = FALSE;
guint32 i;
if (!initialized)
{
mgw_handle = create_dissector_handle(dissect_mgw,
proto_mgw);
for
(i=global_mgw_base_port;i<=(global_mgw_base_port+3);i++)
{
dissector_add("udp.port", i,
mgw_handle);
}
/* dissector_add("lsiint_hc.dstch",
0x07f0, mgw_handle); */
/* dissector_add("lsiint_hc.dstch",
0x07f1, mgw_handle); */
/* dissector_add("lsiint_hc.dstch",
0x07f2, mgw_handle); */
/* dissector_add("lsiint_hc.dstch",
0x07f3, mgw_handle); */
initialized =
TRUE;
}
}
---8<---
Calling from UDP port above works fine.
However, when I try to call from my upper level dissector, it
fails.
The commented out dissector_add functions cause
wireshark to crash.
From file
packet-lsiint.c:
---8<---
void
proto_reg_handoff_lsiint();
void
proto_register_lsiint_hc();
static dissector_handle_t
lsiint_hc_handle;
void
proto_reg_handoff_lsiint(void)
{
static gboolean initialized = FALSE;
if (!initialized)
{
lsiint_hc_handle =
create_dissector_handle(dissect_lsiint_hc,
proto_lsiint_hc);
register_dissector("lsiint_hc",
dissect_lsiint_hc, proto_lsiint_hc);
mgw_handle =
find_dissector("mgw");
if (mgw_handle == NULL)
{
fprintf(stderr, "MGW handle is
NULL\n");
}
data_handle =
find_dissector("data");
initialized = TRUE;
}
}
---8<---
If I make mgw_handle
global in packet-mgw.c and an extern in packet-lsiint.c, then the protocol
decodes happen as they should.
What am I doing wrong
with the registration?
Many thanks in
advance,
-posey