forked from osmocom/wireshark
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>
This commit is contained in:
parent
d3389fab94
commit
6862820834
|
@ -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 {
|
||||
|
|
|
@ -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, >cap_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);
|
||||
|
||||
|
|
|
@ -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[] = {
|
||||
|
|
|
@ -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, >cap_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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue