summaryrefslogtreecommitdiff
path: root/epan
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2017-01-28 19:53:36 -0500
committerMichael Mann <mmann78@netscape.net>2017-01-29 13:29:04 +0000
commitaf54b292e60fcdd8d03ec583e2b46c9c51f259a5 (patch)
tree67a4b61fd3e71ada67f2c27092a6849424759263 /epan
parented8ac81497c890bc82f161be727c0bb5285dcf12 (diff)
downloadwireshark-af54b292e60fcdd8d03ec583e2b46c9c51f259a5.tar.gz
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>
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/asn1/idmp/packet-idmp-template.c11
-rw-r--r--epan/dissectors/asn1/lte-rrc/packet-lte-rrc-template.c12
-rw-r--r--epan/dissectors/asn1/rtse/packet-rtse-template.c17
-rw-r--r--epan/dissectors/asn1/t38/packet-t38-template.c18
-rw-r--r--epan/dissectors/packet-6lowpan.c15
-rw-r--r--epan/dissectors/packet-afs.c7
-rw-r--r--epan/dissectors/packet-atalk.c6
-rw-r--r--epan/dissectors/packet-bacapp.c18
-rw-r--r--epan/dissectors/packet-batadv.c15
-rw-r--r--epan/dissectors/packet-ber.c14
-rw-r--r--epan/dissectors/packet-btl2cap.c18
-rw-r--r--epan/dissectors/packet-btle.c17
-rw-r--r--epan/dissectors/packet-capwap.c15
-rw-r--r--epan/dissectors/packet-cell_broadcast.c17
-rw-r--r--epan/dissectors/packet-clnp.c18
-rw-r--r--epan/dissectors/packet-dcerpc.c26
-rw-r--r--epan/dissectors/packet-dcm.c9
-rw-r--r--epan/dissectors/packet-dcp-etsi.c21
-rw-r--r--epan/dissectors/packet-dnp.c6
-rw-r--r--epan/dissectors/packet-dtls.c4
-rw-r--r--epan/dissectors/packet-dtn.c15
-rw-r--r--epan/dissectors/packet-dvbci.c17
-rw-r--r--epan/dissectors/packet-eap.c18
-rw-r--r--epan/dissectors/packet-epl.c6
-rw-r--r--epan/dissectors/packet-fc.c5
-rw-r--r--epan/dissectors/packet-giop.c7
-rw-r--r--epan/dissectors/packet-gsm_cbch.c18
-rw-r--r--epan/dissectors/packet-gsm_sms.c7
-rw-r--r--epan/dissectors/packet-gsm_sms_ud.c18
-rw-r--r--epan/dissectors/packet-gssapi.c19
-rw-r--r--epan/dissectors/packet-hci_usb.c2
-rw-r--r--epan/dissectors/packet-iax2.c7
-rw-r--r--epan/dissectors/packet-idmp.c15
-rw-r--r--epan/dissectors/packet-ieee80211.c27
-rw-r--r--epan/dissectors/packet-ip.c17
-rw-r--r--epan/dissectors/packet-ipv6.c17
-rw-r--r--epan/dissectors/packet-isakmp.c11
-rw-r--r--epan/dissectors/packet-iso15765.c5
-rw-r--r--epan/dissectors/packet-isup.c19
-rw-r--r--epan/dissectors/packet-lapdm.c17
-rw-r--r--epan/dissectors/packet-lapsat.c17
-rw-r--r--epan/dissectors/packet-lte-rrc.c18
-rw-r--r--epan/dissectors/packet-ltp.c9
-rw-r--r--epan/dissectors/packet-mbim.c17
-rw-r--r--epan/dissectors/packet-mp2t.c15
-rw-r--r--epan/dissectors/packet-mq.c16
-rw-r--r--epan/dissectors/packet-mux27010.c17
-rw-r--r--epan/dissectors/packet-ncp2222.inc4
-rw-r--r--epan/dissectors/packet-ndmp.c17
-rw-r--r--epan/dissectors/packet-ndps.c12
-rw-r--r--epan/dissectors/packet-netbios.c17
-rw-r--r--epan/dissectors/packet-obex.c17
-rw-r--r--epan/dissectors/packet-opensafety.c5
-rw-r--r--epan/dissectors/packet-openvpn.c17
-rw-r--r--epan/dissectors/packet-ositp.c27
-rw-r--r--epan/dissectors/packet-p_mul.c5
-rw-r--r--epan/dissectors/packet-pnrp.c15
-rw-r--r--epan/dissectors/packet-pop.c16
-rw-r--r--epan/dissectors/packet-ppi.c17
-rw-r--r--epan/dissectors/packet-ppp.c20
-rw-r--r--epan/dissectors/packet-q931.c16
-rw-r--r--epan/dissectors/packet-raknet.c22
-rw-r--r--epan/dissectors/packet-reload.c17
-rw-r--r--epan/dissectors/packet-rpc.c5
-rw-r--r--epan/dissectors/packet-rtp.c19
-rw-r--r--epan/dissectors/packet-rtse.c21
-rw-r--r--epan/dissectors/packet-sccp.c11
-rw-r--r--epan/dissectors/packet-scsi.c17
-rw-r--r--epan/dissectors/packet-selfm.c21
-rw-r--r--epan/dissectors/packet-ses.c15
-rw-r--r--epan/dissectors/packet-smb-direct.c17
-rw-r--r--epan/dissectors/packet-smb-pipe.c31
-rw-r--r--epan/dissectors/packet-smb.c25
-rw-r--r--epan/dissectors/packet-smb2.c24
-rw-r--r--epan/dissectors/packet-smtp.c17
-rw-r--r--epan/dissectors/packet-sna.c17
-rw-r--r--epan/dissectors/packet-sndcp.c15
-rw-r--r--epan/dissectors/packet-ssl.c5
-rw-r--r--epan/dissectors/packet-stt.c17
-rw-r--r--epan/dissectors/packet-t38.c24
-rw-r--r--epan/dissectors/packet-tcp.c11
-rw-r--r--epan/dissectors/packet-tds.c31
-rw-r--r--epan/dissectors/packet-teamspeak2.c15
-rw-r--r--epan/dissectors/packet-tipc.c18
-rw-r--r--epan/dissectors/packet-usb-audio.c17
-rw-r--r--epan/dissectors/packet-wai.c15
-rw-r--r--epan/dissectors/packet-wtp.c17
-rw-r--r--epan/dissectors/packet-x25.c17
-rw-r--r--epan/dissectors/packet-zbee-aps.c23
-rw-r--r--epan/epan.c1
-rw-r--r--epan/reassemble.c63
-rw-r--r--epan/reassemble.h12
92 files changed, 354 insertions, 1091 deletions
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(&lte_rrc_sib11_reassembly_table,
- &addresses_reassembly_table_functions);
- reassembly_table_init(&lte_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(&lte_rrc_sib11_reassembly_table);
- reassembly_table_destroy(&lte_rrc_sib12_reassembly_table);
}
/*--- proto_register_rrc -------------------------------------------*/
@@ -4017,6 +4011,12 @@ void proto_register_lte_rrc(void) {
register_init_routine(&lte_rrc_init_protocol);
register_cleanup_routine(&lte_rrc_cleanup_protocol);
+
+ reassembly_table_register(&lte_rrc_sib11_reassembly_table,
+ &addresses_reassembly_table_functions);
+ reassembly_table_register(&lte_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(&lte_rrc_sib11_reassembly_table,
- &addresses_reassembly_table_functions);
- reassembly_table_init(&lte_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(&lte_rrc_sib11_reassembly_table);
- reassembly_table_destroy(&lte_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(&lte_rrc_init_protocol);
register_cleanup_routine(&lte_rrc_cleanup_protocol);
+
+ reassembly_table_register(&lte_rrc_sib11_reassembly_table,
+ &addresses_reassembly_table_functions);
+ reassembly_table_register(&lte_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(&ltp_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(&ltp_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(&ampdu_reassembly_table,
- &addresses_reassembly_table_functions);
-}
-
-static void
-ampdu_reassemble_cleanup(void)
-{
- reassembly_table_destroy(&ampdu_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(&ampdu_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