aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>2008-09-15 16:36:06 +0000
committerwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>2008-09-15 16:36:06 +0000
commit3e851ff2ef7f819c97b8eeecb17aab4029705f27 (patch)
treefaee990d1203f64304a68bb091e844d0fcf3fe4f
parent53a1d7f4b2792c034dab4d27afb0909b8766c573 (diff)
proto_reg-handoff: Use dissector_add_handle instead of registering to port 0;
Also: minor cleanup related to proto_reg_handoff git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@26197 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r--epan/dissectors/packet-fix.c13
-rw-r--r--epan/dissectors/packet-lge_monitor.c28
-rw-r--r--epan/dissectors/packet-lsc.c33
-rw-r--r--epan/dissectors/packet-osi.c25
4 files changed, 59 insertions, 40 deletions
diff --git a/epan/dissectors/packet-fix.c b/epan/dissectors/packet-fix.c
index e24e318c1f..8167e05dc8 100644
--- a/epan/dissectors/packet-fix.c
+++ b/epan/dissectors/packet-fix.c
@@ -6439,14 +6439,11 @@ proto_register_fix(void)
void
proto_reg_handoff_fix(void)
{
- static dissector_handle_t fix_handle;
- /*
- * The first time the function is called let the tcp dissector
- * know that we're interested in traffic
- */
+ dissector_handle_t fix_handle;
+ /* Let the tcp dissector know that we're interested in traffic */
heur_dissector_add("tcp", dissect_fix, proto_fix);
- /* Register fix to TCP port 0 to be able to do "dissect as"*/
- fix_handle = new_create_dissector_handle(dissect_fix, proto_fix);
- dissector_add("tcp.port", 0, fix_handle);
+ /* Register a fix handle to "tcp.port" to be able to do 'decode-as' */
+ fix_handle = new_create_dissector_handle(dissect_fix, proto_fix);
+ dissector_add_handle("tcp.port", fix_handle);
}
diff --git a/epan/dissectors/packet-lge_monitor.c b/epan/dissectors/packet-lge_monitor.c
index 65e539199d..8197a7e788 100644
--- a/epan/dissectors/packet-lge_monitor.c
+++ b/epan/dissectors/packet-lge_monitor.c
@@ -53,7 +53,6 @@ static int ett_lge_monitor = -1;
static guint LGEMonitorUDPPort = 0;
-static guint udp_port = 0;
static dissector_handle_t mtp3_handle, m3ua_handle, sccp_handle, sctp_handle;
static const value_string lge_monitor_dir_vals[] = {
@@ -126,24 +125,29 @@ dissect_lge_monitor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
void
proto_reg_handoff_lge_monitor(void)
{
- dissector_handle_t lge_monitor_handle;
- static int lge_monitor_prefs_initialized = FALSE;
-
- lge_monitor_handle = create_dissector_handle(dissect_lge_monitor, proto_lge_monitor);
+ static dissector_handle_t lge_monitor_handle;
+ static guint saved_udp_port;
+ static gboolean lge_monitor_prefs_initialized = FALSE;
if (!lge_monitor_prefs_initialized) {
+ lge_monitor_handle = create_dissector_handle(dissect_lge_monitor, proto_lge_monitor);
+ dissector_add_handle("udp.port", lge_monitor_handle); /* for 'decode-as' */
+ mtp3_handle = find_dissector("mtp3");
+ m3ua_handle = find_dissector("m3ua");
+ sccp_handle = find_dissector("sccp");
+ sctp_handle = find_dissector("sctp");
lge_monitor_prefs_initialized = TRUE;
}
else {
- dissector_delete("udp.port", udp_port, lge_monitor_handle);
+ if (saved_udp_port != 0) {
+ dissector_delete("udp.port", saved_udp_port, lge_monitor_handle);
+ }
}
- udp_port = LGEMonitorUDPPort;
- dissector_add("udp.port", LGEMonitorUDPPort, lge_monitor_handle);
- mtp3_handle = find_dissector("mtp3");
- m3ua_handle = find_dissector("m3ua");
- sccp_handle = find_dissector("sccp");
- sctp_handle = find_dissector("sctp");
+ if (LGEMonitorUDPPort != 0) {
+ dissector_add("udp.port", LGEMonitorUDPPort, lge_monitor_handle);
+ }
+ saved_udp_port = LGEMonitorUDPPort;
}
void
diff --git a/epan/dissectors/packet-lsc.c b/epan/dissectors/packet-lsc.c
index 3a77d7ab87..7c4ed0daa7 100644
--- a/epan/dissectors/packet-lsc.c
+++ b/epan/dissectors/packet-lsc.c
@@ -135,8 +135,6 @@ static int hf_lsc_mode = -1;
/* Preferences */
static guint global_lsc_port = 0;
-static guint lsc_port = 0;
-
/* Initialize the subtree pointers */
static gint ett_lsc = -1;
@@ -441,15 +439,28 @@ proto_register_lsc(void)
void
proto_reg_handoff_lsc(void)
{
- dissector_handle_t lsc_udp_handle;
- dissector_handle_t lsc_tcp_handle;
-
- lsc_udp_handle = create_dissector_handle(dissect_lsc_udp, proto_lsc);
- lsc_tcp_handle = create_dissector_handle(dissect_lsc_tcp, proto_lsc);
+ static gboolean initialized = FALSE;
+ static dissector_handle_t lsc_udp_handle;
+ static dissector_handle_t lsc_tcp_handle;
+ static guint saved_lsc_port;
+
+ if (!initialized) {
+ lsc_udp_handle = create_dissector_handle(dissect_lsc_udp, proto_lsc);
+ lsc_tcp_handle = create_dissector_handle(dissect_lsc_tcp, proto_lsc);
+ dissector_add_handle("udp.port", lsc_udp_handle); /* for 'decode-as' */
+ dissector_add_handle("tcp.port", lsc_tcp_handle); /* ... */
+ initialized = TRUE;
+ } else {
+ if (saved_lsc_port != 0) {
+ dissector_delete("udp.port", saved_lsc_port, lsc_udp_handle);
+ dissector_delete("tcp.port", saved_lsc_port, lsc_tcp_handle);
+ }
+ }
/* Set the port number */
- lsc_port = global_lsc_port;
-
- dissector_add("udp.port", lsc_port, lsc_udp_handle);
- dissector_add("tcp.port", lsc_port, lsc_tcp_handle);
+ if (global_lsc_port != 0) {
+ dissector_add("udp.port", global_lsc_port, lsc_udp_handle);
+ dissector_add("tcp.port", global_lsc_port, lsc_tcp_handle);
+ }
+ saved_lsc_port = global_lsc_port;
}
diff --git a/epan/dissectors/packet-osi.c b/epan/dissectors/packet-osi.c
index 7901cdc550..e9960c6d5c 100644
--- a/epan/dissectors/packet-osi.c
+++ b/epan/dissectors/packet-osi.c
@@ -47,12 +47,10 @@
static int proto_osi = -1;
static dissector_handle_t osi_handle;
-static dissector_handle_t osi_tpkt_handle;
/* Preferences for OSI over TPKT over TCP */
static gboolean tpkt_desegment = FALSE;
-int global_tcp_port_osi_over_tpkt = 0;
-int tcp_port_osi_over_tpkt = 0;
+static int global_tcp_port_osi_over_tpkt = 0;
cksum_status_t
calc_checksum( tvbuff_t *tvb, int offset, guint len, guint checksum) {
@@ -292,7 +290,10 @@ static void dissect_osi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
void
proto_reg_handoff_osi(void)
{
- static int osi_prefs_initialized = FALSE;
+ static gboolean osi_prefs_initialized = FALSE;
+ static dissector_handle_t osi_tpkt_handle;
+ static guint tcp_port_osi_over_tpkt;
+
if (!osi_prefs_initialized) {
osi_handle = create_dissector_handle(dissect_osi, proto_osi);
dissector_add("llc.dsap", SAP_OSINL1, osi_handle);
@@ -300,20 +301,26 @@ proto_reg_handoff_osi(void)
dissector_add("llc.dsap", SAP_OSINL3, osi_handle);
dissector_add("llc.dsap", SAP_OSINL4, osi_handle);
dissector_add("llc.dsap", SAP_OSINL5, osi_handle);
- dissector_add("ppp.protocol", PPP_OSI, osi_handle);
+ dissector_add("ppp.protocol", PPP_OSI, osi_handle);
dissector_add("chdlctype", CHDLCTYPE_OSI, osi_handle);
dissector_add("null.type", BSD_AF_ISO, osi_handle);
dissector_add("gre.proto", SAP_OSINL5, osi_handle);
data_handle = find_dissector("data");
ppp_handle = find_dissector("ppp");
+
osi_tpkt_handle = create_dissector_handle(dissect_osi_tpkt, proto_osi);
+ dissector_add_handle("tcp.port", osi_tpkt_handle); /* for 'decode-as' */
osi_prefs_initialized = TRUE;
- }else{
- dissector_delete("tcp.port", tcp_port_osi_over_tpkt, osi_tpkt_handle);
+ } else {
+ if (tcp_port_osi_over_tpkt != 0) {
+ dissector_delete("tcp.port", tcp_port_osi_over_tpkt, osi_tpkt_handle);
+ }
}
+ if (global_tcp_port_osi_over_tpkt != 0) {
+ dissector_add("tcp.port", global_tcp_port_osi_over_tpkt, osi_tpkt_handle);
+ }
tcp_port_osi_over_tpkt = global_tcp_port_osi_over_tpkt;
- dissector_add("tcp.port", global_tcp_port_osi_over_tpkt, osi_tpkt_handle);
}
void
@@ -343,7 +350,7 @@ proto_register_osi(void)
prefs_register_uint_preference(osi_module, "tpkt_port",
"TCP port for OSI over TPKT",
"TCP port for OSI over TPKT",
- 10, &global_tcp_port_osi_over_tpkt);
+ 10, &global_tcp_port_osi_over_tpkt);
prefs_register_bool_preference(osi_module, "tpkt_reassemble",
"Reassemble segmented TPKT datagrams",
"Whether segmented TPKT datagrams should be reassembled",