/* packet.c
* Routines for packet disassembly
*
- * $Id: packet.c,v 1.16 2001/01/12 09:25:29 guy Exp $
+ * $Id: packet.c,v 1.17 2001/01/13 04:28:42 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
dtbl_entry_t *dtbl_entry;
tvbuff_t *tvb;
const char *saved_proto;
+ guint32 saved_match_port;
dtbl_entry = g_hash_table_lookup(sub_dissectors,
GUINT_TO_POINTER(port));
/*
* Yes, it's enabled.
*/
- pi.match_port = port;
saved_proto = pi.current_proto;
+ saved_match_port = pi.match_port;
+ pi.match_port = port;
if (dtbl_entry->is_old_dissector)
(*dtbl_entry->dissector.old)(pd, offset, fd, tree);
else {
(*dtbl_entry->dissector.new)(tvb, &pi, tree);
}
pi.current_proto = saved_proto;
+ pi.match_port = saved_match_port;
return TRUE;
} else
return FALSE;
const guint8 *pd;
int offset;
const char *saved_proto;
+ guint32 saved_match_port;
dtbl_entry = g_hash_table_lookup(sub_dissectors,
GUINT_TO_POINTER(port));
/*
* Yes, it's enabled.
*/
- pinfo->match_port = port;
saved_proto = pinfo->current_proto;
+ saved_match_port = pinfo->match_port;
+ pinfo->match_port = port;
if (dtbl_entry->is_old_dissector) {
/*
* New dissector calling old dissector; use
(*dtbl_entry->dissector.new)(tvb, pinfo, tree);
}
pinfo->current_proto = saved_proto;
+ pinfo->match_port = saved_match_port;
return TRUE;
} else
return FALSE;