diff options
author | Michael Mann <mmann78@netscape.net> | 2017-01-28 19:53:36 -0500 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2017-01-29 13:29:04 +0000 |
commit | af54b292e60fcdd8d03ec583e2b46c9c51f259a5 (patch) | |
tree | 67a4b61fd3e71ada67f2c27092a6849424759263 | |
parent | ed8ac81497c890bc82f161be727c0bb5285dcf12 (diff) | |
download | wireshark-af54b292e60fcdd8d03ec583e2b46c9c51f259a5.tar.gz wireshark-af54b292e60fcdd8d03ec583e2b46c9c51f259a5.tar.bz2 wireshark-af54b292e60fcdd8d03ec583e2b46c9c51f259a5.zip |
Register reassembly tables
Register all reassembly tables with a central unit, allowing the
central unit to have the callback that initializes and destroys
the reassembly tables, rather than have dissectors do it individually.
Change-Id: Ic92619c06fb5ba6f1c3012f613cae14982e101d4
Reviewed-on: https://code.wireshark.org/review/19834
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
100 files changed, 372 insertions, 1146 deletions
diff --git a/debian/libwireshark0.symbols b/debian/libwireshark0.symbols index a263fda22f..d83593ccb4 100644 --- a/debian/libwireshark0.symbols +++ b/debian/libwireshark0.symbols @@ -1216,6 +1216,7 @@ libwireshark.so.0 libwireshark0 #MINVER# read_keytab_file_from_preferences@Base 1.9.1 read_prefs@Base 1.9.1 read_prefs_file@Base 1.9.1 + reassembly_table_register@Base 2.3.0 reassembly_table_destroy@Base 1.9.1 reassembly_table_init@Base 1.9.1 register_all_plugin_tap_listeners@Base 1.9.1 diff --git a/docbook/wsdg_src/WSDG_chapter_dissection.asciidoc b/docbook/wsdg_src/WSDG_chapter_dissection.asciidoc index 8a7f7bf1d5..f2979e71ad 100644 --- a/docbook/wsdg_src/WSDG_chapter_dissection.asciidoc +++ b/docbook/wsdg_src/WSDG_chapter_dissection.asciidoc @@ -770,9 +770,9 @@ Now the mysterious data we passed into the +fragment_add_seq_check()+. static reassembly_table reassembly_table; static void -msg_init_protocol(void) +proto_register_msg(void) { - reassembly_table_init(&msg_reassemble_table, + reassembly_table_register(&msg_reassemble_table, &addresses_ports_reassembly_table_functions); } ---- diff --git a/epan/dissectors/asn1/idmp/packet-idmp-template.c b/epan/dissectors/asn1/idmp/packet-idmp-template.c index 41b65229f6..2ce6841b69 100644 --- a/epan/dissectors/asn1/idmp/packet-idmp-template.c +++ b/epan/dissectors/asn1/idmp/packet-idmp-template.c @@ -245,15 +245,8 @@ static int dissect_idmp_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *paren return tvb_captured_length(tvb); } -static void idmp_reassemble_init (void) -{ - reassembly_table_init (&idmp_reassembly_table, - &addresses_reassembly_table_functions); -} - static void idmp_reassemble_cleanup(void) { - reassembly_table_destroy(&idmp_reassembly_table); saved_protocolID = NULL; } @@ -336,8 +329,10 @@ void proto_register_idmp(void) idmp_handle = register_dissector("idmp", dissect_idmp_tcp, proto_idmp); - register_init_routine (&idmp_reassemble_init); register_cleanup_routine (&idmp_reassemble_cleanup); + reassembly_table_register (&idmp_reassembly_table, + &addresses_reassembly_table_functions); + /* Register our configuration options for IDMP, particularly our port */ diff --git a/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c b/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c index 6a19690971..cac4e6bcf2 100644 --- a/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c +++ b/epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c @@ -3191,10 +3191,6 @@ lte_rrc_init_protocol(void) { lte_rrc_etws_cmas_dcs_hash = g_hash_table_new(g_direct_hash, g_direct_equal); lte_rrc_system_info_value_changed_hash = g_hash_table_new(g_direct_hash, g_direct_equal); - reassembly_table_init(<e_rrc_sib11_reassembly_table, - &addresses_reassembly_table_functions); - reassembly_table_init(<e_rrc_sib12_reassembly_table, - &addresses_reassembly_table_functions); } static void @@ -3202,8 +3198,6 @@ lte_rrc_cleanup_protocol(void) { g_hash_table_destroy(lte_rrc_etws_cmas_dcs_hash); g_hash_table_destroy(lte_rrc_system_info_value_changed_hash); - reassembly_table_destroy(<e_rrc_sib11_reassembly_table); - reassembly_table_destroy(<e_rrc_sib12_reassembly_table); } /*--- proto_register_rrc -------------------------------------------*/ @@ -4017,6 +4011,12 @@ void proto_register_lte_rrc(void) { register_init_routine(<e_rrc_init_protocol); register_cleanup_routine(<e_rrc_cleanup_protocol); + + reassembly_table_register(<e_rrc_sib11_reassembly_table, + &addresses_reassembly_table_functions); + reassembly_table_register(<e_rrc_sib12_reassembly_table, + &addresses_reassembly_table_functions); + } diff --git a/epan/dissectors/asn1/rtse/packet-rtse-template.c b/epan/dissectors/asn1/rtse/packet-rtse-template.c index c792fad377..56d59838aa 100644 --- a/epan/dissectors/asn1/rtse/packet-rtse-template.c +++ b/epan/dissectors/asn1/rtse/packet-rtse-template.c @@ -306,17 +306,6 @@ dissect_rtse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d return tvb_captured_length(tvb); } -static void rtse_reassemble_init (void) -{ - reassembly_table_init (&rtse_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void rtse_reassemble_cleanup(void) -{ - reassembly_table_destroy(&rtse_reassembly_table); -} - /*--- proto_register_rtse -------------------------------------------*/ void proto_register_rtse(void) { @@ -389,8 +378,10 @@ void proto_register_rtse(void) { proto_register_subtree_array(ett, array_length(ett)); expert_rtse = expert_register_protocol(proto_rtse); expert_register_field_array(expert_rtse, ei, array_length(ei)); - register_init_routine (&rtse_reassemble_init); - register_cleanup_routine (&rtse_reassemble_cleanup); + + reassembly_table_register (&rtse_reassembly_table, + &addresses_reassembly_table_functions); + rtse_module = prefs_register_protocol_subtree("OSI", proto_rtse, NULL); prefs_register_bool_preference(rtse_module, "reassemble", diff --git a/epan/dissectors/asn1/t38/packet-t38-template.c b/epan/dissectors/asn1/t38/packet-t38-template.c index a4d6817c0c..34d4d7357b 100644 --- a/epan/dissectors/asn1/t38/packet-t38-template.c +++ b/epan/dissectors/asn1/t38/packet-t38-template.c @@ -196,18 +196,6 @@ static t38_packet_info t38_info_arr[MAX_T38_MESSAGES_IN_PACKET]; static int t38_info_current=0; static t38_packet_info *t38_info=NULL; -static void t38_defragment_init(void) -{ - /* Init reassembly table */ - reassembly_table_init(&data_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void t38_defragment_cleanup(void) -{ - reassembly_table_destroy(&data_reassembly_table); -} - /* Set up an T38 conversation */ void t38_add_address(packet_info *pinfo, @@ -721,9 +709,9 @@ proto_register_t38(void) expert_register_field_array(expert_t38, ei, array_length(ei)); register_dissector("t38_udp", dissect_t38_udp, proto_t38); - /* Init reassemble tables for HDLC */ - register_init_routine(t38_defragment_init); - register_cleanup_routine(t38_defragment_cleanup); + /* Register reassemble tables for HDLC */ + reassembly_table_register(&data_reassembly_table, + &addresses_reassembly_table_functions); t38_tap = register_tap("t38"); diff --git a/epan/dissectors/packet-6lowpan.c b/epan/dissectors/packet-6lowpan.c index 461e82d7d8..89c0eafcff 100644 --- a/epan/dissectors/packet-6lowpan.c +++ b/epan/dissectors/packet-6lowpan.c @@ -490,7 +490,6 @@ struct lowpan_nhdr { /* Dissector prototypes */ static void proto_init_6lowpan (void); -static void proto_cleanup_6lowpan(void); static void prefs_6lowpan_apply (void); static int dissect_6lowpan (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data); static tvbuff_t * dissect_6lowpan_ipv6 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); @@ -2883,9 +2882,11 @@ proto_register_6lowpan(void) /* Register the dissector with wireshark. */ handle_6lowpan = register_dissector("6lowpan", dissect_6lowpan, proto_6lowpan); + /* Initialize the fragment reassembly table. */ + reassembly_table_register(&lowpan_reassembly_table, &addresses_reassembly_table_functions); + /* Register the dissector init function */ register_init_routine(proto_init_6lowpan); - register_cleanup_routine(proto_cleanup_6lowpan); register_shutdown_routine(proto_shutdown_6lowpan); /* Initialize the context preferences. */ @@ -2929,10 +2930,6 @@ proto_register_6lowpan(void) static void proto_init_6lowpan(void) { - /* Initialize the fragment reassembly table. */ - reassembly_table_init(&lowpan_reassembly_table, - &addresses_reassembly_table_functions); - /* Initialize the link-local context. */ lowpan_context_local.frame = 0; lowpan_context_local.plen = LOWPAN_CONTEXT_LINK_LOCAL_BITS; @@ -2942,12 +2939,6 @@ proto_init_6lowpan(void) prefs_6lowpan_apply(); } /* proto_init_6lowpan */ -static void -proto_cleanup_6lowpan(void) -{ - reassembly_table_destroy(&lowpan_reassembly_table); -} - /*FUNCTION:------------------------------------------------------ * NAME * prefs_6lowpan_apply diff --git a/epan/dissectors/packet-afs.c b/epan/dissectors/packet-afs.c index abc51d6324..8044661c9c 100644 --- a/epan/dissectors/packet-afs.c +++ b/epan/dissectors/packet-afs.c @@ -1416,14 +1416,11 @@ static void afs_init_protocol(void) { afs_request_hash = g_hash_table_new(afs_hash, afs_equal); - reassembly_table_init(&afs_reassembly_table, - &addresses_reassembly_table_functions); } static void afs_cleanup_protocol(void) { - reassembly_table_destroy(&afs_reassembly_table); g_hash_table_destroy(afs_request_hash); } @@ -3632,6 +3629,10 @@ proto_register_afs(void) "AFS (RX)", "afs"); proto_register_field_array(proto_afs, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + + reassembly_table_register(&afs_reassembly_table, + &addresses_reassembly_table_functions); + register_init_routine(&afs_init_protocol); register_cleanup_routine(&afs_cleanup_protocol); diff --git a/epan/dissectors/packet-atalk.c b/epan/dissectors/packet-atalk.c index 45361e4399..ac07e237f3 100644 --- a/epan/dissectors/packet-atalk.c +++ b/epan/dissectors/packet-atalk.c @@ -1586,15 +1586,12 @@ dissect_llap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_ static void atp_init(void) { - reassembly_table_init(&atp_reassembly_table, - &addresses_reassembly_table_functions); atp_request_hash = g_hash_table_new(asp_hash, asp_equal); } static void atp_cleanup(void) { - reassembly_table_destroy(&atp_reassembly_table); g_hash_table_destroy(atp_request_hash); } @@ -2091,6 +2088,9 @@ proto_reg_handoff_atalk(void) llap_cap_handle = create_capture_dissector_handle(capture_llap, proto_llap); capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_LOCALTALK, llap_cap_handle); + reassembly_table_register(&atp_reassembly_table, + &addresses_reassembly_table_functions); + register_init_routine( atp_init); register_cleanup_routine( atp_cleanup); register_init_routine( &asp_reinit); diff --git a/epan/dissectors/packet-bacapp.c b/epan/dissectors/packet-bacapp.c index 6a4f7db2f1..b2812d0293 100644 --- a/epan/dissectors/packet-bacapp.c +++ b/epan/dissectors/packet-bacapp.c @@ -11244,19 +11244,6 @@ dissect_bacapp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _ return tvb_captured_length(tvb); } -static void -bacapp_init_routine(void) -{ - reassembly_table_init(&msg_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -bacapp_cleanup_routine(void) -{ - reassembly_table_destroy(&msg_reassembly_table); -} - void proto_register_bacapp(void) { @@ -11495,8 +11482,9 @@ proto_register_bacapp(void) expert_bacapp = expert_register_protocol(proto_bacapp); expert_register_field_array(expert_bacapp, ei, array_length(ei)); register_dissector("bacapp", dissect_bacapp, proto_bacapp); - register_init_routine(&bacapp_init_routine); - register_cleanup_routine(&bacapp_cleanup_routine); + + reassembly_table_register(&msg_reassembly_table, + &addresses_reassembly_table_functions); bacapp_dissector_table = register_dissector_table("bacapp.vendor_identifier", "BACapp Vendor Identifier", proto_bacapp, diff --git a/epan/dissectors/packet-batadv.c b/epan/dissectors/packet-batadv.c index a591a8430b..8c89759d5b 100644 --- a/epan/dissectors/packet-batadv.c +++ b/epan/dissectors/packet-batadv.c @@ -4190,17 +4190,6 @@ static int dissect_batadv_tvlv_v15_tt_change(tvbuff_t *tvb, return offset; } -static void batadv_init_routine(void) -{ - reassembly_table_init(&msg_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void batadv_cleanup_routine(void) -{ - reassembly_table_destroy(&msg_reassembly_table); -} - void proto_register_batadv(void) { module_t *batadv_module; @@ -5036,8 +5025,8 @@ void proto_register_batadv(void) expert_batadv = expert_register_protocol(proto_batadv_plugin); expert_register_field_array(expert_batadv, ei, array_length(ei)); - register_init_routine(&batadv_init_routine); - register_cleanup_routine(&batadv_cleanup_routine); + reassembly_table_register(&msg_reassembly_table, + &addresses_reassembly_table_functions); } void proto_reg_handoff_batadv(void) diff --git a/epan/dissectors/packet-ber.c b/epan/dissectors/packet-ber.c index 816ae26368..443df4b8f2 100644 --- a/epan/dissectors/packet-ber.c +++ b/epan/dissectors/packet-ber.c @@ -1414,15 +1414,6 @@ proto_tree_add_debug_text("dissect BER length %d, offset %d (remaining %d)\n", t static reassembly_table octet_segment_reassembly_table; -static void ber_defragment_init(void) { - reassembly_table_init(&octet_segment_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void ber_defragment_cleanup(void) { - reassembly_table_destroy(&octet_segment_reassembly_table); -} - static int dissect_ber_constrained_octet_string_impl(gboolean implicit_tag, asn1_ctx_t *actx, proto_tree *tree, tvbuff_t *tvb, int offset, gint32 min_len, gint32 max_len, gint hf_id, tvbuff_t **out_tvb, guint nest_level); @@ -4579,8 +4570,9 @@ proto_register_ber(void) register_ber_syntax_dissector("ASN.1", proto_ber, dissect_ber_syntax); - register_init_routine(ber_defragment_init); - register_cleanup_routine(ber_defragment_cleanup); + reassembly_table_register(&octet_segment_reassembly_table, + &addresses_reassembly_table_functions); + register_shutdown_routine(ber_shutdown); register_decode_as(&ber_da); diff --git a/epan/dissectors/packet-btl2cap.c b/epan/dissectors/packet-btl2cap.c index 30134cef3a..256194fac3 100644 --- a/epan/dissectors/packet-btl2cap.c +++ b/epan/dissectors/packet-btl2cap.c @@ -2775,19 +2775,6 @@ dissect_btl2cap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) return offset; } -static void -init_btl2cap(void) -{ - reassembly_table_init(&btl2cap_le_sdu_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -cleanup_btl2cap(void) -{ - reassembly_table_destroy(&btl2cap_le_sdu_reassembly_table); -} - /* Register the protocol with Wireshark */ void proto_register_btl2cap(void) @@ -3368,9 +3355,8 @@ proto_register_btl2cap(void) register_decode_as(&btl2cap_cid_da); register_decode_as(&btl2cap_psm_da); - register_init_routine(&init_btl2cap); - register_cleanup_routine(&cleanup_btl2cap); - + reassembly_table_register(&btl2cap_le_sdu_reassembly_table, + &addresses_reassembly_table_functions); } diff --git a/epan/dissectors/packet-btle.c b/epan/dissectors/packet-btle.c index 1b933dcc15..275e751de9 100644 --- a/epan/dissectors/packet-btle.c +++ b/epan/dissectors/packet-btle.c @@ -1207,19 +1207,6 @@ dissect_btle(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) return offset; } -static void -init_btle(void) -{ - reassembly_table_init(&btle_l2cap_msg_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -cleanup_btle(void) -{ - reassembly_table_destroy(&btle_l2cap_msg_reassembly_table); -} - void proto_register_btle(void) { @@ -1724,8 +1711,8 @@ proto_register_btle(void) "Bluetooth LE LL version: 4.1 (Core)", "Version of protocol supported by this dissector."); - register_init_routine(&init_btle); - register_cleanup_routine(&cleanup_btle); + reassembly_table_register(&btle_l2cap_msg_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-capwap.c b/epan/dissectors/packet-capwap.c index 48fdf5ab62..b78c973c17 100644 --- a/epan/dissectors/packet-capwap.c +++ b/epan/dissectors/packet-capwap.c @@ -1253,17 +1253,6 @@ static const value_string ieee80211_mac_profile_vals[] = { { 0, NULL } }; -static void capwap_reassemble_init(void) -{ - reassembly_table_init(&capwap_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void capwap_reassemble_cleanup(void) -{ - reassembly_table_destroy(&capwap_reassembly_table); -} - static void dissect_capwap_data_message_bindings_ieee80211(tvbuff_t *tvb, proto_tree *data_message_binding_tree, guint offset, packet_info *pinfo) { @@ -5766,8 +5755,8 @@ proto_register_capwap_control(void) expert_capwap = expert_register_protocol(proto_capwap_control); expert_register_field_array(expert_capwap, ei, array_length(ei)); - register_init_routine(&capwap_reassemble_init); - register_cleanup_routine(&capwap_reassemble_cleanup); + reassembly_table_register(&capwap_reassembly_table, + &addresses_reassembly_table_functions); capwap_module = prefs_register_protocol(proto_capwap_control, NULL); /* Need to create a placeholder for "port" preferences so there is a callback */ diff --git a/epan/dissectors/packet-cell_broadcast.c b/epan/dissectors/packet-cell_broadcast.c index 608af7463a..23162d7832 100644 --- a/epan/dissectors/packet-cell_broadcast.c +++ b/epan/dissectors/packet-cell_broadcast.c @@ -160,18 +160,6 @@ static const fragment_items gsm_page_items = { "pages" }; - -static void gsm_cbs_message_reassembly_init(void) -{ - reassembly_table_init(&gsm_cbs_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void gsm_cbs_message_reassembly_cleanup(void) -{ - reassembly_table_destroy(&gsm_cbs_reassembly_table); -} - guint dissect_cbs_serial_number(tvbuff_t *tvb, proto_tree *tree, guint offset) { guint16 serial_number = tvb_get_ntohs(tvb, offset) ; @@ -571,8 +559,9 @@ proto_register_cbs(void) proto_cell_broadcast = proto_register_protocol("GSM Cell Broadcast Service", "GSM Cell Broadcast Service", "gsm_cbs"); proto_register_field_array(proto_cell_broadcast, hf_cbs, array_length(hf_cbs)); - register_init_routine(gsm_cbs_message_reassembly_init); - register_cleanup_routine(gsm_cbs_message_reassembly_cleanup); + + reassembly_table_register(&gsm_cbs_reassembly_table, + &addresses_reassembly_table_functions); /* subdissector code */ register_dissector("gsm_cbs", dissect_gsm_cell_broadcast, proto_cell_broadcast); diff --git a/epan/dissectors/packet-clnp.c b/epan/dissectors/packet-clnp.c index 93774718b4..e22e164a8e 100644 --- a/epan/dissectors/packet-clnp.c +++ b/epan/dissectors/packet-clnp.c @@ -577,19 +577,6 @@ dissect_clnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_ return tvb_captured_length(tvb); } /* dissect_clnp */ -static void -clnp_reassemble_init(void) -{ - reassembly_table_init(&clnp_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -clnp_reassemble_cleanup(void) -{ - reassembly_table_destroy(&clnp_reassembly_table); -} - void proto_register_clnp(void) { @@ -721,8 +708,9 @@ proto_register_clnp(void) expert_register_field_array(expert_clnp, ei, array_length(ei)); clnp_handle = register_dissector("clnp", dissect_clnp, proto_clnp); clnp_heur_subdissector_list = register_heur_dissector_list("clnp", proto_clnp); - register_init_routine(clnp_reassemble_init); - register_cleanup_routine(clnp_reassemble_cleanup); + + reassembly_table_register(&clnp_reassembly_table, + &addresses_reassembly_table_functions); register_osi_address_type(); diff --git a/epan/dissectors/packet-dcerpc.c b/epan/dissectors/packet-dcerpc.c index f435edf831..bec5616ec0 100644 --- a/epan/dissectors/packet-dcerpc.c +++ b/epan/dissectors/packet-dcerpc.c @@ -1148,20 +1148,6 @@ static const reassembly_table_functions dcerpc_cl_reassembly_table_functions = { dcerpc_fragment_free_persistent_key }; -static void -dcerpc_reassemble_init(void) -{ - /* - * XXX - addresses_ports_reassembly_table_functions? - * Or can a single connection-oriented DCE RPC session persist - * over multiple transport layer connections? - */ - reassembly_table_init(&dcerpc_co_reassembly_table, - &addresses_reassembly_table_functions); - reassembly_table_init(&dcerpc_cl_reassembly_table, - &dcerpc_cl_reassembly_table_functions); -} - /* * Authentication subdissectors. Used to dissect authentication blobs in * DCERPC binds, requests and responses. @@ -6968,7 +6954,17 @@ proto_register_dcerpc(void) "Reassemble DCE/RPC fragments", "Whether the DCE/RPC dissector should reassemble fragmented DCE/RPC PDUs", &dcerpc_reassemble); - register_init_routine(dcerpc_reassemble_init); + + /* + * XXX - addresses_ports_reassembly_table_functions? + * Or can a single connection-oriented DCE RPC session persist + * over multiple transport layer connections? + */ + reassembly_table_register(&dcerpc_co_reassembly_table, + &addresses_reassembly_table_functions); + reassembly_table_register(&dcerpc_cl_reassembly_table, + &dcerpc_cl_reassembly_table_functions); + dcerpc_uuids = g_hash_table_new_full(dcerpc_uuid_hash, dcerpc_uuid_equal, g_free, g_free); dcerpc_tap = register_tap("dcerpc"); diff --git a/epan/dissectors/packet-dcm.c b/epan/dissectors/packet-dcm.c index fc7ee38fbd..dc508241f6 100644 --- a/epan/dissectors/packet-dcm.c +++ b/epan/dissectors/packet-dcm.c @@ -3973,16 +3973,11 @@ dcm_init(void) g_hash_table_insert(dcm_status_table, GUINT_TO_POINTER((guint32)dcm_status_data[i].value), (gpointer)&dcm_status_data[i]); } - - /* Register processing of fragmented DICOM PDVs */ - reassembly_table_init(&dcm_pdv_reassembly_table, - &addresses_reassembly_table_functions); } static void dcm_cleanup(void) { - reassembly_table_destroy(&dcm_pdv_reassembly_table); g_hash_table_destroy(dcm_uid_table); g_hash_table_destroy(dcm_tag_table); g_hash_table_destroy(dcm_status_table); @@ -7212,6 +7207,10 @@ proto_register_dcm(void) register_init_routine(&dcm_init); register_cleanup_routine(&dcm_cleanup); + /* Register processing of fragmented DICOM PDVs */ + reassembly_table_register(&dcm_pdv_reassembly_table, + &addresses_reassembly_table_functions); + } void diff --git a/epan/dissectors/packet-dcp-etsi.c b/epan/dissectors/packet-dcp-etsi.c index 2f644f4e9e..dbc75605ef 100644 --- a/epan/dissectors/packet-dcp-etsi.c +++ b/epan/dissectors/packet-dcp-etsi.c @@ -125,22 +125,6 @@ static const fragment_items dcp_frag_items = { "Message fragments" }; -/** initialise the DCP protocol. Details follow - * here. - */ -static void -dcp_init_protocol(void) -{ - reassembly_table_init (&dcp_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -dcp_cleanup_protocol(void) -{ - reassembly_table_destroy(&dcp_reassembly_table); -} - /** Dissect a DCP packet. Details follow * here. @@ -886,9 +870,8 @@ proto_register_dcp_etsi (void) tpl_dissector_table = register_dissector_table("dcp-tpl.ptr", "DCP-TPL Protocol Type & Revision", proto_dcp_etsi, FT_STRING, BASE_NONE); - register_init_routine(dcp_init_protocol); - register_cleanup_routine(dcp_cleanup_protocol); - + reassembly_table_register (&dcp_reassembly_table, + &addresses_reassembly_table_functions); } /* diff --git a/epan/dissectors/packet-dnp.c b/epan/dissectors/packet-dnp.c index 5b7410a0c6..48df1f3f40 100644 --- a/epan/dissectors/packet-dnp.c +++ b/epan/dissectors/packet-dnp.c @@ -3522,14 +3522,11 @@ static void dnp3_init(void) { dl_conversation_table = g_hash_table_new(dl_conversation_hash, dl_conversation_equal); - reassembly_table_init(&al_reassembly_table, - &addresses_reassembly_table_functions); } static void dnp3_cleanup(void) { - reassembly_table_destroy(&al_reassembly_table); g_hash_table_destroy(dl_conversation_table); } @@ -4557,6 +4554,9 @@ proto_register_dnp3(void) /* Register protocol init routine */ register_init_routine(&dnp3_init); register_cleanup_routine(&dnp3_cleanup); + reassembly_table_register(&al_reassembly_table, + &addresses_reassembly_table_functions); + /* Register the protocol name and description */ proto_dnp3 = proto_register_protocol("Distributed Network Protocol 3.0", diff --git a/epan/dissectors/packet-dtls.c b/epan/dissectors/packet-dtls.c index dd08f58da4..9ac75a4d3f 100644 --- a/epan/dissectors/packet-dtls.c +++ b/epan/dissectors/packet-dtls.c @@ -206,7 +206,6 @@ dtls_init(void) ssl_common_init(&dtls_master_key_map, &dtls_decrypted_data, &dtls_compressed_data); - reassembly_table_init (&dtls_reassembly_table, &addresses_ports_reassembly_table_functions); /* We should have loaded "keys_list" by now. Mark it obsolete */ if (dtls_module) { @@ -224,7 +223,6 @@ dtls_cleanup(void) wmem_destroy_stack(key_list_stack); key_list_stack = NULL; } - reassembly_table_destroy(&dtls_reassembly_table); ssl_common_cleanup(&dtls_master_key_map, &dtls_keylog_file, &dtls_decrypted_data, &dtls_compressed_data); } @@ -1908,6 +1906,8 @@ proto_register_dtls(void) register_init_routine(dtls_init); register_cleanup_routine(dtls_cleanup); + reassembly_table_register (&dtls_reassembly_table, &addresses_ports_reassembly_table_functions); + dtls_tap = register_tap("dtls"); ssl_debug_printf("proto_register_dtls: registered tap %s:%d\n", "dtls", dtls_tap); diff --git a/epan/dissectors/packet-dtn.c b/epan/dissectors/packet-dtn.c index 8a12f9b0f5..0b49efec79 100644 --- a/epan/dissectors/packet-dtn.c +++ b/epan/dissectors/packet-dtn.c @@ -2389,17 +2389,6 @@ dissect_bundle(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _ return(offset); } -static void -bundle_defragment_init(void) { - reassembly_table_init(&msg_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -bundle_defragment_cleanup(void) { - reassembly_table_destroy(&msg_reassembly_table); -} - void proto_reg_handoff_bundle(void); void proto_register_bundle(void); @@ -3066,8 +3055,8 @@ proto_register_bundle(void) expert_tcpcl = expert_register_protocol(proto_tcp_conv); expert_register_field_array(expert_tcpcl, ei_tcpcl, array_length(ei_tcpcl)); - register_init_routine(bundle_defragment_init); - register_cleanup_routine(bundle_defragment_cleanup); + reassembly_table_register(&msg_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-dvbci.c b/epan/dissectors/packet-dvbci.c index 8e545e5a71..6940ad331f 100644 --- a/epan/dissectors/packet-dvbci.c +++ b/epan/dissectors/packet-dvbci.c @@ -1714,17 +1714,6 @@ dvbci_init(void) { buf_size_cam = 0; buf_size_host = 0; - reassembly_table_init(&tpdu_reassembly_table, - &addresses_reassembly_table_functions); - reassembly_table_init(&spdu_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -dvbci_cleanup(void) -{ - reassembly_table_destroy(&tpdu_reassembly_table); - reassembly_table_destroy(&spdu_reassembly_table); } @@ -6349,7 +6338,11 @@ proto_register_dvbci(void) "SAS application id", proto_dvbci, FT_STRING, STR_ASCII); register_init_routine(dvbci_init); - register_cleanup_routine(dvbci_cleanup); + reassembly_table_register(&tpdu_reassembly_table, + &addresses_reassembly_table_functions); + reassembly_table_register(&spdu_reassembly_table, + &addresses_reassembly_table_functions); + /* the dissector for decrypted CI+ SAC messages which we can export */ register_dissector(EXPORTED_SAC_MSG_PROTO, diff --git a/epan/dissectors/packet-eap.c b/epan/dissectors/packet-eap.c index 22d56fbdb7..da1567ada3 100644 --- a/epan/dissectors/packet-eap.c +++ b/epan/dissectors/packet-eap.c @@ -444,19 +444,6 @@ test_flag(unsigned char flag, unsigned char mask) } static void -eap_tls_defragment_init(void) -{ - reassembly_table_init(&eap_tls_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -eap_tls_defragment_cleanup(void) -{ - reassembly_table_destroy(&eap_tls_reassembly_table); -} - -static void dissect_eap_mschapv2(proto_tree *eap_tree, tvbuff_t *tvb, packet_info *pinfo, int offset, gint size) { @@ -1701,8 +1688,9 @@ proto_register_eap(void) expert_register_field_array(expert_eap, ei, array_length(ei)); eap_handle = register_dissector("eap", dissect_eap, proto_eap); - register_init_routine(eap_tls_defragment_init); - register_cleanup_routine(eap_tls_defragment_cleanup); + + reassembly_table_register(&eap_tls_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-epl.c b/epan/dissectors/packet-epl.c index 918f386a78..66709f8672 100644 --- a/epan/dissectors/packet-epl.c +++ b/epan/dissectors/packet-epl.c @@ -1660,14 +1660,11 @@ setup_dissector(void) /* create memory block for uploda/download */ memset(&epl_asnd_sdo_reassembly_write, 0, sizeof(epl_sdo_reassembly)); memset(&epl_asnd_sdo_reassembly_read, 0, sizeof(epl_sdo_reassembly)); - /* create reassembly table */ - reassembly_table_init(&epl_reassembly_table, &addresses_reassembly_table_functions); } static void cleanup_dissector(void) { - reassembly_table_destroy(&epl_reassembly_table); g_hash_table_destroy(epl_duplication_table); count = 0; ct = 0; @@ -4567,6 +4564,9 @@ proto_reg_handoff_epl(void) /* register frame init routine */ register_init_routine( setup_dissector ); register_cleanup_routine( cleanup_dissector ); + /* register reassembly table */ + reassembly_table_register(&epl_reassembly_table, &addresses_reassembly_table_functions); + } /* diff --git a/epan/dissectors/packet-fc.c b/epan/dissectors/packet-fc.c index 2658cad358..f11fc5475b 100644 --- a/epan/dissectors/packet-fc.c +++ b/epan/dissectors/packet-fc.c @@ -194,15 +194,12 @@ fcseq_hash (gconstpointer v) static void fc_exchange_init_protocol(void) { - reassembly_table_init(&fc_reassembly_table, - &addresses_reassembly_table_functions); fcseq_req_hash = g_hash_table_new(fcseq_hash, fcseq_equal); } static void fc_exchange_cleanup_protocol(void) { - reassembly_table_destroy(&fc_reassembly_table); g_hash_table_destroy(fcseq_req_hash); } @@ -1577,6 +1574,8 @@ proto_register_fc(void) register_init_routine (fc_exchange_init_protocol); register_cleanup_routine (fc_exchange_cleanup_protocol); + reassembly_table_register(&fc_reassembly_table, + &addresses_reassembly_table_functions); /* Register FC SOF/EOF */ diff --git a/epan/dissectors/packet-giop.c b/epan/dissectors/packet-giop.c index 1154499170..b2b1c00cc3 100644 --- a/epan/dissectors/packet-giop.c +++ b/epan/dissectors/packet-giop.c @@ -1602,13 +1602,9 @@ static void giop_init(void) { giop_complete_request_list = NULL; read_IOR_strings_from_file(giop_ior_file, 600); - - reassembly_table_init(&giop_reassembly_table, - &addresses_reassembly_table_functions); } static void giop_cleanup(void) { - reassembly_table_destroy(&giop_reassembly_table); g_hash_table_destroy(giop_objkey_hash); g_hash_table_destroy(giop_complete_reply_hash); g_list_free(giop_complete_request_list); @@ -5537,6 +5533,9 @@ proto_register_giop (void) register_init_routine( &giop_init); /* any init stuff */ register_cleanup_routine( &giop_cleanup); + reassembly_table_register(&giop_reassembly_table, + &addresses_reassembly_table_functions); + /* Register for tapping */ giop_tap = register_tap(GIOP_TAP_NAME); /* GIOP statistics tap */ diff --git a/epan/dissectors/packet-gsm_cbch.c b/epan/dissectors/packet-gsm_cbch.c index 8d84266337..f7c2529649 100644 --- a/epan/dissectors/packet-gsm_cbch.c +++ b/epan/dissectors/packet-gsm_cbch.c @@ -123,19 +123,6 @@ static const fragment_items cbch_frag_items = { "blocks" }; -static void -cbch_defragment_init(void) -{ - reassembly_table_init(&cbch_block_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -cbch_defragment_cleanup(void) -{ - reassembly_table_destroy(&cbch_block_reassembly_table); -} - static const range_string gsm_cbch_sched_begin_slot_rvals[] = { { 0, 0, "Out of range (ignoring message)" }, { 1, 1, "(apparently) Scheduled Scheduling Message" }, @@ -645,8 +632,9 @@ proto_register_gsm_cbch(void) /* subdissector code */ register_dissector("gsm_cbch", dissect_cbch, proto_cbch); - register_init_routine(cbch_defragment_init); - register_cleanup_routine(cbch_defragment_cleanup); + + reassembly_table_register(&cbch_block_reassembly_table, + &addresses_reassembly_table_functions); /* subtree array */ proto_register_subtree_array(ett, array_length(ett)); diff --git a/epan/dissectors/packet-gsm_sms.c b/epan/dissectors/packet-gsm_sms.c index 70fd85e5e4..57cb6c5212 100644 --- a/epan/dissectors/packet-gsm_sms.c +++ b/epan/dissectors/packet-gsm_sms.c @@ -338,15 +338,12 @@ typedef struct { static void gsm_sms_defragment_init (void) { - reassembly_table_init(&g_sm_reassembly_table, - &addresses_reassembly_table_functions); g_sm_fragment_params_table = g_hash_table_new(g_direct_hash, g_direct_equal); } static void gsm_sms_defragment_cleanup (void) { - reassembly_table_destroy(&g_sm_reassembly_table); g_hash_table_destroy(g_sm_fragment_params_table); } @@ -3363,6 +3360,10 @@ proto_register_gsm_sms(void) /* GSM SMS UD dissector initialization routines */ register_init_routine (gsm_sms_defragment_init); register_cleanup_routine (gsm_sms_defragment_cleanup); + + reassembly_table_register(&g_sm_reassembly_table, + &addresses_reassembly_table_functions); + } /* diff --git a/epan/dissectors/packet-gsm_sms_ud.c b/epan/dissectors/packet-gsm_sms_ud.c index c3c1d44261..72fe906e79 100644 --- a/epan/dissectors/packet-gsm_sms_ud.c +++ b/epan/dissectors/packet-gsm_sms_ud.c @@ -142,19 +142,6 @@ static gboolean prevent_subdissectors_changing_columns = FALSE; static dissector_handle_t wsp_handle; -static void -gsm_sms_ud_defragment_init(void) -{ - reassembly_table_init(&sm_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -gsm_sms_ud_defragment_cleanup(void) -{ - reassembly_table_destroy(&sm_reassembly_table); -} - /* * Value-arrays for field-contents */ @@ -733,9 +720,8 @@ proto_register_gsm_sms_ud(void) register_dissector("gsm_sms_ud", dissect_gsm_sms_ud, proto_gsm_sms_ud); - /* GSM SMS UD dissector initialization routines */ - register_init_routine(gsm_sms_ud_defragment_init); - register_cleanup_routine(gsm_sms_ud_defragment_cleanup); + reassembly_table_register(&sm_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-gssapi.c b/epan/dissectors/packet-gssapi.c index d1bdc10160..b0763f94ab 100644 --- a/epan/dissectors/packet-gssapi.c +++ b/epan/dissectors/packet-gssapi.c @@ -105,19 +105,6 @@ static const fragment_items gssapi_frag_items = { static reassembly_table gssapi_reassembly_table; -static void -gssapi_reassembly_init(void) -{ - reassembly_table_init(&gssapi_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -gssapi_reassembly_cleanup(void) -{ - reassembly_table_destroy(&gssapi_reassembly_table); -} - /* * Subdissectors */ @@ -648,8 +635,10 @@ proto_register_gssapi(void) register_dissector("gssapi_verf", dissect_gssapi_verf, proto_gssapi); gssapi_oids = g_hash_table_new_full(gssapi_oid_hash, gssapi_oid_equal, g_free, g_free); - register_init_routine(gssapi_reassembly_init); - register_cleanup_routine(gssapi_reassembly_cleanup); + + reassembly_table_register(&gssapi_reassembly_table, + &addresses_reassembly_table_functions); + register_shutdown_routine(gssapi_shutdown); } diff --git a/epan/dissectors/packet-hci_usb.c b/epan/dissectors/packet-hci_usb.c index 66bdc163b5..30721e5cd4 100644 --- a/epan/dissectors/packet-hci_usb.c +++ b/epan/dissectors/packet-hci_usb.c @@ -362,7 +362,7 @@ proto_register_hci_usb(void) &ett_hci_usb_msg_fragments, }; - reassembly_table_init(&hci_usb_reassembly_table, + reassembly_table_register(&hci_usb_reassembly_table, &addresses_reassembly_table_functions); fragment_info_table = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope()); diff --git a/epan/dissectors/packet-iax2.c b/epan/dissectors/packet-iax2.c index b563689325..c1dd716e78 100644 --- a/epan/dissectors/packet-iax2.c +++ b/epan/dissectors/packet-iax2.c @@ -2429,9 +2429,6 @@ iax_init_protocol(void) circuitcount = 0; iax_fid_table = g_hash_table_new(g_direct_hash, g_direct_equal); - - reassembly_table_init(&iax_reassembly_table, - &addresses_reassembly_table_functions); } static void @@ -2439,7 +2436,6 @@ iax_cleanup_protocol(void) { g_hash_table_destroy(iax_circuit_hashtab); g_hash_table_destroy(iax_fid_table); - reassembly_table_destroy(&iax_reassembly_table); } @@ -3210,6 +3206,9 @@ proto_register_iax2(void) to clear out our hash tables etc */ register_init_routine(&iax_init_protocol); register_cleanup_routine(&iax_cleanup_protocol); + reassembly_table_register(&iax_reassembly_table, + &addresses_reassembly_table_functions); + iax2_tap = register_tap("IAX2"); } diff --git a/epan/dissectors/packet-idmp.c b/epan/dissectors/packet-idmp.c index bf0816559b..87ff313ae2 100644 --- a/epan/dissectors/packet-idmp.c +++ b/epan/dissectors/packet-idmp.c @@ -731,15 +731,8 @@ static int dissect_idmp_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *paren return tvb_captured_length(tvb); } -static void idmp_reassemble_init (void) -{ - reassembly_table_init (&idmp_reassembly_table, - &addresses_reassembly_table_functions); -} - static void idmp_reassemble_cleanup(void) { - reassembly_table_destroy(&idmp_reassembly_table); saved_protocolID = NULL; } @@ -934,7 +927,7 @@ void proto_register_idmp(void) NULL, HFILL }}, /*--- End of included file: packet-idmp-hfarr.c ---*/ -#line 319 "./asn1/idmp/packet-idmp-template.c" +#line 312 "./asn1/idmp/packet-idmp-template.c" }; /* List of subtrees */ @@ -957,7 +950,7 @@ void proto_register_idmp(void) &ett_idmp_InvokeId, /*--- End of included file: packet-idmp-ettarr.c ---*/ -#line 327 "./asn1/idmp/packet-idmp-template.c" +#line 320 "./asn1/idmp/packet-idmp-template.c" }; module_t *idmp_module; @@ -970,8 +963,10 @@ void proto_register_idmp(void) idmp_handle = register_dissector("idmp", dissect_idmp_tcp, proto_idmp); - register_init_routine (&idmp_reassemble_init); register_cleanup_routine (&idmp_reassemble_cleanup); + reassembly_table_register (&idmp_reassembly_table, + &addresses_reassembly_table_functions); + /* Register our configuration options for IDMP, particularly our port */ diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c index 8116cba90e..a0b8ee1a0d 100644 --- a/epan/dissectors/packet-ieee80211.c +++ b/epan/dissectors/packet-ieee80211.c @@ -6727,13 +6727,6 @@ dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo static reassembly_table gas_reassembly_table; -static void -ieee80211_gas_reassembly_init(void) -{ - reassembly_table_init(&gas_reassembly_table, - &addresses_reassembly_table_functions); -} - static gint ett_gas_resp_fragment = -1; static gint ett_gas_resp_fragments = -1; @@ -18653,19 +18646,6 @@ dissect_ieee80211_noqos(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, voi } -static void -wlan_defragment_init(void) -{ - reassembly_table_init(&wlan_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -wlan_defragment_cleanup(void) -{ - reassembly_table_destroy(&wlan_reassembly_table); -} - /* ------------- */ static guint retransmit_hash(gconstpointer k) @@ -27584,10 +27564,11 @@ proto_register_ieee80211(void) register_capture_dissector("ieee80211", capture_ieee80211, proto_wlan); register_capture_dissector("ieee80211_datapad", capture_ieee80211_datapad, proto_wlan); - register_init_routine(wlan_defragment_init); - register_cleanup_routine(wlan_defragment_cleanup); + reassembly_table_register(&wlan_reassembly_table, + &addresses_reassembly_table_functions); register_init_routine(wlan_retransmit_init); - register_init_routine(ieee80211_gas_reassembly_init); + reassembly_table_register(&gas_reassembly_table, + &addresses_reassembly_table_functions); wlan_tap = register_tap("wlan"); register_conversation_table(proto_wlan, TRUE, wlan_conversation_packet, wlan_hostlist_packet); diff --git a/epan/dissectors/packet-ip.c b/epan/dissectors/packet-ip.c index 444c2dac86..536df461a6 100644 --- a/epan/dissectors/packet-ip.c +++ b/epan/dissectors/packet-ip.c @@ -557,19 +557,6 @@ ip_build_filter(packet_info *pinfo) */ static reassembly_table ip_reassembly_table; -static void -ip_defragment_init(void) -{ - reassembly_table_init(&ip_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -ip_defragment_cleanup(void) -{ - reassembly_table_destroy(&ip_reassembly_table); -} - static gboolean capture_ip(const guchar *pd, int offset, int len, capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U_) { if (!BYTES_ARE_IN_FRAME(offset, len, IPH_MIN_LEN)) @@ -3122,8 +3109,8 @@ proto_register_ip(void) &try_heuristic_first); ip_handle = register_dissector("ip", dissect_ip, proto_ip); - register_init_routine(ip_defragment_init); - register_cleanup_routine(ip_defragment_cleanup); + reassembly_table_register(&ip_reassembly_table, + &addresses_reassembly_table_functions); ip_tap = register_tap("ip"); register_decode_as(&ip_da); diff --git a/epan/dissectors/packet-ipv6.c b/epan/dissectors/packet-ipv6.c index d8cb5210a2..18e9ff246d 100644 --- a/epan/dissectors/packet-ipv6.c +++ b/epan/dissectors/packet-ipv6.c @@ -797,13 +797,6 @@ add_geoip_info(proto_tree *tree, tvbuff_t *tvb, gint offset, const struct e_in6_ } #endif /* HAVE_GEOIP_V6 */ -static void -ipv6_reassemble_init(void) -{ - reassembly_table_init(&ipv6_reassembly_table, - &addresses_reassembly_table_functions); -} - /* Returns TRUE if reassembled */ static gboolean ipv6_reassemble_do(tvbuff_t **tvb_ptr, gint *offset_ptr, packet_info *pinfo, proto_tree *ipv6_tree, @@ -844,12 +837,6 @@ ipv6_reassemble_do(tvbuff_t **tvb_ptr, gint *offset_ptr, packet_info *pinfo, pro return FALSE; } -static void -ipv6_reassemble_cleanup(void) -{ - reassembly_table_destroy(&ipv6_reassembly_table); -} - struct rthdr_proto_item { proto_item *len; proto_item *type; @@ -3520,8 +3507,8 @@ proto_register_ipv6(void) &ipv6_exthdr_hide_len_oct_field); ipv6_handle = register_dissector("ipv6", dissect_ipv6, proto_ipv6); - register_init_routine(ipv6_reassemble_init); - register_cleanup_routine(ipv6_reassemble_cleanup); + reassembly_table_register(&ipv6_reassembly_table, + &addresses_reassembly_table_functions); ip6_hdr_tap = register_tap("ipv6"); ipv6_ws_tap = register_tap("ipv6_ws"); diff --git a/epan/dissectors/packet-isakmp.c b/epan/dissectors/packet-isakmp.c index 3326a68321..cf2e55d1f7 100644 --- a/epan/dissectors/packet-isakmp.c +++ b/epan/dissectors/packet-isakmp.c @@ -5761,11 +5761,6 @@ isakmp_init_protocol(void) { decrypt_data_t *decr; guint8 *ic_key; #endif /* HAVE_LIBGCRYPT */ - reassembly_table_init(&isakmp_cisco_reassembly_table, - &addresses_reassembly_table_functions); - reassembly_table_init(&isakmp_ike2_reassembly_table, - &addresses_reassembly_table_functions); - #ifdef HAVE_LIBGCRYPT isakmp_hash = g_hash_table_new_full(isakmp_hash_func, isakmp_equal_func, free_cookie_key, free_cookie_value); @@ -5793,8 +5788,6 @@ isakmp_init_protocol(void) { static void isakmp_cleanup_protocol(void) { - reassembly_table_destroy(&isakmp_cisco_reassembly_table); - reassembly_table_destroy(&isakmp_ike2_reassembly_table); #ifdef HAVE_LIBGCRYPT g_hash_table_destroy(isakmp_hash); g_hash_table_destroy(ikev2_key_hash); @@ -7166,6 +7159,10 @@ proto_register_isakmp(void) expert_register_field_array(expert_isakmp, ei, array_length(ei)); register_init_routine(&isakmp_init_protocol); register_cleanup_routine(&isakmp_cleanup_protocol); + reassembly_table_register(&isakmp_cisco_reassembly_table, + &addresses_reassembly_table_functions); + reassembly_table_register(&isakmp_ike2_reassembly_table, + &addresses_reassembly_table_functions); isakmp_handle = register_dissector("isakmp", dissect_isakmp, proto_isakmp); diff --git a/epan/dissectors/packet-iso15765.c b/epan/dissectors/packet-iso15765.c index 57df76f713..d20d2e318b 100644 --- a/epan/dissectors/packet-iso15765.c +++ b/epan/dissectors/packet-iso15765.c @@ -386,15 +386,12 @@ static void iso15765_init(void) { iso15765_frame_table = g_hash_table_new(g_direct_hash, g_direct_equal); - reassembly_table_init(&iso15765_reassembly_table, - &addresses_reassembly_table_functions); } static void iso15765_cleanup(void) { reassembly_table_destroy(&iso15765_reassembly_table); - g_hash_table_destroy(iso15765_frame_table); } @@ -621,6 +618,8 @@ proto_register_iso15765(void) register_init_routine(iso15765_init); register_cleanup_routine(iso15765_cleanup); + reassembly_table_register(&iso15765_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-isup.c b/epan/dissectors/packet-isup.c index 2d8af48dab..de7b7cee5b 100644 --- a/epan/dissectors/packet-isup.c +++ b/epan/dissectors/packet-isup.c @@ -3183,20 +3183,6 @@ static const fragment_items isup_apm_msg_frag_items = { static reassembly_table isup_apm_msg_reassembly_table; - -static void -isup_apm_defragment_init(void) -{ - reassembly_table_init (&isup_apm_msg_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -isup_apm_defragment_cleanup(void) -{ - reassembly_table_destroy(&isup_apm_msg_reassembly_table); -} - /* Info for the tap that must be passed between procedures */ static gchar *tap_called_number = NULL; static gchar *tap_calling_number = NULL; @@ -12131,8 +12117,9 @@ proto_register_bicc(void) proto_register_field_array(proto_bicc, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); - register_init_routine(isup_apm_defragment_init); - register_cleanup_routine(isup_apm_defragment_cleanup); + reassembly_table_register(&isup_apm_msg_reassembly_table, + &addresses_reassembly_table_functions); + } /* Register isup with the sub-laying MTP L3 dissector */ diff --git a/epan/dissectors/packet-lapdm.c b/epan/dissectors/packet-lapdm.c index f1f80976c1..3135a1166f 100644 --- a/epan/dissectors/packet-lapdm.c +++ b/epan/dissectors/packet-lapdm.c @@ -201,19 +201,6 @@ static const fragment_items lapdm_frag_items = { "fragments" }; -static void -lapdm_defragment_init (void) -{ - reassembly_table_init (&lapdm_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -lapdm_defragment_cleanup (void) -{ - reassembly_table_destroy(&lapdm_reassembly_table); -} - static int dissect_lapdm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) @@ -523,8 +510,8 @@ proto_register_lapdm(void) lapdm_last_n_s_map = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), g_direct_hash, g_direct_equal); - register_init_routine (lapdm_defragment_init); - register_cleanup_routine (lapdm_defragment_cleanup); + reassembly_table_register(&lapdm_reassembly_table, + &addresses_reassembly_table_functions); } /* diff --git a/epan/dissectors/packet-lapsat.c b/epan/dissectors/packet-lapsat.c index 5527ef9246..dc0a40d133 100644 --- a/epan/dissectors/packet-lapsat.c +++ b/epan/dissectors/packet-lapsat.c @@ -244,19 +244,6 @@ static const fragment_items lapsat_frag_items = { "fragments" }; -static void -lapsat_defragment_init(void) -{ - reassembly_table_init(&lapsat_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -lapsat_defragment_cleanup(void) -{ - reassembly_table_destroy(&lapsat_reassembly_table); -} - /* * Main dissection functions @@ -764,8 +751,8 @@ proto_register_lapsat(void) lapsat_sapi_dissector_table = register_dissector_table("lapsat.sapi", "LAPSat SAPI", proto_lapsat, FT_UINT8, BASE_DEC); - register_init_routine (lapsat_defragment_init); - register_cleanup_routine (lapsat_defragment_cleanup); + reassembly_table_register(&lapsat_reassembly_table, + &addresses_reassembly_table_functions); } diff --git a/epan/dissectors/packet-lte-rrc.c b/epan/dissectors/packet-lte-rrc.c index 611a270295..4b2f506081 100644 --- a/epan/dissectors/packet-lte-rrc.c +++ b/epan/dissectors/packet-lte-rrc.c @@ -69896,10 +69896,6 @@ lte_rrc_init_protocol(void) { lte_rrc_etws_cmas_dcs_hash = g_hash_table_new(g_direct_hash, g_direct_equal); lte_rrc_system_info_value_changed_hash = g_hash_table_new(g_direct_hash, g_direct_equal); - reassembly_table_init(<e_rrc_sib11_reassembly_table, - &addresses_reassembly_table_functions); - reassembly_table_init(<e_rrc_sib12_reassembly_table, - &addresses_reassembly_table_functions); } static void @@ -69907,8 +69903,6 @@ lte_rrc_cleanup_protocol(void) { g_hash_table_destroy(lte_rrc_etws_cmas_dcs_hash); g_hash_table_destroy(lte_rrc_system_info_value_changed_hash); - reassembly_table_destroy(<e_rrc_sib11_reassembly_table); - reassembly_table_destroy(<e_rrc_sib12_reassembly_table); } /*--- proto_register_rrc -------------------------------------------*/ @@ -87890,7 +87884,7 @@ void proto_register_lte_rrc(void) { "T_n311_r13_01", HFILL }}, /*--- End of included file: packet-lte-rrc-hfarr.c ---*/ -#line 3216 "./asn1/lte-rrc/packet-lte-rrc-template.c" +#line 3210 "./asn1/lte-rrc/packet-lte-rrc-template.c" { &hf_lte_rrc_eutra_cap_feat_group_ind_1, { "Indicator 1", "lte-rrc.eutra_cap_feat_group_ind_1", @@ -90782,7 +90776,7 @@ void proto_register_lte_rrc(void) { &ett_lte_rrc_UE_TimersAndConstants_NB_r13, /*--- End of included file: packet-lte-rrc-ettarr.c ---*/ -#line 3943 "./asn1/lte-rrc/packet-lte-rrc-template.c" +#line 3937 "./asn1/lte-rrc/packet-lte-rrc-template.c" &ett_lte_rrc_featureGroupIndicators, &ett_lte_rrc_featureGroupIndRel9Add, @@ -90882,10 +90876,16 @@ void proto_register_lte_rrc(void) { /*--- End of included file: packet-lte-rrc-dis-reg.c ---*/ -#line 4017 "./asn1/lte-rrc/packet-lte-rrc-template.c" +#line 4011 "./asn1/lte-rrc/packet-lte-rrc-template.c" register_init_routine(<e_rrc_init_protocol); register_cleanup_routine(<e_rrc_cleanup_protocol); + + reassembly_table_register(<e_rrc_sib11_reassembly_table, + &addresses_reassembly_table_functions); + reassembly_table_register(<e_rrc_sib12_reassembly_table, + &addresses_reassembly_table_functions); + } diff --git a/epan/dissectors/packet-ltp.c b/epan/dissectors/packet-ltp.c index ca78606b3c..4b9abe48c8 100644 --- a/epan/dissectors/packet-ltp.c +++ b/epan/dissectors/packet-ltp.c @@ -825,12 +825,6 @@ dissect_ltp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) return tvb_captured_length(tvb); } -static void -ltp_defragment_init(void) { - reassembly_table_init(<p_reassembly_table, - &addresses_reassembly_table_functions); -} - /* Register the protocol with Wireshark */ void proto_register_ltp(void) @@ -1035,7 +1029,8 @@ proto_register_ltp(void) expert_ltp = expert_register_protocol(proto_ltp); expert_register_field_array(expert_ltp, ei, array_length(ei)); - register_init_routine(ltp_defragment_init); + reassembly_table_register(<p_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-mbim.c b/epan/dissectors/packet-mbim.c index e7bae38a5c..a2c1de67bf 100644 --- a/epan/dissectors/packet-mbim.c +++ b/epan/dissectors/packet-mbim.c @@ -6134,19 +6134,6 @@ dissect_mbim_decode_as(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void return 0; } -static void -mbim_reassembly_init(void) -{ - reassembly_table_init(&mbim_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -mbim_reassembly_cleanup(void) -{ - reassembly_table_destroy(&mbim_reassembly_table); -} - static guint mbim_uuid_hash(gconstpointer key) { @@ -9565,8 +9552,8 @@ proto_register_mbim(void) expert_mbim = expert_register_protocol(proto_mbim); expert_register_field_array(expert_mbim, ei, array_length(ei)); - register_init_routine(mbim_reassembly_init); - register_cleanup_routine(mbim_reassembly_cleanup); + reassembly_table_register(&mbim_reassembly_table, + &addresses_reassembly_table_functions); mbim_control_handle = register_dissector("mbim.control", dissect_mbim_control, proto_mbim); register_dissector("mbim.descriptor", dissect_mbim_descriptor, proto_mbim); diff --git a/epan/dissectors/packet-mp2t.c b/epan/dissectors/packet-mp2t.c index aed4a51136..48bf266d9b 100644 --- a/epan/dissectors/packet-mp2t.c +++ b/epan/dissectors/packet-mp2t.c @@ -1245,17 +1245,6 @@ heur_dissect_mp2t( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *da } -static void -mp2t_init(void) { - reassembly_table_init(&mp2t_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -mp2t_cleanup(void) { - reassembly_table_destroy(&mp2t_reassembly_table); -} - void proto_register_mp2t(void) { @@ -1540,8 +1529,8 @@ proto_register_mp2t(void) heur_subdissector_list = register_heur_dissector_list("mp2t.pid", proto_mp2t); /* Register init of processing of fragmented DEPI packets */ - register_init_routine(mp2t_init); - register_cleanup_routine(mp2t_cleanup); + reassembly_table_register(&mp2t_reassembly_table, + &addresses_reassembly_table_functions); } diff --git a/epan/dissectors/packet-mq.c b/epan/dissectors/packet-mq.c index 007c134a37..06ac0a3bf3 100644 --- a/epan/dissectors/packet-mq.c +++ b/epan/dissectors/packet-mq.c @@ -4098,17 +4098,6 @@ static gboolean dissect_mq_heur_ssl(tvbuff_t *tvb, packet_info *pinfo, proto_ return dissect_mq_heur(tvb, pinfo, tree, FALSE, app_handle); } -static void mq_init(void) -{ - reassembly_table_init(&mq_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void mq_cleanup(void) -{ - reassembly_table_destroy(&mq_reassembly_table); -} - void proto_register_mq(void) { static hf_register_info hf[] = @@ -4776,8 +4765,9 @@ void proto_register_mq(void) proto_register_subtree_array(ett, array_length(ett)); mq_heur_subdissector_list = register_heur_dissector_list("mq", proto_mq); - register_init_routine(mq_init); - register_cleanup_routine(mq_cleanup); + + reassembly_table_register(&mq_reassembly_table, + &addresses_reassembly_table_functions); mq_module = prefs_register_protocol(proto_mq, NULL); mq_handle = register_dissector("mq", dissect_mq_tcp, proto_mq); diff --git a/epan/dissectors/packet-mux27010.c b/epan/dissectors/packet-mux27010.c index 8ac557783f..3f8346bef2 100644 --- a/epan/dissectors/packet-mux27010.c +++ b/epan/dissectors/packet-mux27010.c @@ -1000,19 +1000,6 @@ dissect_mux27010(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data return tvb_captured_length(tvb); } -static void -mux27010_init(void) -{ - reassembly_table_init(&msg_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -mux27010_cleanup(void) -{ - reassembly_table_destroy(&msg_reassembly_table); -} - /*Register the protocol*/ void proto_register_mux27010 (void) @@ -1429,8 +1416,8 @@ proto_register_mux27010 (void) expert_mux27010 = expert_register_protocol(proto_mux27010); expert_register_field_array(expert_mux27010, ei, array_length(ei)); - register_init_routine(mux27010_init); - register_cleanup_routine(mux27010_cleanup); + reassembly_table_register(&msg_reassembly_table, + &addresses_reassembly_table_functions); } /*Initialize dissector*/ diff --git a/epan/dissectors/packet-ncp2222.inc b/epan/dissectors/packet-ncp2222.inc index 35887bc59d..d38a2ca4e3 100644 --- a/epan/dissectors/packet-ncp2222.inc +++ b/epan/dissectors/packet-ncp2222.inc @@ -2097,10 +2097,6 @@ ncp_init_protocol(void) { int i; - /* fragment */ - reassembly_table_init(&nds_reassembly_table, - &addresses_reassembly_table_functions); - for (i = 0; i < 99; i++) { frags[i].nds_frag = 0xfffffff0; } diff --git a/epan/dissectors/packet-ndmp.c b/epan/dissectors/packet-ndmp.c index 9fab54f7ec..684e18e74c 100644 --- a/epan/dissectors/packet-ndmp.c +++ b/epan/dissectors/packet-ndmp.c @@ -3416,19 +3416,6 @@ dissect_ndmp_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat return tvb_captured_length(tvb); } -static void -ndmp_init(void) -{ - reassembly_table_init(&ndmp_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -ndmp_cleanup(void) -{ - reassembly_table_destroy(&ndmp_reassembly_table); -} - void proto_register_ndmp(void) @@ -4259,8 +4246,8 @@ proto_register_ndmp(void) "Reassemble fragmented NDMP messages spanning multiple packets", "Whether the dissector should defragment NDMP messages spanning multiple packets.", &ndmp_defragment); - register_init_routine(ndmp_init); - register_cleanup_routine(ndmp_cleanup); + reassembly_table_register(&ndmp_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-ndps.c b/epan/dissectors/packet-ndps.c index 21bf94d77c..d2cac74317 100644 --- a/epan/dissectors/packet-ndps.c +++ b/epan/dissectors/packet-ndps.c @@ -4062,18 +4062,9 @@ ndps_hash(gconstpointer v) static void ndps_init_protocol(void) { - reassembly_table_init(&ndps_reassembly_table, - &addresses_reassembly_table_functions); ndps_req_hash = g_hash_table_new(ndps_hash, ndps_equal); } -static void -ndps_cleanup_protocol(void) -{ - reassembly_table_destroy(&ndps_reassembly_table); - /* ndps_req_hash is already destroyed by ndps_postseq_cleanup */ -} - /* After the sequential run, we don't need the ncp_request hash and keys * anymore; the lookups have already been done and the vital info * saved in the reply-packets' private_data in the frame_data struct. */ @@ -9496,7 +9487,8 @@ proto_register_ndps(void) &ndps_show_oids); register_init_routine(&ndps_init_protocol); - register_cleanup_routine(&ndps_cleanup_protocol); + reassembly_table_register(&ndps_reassembly_table, + &addresses_reassembly_table_functions); register_postseq_cleanup_routine(&ndps_postseq_cleanup); } diff --git a/epan/dissectors/packet-netbios.c b/epan/dissectors/packet-netbios.c index 42c3935b8f..9815879365 100644 --- a/epan/dissectors/packet-netbios.c +++ b/epan/dissectors/packet-netbios.c @@ -1240,19 +1240,6 @@ dissect_netbios(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data return tvb_captured_length(tvb); } -static void -netbios_init(void) -{ - reassembly_table_init(&netbios_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -netbios_cleanup(void) -{ - reassembly_table_destroy(&netbios_reassembly_table); -} - void proto_register_netbios(void) { @@ -1475,8 +1462,8 @@ proto_register_netbios(void) "Whether the NetBIOS dissector should defragment messages spanning multiple frames", &netbios_defragment); - register_init_routine(netbios_init); - register_cleanup_routine(netbios_cleanup); + reassembly_table_register(&netbios_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-obex.c b/epan/dissectors/packet-obex.c index 4b85d7b280..84ad857794 100644 --- a/epan/dissectors/packet-obex.c +++ b/epan/dissectors/packet-obex.c @@ -1115,19 +1115,6 @@ static gpointer obex_profile_value(packet_info *pinfo _U_) return NULL; } -static void -defragment_init(void) -{ - reassembly_table_init(&obex_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -defragment_cleanup(void) -{ - reassembly_table_destroy(&obex_reassembly_table); -} - static int is_ascii_str(const guint8 *str, int length) { @@ -3833,8 +3820,8 @@ proto_register_obex(void) expert_obex = expert_register_protocol(proto_obex); expert_register_field_array(expert_obex, ei, array_length(ei)); - register_init_routine(&defragment_init); - register_cleanup_routine(&defragment_cleanup); + reassembly_table_register(&obex_reassembly_table, + &addresses_reassembly_table_functions); register_decode_as(&obex_profile_da); diff --git a/epan/dissectors/packet-opensafety.c b/epan/dissectors/packet-opensafety.c index e60972d47f..65b410a38c 100644 --- a/epan/dissectors/packet-opensafety.c +++ b/epan/dissectors/packet-opensafety.c @@ -297,8 +297,6 @@ setup_dissector(void) { heur_dtbl_entry_t * heur_entry = NULL; - reassembly_table_init(&os_reassembly_table, &addresses_reassembly_table_functions); - heur_entry = find_heur_dissector_by_unique_short_name("opensafety_sercosiii"); if ( heur_entry != NULL ) heuristic_siii_dissection_enabled = heur_entry->enabled; @@ -308,7 +306,6 @@ static void cleanup_dissector(void) { local_scm_udid = NULL; - reassembly_table_destroy(&os_reassembly_table); } void proto_register_opensafety(void); @@ -2897,6 +2894,8 @@ proto_reg_handoff_opensafety(void) register_init_routine ( setup_dissector ); register_cleanup_routine ( cleanup_dissector ); + reassembly_table_register(&os_reassembly_table, &addresses_reassembly_table_functions); + /* registering frame end routine, to prevent a malformed dissection preventing * further dissector calls (see bug #6950) */ /* register_frame_end_routine(reset_dissector); */ diff --git a/epan/dissectors/packet-openvpn.c b/epan/dissectors/packet-openvpn.c index df7af4982e..3fb2ca98a0 100644 --- a/epan/dissectors/packet-openvpn.c +++ b/epan/dissectors/packet-openvpn.c @@ -145,19 +145,6 @@ static const fragment_items openvpn_frag_items = { "Message fragments" }; -static void -openvpn_reassemble_init(void) -{ - reassembly_table_init(&msg_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -openvpn_reassemble_cleanup(void) -{ - reassembly_table_destroy(&msg_reassembly_table); -} - /* we check the leading 4 byte of a suspected hmac for 0x00 bytes, if more than 1 byte out of the 4 provided contains 0x00, the hmac is considered not valid, which suggests that no tls auth is used. @@ -611,8 +598,8 @@ proto_register_openvpn(void) openvpn_udp_handle = register_dissector("openvpn.udp", dissect_openvpn_udp, proto_openvpn); openvpn_tcp_handle = register_dissector("openvpn.tcp", dissect_openvpn_tcp, proto_openvpn); - register_init_routine(&openvpn_reassemble_init); - register_cleanup_routine(&openvpn_reassemble_cleanup); + reassembly_table_register(&msg_reassembly_table, + &addresses_reassembly_table_functions); openvpn_module = prefs_register_protocol(proto_openvpn, NULL); diff --git a/epan/dissectors/packet-ositp.c b/epan/dissectors/packet-ositp.c index 7f9f5e19ef..9e5bd27606 100644 --- a/epan/dissectors/packet-ositp.c +++ b/epan/dissectors/packet-ositp.c @@ -2208,25 +2208,9 @@ static gint dissect_ositp_inactive(tvbuff_t *tvb, packet_info *pinfo, static void cotp_reassemble_init(void) { - /* - * XXX - this is a connection-oriented transport-layer protocol, - * so we should probably use more than just network-layer - * endpoint addresses to match segments together, but the functions - * in addresses_ports_reassembly_table_functions do matching based - * on port numbers, so they won't let us ensure that segments from - * different connections don't get assembled together. - */ - reassembly_table_init(&cotp_reassembly_table, - &addresses_reassembly_table_functions); cotp_dst_ref = 0; } -static void -cotp_reassemble_cleanup(void) -{ - reassembly_table_destroy(&cotp_reassembly_table); -} - void proto_register_cotp(void) { static hf_register_info hf[] = { @@ -2433,7 +2417,16 @@ void proto_register_cotp(void) register_dissector("ositp_inactive", dissect_ositp_inactive, proto_cotp); register_init_routine(cotp_reassemble_init); - register_cleanup_routine(cotp_reassemble_cleanup); + /* + * XXX - this is a connection-oriented transport-layer protocol, + * so we should probably use more than just network-layer + * endpoint addresses to match segments together, but the functions + * in addresses_ports_reassembly_table_functions do matching based + * on port numbers, so they won't let us ensure that segments from + * different connections don't get assembled together. + */ + reassembly_table_register(&cotp_reassembly_table, + &addresses_reassembly_table_functions); } void proto_register_cltp(void) diff --git a/epan/dissectors/packet-p_mul.c b/epan/dissectors/packet-p_mul.c index 84383625ec..8c45d101c6 100644 --- a/epan/dissectors/packet-p_mul.c +++ b/epan/dissectors/packet-p_mul.c @@ -1321,8 +1321,6 @@ static int dissect_p_mul (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, v static void p_mul_init_routine (void) { - reassembly_table_init (&p_mul_reassembly_table, - &addresses_reassembly_table_functions); message_id_offset = 0; p_mul_id_hash_table = g_hash_table_new_full (p_mul_id_hash, p_mul_id_hash_equal, NULL, (GDestroyNotify)p_mul_id_value_destroy); p_mul_package_data_list = NULL; @@ -1330,7 +1328,6 @@ static void p_mul_init_routine (void) static void p_mul_cleanup_routine (void) { - reassembly_table_destroy(&p_mul_reassembly_table); g_hash_table_destroy(p_mul_id_hash_table); g_list_foreach(p_mul_package_data_list, (GFunc)p_mul_package_data_destroy, NULL); g_list_free(p_mul_package_data_list); @@ -1590,6 +1587,8 @@ void proto_register_p_mul (void) expert_register_field_array(expert_p_mul, ei, array_length(ei)); register_init_routine (&p_mul_init_routine); register_cleanup_routine (&p_mul_cleanup_routine); + reassembly_table_register (&p_mul_reassembly_table, + &addresses_reassembly_table_functions); /* Register our configuration options */ p_mul_module = prefs_register_protocol (proto_p_mul, NULL); diff --git a/epan/dissectors/packet-pnrp.c b/epan/dissectors/packet-pnrp.c index 794e6ca3c5..d63a886641 100644 --- a/epan/dissectors/packet-pnrp.c +++ b/epan/dissectors/packet-pnrp.c @@ -1124,17 +1124,6 @@ static void dissect_signature_structure(tvbuff_t *tvb, gint offset, gint length, } } -static void pnrp_reassembly_init(void) -{ - reassembly_table_init(&pnrp_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void pnrp_reassembly_cleanup(void) -{ - reassembly_table_destroy(&pnrp_reassembly_table); -} - /* Register the protocol */ void proto_register_pnrp(void) { @@ -1477,8 +1466,8 @@ void proto_register_pnrp(void) proto_register_field_array(proto_pnrp,hf,array_length(hf)); proto_register_subtree_array (ett, array_length(ett)); - register_init_routine(pnrp_reassembly_init); - register_cleanup_routine(pnrp_reassembly_cleanup); + reassembly_table_register(&pnrp_reassembly_table, + &addresses_reassembly_table_functions); } /* Initialise the dissector */ diff --git a/epan/dissectors/packet-pop.c b/epan/dissectors/packet-pop.c index 9b9dd325b9..9f67558940 100644 --- a/epan/dissectors/packet-pop.c +++ b/epan/dissectors/packet-pop.c @@ -369,17 +369,6 @@ static gboolean response_is_continuation(const guchar *data) return TRUE; } -static void pop_data_reassemble_init (void) -{ - reassembly_table_init (&pop_data_reassembly_table, - &addresses_ports_reassembly_table_functions); -} - -static void pop_data_reassemble_cleanup (void) -{ - reassembly_table_destroy(&pop_data_reassembly_table); -} - void proto_register_pop(void) { @@ -464,8 +453,9 @@ proto_register_pop(void) pop_handle = register_dissector("pop", dissect_pop, proto_pop); proto_register_field_array(proto_pop, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); - register_init_routine (&pop_data_reassemble_init); - register_cleanup_routine (&pop_data_reassemble_cleanup); + + reassembly_table_register (&pop_data_reassembly_table, + &addresses_ports_reassembly_table_functions); /* Preferences */ pop_module = prefs_register_protocol(proto_pop, NULL); diff --git a/epan/dissectors/packet-ppi.c b/epan/dissectors/packet-ppi.c index b61f4a356f..97da27313d 100644 --- a/epan/dissectors/packet-ppi.c +++ b/epan/dissectors/packet-ppi.c @@ -1130,19 +1130,6 @@ dissect_ppi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) /* Establish our beachead */ -static void -ampdu_reassemble_init(void) -{ - reassembly_table_init(&du_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -ampdu_reassemble_cleanup(void) -{ - reassembly_table_destroy(&du_reassembly_table); -} - void proto_register_ppi(void) { @@ -1485,8 +1472,8 @@ proto_register_ppi(void) ppi_handle = register_dissector("ppi", dissect_ppi, proto_ppi); register_capture_dissector_table("ppi", "PPI"); - register_init_routine(ampdu_reassemble_init); - register_cleanup_routine(ampdu_reassemble_cleanup); + reassembly_table_register(&du_reassembly_table, + &addresses_reassembly_table_functions); /* Configuration options */ ppi_module = prefs_register_protocol(proto_ppi, NULL); diff --git a/epan/dissectors/packet-ppp.c b/epan/dissectors/packet-ppp.c index b708463bfd..09004210d9 100644 --- a/epan/dissectors/packet-ppp.c +++ b/epan/dissectors/packet-ppp.c @@ -6551,19 +6551,6 @@ proto_reg_handoff_ppp(void) dissector_add_uint("l2tp.pw_type", L2TPv3_PROTOCOL_PPP, ppp_hdlc_handle); } -static void -mp_reassemble_init(void) -{ - reassembly_table_init(&mp_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -mp_reassemble_cleanup(void) -{ - reassembly_table_destroy(&mp_reassembly_table); -} - void proto_register_mp(void) { @@ -6643,12 +6630,11 @@ proto_register_mp(void) module_t *mp_module; - proto_mp = proto_register_protocol("PPP Multilink Protocol", "PPP MP", - "mp"); - register_init_routine(&mp_reassemble_init); - register_cleanup_routine(&mp_reassemble_cleanup); + proto_mp = proto_register_protocol("PPP Multilink Protocol", "PPP MP", "mp"); proto_register_field_array(proto_mp, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + reassembly_table_register(&mp_reassembly_table, + &addresses_reassembly_table_functions); /* Register the preferences for the PPP multilink protocol */ mp_module = prefs_register_protocol(proto_mp, NULL); diff --git a/epan/dissectors/packet-q931.c b/epan/dissectors/packet-q931.c index e4e2a0e212..100614377e 100644 --- a/epan/dissectors/packet-q931.c +++ b/epan/dissectors/packet-q931.c @@ -3183,17 +3183,6 @@ dissect_q931_ie_cs7(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* d return tvb_captured_length(tvb); } -static void -q931_init(void) { - reassembly_table_init(&q931_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -q931_cleanup(void) { - reassembly_table_destroy(&q931_reassembly_table); -} - void proto_register_q931(void) { @@ -3958,8 +3947,9 @@ proto_register_q931(void) proto_register_subtree_array(ett, array_length(ett)); expert_q931 = expert_register_protocol(proto_q931); expert_register_field_array(expert_q931, ei, array_length(ei)); - register_init_routine(q931_init); - register_cleanup_routine(q931_cleanup); + + reassembly_table_register(&q931_reassembly_table, + &addresses_reassembly_table_functions); q931_handle = register_dissector("q931", dissect_q931, proto_q931); q931_tpkt_handle = register_dissector("q931.tpkt", dissect_q931_tpkt, proto_q931); diff --git a/epan/dissectors/packet-raknet.c b/epan/dissectors/packet-raknet.c index 401bd2acc6..520a7b95d9 100644 --- a/epan/dissectors/packet-raknet.c +++ b/epan/dissectors/packet-raknet.c @@ -216,22 +216,6 @@ void proto_register_raknet(void); void proto_reg_handoff_raknet(void); static proto_tree *init_raknet_offline_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint *offset); -/* - * Initialization. - */ -static void -raknet_reassemble_init(void) -{ - reassembly_table_init(&raknet_reassembly_table, - &addresses_ports_reassembly_table_functions); -} - -static void -raknet_reassemble_cleanup(void) -{ - reassembly_table_destroy(&raknet_reassembly_table); -} - /* * Called by dissectors for protocols that run atop RakNet/UDP. @@ -1975,10 +1959,10 @@ proto_register_raknet(void) proto_register_subtree_array(ett, array_length(ett)); /* - * Register init/cleanup routines. + * Register reassembly table. */ - register_init_routine(raknet_reassemble_init); - register_cleanup_routine(raknet_reassemble_cleanup); + reassembly_table_register(&raknet_reassembly_table, + &addresses_ports_reassembly_table_functions); /* * For internal use only diff --git a/epan/dissectors/packet-reload.c b/epan/dissectors/packet-reload.c index 79960d38ce..2eebdf735d 100644 --- a/epan/dissectors/packet-reload.c +++ b/epan/dissectors/packet-reload.c @@ -1027,19 +1027,6 @@ static const value_string applicationids[] = { */ static reassembly_table reload_reassembly_table; -static void -reload_defragment_init(void) -{ - reassembly_table_init(&reload_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -reload_defragment_cleanup(void) -{ - reassembly_table_destroy(&reload_reassembly_table); -} - static guint get_reload_message_length(packet_info *pinfo _U_, tvbuff_t *tvb, int offset) @@ -5930,8 +5917,8 @@ proto_register_reload(void) prefs_register_string_preference(reload_module, "topology_plugin", "topology plugin", "topology plugin defined in the overlay", &reload_topology_plugin); - register_init_routine(reload_defragment_init); - register_cleanup_routine(reload_defragment_cleanup); + reassembly_table_register(&reload_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-rpc.c b/epan/dissectors/packet-rpc.c index 2d48192d7e..be933d07d7 100644 --- a/epan/dissectors/packet-rpc.c +++ b/epan/dissectors/packet-rpc.c @@ -3918,14 +3918,11 @@ rpc_init_protocol(void) { rpc_reassembly_table = g_hash_table_new(rpc_fragment_hash, rpc_fragment_equal); - reassembly_table_init(&rpc_fragment_table, - &addresses_ports_reassembly_table_functions); } static void rpc_cleanup_protocol(void) { - reassembly_table_destroy(&rpc_fragment_table); g_hash_table_destroy(rpc_reassembly_table); } @@ -4376,6 +4373,8 @@ proto_register_rpc(void) expert_register_field_array(expert_rpc, ei, array_length(ei)); register_init_routine(&rpc_init_protocol); register_cleanup_routine(&rpc_cleanup_protocol); + reassembly_table_register(&rpc_fragment_table, + &addresses_ports_reassembly_table_functions); rpc_module = prefs_register_protocol(proto_rpc, NULL); prefs_register_bool_preference(rpc_module, "desegment_rpc_over_tcp", diff --git a/epan/dissectors/packet-rtp.c b/epan/dissectors/packet-rtp.c index 640ef2a24e..7b5c6eaf7d 100644 --- a/epan/dissectors/packet-rtp.c +++ b/epan/dissectors/packet-rtp.c @@ -907,20 +907,6 @@ rtp_dump_dyn_payload(rtp_dyn_payload_t *rtp_dyn_payload) { } #endif /* DEBUG_CONVERSATION */ -/* initialisation routine */ -static void -rtp_fragment_init(void) -{ - reassembly_table_init(&rtp_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -rtp_fragment_cleanup(void) -{ - reassembly_table_destroy(&rtp_reassembly_table); -} - /* A single hash table to hold pointers to all the rtp_dyn_payload_t's we create/destroy. This is necessary because we need to g_hash_table_destroy() them, either individually or all at once at the end of the wmem file scope. Since rtp_dyn_payload_free() removes them @@ -3822,8 +3808,9 @@ proto_register_rtp(void) 10, &rtp_rfc2198_pt); - register_init_routine(rtp_fragment_init); - register_cleanup_routine(rtp_fragment_cleanup); + reassembly_table_register(&rtp_reassembly_table, + &addresses_reassembly_table_functions); + register_init_routine(rtp_dyn_payloads_init); } diff --git a/epan/dissectors/packet-rtse.c b/epan/dissectors/packet-rtse.c index 11b7cc84a2..a9f5051cb3 100644 --- a/epan/dissectors/packet-rtse.c +++ b/epan/dissectors/packet-rtse.c @@ -854,17 +854,6 @@ dissect_rtse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* d return tvb_captured_length(tvb); } -static void rtse_reassemble_init (void) -{ - reassembly_table_init (&rtse_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void rtse_reassemble_cleanup(void) -{ - reassembly_table_destroy(&rtse_reassembly_table); -} - /*--- proto_register_rtse -------------------------------------------*/ void proto_register_rtse(void) { @@ -1009,7 +998,7 @@ void proto_register_rtse(void) { NULL, HFILL }}, /*--- End of included file: packet-rtse-hfarr.c ---*/ -#line 364 "./asn1/rtse/packet-rtse-template.c" +#line 353 "./asn1/rtse/packet-rtse-template.c" }; /* List of subtrees */ @@ -1031,7 +1020,7 @@ void proto_register_rtse(void) { &ett_rtse_CallingSSuserReference, /*--- End of included file: packet-rtse-ettarr.c ---*/ -#line 373 "./asn1/rtse/packet-rtse-template.c" +#line 362 "./asn1/rtse/packet-rtse-template.c" }; static ei_register_info ei[] = { @@ -1051,8 +1040,10 @@ void proto_register_rtse(void) { proto_register_subtree_array(ett, array_length(ett)); expert_rtse = expert_register_protocol(proto_rtse); expert_register_field_array(expert_rtse, ei, array_length(ei)); - register_init_routine (&rtse_reassemble_init); - register_cleanup_routine (&rtse_reassemble_cleanup); + + reassembly_table_register (&rtse_reassembly_table, + &addresses_reassembly_table_functions); + rtse_module = prefs_register_protocol_subtree("OSI", proto_rtse, NULL); prefs_register_bool_preference(rtse_module, "reassemble", diff --git a/epan/dissectors/packet-sccp.c b/epan/dissectors/packet-sccp.c index a2115b1cc5..c54cf77f8c 100644 --- a/epan/dissectors/packet-sccp.c +++ b/epan/dissectors/packet-sccp.c @@ -3519,14 +3519,6 @@ static void init_sccp(void) { next_assoc_id = 1; - reassembly_table_init (&sccp_xudt_msg_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -cleanup_sccp(void) -{ - reassembly_table_destroy(&sccp_xudt_msg_reassembly_table); } /* Register the protocol with Wireshark */ @@ -4162,7 +4154,8 @@ proto_register_sccp(void) &default_payload); register_init_routine(&init_sccp); - register_cleanup_routine(&cleanup_sccp); + reassembly_table_register(&sccp_xudt_msg_reassembly_table, + &addresses_reassembly_table_functions); assocs = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope()); diff --git a/epan/dissectors/packet-scsi.c b/epan/dissectors/packet-scsi.c index 1a790efad7..58033f9056 100644 --- a/epan/dissectors/packet-scsi.c +++ b/epan/dissectors/packet-scsi.c @@ -795,19 +795,6 @@ const int *cdb_control_fields[6] = { NULL }; -static void -scsi_defragment_init(void) -{ - reassembly_table_init(&scsi_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -scsi_defragment_cleanup(void) -{ - reassembly_table_destroy(&scsi_reassembly_table); -} - static const fragment_items scsi_frag_items = { &ett_scsi_fragment, &ett_scsi_fragments, @@ -7769,8 +7756,8 @@ proto_register_scsi(void) "Reassemble fragmented SCSI DATA IN/OUT transfers", "Whether fragmented SCSI DATA IN/OUT transfers should be reassembled", &scsi_defragment); - register_init_routine(scsi_defragment_init); - register_cleanup_routine(scsi_defragment_cleanup); + reassembly_table_register(&scsi_reassembly_table, + &addresses_reassembly_table_functions); register_srt_table(proto_scsi, NULL, 1, scsistat_packet, scsistat_init, scsistat_param); diff --git a/epan/dissectors/packet-selfm.c b/epan/dissectors/packet-selfm.c index 03f98785d3..632ffae08c 100644 --- a/epan/dissectors/packet-selfm.c +++ b/epan/dissectors/packet-selfm.c @@ -2698,22 +2698,6 @@ dissect_selfm_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat } /******************************************************************************************************/ -/* SEL Fast Message Dissector initialization */ -/******************************************************************************************************/ -static void -selfm_init(void) -{ - reassembly_table_init(&selfm_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -selfm_cleanup(void) -{ - reassembly_table_destroy(&selfm_reassembly_table); -} - -/******************************************************************************************************/ /* Register the protocol with Wireshark */ /******************************************************************************************************/ void proto_reg_handoff_selfm(void); @@ -3071,9 +3055,8 @@ proto_register_selfm(void) module_t *selfm_module; expert_module_t* expert_selfm; - /* Register protocol init routine */ - register_init_routine(&selfm_init); - register_cleanup_routine(&selfm_cleanup); + reassembly_table_register(&selfm_reassembly_table, + &addresses_reassembly_table_functions); /* Register the protocol name and description */ proto_selfm = proto_register_protocol("SEL Protocol", "SEL Protocol", "selfm"); diff --git a/epan/dissectors/packet-ses.c b/epan/dissectors/packet-ses.c index d3b86b89ce..f75db260a8 100644 --- a/epan/dissectors/packet-ses.c +++ b/epan/dissectors/packet-ses.c @@ -1083,17 +1083,6 @@ dissect_ses(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) return tvb_captured_length(tvb); } -static void ses_reassemble_init (void) -{ - reassembly_table_init (&ses_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void ses_reassemble_cleanup (void) -{ - reassembly_table_destroy(&ses_reassembly_table); -} - static gboolean dissect_ses_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void *data _U_) { @@ -1887,8 +1876,8 @@ proto_register_ses(void) expert_ses = expert_register_protocol(proto_ses); expert_register_field_array(expert_ses, ei, array_length(ei)); - register_init_routine (&ses_reassemble_init); - register_cleanup_routine (&ses_reassemble_cleanup); + reassembly_table_register (&ses_reassembly_table, + &addresses_reassembly_table_functions); ses_module = prefs_register_protocol(proto_ses, NULL); diff --git a/epan/dissectors/packet-smb-direct.c b/epan/dissectors/packet-smb-direct.c index 29ccbdd9d6..e12636fd0a 100644 --- a/epan/dissectors/packet-smb-direct.c +++ b/epan/dissectors/packet-smb-direct.c @@ -107,19 +107,6 @@ static gboolean smb_direct_reassemble = TRUE; static reassembly_table smb_direct_reassembly_table; static void -smb_direct_reassemble_init(void) -{ - reassembly_table_init(&smb_direct_reassembly_table, - &addresses_ports_reassembly_table_functions); -} - -static void -smb_direct_reassemble_cleanup(void) -{ - reassembly_table_destroy(&smb_direct_reassembly_table); -} - -static void dissect_smb_direct_payload(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 remaining_length) { @@ -699,8 +686,8 @@ void proto_register_smb_direct(void) "Reassemble SMB Direct fragments", "Whether the SMB Direct dissector should reassemble fragmented payloads", &smb_direct_reassemble); - register_init_routine(smb_direct_reassemble_init); - register_cleanup_routine(smb_direct_reassemble_cleanup); + reassembly_table_register(&smb_direct_reassembly_table, + &addresses_ports_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-smb-pipe.c b/epan/dissectors/packet-smb-pipe.c index 9762d2eace..ca16103599 100644 --- a/epan/dissectors/packet-smb-pipe.c +++ b/epan/dissectors/packet-smb-pipe.c @@ -3228,26 +3228,6 @@ static heur_dissector_list_t smb_transact_heur_subdissector_list; static reassembly_table dcerpc_reassembly_table; -static void -smb_dcerpc_reassembly_init(void) -{ - /* - * XXX - addresses_ports_reassembly_table_functions? - * Probably correct for SMB-over-NBT and SMB-over-TCP, - * as stuff from two different connections should - * probably not be combined, but what about other - * transports for SMB, e.g. NBF or Netware? - */ - reassembly_table_init(&dcerpc_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -smb_dcerpc_reassembly_cleanup(void) -{ - reassembly_table_destroy(&dcerpc_reassembly_table); -} - gboolean dissect_pipe_dcerpc(tvbuff_t *d_tvb, packet_info *pinfo, proto_tree *parent_tree, proto_tree *tree, guint32 fid, void *data) @@ -3913,8 +3893,15 @@ proto_register_smb_pipe(void) expert_register_field_array(expert_smb_pipe, ei, array_length(ei)); smb_transact_heur_subdissector_list = register_heur_dissector_list("smb_transact", proto_smb_pipe); - register_init_routine(smb_dcerpc_reassembly_init); - register_cleanup_routine(smb_dcerpc_reassembly_cleanup); + /* + * XXX - addresses_ports_reassembly_table_functions? + * Probably correct for SMB-over-NBT and SMB-over-TCP, + * as stuff from two different connections should + * probably not be combined, but what about other + * transports for SMB, e.g. NBF or Netware? + */ + reassembly_table_register(&dcerpc_reassembly_table, + &addresses_reassembly_table_functions); } /* diff --git a/epan/dissectors/packet-smb.c b/epan/dissectors/packet-smb.c index d6e9dd55d6..09cc57ab9b 100644 --- a/epan/dissectors/packet-smb.c +++ b/epan/dissectors/packet-smb.c @@ -1585,20 +1585,6 @@ gboolean smb_dcerpc_reassembly = TRUE; static reassembly_table smb_trans_reassembly_table; -static void -smb_trans_reassembly_init(void) -{ - /* - * XXX - addresses_ports_reassembly_table_functions? - * Probably correct for SMB-over-NBT and SMB-over-TCP, - * as stuff from two different connections should - * probably not be combined, but what about other - * transports for SMB, e.g. NBF or Netware? - */ - reassembly_table_init(&smb_trans_reassembly_table, - &addresses_reassembly_table_functions); -} - static fragment_head * smb_trans_defragment(proto_tree *tree _U_, packet_info *pinfo, tvbuff_t *tvb, int offset, guint count, guint pos, guint totlen, smb_info_t *si) @@ -21037,7 +21023,16 @@ proto_register_smb(void) "Whether the export object functionality will take the full path file name as file identifier", &eosmb_take_name_as_fid); - register_init_routine(smb_trans_reassembly_init); + /* + * XXX - addresses_ports_reassembly_table_functions? + * Probably correct for SMB-over-NBT and SMB-over-TCP, + * as stuff from two different connections should + * probably not be combined, but what about other + * transports for SMB, e.g. NBF or Netware? + */ + reassembly_table_register(&smb_trans_reassembly_table, + &addresses_reassembly_table_functions); + smb_tap = register_tap("smb"); smb_handle = register_dissector("smb", dissect_smb, proto_smb); diff --git a/epan/dissectors/packet-smb2.c b/epan/dissectors/packet-smb2.c index 75bb2498e3..8c298fc605 100644 --- a/epan/dissectors/packet-smb2.c +++ b/epan/dissectors/packet-smb2.c @@ -4872,20 +4872,6 @@ smb2_pipe_set_file_id(packet_info *pinfo, smb2_info_t *si) static gboolean smb2_pipe_reassembly = TRUE; static reassembly_table smb2_pipe_reassembly_table; -static void -smb2_pipe_reassembly_init(void) -{ - /* - * XXX - addresses_ports_reassembly_table_functions? - * Probably correct for SMB-over-NBT and SMB-over-TCP, - * as stuff from two different connections should - * probably not be combined, but what about other - * transports for SMB, e.g. NBF or Netware? - */ - reassembly_table_init(&smb2_pipe_reassembly_table, - &addresses_reassembly_table_functions); -} - static int dissect_file_data_smb2_pipe(tvbuff_t *raw_tvb, packet_info *pinfo, proto_tree *tree _U_, int offset, guint32 datalen, proto_tree *top_tree, void *data) { @@ -11070,7 +11056,15 @@ proto_register_smb2(void) "Whether the dissector should reassemble Named Pipes over SMB2 commands", &smb2_pipe_reassembly); smb2_pipe_subdissector_list = register_heur_dissector_list("smb2_pipe_subdissectors", proto_smb2); - register_init_routine(smb2_pipe_reassembly_init); + /* + * XXX - addresses_ports_reassembly_table_functions? + * Probably correct for SMB-over-NBT and SMB-over-TCP, + * as stuff from two different connections should + * probably not be combined, but what about other + * transports for SMB, e.g. NBF or Netware? + */ + reassembly_table_register(&smb2_pipe_reassembly_table, + &addresses_reassembly_table_functions); smb2_tap = register_tap("smb2"); smb2_eo_tap = register_tap("smb_eo"); /* SMB Export Object tap */ diff --git a/epan/dissectors/packet-smtp.c b/epan/dissectors/packet-smtp.c index 5d0889016c..6309794ba2 100644 --- a/epan/dissectors/packet-smtp.c +++ b/epan/dissectors/packet-smtp.c @@ -1151,19 +1151,6 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_ return tvb_captured_length(tvb); } -static void -smtp_data_reassemble_init (void) -{ - reassembly_table_init(&smtp_data_reassembly_table, - &addresses_ports_reassembly_table_functions); -} - -static void -smtp_data_reassemble_cleanup (void) -{ - reassembly_table_destroy(&smtp_data_reassembly_table); -} - /* Register all the bits needed by the filtering engine */ @@ -1287,8 +1274,8 @@ proto_register_smtp(void) proto_register_subtree_array(ett, array_length(ett)); expert_smtp = expert_register_protocol(proto_smtp); expert_register_field_array(expert_smtp, ei, array_length(ei)); - register_init_routine (&smtp_data_reassemble_init); - register_cleanup_routine (&smtp_data_reassemble_cleanup); + reassembly_table_register(&smtp_data_reassembly_table, + &addresses_ports_reassembly_table_functions); /* Allow dissector to find be found by name. */ smtp_handle = register_dissector("smtp", dissect_smtp, proto_smtp); diff --git a/epan/dissectors/packet-sna.c b/epan/dissectors/packet-sna.c index b4851916b1..5fa5f08749 100644 --- a/epan/dissectors/packet-sna.c +++ b/epan/dissectors/packet-sna.c @@ -2498,19 +2498,6 @@ dissect_sna_xid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data return tvb_captured_length(tvb); } -static void -sna_init(void) -{ - reassembly_table_init(&sna_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -sna_cleanup(void) -{ - reassembly_table_destroy(&sna_reassembly_table); -} - void proto_register_sna(void) @@ -3495,8 +3482,8 @@ proto_register_sna(void) "Whether fragmented BIUs should be reassembled", &sna_defragment); - register_init_routine(sna_init); - register_cleanup_routine(sna_cleanup); + reassembly_table_register(&sna_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-sndcp.c b/epan/dissectors/packet-sndcp.c index be6aa64130..9fc5997bec 100644 --- a/epan/dissectors/packet-sndcp.c +++ b/epan/dissectors/packet-sndcp.c @@ -104,18 +104,6 @@ static dissector_handle_t sndcp_handle; */ static reassembly_table npdu_reassembly_table; -static void -sndcp_defragment_init(void) -{ - reassembly_table_init(&npdu_reassembly_table, &addresses_reassembly_table_functions); -} - -static void -sndcp_defragment_cleanup(void) -{ - reassembly_table_destroy(&npdu_reassembly_table); -} - /* value strings */ static const value_string nsapi_t[] = { @@ -562,8 +550,7 @@ proto_register_sndcp(void) proto_register_field_array(proto_sndcp, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); sndcp_handle = register_dissector("sndcp", dissect_sndcp, proto_sndcp); - register_init_routine(sndcp_defragment_init); - register_cleanup_routine(sndcp_defragment_cleanup); + reassembly_table_register(&npdu_reassembly_table, &addresses_reassembly_table_functions); } /* If this dissector uses sub-dissector registration add a registration routine. diff --git a/epan/dissectors/packet-ssl.c b/epan/dissectors/packet-ssl.c index dbe56d89ee..02413fa409 100644 --- a/epan/dissectors/packet-ssl.c +++ b/epan/dissectors/packet-ssl.c @@ -352,8 +352,6 @@ ssl_init(void) ssl_common_init(&ssl_master_key_map, &ssl_decrypted_data, &ssl_compressed_data); - reassembly_table_init(&ssl_reassembly_table, - &addresses_ports_reassembly_table_functions); ssl_debug_flush(); /* for "Export SSL Session Keys" */ @@ -376,7 +374,6 @@ ssl_cleanup(void) wmem_destroy_stack(key_list_stack); key_list_stack = NULL; } - reassembly_table_destroy(&ssl_reassembly_table); ssl_common_cleanup(&ssl_master_key_map, &ssl_keylog_file, &ssl_decrypted_data, &ssl_compressed_data); @@ -4235,6 +4232,8 @@ proto_register_ssl(void) register_init_routine(ssl_init); register_cleanup_routine(ssl_cleanup); + reassembly_table_register(&ssl_reassembly_table, + &addresses_ports_reassembly_table_functions); register_decode_as(&ssl_da); /* XXX: this seems unused due to new "Follow SSL" method, remove? */ diff --git a/epan/dissectors/packet-stt.c b/epan/dissectors/packet-stt.c index cdd2ef5414..2e9fe84ada 100644 --- a/epan/dissectors/packet-stt.c +++ b/epan/dissectors/packet-stt.c @@ -167,19 +167,6 @@ static const fragment_items frag_items = { "STT segments" }; -static void -stt_segment_init(void) -{ - reassembly_table_init(&stt_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -stt_segment_cleanup(void) -{ - reassembly_table_destroy(&stt_reassembly_table); -} - static tvbuff_t * handle_segment(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 pkt_id, guint16 pkt_len, guint16 seg_off) @@ -922,8 +909,8 @@ proto_register_stt(void) "Whether to validate the STT checksum or not.", &pref_check_checksum); - register_init_routine(stt_segment_init); - register_cleanup_routine(stt_segment_cleanup); + reassembly_table_register(&stt_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-t38.c b/epan/dissectors/packet-t38.c index e0bdadb3d6..39b5583d07 100644 --- a/epan/dissectors/packet-t38.c +++ b/epan/dissectors/packet-t38.c @@ -241,18 +241,6 @@ static t38_packet_info t38_info_arr[MAX_T38_MESSAGES_IN_PACKET]; static int t38_info_current=0; static t38_packet_info *t38_info=NULL; -static void t38_defragment_init(void) -{ - /* Init reassembly table */ - reassembly_table_init(&data_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void t38_defragment_cleanup(void) -{ - reassembly_table_destroy(&data_reassembly_table); -} - /* Set up an T38 conversation */ void t38_add_address(packet_info *pinfo, @@ -979,7 +967,7 @@ static int dissect_UDPTLPacket_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pr /*--- End of included file: packet-t38-fn.c ---*/ -#line 394 "./asn1/t38/packet-t38-template.c" +#line 382 "./asn1/t38/packet-t38-template.c" /* initialize the tap t38_info and the conversation */ static void @@ -1320,7 +1308,7 @@ proto_register_t38(void) "OCTET_STRING", HFILL }}, /*--- End of included file: packet-t38-hfarr.c ---*/ -#line 658 "./asn1/t38/packet-t38-template.c" +#line 646 "./asn1/t38/packet-t38-template.c" { &hf_t38_setup, { "Stream setup", "t38.setup", FT_STRING, BASE_NONE, NULL, 0x0, "Stream setup, method and frame number", HFILL }}, @@ -1381,7 +1369,7 @@ proto_register_t38(void) &ett_t38_T_fec_data, /*--- End of included file: packet-t38-ettarr.c ---*/ -#line 705 "./asn1/t38/packet-t38-template.c" +#line 693 "./asn1/t38/packet-t38-template.c" &ett_t38_setup, &ett_data_fragment, &ett_data_fragments @@ -1401,9 +1389,9 @@ proto_register_t38(void) expert_register_field_array(expert_t38, ei, array_length(ei)); register_dissector("t38_udp", dissect_t38_udp, proto_t38); - /* Init reassemble tables for HDLC */ - register_init_routine(t38_defragment_init); - register_cleanup_routine(t38_defragment_cleanup); + /* Register reassemble tables for HDLC */ + reassembly_table_register(&data_reassembly_table, + &addresses_reassembly_table_functions); t38_tap = register_tap("t38"); diff --git a/epan/dissectors/packet-tcp.c b/epan/dissectors/packet-tcp.c index e6c5aa5209..2e075cef1d 100644 --- a/epan/dissectors/packet-tcp.c +++ b/epan/dissectors/packet-tcp.c @@ -6445,20 +6445,12 @@ static void tcp_init(void) { tcp_stream_count = 0; - reassembly_table_init(&tcp_reassembly_table, - &addresses_ports_reassembly_table_functions); /* MPTCP init */ mptcp_stream_count = 0; mptcp_tokens = wmem_tree_new(wmem_file_scope()); } -static void -tcp_cleanup(void) -{ - reassembly_table_destroy(&tcp_reassembly_table); -} - void proto_register_tcp(void) { @@ -7458,7 +7450,8 @@ proto_register_tcp(void) &tcp_display_process_info); register_init_routine(tcp_init); - register_cleanup_routine(tcp_cleanup); + reassembly_table_register(&tcp_reassembly_table, + &addresses_ports_reassembly_table_functions); register_decode_as(&tcp_da); diff --git a/epan/dissectors/packet-tds.c b/epan/dissectors/packet-tds.c index 7e92309b77..b51e51849d 100644 --- a/epan/dissectors/packet-tds.c +++ b/epan/dissectors/packet-tds.c @@ -4188,26 +4188,6 @@ dissect_tds_tcp_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void * } static void -tds_init(void) -{ - /* - * Initialize the reassembly table. - * - * XXX - should fragments be reassembled across multiple TCP - * connections? - */ - - reassembly_table_init(&tds_reassembly_table, - &addresses_ports_reassembly_table_functions); -} - -static void -tds_cleanup(void) -{ - reassembly_table_destroy(&tds_reassembly_table); -} - -static void version_convert( gchar *result, guint32 hexver ) { g_snprintf( result, ITEM_LABEL_LENGTH, "%d.%d.%d.%d", @@ -5620,8 +5600,15 @@ proto_register_tds(void) "Hint as to whether to decode TDS protocol as little-endian or big-endian. (TDS7/8 always decoded as little-endian)", &tds_little_endian, tds_endian_type_options, FALSE); - register_init_routine(tds_init); - register_cleanup_routine(tds_cleanup); + /* + * Initialize the reassembly table. + * + * XXX - should fragments be reassembled across multiple TCP + * connections? + */ + + reassembly_table_register(&tds_reassembly_table, + &addresses_ports_reassembly_table_functions); } /* If this dissector uses sub-dissector registration add a registration routine. diff --git a/epan/dissectors/packet-teamspeak2.c b/epan/dissectors/packet-teamspeak2.c index 8aa83d24a6..08ea5770ba 100644 --- a/epan/dissectors/packet-teamspeak2.c +++ b/epan/dissectors/packet-teamspeak2.c @@ -836,17 +836,6 @@ static void ts2_add_checked_crc32(proto_tree *tree, int hf_item, int hf_item_sta proto_tree_add_checksum(tree, tvb, offset, hf_item, hf_item_status, ei_item, pinfo, ocrc32, ENC_LITTLE_ENDIAN, PROTO_CHECKSUM_VERIFY); } -static void ts2_init(void) -{ - reassembly_table_init(&msg_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void ts2_cleanup(void) -{ - reassembly_table_destroy(&msg_reassembly_table); -} - /* * proto_register_ts2() * */ @@ -1227,8 +1216,8 @@ void proto_register_ts2(void) expert_ts2 = expert_register_protocol(proto_ts2); expert_register_field_array(expert_ts2, ei, array_length(ei)); - register_init_routine(ts2_init); - register_cleanup_routine(ts2_cleanup); + reassembly_table_register(&msg_reassembly_table, + &addresses_reassembly_table_functions); } /* diff --git a/epan/dissectors/packet-tipc.c b/epan/dissectors/packet-tipc.c index b77a0792e3..4fec69ded5 100644 --- a/epan/dissectors/packet-tipc.c +++ b/epan/dissectors/packet-tipc.c @@ -578,20 +578,6 @@ void proto_reg_handoff_tipc(void); static reassembly_table tipc_msg_reassembly_table; - -static void -tipc_defragment_init(void) -{ - reassembly_table_init(&tipc_msg_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -tipc_defragment_cleanup(void) -{ - reassembly_table_destroy(&tipc_msg_reassembly_table); -} - static gchar* tipc_addr_value_to_buf(guint tipc_address, gchar *buf, int buf_len) { @@ -3035,8 +3021,8 @@ proto_register_tipc(void) /* Register by name */ tipc_handle = register_dissector("tipc", dissect_tipc, proto_tipc); - register_init_routine(tipc_defragment_init); - register_cleanup_routine(tipc_defragment_cleanup); + reassembly_table_register(&tipc_msg_reassembly_table, + &addresses_reassembly_table_functions); /* Register configuration options */ tipc_module = prefs_register_protocol(proto_tipc, NULL); diff --git a/epan/dissectors/packet-usb-audio.c b/epan/dissectors/packet-usb-audio.c index 43fe1b479c..d975f8ba95 100644 --- a/epan/dissectors/packet-usb-audio.c +++ b/epan/dissectors/packet-usb-audio.c @@ -963,19 +963,6 @@ dissect_usb_audio_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tre return length; } -static void -midi_data_reassemble_init(void) -{ - reassembly_table_init(&midi_data_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -midi_data_reassemble_cleanup(void) -{ - reassembly_table_destroy(&midi_data_reassembly_table); -} - void proto_register_usb_audio(void) { @@ -1300,8 +1287,8 @@ proto_register_usb_audio(void) proto_register_subtree_array(usb_audio_subtrees, array_length(usb_audio_subtrees)); expert_usb_audio = expert_register_protocol(proto_usb_audio); expert_register_field_array(expert_usb_audio, ei, array_length(ei)); - register_init_routine(&midi_data_reassemble_init); - register_cleanup_routine(&midi_data_reassemble_cleanup); + reassembly_table_register(&midi_data_reassembly_table, + &addresses_reassembly_table_functions); usb_audio_bulk_handle = register_dissector("usbaudio", dissect_usb_audio_bulk, proto_usb_audio); } diff --git a/epan/dissectors/packet-wai.c b/epan/dissectors/packet-wai.c index f54ade66e9..98854bd384 100644 --- a/epan/dissectors/packet-wai.c +++ b/epan/dissectors/packet-wai.c @@ -966,17 +966,6 @@ Figure 18 from [ref:1] return tvb_captured_length(tvb); } -static void wai_reassemble_init (void) -{ - reassembly_table_init(&wai_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void wai_reassemble_cleanup (void) -{ - reassembly_table_destroy(&wai_reassembly_table); -} - void proto_register_wai(void) { @@ -1367,10 +1356,10 @@ proto_register_wai(void) }; proto_wai = proto_register_protocol("WAI Protocol", "WAI", "wai"); - register_init_routine(&wai_reassemble_init); - register_cleanup_routine(&wai_reassemble_cleanup); proto_register_field_array(proto_wai, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + reassembly_table_register(&wai_reassembly_table, + &addresses_reassembly_table_functions); wai_handle = register_dissector("wai", dissect_wai, proto_wai); } diff --git a/epan/dissectors/packet-wtp.c b/epan/dissectors/packet-wtp.c index 20639e74e9..b27ed653ca 100644 --- a/epan/dissectors/packet-wtp.c +++ b/epan/dissectors/packet-wtp.c @@ -228,19 +228,6 @@ static dissector_handle_t wtp_fromudp_handle; */ static reassembly_table wtp_reassembly_table; -static void -wtp_defragment_init(void) -{ - reassembly_table_init(&wtp_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -wtp_defragment_cleanup(void) -{ - reassembly_table_destroy(&wtp_reassembly_table); -} - /* * Extract some bitfields */ @@ -1063,8 +1050,8 @@ proto_register_wtp(void) register_dissector("wtp-wtls", dissect_wtp_fromwtls, proto_wtp); wtp_fromudp_handle = register_dissector("wtp-udp", dissect_wtp_fromudp, proto_wtp); - register_init_routine(wtp_defragment_init); - register_cleanup_routine(wtp_defragment_cleanup); + reassembly_table_register(&wtp_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-x25.c b/epan/dissectors/packet-x25.c index 5ad0d1d02a..4baac06e74 100644 --- a/epan/dissectors/packet-x25.c +++ b/epan/dissectors/packet-x25.c @@ -2031,19 +2031,6 @@ dissect_x25(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) return tvb_captured_length(tvb); } -static void -x25_reassemble_init(void) -{ - reassembly_table_init(&x25_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -x25_reassemble_cleanup(void) -{ - reassembly_table_destroy(&x25_reassembly_table); -} - void proto_register_x25(void) { @@ -2396,8 +2383,8 @@ proto_register_x25(void) "Reassemble fragmented X.25 packets", "Reassemble fragmented X.25 packets", &reassemble_x25); - register_init_routine(&x25_reassemble_init); - register_cleanup_routine(&x25_reassemble_cleanup); + reassembly_table_register(&x25_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/epan/dissectors/packet-zbee-aps.c b/epan/dissectors/packet-zbee-aps.c index 96522deb4b..4bb96e4fd2 100644 --- a/epan/dissectors/packet-zbee-aps.c +++ b/epan/dissectors/packet-zbee-aps.c @@ -63,8 +63,6 @@ static guint dissect_zbee_t2 (tvbuff_t *tvb, proto_tree *tree, /* Helper routine. */ static guint zbee_apf_transaction_len (tvbuff_t *tvb, guint offset, guint8 type); -static void proto_init_zbee_aps(void); -static void proto_cleanup_zbee_aps(void); void proto_register_zbee_aps(void); /******************** @@ -2153,9 +2151,9 @@ void proto_register_zbee_aps(void) zbee_aps_dissector_table = register_dissector_table("zbee.profile", "ZigBee Profile ID", proto_zbee_aps, FT_UINT16, BASE_HEX); zbee_aps_handle = register_dissector(ZBEE_PROTOABBREV_APS, dissect_zbee_aps, proto_zbee_aps); - /* Register the init routine. */ - register_init_routine(proto_init_zbee_aps); - register_cleanup_routine(proto_cleanup_zbee_aps); + /* Register reassembly table. */ + reassembly_table_register(&zbee_aps_reassembly_table, + &addresses_reassembly_table_functions); /* Register the ZigBee Application Framework protocol with Wireshark. */ proto_zbee_apf = proto_register_protocol("ZigBee Application Framework", "ZigBee APF", "zbee_apf"); @@ -2166,21 +2164,6 @@ void proto_register_zbee_aps(void) zbee_apf_handle = register_dissector("zbee_apf", dissect_zbee_apf, proto_zbee_apf); } /* proto_register_zbee_aps */ -/** - *Initializes the APS dissectors prior to beginning protocol - * -*/ -static void proto_init_zbee_aps(void) -{ - reassembly_table_init(&zbee_aps_reassembly_table, - &addresses_reassembly_table_functions); -} /* proto_init_zbee_aps */ - -static void proto_cleanup_zbee_aps(void) -{ - reassembly_table_destroy(&zbee_aps_reassembly_table); -} - /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * diff --git a/epan/epan.c b/epan/epan.c index d667bba165..a01e417c9a 100644 --- a/epan/epan.c +++ b/epan/epan.c @@ -171,6 +171,7 @@ epan_init(void (*register_all_protocols_func)(register_cb cb, gpointer client_da expert_init(); packet_init(); capture_dissector_init(); + reassembly_tables_init(); proto_init(register_all_protocols_func, register_all_handoffs_func, cb, client_data); packet_cache_proto_handles(); diff --git a/epan/reassemble.c b/epan/reassemble.c index b8a0a25bb6..8042ed5d8e 100644 --- a/epan/reassemble.c +++ b/epan/reassemble.c @@ -413,6 +413,31 @@ free_fragments(gpointer data, gpointer user_data _U_) g_slice_free(fragment_item, fd_head); } +typedef struct register_reassembly_table { + reassembly_table *table; + const reassembly_table_functions *funcs; +} register_reassembly_table_t; + +/* + * Register a reassembly table. + */ +void +reassembly_table_register(reassembly_table *table, + const reassembly_table_functions *funcs) +{ + register_reassembly_table_t* reg_table; + + DISSECTOR_ASSERT(table); + DISSECTOR_ASSERT(funcs); + + reg_table = g_new(register_reassembly_table_t,1); + + reg_table->table = table; + reg_table->funcs = funcs; + + reassembly_table_list = g_list_append(reassembly_table_list, reg_table); +} + /* * Initialize a reassembly table, with specified functions. */ @@ -465,8 +490,6 @@ reassembly_table_init(reassembly_table *table, table->reassembled_table = g_hash_table_new_full(reassembled_hash, reassembled_equal, reassembled_key_free, NULL); } - - reassembly_table_list = g_list_append(reassembly_table_list, table); } /* @@ -2791,9 +2814,43 @@ show_fragment_seq_tree(fragment_head *fd_head, const fragment_items *fit, } static void +reassembly_table_init_reg_table(gpointer p, gpointer user_data _U_) +{ + register_reassembly_table_t* reg_table = (register_reassembly_table_t*)p; + reassembly_table_init(reg_table->table, reg_table->funcs); +} + +static void +reassembly_table_init_reg_tables(void) +{ + g_list_foreach(reassembly_table_list, reassembly_table_init_reg_table, NULL); +} + +static void +reassembly_table_cleanup_reg_table(gpointer p, gpointer user_data _U_) +{ + register_reassembly_table_t* reg_table = (register_reassembly_table_t*)p; + reassembly_table_destroy(reg_table->table); +} + +static void +reassembly_table_cleanup_reg_tables(void) +{ + g_list_foreach(reassembly_table_list, reassembly_table_cleanup_reg_table, NULL); +} + +void reassembly_tables_init(void) +{ + register_init_routine(&reassembly_table_init_reg_tables); + register_cleanup_routine(&reassembly_table_cleanup_reg_tables); +} + +static void reassembly_table_free(gpointer p, gpointer user_data _U_) { - reassembly_table_destroy((reassembly_table*)p); + register_reassembly_table_t* reg_table = (register_reassembly_table_t*)p; + reassembly_table_destroy(reg_table->table); + g_free(reg_table); } void diff --git a/epan/reassemble.h b/epan/reassemble.h index 4b5bcffe64..51a200e3b6 100644 --- a/epan/reassemble.h +++ b/epan/reassemble.h @@ -168,6 +168,14 @@ WS_DLL_PUBLIC const reassembly_table_functions addresses_ports_reassembly_table_functions; /* keys have endpoint addresses and ports and an ID */ /* + * Register a reassembly table. By registering the table with epan, the creation and + * destruction of the table can be managed by epan and not the dissector. + */ +WS_DLL_PUBLIC void +reassembly_table_register(reassembly_table *table, + const reassembly_table_functions *funcs); + +/* * Initialize/destroy a reassembly table. * * init: If table doesn't exist: create table; @@ -455,6 +463,10 @@ WS_DLL_PUBLIC gboolean show_fragment_seq_tree(fragment_head *ipfd_head, const fragment_items *fit, proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, proto_item **fi); +/* Initialize internal structures + */ +extern void reassembly_tables_init(void); + /* Cleanup internal structures */ extern void diff --git a/plugins/docsis/packet-docsis.c b/plugins/docsis/packet-docsis.c index 01f44c384b..bc17b6eeb5 100644 --- a/plugins/docsis/packet-docsis.c +++ b/plugins/docsis/packet-docsis.c @@ -264,18 +264,6 @@ static guint16 frag_sid; */ static reassembly_table docsis_reassembly_table; -static void -docsis_defragment_init(void) -{ - reassembly_table_init(&docsis_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -docsis_defragment_cleanup(void) -{ - reassembly_table_destroy(&docsis_reassembly_table); -} static const fragment_items docsis_frag_items = { &ett_docsis_fragment, @@ -1158,8 +1146,8 @@ proto_register_docsis (void) #endif docsis_handle = register_dissector ("docsis", dissect_docsis, proto_docsis); - register_init_routine(docsis_defragment_init); - register_cleanup_routine(docsis_defragment_cleanup); + reassembly_table_register(&docsis_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/plugins/m2m/packet-m2m.c b/plugins/m2m/packet-m2m.c index 022b4f537a..2c7b5c0fc1 100644 --- a/plugins/m2m/packet-m2m.c +++ b/plugins/m2m/packet-m2m.c @@ -155,20 +155,6 @@ static gint hf_m2m_phy_attributes = -1; static expert_field ei_m2m_unexpected_length = EI_INIT; -/* Register M2M defrag table init routine. */ -static void -m2m_defragment_init(void) -{ - reassembly_table_init(&pdu_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -m2m_defragment_cleanup(void) -{ - reassembly_table_destroy(&pdu_reassembly_table); -} - /* WiMax MAC to MAC protocol dissector */ static int dissect_m2m(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) @@ -799,9 +785,9 @@ void proto_register_m2m(void) expert_m2m = expert_register_protocol(proto_m2m); expert_register_field_array(expert_m2m, ei, array_length(ei)); - /* Register the PDU fragment table init routine */ - register_init_routine(m2m_defragment_init); - register_cleanup_routine(m2m_defragment_cleanup); + /* Register reassembly table */ + reassembly_table_register(&pdu_reassembly_table, + &addresses_reassembly_table_functions); } /* Register Wimax Mac to Mac Protocol handler */ diff --git a/plugins/opcua/opcua.c b/plugins/opcua/opcua.c index 1341b96882..08f1051704 100644 --- a/plugins/opcua/opcua.c +++ b/plugins/opcua/opcua.c @@ -355,19 +355,6 @@ static int dissect_opcua(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo return tvb_reported_length(tvb); } -static void -init_opcua(void) -{ - reassembly_table_init(&opcua_reassembly_table, - &addresses_reassembly_table_functions); -} - -static void -cleanup_opcua(void) -{ - reassembly_table_destroy(&opcua_reassembly_table); -} - /** plugin entry functions. * This registers the OpcUa protocol. */ @@ -412,8 +399,8 @@ void proto_register_opcua(void) proto_register_subtree_array(ett, array_length(ett)); proto_register_field_array(proto_opcua, hf, array_length(hf)); - register_init_routine(&init_opcua); - register_cleanup_routine(&cleanup_opcua); + reassembly_table_register(&opcua_reassembly_table, + &addresses_reassembly_table_functions); } void proto_reg_handoff_opcua(void) diff --git a/plugins/profinet/packet-pn-rt.c b/plugins/profinet/packet-pn-rt.c index 6ee55eb67c..2bee4619b0 100644 --- a/plugins/profinet/packet-pn-rt.c +++ b/plugins/profinet/packet-pn-rt.c @@ -353,8 +353,6 @@ pnio_defragment_init(void) guint32 i; for (i=0; i < 16; i++) /* init the reasemble help array */ start_frag_OR_ID[i] = 0; - reassembly_table_init(&pdu_reassembly_table, - &addresses_reassembly_table_functions); reasembled_frag_table = g_hash_table_new(NULL, NULL); } @@ -362,7 +360,6 @@ static void pnio_defragment_cleanup(void) { g_hash_table_destroy(reasembled_frag_table); - reassembly_table_destroy(&pdu_reassembly_table); } /* possibly dissect a FRAG_PDU related PN-RT packet */ @@ -991,6 +988,8 @@ proto_register_pn_rt(void) init_pn (proto_pn_rt); register_init_routine(pnio_defragment_init); register_cleanup_routine(pnio_defragment_cleanup); + reassembly_table_register(&pdu_reassembly_table, + &addresses_reassembly_table_functions); } diff --git a/plugins/wimax/mac_hd_generic_decoder.c b/plugins/wimax/mac_hd_generic_decoder.c index 04e2c82eaf..2f5a7f9b92 100644 --- a/plugins/wimax/mac_hd_generic_decoder.c +++ b/plugins/wimax/mac_hd_generic_decoder.c @@ -612,9 +612,6 @@ static void wimax_defragment_init(void) { gint i; - reassembly_table_init(&payload_reassembly_table, - &addresses_reassembly_table_functions); - /* Init fragmentation variables. */ for (i = 0; i < MAX_CID; i++) { @@ -636,7 +633,6 @@ static void wimax_defragment_init(void) static void wimax_defragment_cleanup(void) { - reassembly_table_destroy(&payload_reassembly_table); g_free(cid_adj_array); cid_adj_array = NULL; g_free(frag_num_array); @@ -2291,6 +2287,8 @@ void proto_register_mac_header_generic(void) /* Register the payload fragment table init routine */ register_init_routine(wimax_defragment_init); register_cleanup_routine(wimax_defragment_cleanup); + reassembly_table_register(&payload_reassembly_table, + &addresses_reassembly_table_functions); } void diff --git a/tools/ncp2222.py b/tools/ncp2222.py index 0ee6a4dcbc..3eb91bc03e 100755 --- a/tools/ncp2222.py +++ b/tools/ncp2222.py @@ -8527,6 +8527,10 @@ proto_register_ncp2222(void) expert_ncp = expert_register_protocol(proto_ncp); expert_register_field_array(expert_ncp, ei, array_length(ei)); register_init_routine(&ncp_init_protocol); + /* fragment */ + reassembly_table_register(&nds_reassembly_table, + &addresses_reassembly_table_functions); + register_postseq_cleanup_routine(&ncp_postseq_cleanup);""") # End of proto_register_ncp2222() |