aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2016-10-09 10:20:57 -0400
committerMichael Mann <mmann78@netscape.net>2016-11-06 13:55:00 +0000
commit686282083420f26a4e4584053fadbba568ef534f (patch)
treea86edff5bd3ff156a74113bdd6601d3d9c6ec32b /epan/dissectors
parentd3389fab94c23c2b4e1c9b9dbf77851379b50eec (diff)
TCAP: Use a real dissector table to store dissector handles.
Also cleanup ANSI TCAP dissector that had a commented out attempt at what was just cleaned up with TCAP. Change-Id: I347f11e21a493d8d444c2dc528bb7713a227381a Reviewed-on: https://code.wireshark.org/review/18129 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/asn1/ansi_tcap/packet-ansi_tcap-template.c22
-rw-r--r--epan/dissectors/asn1/tcap/packet-tcap-template.c24
-rw-r--r--epan/dissectors/packet-ansi_tcap.c28
-rw-r--r--epan/dissectors/packet-tcap.c24
4 files changed, 27 insertions, 71 deletions
diff --git a/epan/dissectors/asn1/ansi_tcap/packet-ansi_tcap-template.c b/epan/dissectors/asn1/ansi_tcap/packet-ansi_tcap-template.c
index b66295974e..7721b91305 100644
--- a/epan/dissectors/asn1/ansi_tcap/packet-ansi_tcap-template.c
+++ b/epan/dissectors/asn1/ansi_tcap/packet-ansi_tcap-template.c
@@ -134,28 +134,6 @@ static const value_string ansi_tcap_national_op_code_family_vals[] = {
{ 0, NULL }
};
-/*
-static dissector_handle_t tcap_handle = NULL;
-static dissector_table_t sccp_ssn_table;
-
-static GHashTable* ansi_sub_dissectors = NULL;
-static GHashTable* itu_sub_dissectors = NULL;
-
- extern void add_ansi_tcap_subdissector(guint32 ssn, dissector_handle_t dissector) {
- g_hash_table_insert(ansi_sub_dissectors,GUINT_TO_POINTER(ssn),dissector);
- dissector_add_uint("sccp.ssn",ssn,tcap_handle);
-}
-
-extern void delete_ansi_tcap_subdissector(guint32 ssn, dissector_handle_t dissector _U_) {
- g_hash_table_remove(ansi_sub_dissectors,GUINT_TO_POINTER(ssn));
- dissector_delete_uint("sccp.ssn",ssn,tcap_handle);
-}
-
-dissector_handle_t get_ansi_tcap_subdissector(guint32 ssn) {
- return g_hash_table_lookup(ansi_sub_dissectors,GUINT_TO_POINTER(ssn));
-}
-*/
-
/* Transaction tracking */
/* Transaction table */
struct ansi_tcap_invokedata_t {
diff --git a/epan/dissectors/asn1/tcap/packet-tcap-template.c b/epan/dissectors/asn1/tcap/packet-tcap-template.c
index 91cfd5a825..e64e57de8e 100644
--- a/epan/dissectors/asn1/tcap/packet-tcap-template.c
+++ b/epan/dissectors/asn1/tcap/packet-tcap-template.c
@@ -121,36 +121,36 @@ static void raz_tcap_private(struct tcap_private_t * p_tcap_private);
static int dissect_tcap_param(asn1_ctx_t *actx, proto_tree *tree, tvbuff_t *tvb, int offset);
static int dissect_tcap_ITU_ComponentPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_);
-static GHashTable* ansi_sub_dissectors = NULL;
-static GHashTable* itu_sub_dissectors = NULL;
+static dissector_table_t ansi_sub_dissectors = NULL;
+static dissector_table_t itu_sub_dissectors = NULL;
extern void add_ansi_tcap_subdissector(guint32 ssn, dissector_handle_t dissector) {
- g_hash_table_insert(ansi_sub_dissectors,GUINT_TO_POINTER(ssn),dissector);
+ dissector_add_uint("ansi_tcap.ssn",ssn,dissector);
dissector_add_uint("sccp.ssn",ssn,tcap_handle);
}
extern void add_itu_tcap_subdissector(guint32 ssn, dissector_handle_t dissector) {
- g_hash_table_insert(itu_sub_dissectors,GUINT_TO_POINTER(ssn),dissector);
+ dissector_add_uint("itu_tcap.ssn",ssn,dissector);
dissector_add_uint("sccp.ssn",ssn,tcap_handle);
}
-extern void delete_ansi_tcap_subdissector(guint32 ssn, dissector_handle_t dissector _U_) {
- g_hash_table_remove(ansi_sub_dissectors,GUINT_TO_POINTER(ssn));
+extern void delete_ansi_tcap_subdissector(guint32 ssn, dissector_handle_t dissector) {
+ dissector_delete_uint("ansi_tcap.ssn",ssn,dissector);
if (!get_itu_tcap_subdissector(ssn))
dissector_delete_uint("sccp.ssn",ssn,tcap_handle);
}
extern void delete_itu_tcap_subdissector(guint32 ssn, dissector_handle_t dissector _U_) {
- g_hash_table_remove(itu_sub_dissectors,GUINT_TO_POINTER(ssn));
+ dissector_delete_uint("itu_tcap.ssn",ssn,dissector);
if (!get_ansi_tcap_subdissector(ssn))
dissector_delete_uint("sccp.ssn", ssn,tcap_handle);
}
dissector_handle_t get_ansi_tcap_subdissector(guint32 ssn) {
- return (dissector_handle_t)g_hash_table_lookup(ansi_sub_dissectors,GUINT_TO_POINTER(ssn));
+ return dissector_get_uint_handle(ansi_sub_dissectors, ssn);
}
dissector_handle_t get_itu_tcap_subdissector(guint32 ssn) {
- return (dissector_handle_t)g_hash_table_lookup(itu_sub_dissectors,GUINT_TO_POINTER(ssn));
+ return dissector_get_uint_handle(itu_sub_dissectors, ssn);
}
#include "packet-tcap-fn.c"
@@ -2079,6 +2079,9 @@ proto_register_tcap(void)
proto_register_field_array(proto_tcap, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
+ ansi_sub_dissectors = register_dissector_table("ansi_tcap.ssn", "ANSI SSN", proto_tcap, FT_UINT8, BASE_DEC);
+ itu_sub_dissectors = register_dissector_table("itu_tcap.ssn", "ITU SSN", proto_tcap, FT_UINT8, BASE_DEC);
+
tcap_module = prefs_register_protocol(proto_tcap, NULL);
#if 0
@@ -2124,9 +2127,6 @@ proto_register_tcap(void)
"Maximal delay for message lost",
10, &gtcap_LostTimeout);
- ansi_sub_dissectors = g_hash_table_new(g_direct_hash,g_direct_equal);
- itu_sub_dissectors = g_hash_table_new(g_direct_hash,g_direct_equal);
-
/* 'globally' register dissector */
register_dissector("tcap", dissect_tcap, proto_tcap);
diff --git a/epan/dissectors/packet-ansi_tcap.c b/epan/dissectors/packet-ansi_tcap.c
index 54f04fcaad..4a79793ee8 100644
--- a/epan/dissectors/packet-ansi_tcap.c
+++ b/epan/dissectors/packet-ansi_tcap.c
@@ -225,28 +225,6 @@ static const value_string ansi_tcap_national_op_code_family_vals[] = {
{ 0, NULL }
};
-/*
-static dissector_handle_t tcap_handle = NULL;
-static dissector_table_t sccp_ssn_table;
-
-static GHashTable* ansi_sub_dissectors = NULL;
-static GHashTable* itu_sub_dissectors = NULL;
-
- extern void add_ansi_tcap_subdissector(guint32 ssn, dissector_handle_t dissector) {
- g_hash_table_insert(ansi_sub_dissectors,GUINT_TO_POINTER(ssn),dissector);
- dissector_add_uint("sccp.ssn",ssn,tcap_handle);
-}
-
-extern void delete_ansi_tcap_subdissector(guint32 ssn, dissector_handle_t dissector _U_) {
- g_hash_table_remove(ansi_sub_dissectors,GUINT_TO_POINTER(ssn));
- dissector_delete_uint("sccp.ssn",ssn,tcap_handle);
-}
-
-dissector_handle_t get_ansi_tcap_subdissector(guint32 ssn) {
- return g_hash_table_lookup(ansi_sub_dissectors,GUINT_TO_POINTER(ssn));
-}
-*/
-
/* Transaction tracking */
/* Transaction table */
struct ansi_tcap_invokedata_t {
@@ -1410,7 +1388,7 @@ dissect_ansi_tcap_PackageType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int
/*--- End of included file: packet-ansi_tcap-fn.c ---*/
-#line 353 "./asn1/ansi_tcap/packet-ansi_tcap-template.c"
+#line 331 "./asn1/ansi_tcap/packet-ansi_tcap-template.c"
@@ -1754,7 +1732,7 @@ proto_register_ansi_tcap(void)
NULL, HFILL }},
/*--- End of included file: packet-ansi_tcap-hfarr.c ---*/
-#line 488 "./asn1/ansi_tcap/packet-ansi_tcap-template.c"
+#line 466 "./asn1/ansi_tcap/packet-ansi_tcap-template.c"
};
/* Setup protocol subtree array */
@@ -1792,7 +1770,7 @@ proto_register_ansi_tcap(void)
&ett_ansi_tcap_T_paramSet,
/*--- End of included file: packet-ansi_tcap-ettarr.c ---*/
-#line 499 "./asn1/ansi_tcap/packet-ansi_tcap-template.c"
+#line 477 "./asn1/ansi_tcap/packet-ansi_tcap-template.c"
};
static ei_register_info ei[] = {
diff --git a/epan/dissectors/packet-tcap.c b/epan/dissectors/packet-tcap.c
index 0730f4e68e..fb7c30c72e 100644
--- a/epan/dissectors/packet-tcap.c
+++ b/epan/dissectors/packet-tcap.c
@@ -239,36 +239,36 @@ static void raz_tcap_private(struct tcap_private_t * p_tcap_private);
static int dissect_tcap_param(asn1_ctx_t *actx, proto_tree *tree, tvbuff_t *tvb, int offset);
static int dissect_tcap_ITU_ComponentPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_);
-static GHashTable* ansi_sub_dissectors = NULL;
-static GHashTable* itu_sub_dissectors = NULL;
+static dissector_table_t ansi_sub_dissectors = NULL;
+static dissector_table_t itu_sub_dissectors = NULL;
extern void add_ansi_tcap_subdissector(guint32 ssn, dissector_handle_t dissector) {
- g_hash_table_insert(ansi_sub_dissectors,GUINT_TO_POINTER(ssn),dissector);
+ dissector_add_uint("ansi_tcap.ssn",ssn,dissector);
dissector_add_uint("sccp.ssn",ssn,tcap_handle);
}
extern void add_itu_tcap_subdissector(guint32 ssn, dissector_handle_t dissector) {
- g_hash_table_insert(itu_sub_dissectors,GUINT_TO_POINTER(ssn),dissector);
+ dissector_add_uint("itu_tcap.ssn",ssn,dissector);
dissector_add_uint("sccp.ssn",ssn,tcap_handle);
}
-extern void delete_ansi_tcap_subdissector(guint32 ssn, dissector_handle_t dissector _U_) {
- g_hash_table_remove(ansi_sub_dissectors,GUINT_TO_POINTER(ssn));
+extern void delete_ansi_tcap_subdissector(guint32 ssn, dissector_handle_t dissector) {
+ dissector_delete_uint("ansi_tcap.ssn",ssn,dissector);
if (!get_itu_tcap_subdissector(ssn))
dissector_delete_uint("sccp.ssn",ssn,tcap_handle);
}
extern void delete_itu_tcap_subdissector(guint32 ssn, dissector_handle_t dissector _U_) {
- g_hash_table_remove(itu_sub_dissectors,GUINT_TO_POINTER(ssn));
+ dissector_delete_uint("itu_tcap.ssn",ssn,dissector);
if (!get_ansi_tcap_subdissector(ssn))
dissector_delete_uint("sccp.ssn", ssn,tcap_handle);
}
dissector_handle_t get_ansi_tcap_subdissector(guint32 ssn) {
- return (dissector_handle_t)g_hash_table_lookup(ansi_sub_dissectors,GUINT_TO_POINTER(ssn));
+ return dissector_get_uint_handle(ansi_sub_dissectors, ssn);
}
dissector_handle_t get_itu_tcap_subdissector(guint32 ssn) {
- return (dissector_handle_t)g_hash_table_lookup(itu_sub_dissectors,GUINT_TO_POINTER(ssn));
+ return dissector_get_uint_handle(itu_sub_dissectors, ssn);
}
@@ -3664,6 +3664,9 @@ proto_register_tcap(void)
proto_register_field_array(proto_tcap, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
+ ansi_sub_dissectors = register_dissector_table("ansi_tcap.ssn", "ANSI SSN", proto_tcap, FT_UINT8, BASE_DEC);
+ itu_sub_dissectors = register_dissector_table("itu_tcap.ssn", "ITU SSN", proto_tcap, FT_UINT8, BASE_DEC);
+
tcap_module = prefs_register_protocol(proto_tcap, NULL);
#if 0
@@ -3709,9 +3712,6 @@ proto_register_tcap(void)
"Maximal delay for message lost",
10, &gtcap_LostTimeout);
- ansi_sub_dissectors = g_hash_table_new(g_direct_hash,g_direct_equal);
- itu_sub_dissectors = g_hash_table_new(g_direct_hash,g_direct_equal);
-
/* 'globally' register dissector */
register_dissector("tcap", dissect_tcap, proto_tcap);