Wireshark mailing list archives
myProtocol_handle = find_dissector("myprotocol"); is NULL
From: "Posey, Nolan John, Jr (Nolan)" <Nolan.Posey () lsi com>
Date: Thu, 10 Dec 2009 16:35:22 -0500
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
___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev () wireshark org> Archives: http://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-request () wireshark org?subject=unsubscribe
Current thread:
- myProtocol_handle = find_dissector("myprotocol"); is NULL Posey, Nolan John, Jr (Nolan) (Dec 10)
- Re: myProtocol_handle = find_dissector("myprotocol"); is NULL Guy Harris (Dec 10)
- Re: myProtocol_handle = find_dissector("myprotocol"); is NULL Posey, Nolan John, Jr (Nolan) (Dec 10)
- Re: myProtocol_handle = find_dissector("myprotocol"); is NULL Guy Harris (Dec 10)
