diff options
65 files changed, 241 insertions, 87 deletions
diff --git a/epan/dissectors/packet-6lowpan.c b/epan/dissectors/packet-6lowpan.c index 8247ae466f..821bae0b4b 100644 --- a/epan/dissectors/packet-6lowpan.c +++ b/epan/dissectors/packet-6lowpan.c @@ -407,6 +407,8 @@ static const fragment_items lowpan_frag_items = { &hf_6lowpan_reassembled_in, /* Reassembled length field */ &hf_6lowpan_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "6LoWPAN fragments" }; @@ -496,7 +498,7 @@ static lowpan_context_data *lowpan_context_find(guint8 cid, guint16 pan); * NAME * lowpan_pfxcpy * DESCRIPTION - * A version of memcpy that takes a length in bits. If the + * A version of memcpy that takes a length in bits. If the * length is not byte-aligned, the final byte will be * manipulated so that only the desired number of bits are * copied. @@ -545,7 +547,7 @@ lowpan_context_hash(gconstpointer key) * PARAMETERS * key ; Pointer to a lowpan_context_key type. * RETURNS - * gboolean ; + * gboolean ; *--------------------------------------------------------------- */ static gboolean @@ -564,7 +566,7 @@ lowpan_context_equal(gconstpointer a, gconstpointer b) * cid ; Context identifier. * pan ; PAN identifier. * RETURNS - * lowpan_context_data *; + * lowpan_context_data *; *--------------------------------------------------------------- */ static lowpan_context_data * @@ -572,23 +574,23 @@ lowpan_context_find(guint8 cid, guint16 pan) { lowpan_context_key key; lowpan_context_data *data; - + /* Check for the internal link-local context. */ if (cid == LOWPAN_CONTEXT_LINK_LOCAL) return &lowpan_context_local; - + /* Lookup the context from the table. */ key.pan = pan; key.cid = cid; data = g_hash_table_lookup(lowpan_context_table, &key); if (data) return data; - + /* If we didn't find a match, try again with the broadcast PAN. */ if (pan != IEEE802154_BCAST_PAN) { key.pan = IEEE802154_BCAST_PAN; data = g_hash_table_lookup(lowpan_context_table, &key); if (data) return data; } - + /* If the lookup failed, return the default context (::/0) */ return &lowpan_context_default; } /* lowpan_context_find */ @@ -605,7 +607,7 @@ lowpan_context_find(guint8 cid, guint16 pan) * prefix ; Compression prefix. * frame ; Frame number. * RETURNS - * void ; + * void ; *--------------------------------------------------------------- */ void @@ -615,11 +617,11 @@ lowpan_context_insert(guint8 cid, guint16 pan, guint8 plen, struct e_in6_addr *p lowpan_context_data *data; gpointer pkey; gpointer pdata; - + /* Sanity! */ if (plen > 128) return; if (!prefix) return; - + /* Search the context table for an existing entry. */ key.pan = pan; key.cid = cid; @@ -634,7 +636,7 @@ lowpan_context_insert(guint8 cid, guint16 pan, guint8 plen, struct e_in6_addr *p else { pkey = se_memdup(&key, sizeof(key)); } - + /* Create a new context */ data = se_alloc(sizeof(lowpan_context_data)); data->frame = frame; @@ -689,7 +691,7 @@ static gboolean lowpan_dlsrc_to_ifcid(packet_info *pinfo, guint8 *ifcid) { ieee802154_hints_t *hints; - + /* Check the link-layer address field. */ if (pinfo->dl_src.type == AT_EUI64) { memcpy(ifcid, pinfo->dl_src.data, LOWPAN_IFC_ID_LEN); @@ -697,7 +699,7 @@ lowpan_dlsrc_to_ifcid(packet_info *pinfo, guint8 *ifcid) ifcid[0] ^= 0x02; return TRUE; } - + /* Lookup the IEEE 802.15.4 addressing hints. */ hints = (ieee802154_hints_t *)p_get_proto_data(pinfo->fd, proto_get_id_by_filter_name(IEEE802154_PROTOABBREV_WPAN)); @@ -736,7 +738,7 @@ lowpan_dldst_to_ifcid(packet_info *pinfo, guint8 *ifcid) ifcid[0] ^= 0x02; return TRUE; } - + /* Lookup the IEEE 802.15.4 addressing hints. */ hints = (ieee802154_hints_t *)p_get_proto_data(pinfo->fd, proto_get_id_by_filter_name(IEEE802154_PROTOABBREV_WPAN)); @@ -1369,7 +1371,7 @@ dissect_6lowpan_iphc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint d tvbuff_t * ipv6_tvb; /* Next header chain */ struct lowpan_nhdr *nhdr_list; - + /* Lookup the IEEE 802.15.4 addressing hints. */ hints = (ieee802154_hints_t *)p_get_proto_data(pinfo->fd, proto_get_id_by_filter_name(IEEE802154_PROTOABBREV_WPAN)); @@ -1431,7 +1433,7 @@ dissect_6lowpan_iphc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint d /* Lookup the contexts. */ /* * Don't display their origin until after we decompress the address in case - * the address modes indicate that we should use a different context. + * the address modes indicate that we should use a different context. */ sctx = lowpan_context_find(iphc_sci, hint_panid); dctx = lowpan_context_find(iphc_dci, hint_panid); @@ -2765,7 +2767,7 @@ proto_register_6lowpan(void) */ pref_name = g_strdup_printf("context%d", i); pref_title = g_strdup_printf("Context %d", i); - prefs_register_string_preference(prefs_module, pref_name, pref_title, + prefs_register_string_preference(prefs_module, pref_name, pref_title, "IPv6 prefix to use for stateful address decompression.", &lowpan_context_prefs[i]); } @@ -2788,18 +2790,18 @@ proto_init_6lowpan(void) /* Initialize the fragment reassembly table. */ fragment_table_init(&lowpan_fragment_table); reassembled_table_init(&lowpan_reassembled_table); - + /* Initialize the context table. */ if (lowpan_context_table) g_hash_table_destroy(lowpan_context_table); lowpan_context_table = g_hash_table_new(lowpan_context_hash, lowpan_context_equal); - - + + /* Initialize the link-local context. */ lowpan_context_local.frame = 0; lowpan_context_local.plen = LOWPAN_CONTEXT_LINK_LOCAL_BITS; memcpy(&lowpan_context_local.prefix, lowpan_llprefix, sizeof(lowpan_llprefix)); - + /* Reload static contexts from our preferences. */ prefs_6lowpan_apply(); } /* proto_init_6lowpan */ diff --git a/epan/dissectors/packet-atalk.c b/epan/dissectors/packet-atalk.c index 7a871fe699..48791a9ca9 100644 --- a/epan/dissectors/packet-atalk.c +++ b/epan/dissectors/packet-atalk.c @@ -353,6 +353,8 @@ static const fragment_items atp_frag_items = { &hf_atp_segment_count, &hf_atp_reassembled_in, &hf_atp_reassembled_length, + /* Reassembled data field */ + NULL, "segments" }; diff --git a/epan/dissectors/packet-bacapp.c b/epan/dissectors/packet-bacapp.c index 2445f38345..97d89af8ed 100644 --- a/epan/dissectors/packet-bacapp.c +++ b/epan/dissectors/packet-bacapp.c @@ -4698,6 +4698,8 @@ static const fragment_items msg_frag_items = { &hf_msg_reassembled_in, /* Reassembled length field */ &hf_msg_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Message fragments" }; diff --git a/epan/dissectors/packet-batadv.c b/epan/dissectors/packet-batadv.c index 81b1df3e53..3cf7b39358 100644 --- a/epan/dissectors/packet-batadv.c +++ b/epan/dissectors/packet-batadv.c @@ -513,6 +513,8 @@ static const fragment_items msg_frag_items = { /* Reassembled in field */ &hf_msg_reassembled_in, &hf_msg_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Message fragments" }; diff --git a/epan/dissectors/packet-ber.c b/epan/dissectors/packet-ber.c index 179a513ff4..f695d1aff1 100644 --- a/epan/dissectors/packet-ber.c +++ b/epan/dissectors/packet-ber.c @@ -282,6 +282,8 @@ static const fragment_items octet_string_frag_items = { &hf_ber_reassembled_in, /* Reassembled length field */ &hf_ber_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "OCTET STRING fragments" }; diff --git a/epan/dissectors/packet-btobex.c b/epan/dissectors/packet-btobex.c index 7d40fca593..cef0752029 100644 --- a/epan/dissectors/packet-btobex.c +++ b/epan/dissectors/packet-btobex.c @@ -88,6 +88,8 @@ static const fragment_items btobex_frag_items = { &hf_btobex_fragment_count, &hf_btobex_reassembled_in, &hf_btobex_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; diff --git a/epan/dissectors/packet-capwap.c b/epan/dissectors/packet-capwap.c index ba9dc6ae7a..96fbdf68f5 100644 --- a/epan/dissectors/packet-capwap.c +++ b/epan/dissectors/packet-capwap.c @@ -281,6 +281,8 @@ static const fragment_items capwap_frag_items = { &hf_msg_reassembled_in, /* Reassembled length field */ &hf_msg_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Message fragments" }; @@ -1375,7 +1377,7 @@ dissect_capwap_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (global_capwap_reassemble && fragment_is) { const int len_rem = tvb_length_remaining(tvb, offset); - if (len_rem <= 0) + if (len_rem <= 0) return offset; pinfo->fragmented = TRUE; diff --git a/epan/dissectors/packet-cell_broadcast.c b/epan/dissectors/packet-cell_broadcast.c index 95797fb15c..6d38f34d07 100644 --- a/epan/dissectors/packet-cell_broadcast.c +++ b/epan/dissectors/packet-cell_broadcast.c @@ -157,6 +157,8 @@ static const fragment_items gsm_page_items = { &hf_gsm_cbs_page_count, &hf_gsm_cbs_message_reassembled_in, &hf_gsm_cbs_message_reassembled_length, + /* Reassembled data field */ + NULL, "pages" }; diff --git a/epan/dissectors/packet-clnp.c b/epan/dissectors/packet-clnp.c index b9d0ec6ca8..66c5bec8d3 100644 --- a/epan/dissectors/packet-clnp.c +++ b/epan/dissectors/packet-clnp.c @@ -84,6 +84,8 @@ static const fragment_items clnp_frag_items = { &hf_clnp_segment_count, &hf_clnp_reassembled_in, &hf_clnp_reassembled_length, + /* Reassembled data field */ + NULL, "segments" }; diff --git a/epan/dissectors/packet-dcerpc.c b/epan/dissectors/packet-dcerpc.c index 3ba4d08370..7b9993ed90 100644 --- a/epan/dissectors/packet-dcerpc.c +++ b/epan/dissectors/packet-dcerpc.c @@ -610,6 +610,8 @@ static const fragment_items dcerpc_frag_items = { &hf_dcerpc_fragment_count, NULL, &hf_dcerpc_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; diff --git a/epan/dissectors/packet-dcm.c b/epan/dissectors/packet-dcm.c index 277bf4d2a9..f6d1f064d1 100644 --- a/epan/dissectors/packet-dcm.c +++ b/epan/dissectors/packet-dcm.c @@ -370,6 +370,8 @@ static const fragment_items dcm_pdv_fragment_items = { &hf_dcm_pdv_fragment_count, &hf_dcm_pdv_reassembled_in, &hf_dcm_pdv_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Message fragments" }; diff --git a/epan/dissectors/packet-dcp-etsi.c b/epan/dissectors/packet-dcp-etsi.c index cacafdaaf3..672316c74b 100644 --- a/epan/dissectors/packet-dcp-etsi.c +++ b/epan/dissectors/packet-dcp-etsi.c @@ -122,6 +122,8 @@ static const fragment_items dcp_frag_items = { &hf_edcp_reassembled_in, /* Reassembled length field */ &hf_edcp_reassembled_length, +/* Reassembled data field */ + NULL, /* Tag */ "Message fragments" }; diff --git a/epan/dissectors/packet-dnp.c b/epan/dissectors/packet-dnp.c index 3134193ef0..e6318b5078 100644 --- a/epan/dissectors/packet-dnp.c +++ b/epan/dissectors/packet-dnp.c @@ -1097,6 +1097,8 @@ static const fragment_items dnp3_frag_items = { &hf_dnp3_fragment_count, &hf_dnp3_fragment_reassembled_in, &hf_dnp3_fragment_reassembled_length, + /* Reassembled data field */ + NULL, "DNP 3.0 fragments" }; @@ -2237,7 +2239,7 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree_add_time(object_tree, hf_dnp3_al_timestamp, tvb, data_pos, 6, &al_abstime); data_pos += 6; proto_item_set_len(point_item, data_pos - offset); - + if (al_obj == AL_OBJ_TDCTO) { /* Copy the time object to the CTO for any other relative time objects in this response */ nstime_copy(al_cto, &al_abstime); @@ -2489,9 +2491,9 @@ dissect_dnp3_al(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree *al_tree = NULL, *field_tree = NULL, *robj_tree = NULL; const gchar *func_code_str; nstime_t al_cto; - + nstime_set_zero (&al_cto); - + data_len = tvb_length(tvb); /* Handle the control byte and function code */ @@ -3545,7 +3547,7 @@ proto_register_dnp3(void) /* Register the protocol name and description */ proto_dnp3 = proto_register_protocol("Distributed Network Protocol 3.0", "DNP 3.0", "dnp3"); - + /* Register the dissector so it may be used as a User DLT payload protocol */ new_register_dissector("dnp3.udp", dissect_dnp3_udp, proto_dnp3); @@ -3571,7 +3573,7 @@ proto_reg_handoff_dnp3(void) /* register as heuristic dissector for both TCP and UDP */ heur_dissector_add("tcp", dissect_dnp3_tcp, proto_dnp3); heur_dissector_add("udp", dissect_dnp3_udp, proto_dnp3); - + dnp3_tcp_handle = new_create_dissector_handle(dissect_dnp3_tcp, proto_dnp3); dnp3_udp_handle = new_create_dissector_handle(dissect_dnp3_udp, proto_dnp3); dissector_add_uint("tcp.port", TCP_PORT_DNP, dnp3_tcp_handle); diff --git a/epan/dissectors/packet-dtls.c b/epan/dissectors/packet-dtls.c index bac43f4b74..8893bf99ec 100644 --- a/epan/dissectors/packet-dtls.c +++ b/epan/dissectors/packet-dtls.c @@ -206,6 +206,8 @@ static const fragment_items dtls_frag_items = { &hf_dtls_reassembled_in, /* Reassembled length field */ &hf_dtls_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Message fragments" }; diff --git a/epan/dissectors/packet-dtn.c b/epan/dissectors/packet-dtn.c index 3c66a0f572..311fced350 100644 --- a/epan/dissectors/packet-dtn.c +++ b/epan/dissectors/packet-dtn.c @@ -301,6 +301,8 @@ static const fragment_items msg_frag_items = { &hf_msg_reassembled_in, /*Reassembled length field*/ &hf_msg_reassembled_length, + /* Reassembled data field */ + NULL, /*Tag*/ "Message fragments" }; diff --git a/epan/dissectors/packet-dvbci.c b/epan/dissectors/packet-dvbci.c index 04e0c9fcc5..beed125720 100644 --- a/epan/dissectors/packet-dvbci.c +++ b/epan/dissectors/packet-dvbci.c @@ -1007,6 +1007,8 @@ static const fragment_items tpdu_frag_items = { &hf_dvbci_l_reass_in, &hf_dvbci_l_reass_len, + /* Reassembled data field */ + NULL, "Tpdu fragments" }; static const fragment_items spdu_frag_items = { @@ -1024,6 +1026,8 @@ static const fragment_items spdu_frag_items = { &hf_dvbci_t_reass_in, &hf_dvbci_t_reass_len, + /* Reassembled data field */ + NULL, "Spdu fragments" }; @@ -1619,7 +1623,7 @@ store_lsc_msg_dissector(circuit_t *circuit, guint8 ip_proto, guint16 port) circuit_set_dissector(circuit, msg_handle); } - + /* dissect a connection_descriptor for the lsc resource returns its length or -1 for error */ static gint diff --git a/epan/dissectors/packet-eap.c b/epan/dissectors/packet-eap.c index 727fc4de89..0e5671bb19 100644 --- a/epan/dissectors/packet-eap.c +++ b/epan/dissectors/packet-eap.c @@ -354,6 +354,8 @@ static const fragment_items eap_tls_frag_items = { &hf_eap_tls_fragment_count, NULL, &hf_eap_tls_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; diff --git a/epan/dissectors/packet-gsm_cbch.c b/epan/dissectors/packet-gsm_cbch.c index faaf262d6c..b91adcba2e 100644 --- a/epan/dissectors/packet-gsm_cbch.c +++ b/epan/dissectors/packet-gsm_cbch.c @@ -113,6 +113,8 @@ static const fragment_items cbch_frag_items = { &hf_cbch_fragment_count, &hf_cbch_reassembled_in, &hf_cbch_reassembled_length, + /* Reassembled data field */ + NULL, "blocks" }; diff --git a/epan/dissectors/packet-gsm_sms.c b/epan/dissectors/packet-gsm_sms.c index 8fad3b3487..f9ee8ea7e7 100644 --- a/epan/dissectors/packet-gsm_sms.c +++ b/epan/dissectors/packet-gsm_sms.c @@ -230,6 +230,8 @@ static const fragment_items sm_frag_items = { &hf_gsm_sms_ud_reassembled_in, /* Reassembled length field */ &hf_gsm_sms_ud_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Short Message fragments" }; diff --git a/epan/dissectors/packet-gsm_sms_ud.c b/epan/dissectors/packet-gsm_sms_ud.c index 83d3752cf2..410b6bdebb 100644 --- a/epan/dissectors/packet-gsm_sms_ud.c +++ b/epan/dissectors/packet-gsm_sms_ud.c @@ -127,6 +127,8 @@ static const fragment_items sm_frag_items = { &hf_gsm_sms_ud_reassembled_in, /* Reassembled length field */ &hf_gsm_sms_ud_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Short Message fragments" }; diff --git a/epan/dissectors/packet-gssapi.c b/epan/dissectors/packet-gssapi.c index d10d46b425..1160eec93b 100644 --- a/epan/dissectors/packet-gssapi.c +++ b/epan/dissectors/packet-gssapi.c @@ -94,6 +94,8 @@ static const fragment_items gssapi_frag_items = { &hf_gssapi_segment_count, NULL, &hf_gssapi_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; diff --git a/epan/dissectors/packet-h223.c b/epan/dissectors/packet-h223.c index 1c597c9d0d..f65c959f96 100644 --- a/epan/dissectors/packet-h223.c +++ b/epan/dissectors/packet-h223.c @@ -138,6 +138,8 @@ static const fragment_items h223_mux_frag_items _U_ = { &hf_h223_mux_fragment_count, &hf_h223_mux_reassembled_in, &hf_h223_mux_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; @@ -154,6 +156,8 @@ static const fragment_items h223_al_frag_items = { &hf_h223_al_fragment_count, &hf_h223_al_reassembled_in, &hf_h223_al_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; diff --git a/epan/dissectors/packet-iax2.c b/epan/dissectors/packet-iax2.c index a2320d4e5e..c6999fa422 100644 --- a/epan/dissectors/packet-iax2.c +++ b/epan/dissectors/packet-iax2.c @@ -192,6 +192,8 @@ static const fragment_items iax2_fragment_items = { &hf_iax2_fragment_count, &hf_iax2_reassembled_in, &hf_iax2_reassembled_length, + /* Reassembled data field */ + NULL, "iax2 fragments" }; diff --git a/epan/dissectors/packet-idmp.c b/epan/dissectors/packet-idmp.c index 6c0b63299c..758f692c68 100644 --- a/epan/dissectors/packet-idmp.c +++ b/epan/dissectors/packet-idmp.c @@ -111,6 +111,8 @@ static const fragment_items idmp_frag_items = { &hf_idmp_reassembled_in, /* Reassembled length field */ &hf_idmp_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "IDMP fragments" }; diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c index 1c4e7bd397..c7a690d0bb 100644 --- a/epan/dissectors/packet-ieee80211.c +++ b/epan/dissectors/packet-ieee80211.c @@ -2711,6 +2711,8 @@ static const fragment_items frag_items = { &hf_ieee80211_fragment_count, &hf_ieee80211_reassembled_in, &hf_ieee80211_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; @@ -4102,6 +4104,8 @@ static const fragment_items gas_resp_frag_items = { &hf_ieee80211_gas_resp_fragment_count, &hf_ieee80211_gas_resp_reassembled_in, &hf_ieee80211_gas_resp_reassembled_length, + /* Reassembled data field */ + NULL, "GAS Response fragments" }; @@ -7475,7 +7479,7 @@ dissect_frame_control(proto_tree * tree, tvbuff_t * tvb, gboolean wlan_broken_fc } static void -dissect_vendor_ie_ht(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, +dissect_vendor_ie_ht(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, proto_item *item, proto_item *ti_len, gint tag_len) { diff --git a/epan/dissectors/packet-ip.c b/epan/dissectors/packet-ip.c index ac4f019857..bba473929a 100644 --- a/epan/dissectors/packet-ip.c +++ b/epan/dissectors/packet-ip.c @@ -177,6 +177,7 @@ static int hf_ip_fragment_error = -1; static int hf_ip_fragment_count = -1; static int hf_ip_reassembled_in = -1; static int hf_ip_reassembled_length = -1; +static int hf_ip_reassembled_data = -1; #ifdef HAVE_GEOIP static int hf_geoip_country = -1; @@ -244,6 +245,7 @@ static const fragment_items ip_frag_items = { &hf_ip_fragment_count, &hf_ip_reassembled_in, &hf_ip_reassembled_length, + &hf_ip_reassembled_data, "IPv4 fragments" }; @@ -2828,8 +2830,12 @@ proto_register_ip(void) { &hf_ip_reassembled_length, { "Reassembled IPv4 length", "ip.reassembled.length", FT_UINT32, BASE_DEC, - NULL, 0x0, "The total length of the reassembled payload", HFILL }} - }; + NULL, 0x0, "The total length of the reassembled payload", HFILL }}, + + { &hf_ip_reassembled_data, + { "Reassembled IPv4 data", "ip.reassembled.data", FT_BYTES, BASE_NONE, + NULL, 0x0, "The reassembled payload", HFILL }} +}; static gint *ett[] = { &ett_ip, diff --git a/epan/dissectors/packet-ipv6.c b/epan/dissectors/packet-ipv6.c index 85e30e819d..b213267340 100644 --- a/epan/dissectors/packet-ipv6.c +++ b/epan/dissectors/packet-ipv6.c @@ -182,6 +182,7 @@ static int hf_ipv6_fragment_error = -1; static int hf_ipv6_fragment_count = -1; static int hf_ipv6_reassembled_in = -1; static int hf_ipv6_reassembled_length = -1; +static int hf_ipv6_reassembled_data = -1; static int hf_ipv6_mipv6_home_address = -1; @@ -292,6 +293,7 @@ static const fragment_items ipv6_frag_items = { &hf_ipv6_fragment_count, &hf_ipv6_reassembled_in, &hf_ipv6_reassembled_length, + &hf_ipv6_reassembled_data, "IPv6 fragments" }; @@ -2545,6 +2547,10 @@ proto_register_ipv6(void) FT_UINT32, BASE_DEC, NULL, 0x0, "The total length of the reassembled payload", HFILL }}, + { &hf_ipv6_reassembled_data, + { "Reassembled IPv6 data", "ipv6.reassembled.data", + FT_UINT32, BASE_DEC, NULL, 0x0, + "The reassembled payload", HFILL }}, /* RPL Routing Header */ { &hf_ipv6_routing_hdr_rpl_cmprI, { "Compressed Internal Octets (CmprI)", "ipv6.routing_hdr.rpl.cmprI", diff --git a/epan/dissectors/packet-isakmp.c b/epan/dissectors/packet-isakmp.c index 27bc921d8a..3a391841e4 100644 --- a/epan/dissectors/packet-isakmp.c +++ b/epan/dissectors/packet-isakmp.c @@ -392,6 +392,8 @@ static const fragment_items isakmp_frag_items = { &hf_isakmp_reassembled_in, /* Reassembled length field */ &hf_isakmp_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Message fragments" }; diff --git a/epan/dissectors/packet-isup.c b/epan/dissectors/packet-isup.c index 6ea310a835..3158d739fc 100644 --- a/epan/dissectors/packet-isup.c +++ b/epan/dissectors/packet-isup.c @@ -2929,6 +2929,8 @@ static const fragment_items isup_apm_msg_frag_items = { &hf_isup_apm_msg_reassembled_in, /* Reassembled length field */ &hf_isup_apm_msg_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "ISUP APM Message fragments" }; diff --git a/epan/dissectors/packet-lapdm.c b/epan/dissectors/packet-lapdm.c index c569857601..841281fb19 100644 --- a/epan/dissectors/packet-lapdm.c +++ b/epan/dissectors/packet-lapdm.c @@ -198,6 +198,8 @@ static const fragment_items lapdm_frag_items = { &hf_lapdm_reassembled_in, /* Reassembled length field */ &hf_lapdm_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "fragments" }; diff --git a/epan/dissectors/packet-lapsat.c b/epan/dissectors/packet-lapsat.c index 38ae3ff00b..693b3dd86b 100644 --- a/epan/dissectors/packet-lapsat.c +++ b/epan/dissectors/packet-lapsat.c @@ -244,6 +244,8 @@ static const fragment_items lapsat_frag_items = { &hf_lapsat_reassembled_in, /* Reassembled length field */ &hf_lapsat_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "fragments" }; diff --git a/epan/dissectors/packet-ltp.c b/epan/dissectors/packet-ltp.c index 36d1172792..80d582ade9 100644 --- a/epan/dissectors/packet-ltp.c +++ b/epan/dissectors/packet-ltp.c @@ -197,6 +197,8 @@ static const fragment_items ltp_frag_items = { &hf_ltp_reassembled_in, /*Reassembled length field*/ &hf_ltp_reassembled_length, + /* Reassembled data field */ + NULL, /*Tag*/ "LTP fragments" }; diff --git a/epan/dissectors/packet-mp2t.c b/epan/dissectors/packet-mp2t.c index 02b5bc5a3c..b8b9615cc4 100644 --- a/epan/dissectors/packet-mp2t.c +++ b/epan/dissectors/packet-mp2t.c @@ -238,6 +238,8 @@ static const fragment_items mp2t_msg_frag_items = { &hf_msg_reassembled_in, /* Reassembled length field */ &hf_msg_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Message fragments" }; diff --git a/epan/dissectors/packet-mux27010.c b/epan/dissectors/packet-mux27010.c index 08b15d276b..e2f046a919 100644 --- a/epan/dissectors/packet-mux27010.c +++ b/epan/dissectors/packet-mux27010.c @@ -285,6 +285,8 @@ static gint ett_msg_fragments = -1; &hf_msg_reassembled_in, /* Reassembled length field */ &hf_msg_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Message fragments" }; diff --git a/epan/dissectors/packet-ncp2222.inc b/epan/dissectors/packet-ncp2222.inc index 5c1a1de460..939c66f73f 100644 --- a/epan/dissectors/packet-ncp2222.inc +++ b/epan/dissectors/packet-ncp2222.inc @@ -78,6 +78,8 @@ static const fragment_items nds_frag_items = { &hf_nds_segment_count, NULL, &hf_nds_reassembled_length, + /* Reassembled data field */ + NULL, "segments" }; diff --git a/epan/dissectors/packet-ndmp.c b/epan/dissectors/packet-ndmp.c index 1577ca7fec..3bf3105077 100644 --- a/epan/dissectors/packet-ndmp.c +++ b/epan/dissectors/packet-ndmp.c @@ -280,6 +280,8 @@ static const fragment_items ndmp_frag_items = { &hf_ndmp_reassembled_in, /* Reassembled length field */ &hf_ndmp_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "NDMP fragments" }; diff --git a/epan/dissectors/packet-ndps.c b/epan/dissectors/packet-ndps.c index 35eb0b7501..01ed8d96eb 100644 --- a/epan/dissectors/packet-ndps.c +++ b/epan/dissectors/packet-ndps.c @@ -4038,6 +4038,8 @@ static const fragment_items ndps_frag_items = { &hf_ndps_segment_count, NULL, &hf_ndps_reassembled_length, + /* Reassembled data field */ + NULL, "segments" }; diff --git a/epan/dissectors/packet-netbios.c b/epan/dissectors/packet-netbios.c index fb5d06d07e..0a07be827b 100644 --- a/epan/dissectors/packet-netbios.c +++ b/epan/dissectors/packet-netbios.c @@ -134,6 +134,8 @@ static const fragment_items netbios_frag_items = { &hf_netb_fragment_count, NULL, &hf_netb_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; diff --git a/epan/dissectors/packet-ositp.c b/epan/dissectors/packet-ositp.c index 0109aa75f9..c25a23cfe6 100644 --- a/epan/dissectors/packet-ositp.c +++ b/epan/dissectors/packet-ositp.c @@ -102,6 +102,8 @@ static const fragment_items cotp_frag_items = { &hf_cotp_segment_count, &hf_cotp_reassembled_in, &hf_cotp_reassembled_length, + /* Reassembled data field */ + NULL, "segments" }; diff --git a/epan/dissectors/packet-p_mul.c b/epan/dissectors/packet-p_mul.c index 589e4267b1..8e3e87c437 100644 --- a/epan/dissectors/packet-p_mul.c +++ b/epan/dissectors/packet-p_mul.c @@ -225,6 +225,8 @@ static const fragment_items p_mul_frag_items = { &hf_msg_reassembled_in, /* Reassembled length field */ &hf_msg_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Message fragments" }; diff --git a/epan/dissectors/packet-pop.c b/epan/dissectors/packet-pop.c index 6981cd8493..1fd92f3301 100644 --- a/epan/dissectors/packet-pop.c +++ b/epan/dissectors/packet-pop.c @@ -100,6 +100,8 @@ static const fragment_items pop_data_frag_items = { &hf_pop_data_reassembled_in, /* Reassembled length field */ &hf_pop_data_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "DATA fragments" }; diff --git a/epan/dissectors/packet-q931.c b/epan/dissectors/packet-q931.c index d181c0a2b2..9eb69b5413 100644 --- a/epan/dissectors/packet-q931.c +++ b/epan/dissectors/packet-q931.c @@ -136,6 +136,8 @@ static const fragment_items q931_frag_items = { &hf_q931_segment_count, &hf_q931_reassembled_in, &hf_q931_reassembled_length, + /* Reassembled data field */ + NULL, "segments" }; diff --git a/epan/dissectors/packet-reload.c b/epan/dissectors/packet-reload.c index b42027dd19..8101fd7b72 100644 --- a/epan/dissectors/packet-reload.c +++ b/epan/dissectors/packet-reload.c @@ -656,6 +656,8 @@ static const fragment_items reload_frag_items = { &hf_reload_fragment_count, &hf_reload_reassembled_in, &hf_reload_reassembled_length, + /* Reassembled data field */ + NULL, "RELOAD fragments" }; diff --git a/epan/dissectors/packet-rpc.c b/epan/dissectors/packet-rpc.c index cd346be70f..fa114556b6 100644 --- a/epan/dissectors/packet-rpc.c +++ b/epan/dissectors/packet-rpc.c @@ -289,6 +289,8 @@ static const fragment_items rpc_frag_items = { &hf_rpc_fragment_count, NULL, &hf_rpc_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; diff --git a/epan/dissectors/packet-rtp.c b/epan/dissectors/packet-rtp.c index 8445cda571..ebf0d57004 100644 --- a/epan/dissectors/packet-rtp.c +++ b/epan/dissectors/packet-rtp.c @@ -128,6 +128,8 @@ static const fragment_items rtp_fragment_items = { &hf_rtp_fragment_count, &hf_rtp_reassembled_in, &hf_rtp_reassembled_length, + /* Reassembled data field */ + NULL, "RTP fragments" }; @@ -1182,7 +1184,7 @@ dissect_rtp_hext_rfc5215_onebyte( tvbuff_t *tvb, packet_info *pinfo, subtvb = tvb_new_subset(tvb, ext_offset, ext_length, ext_length); if (!dissector_try_uint (rtp_hdr_ext_rfc5285_dissector_table, ext_id, subtvb, pinfo, rtp_hext_rfc5285_tree)) { - if (rtp_hext_tree) + if (rtp_hext_tree) proto_tree_add_item(rtp_hext_rfc5285_tree, hf_rtp_ext_rfc5285_data, subtvb, 0, ext_length, ENC_NA ); } diff --git a/epan/dissectors/packet-rtse.c b/epan/dissectors/packet-rtse.c index c7ed0db1cb..48cf81738d 100644 --- a/epan/dissectors/packet-rtse.c +++ b/epan/dissectors/packet-rtse.c @@ -154,6 +154,8 @@ static const fragment_items rtse_frag_items = { &hf_rtse_reassembled_in, /* Reassembled length field */ &hf_rtse_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "RTSE fragments" }; @@ -205,7 +207,7 @@ call_rtse_oid_callback(const char *oid, tvbuff_t *tvb, int offset, packet_info * dissect_unknown_ber(pinfo, next_tvb, offset, next_tree); } - /*XXX until we change the #.REGISTER signature for _PDU()s + /*XXX until we change the #.REGISTER signature for _PDU()s * into new_dissector_t we have to do this kludge with * manually step past the content in the ANY type. */ @@ -280,7 +282,7 @@ dissect_rtse_T_open(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_ oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id); break; } - + if(!oid) /* XXX: problem here is we haven't decoded the applicationProtocol yet - so we make assumptions! */ oid = "applicationProtocol.12"; @@ -508,7 +510,7 @@ static int dissect_rtse_RefuseReason(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { #line 148 "../../asn1/rtse/rtse.cnf" int reason = -1; - + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, &reason); @@ -540,7 +542,7 @@ dissect_rtse_T_userDataRJ(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs oid = find_oid_by_pres_ctx_id(actx->pinfo, session->pres_ctx_id); break; } - + if(!oid) /* XXX: problem here is we haven't decoded the applicationProtocol yet - so we make assumptions! */ oid = "applicationProtocol.12"; @@ -642,7 +644,7 @@ static int dissect_rtse_AbortReason(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) { #line 164 "../../asn1/rtse/rtse.cnf" int reason = -1; - + offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, &reason); @@ -763,7 +765,7 @@ dissect_rtse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) if(parent_tree){ proto_tree_add_text(parent_tree, tvb, offset, -1, "Internal error:can't get application context from ACSE dissector."); - } + } return ; } else { session = ( (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data) ); @@ -773,22 +775,22 @@ dissect_rtse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) col_set_str(pinfo->cinfo, COL_PROTOCOL, "RTSE"); col_clear(pinfo->cinfo, COL_INFO); - if (rtse_reassemble && + if (rtse_reassemble && ((session->spdu_type == SES_DATA_TRANSFER) || (session->spdu_type == SES_MAJOR_SYNC_POINT))) { /* Use conversation index as fragment id */ - conversation = find_conversation (pinfo->fd->num, - &pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation (pinfo->fd->num, + &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); - if (conversation != NULL) { + if (conversation != NULL) { rtse_id = conversation->index; - } + } session->rtse_reassemble = TRUE; } if (rtse_reassemble && session->spdu_type == SES_MAJOR_SYNC_POINT) { frag_msg = fragment_end_seq_next (pinfo, rtse_id, rtse_segment_table, rtse_reassembled_table); - next_tvb = process_reassembled_data (tvb, offset, pinfo, "Reassembled RTSE", + next_tvb = process_reassembled_data (tvb, offset, pinfo, "Reassembled RTSE", frag_msg, &rtse_frag_items, NULL, parent_tree); } if(parent_tree){ @@ -803,7 +805,7 @@ dissect_rtse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) fragment_length = tvb_length_remaining (data_tvb, 0); proto_item_append_text(asn1_ctx.created_item, " (%u byte%s)", fragment_length, plurality(fragment_length, "", "s")); - frag_msg = fragment_add_seq_next (data_tvb, 0, pinfo, + frag_msg = fragment_add_seq_next (data_tvb, 0, pinfo, rtse_id, rtse_segment_table, rtse_reassembled_table, fragment_length, TRUE); if (frag_msg && pinfo->fd->num != frag_msg->reassembled_in) { @@ -830,7 +832,7 @@ dissect_rtse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree) } pinfo->fragmented = FALSE; data_handled = TRUE; - } + } if (!data_handled) { while (tvb_reported_length_remaining(tvb, offset) > 0){ diff --git a/epan/dissectors/packet-sccp.c b/epan/dissectors/packet-sccp.c index 90692bd763..8a79cdfa40 100644 --- a/epan/dissectors/packet-sccp.c +++ b/epan/dissectors/packet-sccp.c @@ -734,6 +734,8 @@ static const fragment_items sccp_xudt_msg_frag_items = { &hf_sccp_xudt_msg_reassembled_in, /* Reassembled length field */ &hf_sccp_xudt_msg_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "SCCP XUDT Message fragments" }; diff --git a/epan/dissectors/packet-scsi.c b/epan/dissectors/packet-scsi.c index a46027a640..31892771c9 100644 --- a/epan/dissectors/packet-scsi.c +++ b/epan/dissectors/packet-scsi.c @@ -390,6 +390,8 @@ static const fragment_items scsi_frag_items = { &hf_scsi_fragment_count, &hf_scsi_reassembled_in, &hf_scsi_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; @@ -490,7 +492,7 @@ static const value_string scsi_evpd_pagecode_val[] = { {SCSI_EVPD_DEVSERNUM, "Unit Serial Number Page"}, {SCSI_EVPD_OPER, "Implemented Operating Definition Page"}, {SCSI_EVPD_ASCIIOPER, "ASCII Implemented Operating Definition Page"}, - {SCSI_EVPD_DEVID, "Device Identification Page"}, + {SCSI_EVPD_DEVID, "Device Identification Page"}, {SCSI_EVPD_BLKLIMITS, "Block Limits Page"}, {SCSI_EVPD_LBP, "Logical Block Provisioning Page"}, {0, NULL}, @@ -3561,7 +3563,7 @@ dissect_scsi_modepage(tvbuff_t *tvb, packet_info *pinfo, if (spf) { proto_tree_add_item(tree, hf_scsi_spc_subpagecode, tvb, offset + 1, 1, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_scsi_modepage_plen, tvb, offset + 2, 2, ENC_BIG_ENDIAN); - } else { + } else { proto_tree_add_item(tree, hf_scsi_modepage_plen, tvb, offset + 1, 1, ENC_BIG_ENDIAN); } diff --git a/epan/dissectors/packet-ses.c b/epan/dissectors/packet-ses.c index 0086276e96..c66a936978 100644 --- a/epan/dissectors/packet-ses.c +++ b/epan/dissectors/packet-ses.c @@ -204,6 +204,8 @@ static const fragment_items ses_frag_items = { &hf_ses_reassembled_in, /* Reassembled length field */ &hf_ses_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "SES segments" }; diff --git a/epan/dissectors/packet-smb-pipe.c b/epan/dissectors/packet-smb-pipe.c index c4ff7b885e..a1d555d739 100644 --- a/epan/dissectors/packet-smb-pipe.c +++ b/epan/dissectors/packet-smb-pipe.c @@ -90,6 +90,8 @@ static const fragment_items smb_pipe_frag_items = { &hf_pipe_fragment_count, NULL, &hf_pipe_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; diff --git a/epan/dissectors/packet-smb.c b/epan/dissectors/packet-smb.c index c8b505c5a2..114f0e629c 100644 --- a/epan/dissectors/packet-smb.c +++ b/epan/dissectors/packet-smb.c @@ -819,6 +819,8 @@ static const fragment_items smb_frag_items = { &hf_smb_segment_count, NULL, &hf_smb_reassembled_length, + /* Reassembled data field */ + NULL, "segments" }; diff --git a/epan/dissectors/packet-smtp.c b/epan/dissectors/packet-smtp.c index 2575ab1d10..708ade6101 100644 --- a/epan/dissectors/packet-smtp.c +++ b/epan/dissectors/packet-smtp.c @@ -108,6 +108,8 @@ static const fragment_items smtp_data_frag_items = { &hf_smtp_data_reassembled_in, /* Reassembled length field */ &hf_smtp_data_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "DATA fragments" }; @@ -607,7 +609,7 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } else if (session_state->auth_state == SMTP_AUTH_STATE_PASSWORD_REQ) { session_state->auth_state = SMTP_AUTH_STATE_PASSWORD_RSP; session_state->password_frame = pinfo->fd->num; - } + } else { /* @@ -740,7 +742,7 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } proto_tree_add_string(smtp_tree, hf_smtp_username, tvb, loffset, linelen, decrypt); - col_append_str(pinfo->cinfo, COL_INFO, decrypt); + col_append_str(pinfo->cinfo, COL_INFO, decrypt); } else if (session_state->password_frame == pinfo->fd->num) { if (decrypt == NULL) { /* This line wasn't already decrypted through the state machine */ @@ -868,7 +870,7 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } if (code == 334) { - switch(session_state->auth_state) + switch(session_state->auth_state) { case SMTP_AUTH_STATE_START: session_state->auth_state = SMTP_AUTH_STATE_USERNAME_REQ; diff --git a/epan/dissectors/packet-sndcp.c b/epan/dissectors/packet-sndcp.c index 175c0bf92d..b5df2c77bc 100644 --- a/epan/dissectors/packet-sndcp.c +++ b/epan/dissectors/packet-sndcp.c @@ -91,6 +91,8 @@ static const fragment_items npdu_frag_items = { &hf_npdu_fragment_count, &hf_npdu_reassembled_in, &hf_npdu_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; diff --git a/epan/dissectors/packet-ssl.c b/epan/dissectors/packet-ssl.c index 28c94f4df8..144f09ec3f 100644 --- a/epan/dissectors/packet-ssl.c +++ b/epan/dissectors/packet-ssl.c @@ -320,6 +320,8 @@ static const fragment_items ssl_segment_items = { &hf_ssl_segment_count, &hf_ssl_reassembled_in, &hf_ssl_reassembled_length, + /* Reassembled data field */ + NULL, "Segments" }; diff --git a/epan/dissectors/packet-t38.c b/epan/dissectors/packet-t38.c index a2553e42bb..3ebf58f765 100644 --- a/epan/dissectors/packet-t38.c +++ b/epan/dissectors/packet-t38.c @@ -44,10 +44,10 @@ * http://www.itu.int/ITU-T/asn1/database/itu-t/t/t38/2002-Amd1/T38.html (Pre-Corrigendum=FALSE) */ -/* TO DO: - * - TCP desegmentation is currently not supported for T.38 IFP directly over TCP. +/* TO DO: + * - TCP desegmentation is currently not supported for T.38 IFP directly over TCP. * - H.245 dissectors should be updated to start conversations for T.38 similar to RTP. - * - Sometimes the last octet is not high-lighted when selecting something in the tree. Bug in PER dissector? + * - Sometimes the last octet is not high-lighted when selecting something in the tree. Bug in PER dissector? * - Add support for RTP payload audio/t38 (draft-jones-avt-audio-t38-03.txt), i.e. T38 in RTP packets. */ @@ -74,7 +74,7 @@ #include <epan/emem.h> #include <epan/strutil.h> -#define PORT_T38 6004 +#define PORT_T38 6004 static guint global_t38_tcp_port = PORT_T38; static guint global_t38_udp_port = PORT_T38; @@ -86,7 +86,7 @@ static gboolean use_pre_corrigendum_asn1_specification = TRUE; /* dissect packets that looks like RTP version 2 packets as RTP */ /* instead of as T.38. This may result in that some T.38 UPTL */ /* packets with sequence number values higher than 32767 may be */ -/* shown as RTP packets. */ +/* shown as RTP packets. */ static gboolean dissect_possible_rtpv2_packets_as_rtp = FALSE; @@ -214,6 +214,8 @@ static const fragment_items data_frag_items = { &hf_t38_reassembled_in, /* Reassembled length field */ &hf_t38_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Data fragments" }; @@ -427,7 +429,7 @@ force_reassemble_seq(packet_info *pinfo, guint32 id, fd_head->reassembled_in=pinfo->fd->num; col_append_fstr(pinfo->cinfo, COL_INFO, " (t4-data Reassembled: %d pack lost, %d pack burst lost)", packet_lost, burst_lost); - + p_t38_packet_conv_info->packet_lost = packet_lost; p_t38_packet_conv_info->burst_lost = burst_lost; @@ -739,8 +741,8 @@ dissect_t38_T_field_data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_ if (!frag_msg) { /* Not last packet of reassembled */ if (Data_Field_field_type_value == 0) { - col_append_fstr(actx->pinfo->cinfo, COL_INFO," (HDLC fragment %u)", - seq_number + (guint32)p_t38_packet_conv_info->additional_hdlc_data_field_counter + col_append_fstr(actx->pinfo->cinfo, COL_INFO," (HDLC fragment %u)", + seq_number + (guint32)p_t38_packet_conv_info->additional_hdlc_data_field_counter - (guint32)p_t38_packet_conv_info->reass_start_seqnum); } else { col_append_fstr(actx->pinfo->cinfo, COL_INFO," (t4-data fragment %u)", seq_number - (guint32)p_t38_packet_conv_info->reass_start_seqnum); @@ -1000,11 +1002,11 @@ init_t38_info_conv(packet_info *pinfo) t38_info->frame_num_first_t4_data = 0; - /* + /* p_t38_packet_conv hold the conversation info in each of the packets. p_t38_conv hold the conversation info used to reassemble the HDLC packets, and also the Setup info (e.g SDP) - If we already have p_t38_packet_conv in the packet, it means we already reassembled the HDLC packets, so we don't - need to use p_t38_conv + If we already have p_t38_packet_conv in the packet, it means we already reassembled the HDLC packets, so we don't + need to use p_t38_conv */ p_t38_packet_conv = NULL; p_t38_conv = NULL; @@ -1193,10 +1195,10 @@ dissect_t38_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if(t38_tpkt_usage == T38_TPKT_ALWAYS){ dissect_tpkt_encap(tvb,pinfo,tree,t38_tpkt_reassembly,t38_tcp_pdu_handle); - } + } else if((t38_tpkt_usage == T38_TPKT_NEVER) || (is_tpkt(tvb,1) == -1)){ dissect_t38_tcp_pdu(tvb, pinfo, tree); - } + } else { dissect_tpkt_encap(tvb,pinfo,tree,t38_tpkt_reassembly,t38_tcp_pdu_handle); } @@ -1210,13 +1212,13 @@ dissect_t38(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) dissect_t38_tcp(tvb, pinfo, tree); } else if(pinfo->ipproto == IP_PROTO_UDP) - { + { dissect_t38_udp(tvb, pinfo, tree); } } /* Look for conversation info and display any setup info found */ -void +void show_setup_info(tvbuff_t *tvb, proto_tree *tree, t38_conv *p_t38_conversation) { proto_tree *t38_setup_tree; @@ -1356,7 +1358,7 @@ proto_register_t38(void) FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } }, {&hf_t38_fragment_multiple_tails, {"Message has multiple tail fragments", - "t38.fragment.multiple_tails", + "t38.fragment.multiple_tails", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } }, {&hf_t38_fragment_too_long_fragment, {"Message fragment too long", "t38.fragment.too_long_fragment", @@ -1429,7 +1431,7 @@ proto_register_t38(void) prefs_register_uint_preference(t38_module, "udp.port", "T.38 UDP Port", "Set the UDP port for T.38 messages", - 10, &global_t38_udp_port); + 10, &global_t38_udp_port); prefs_register_bool_preference(t38_module, "reassembly", "Reassemble T.38 PDUs over TPKT over TCP", "Whether the dissector should reassemble T.38 PDUs spanning multiple TCP segments " diff --git a/epan/dissectors/packet-tcp.c b/epan/dissectors/packet-tcp.c index f6112015d6..af43f6e4e1 100644 --- a/epan/dissectors/packet-tcp.c +++ b/epan/dissectors/packet-tcp.c @@ -146,6 +146,7 @@ static int hf_tcp_pdu_size = -1; static int hf_tcp_pdu_last_frame = -1; static int hf_tcp_reassembled_in = -1; static int hf_tcp_reassembled_length = -1; +static int hf_tcp_reassembled_data = -1; static int hf_tcp_segments = -1; static int hf_tcp_segment = -1; static int hf_tcp_segment_overlap = -1; @@ -402,6 +403,7 @@ static const fragment_items tcp_segment_items = { &hf_tcp_segment_count, &hf_tcp_reassembled_in, &hf_tcp_reassembled_length, + &hf_tcp_reassembled_data, "Segments" }; @@ -5052,6 +5054,10 @@ proto_register_tcp(void) { "Reassembled TCP length", "tcp.reassembled.length", FT_UINT32, BASE_DEC, NULL, 0x0, "The total length of the reassembled payload", HFILL }}, + { &hf_tcp_reassembled_data, + { "Reassembled TCP Data", "tcp.reassembled.data", FT_BYTES, BASE_NONE, NULL, 0x0, + "The reassembled payload", HFILL }}, + { &hf_tcp_option_kind, { "Kind", "tcp.option_kind", FT_UINT8, BASE_DEC, VALS(tcp_option_kind_vs), 0x0, "This TCP option's kind", HFILL }}, diff --git a/epan/dissectors/packet-tds.c b/epan/dissectors/packet-tds.c index f950715aae..ad237a3238 100644 --- a/epan/dissectors/packet-tds.c +++ b/epan/dissectors/packet-tds.c @@ -546,6 +546,8 @@ static const fragment_items tds_frag_items = { &hf_tds_fragment_count, &hf_tds_reassembled_in, &hf_tds_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; @@ -1732,7 +1734,7 @@ dissect_tds_done_token(tvbuff_t *tvb, guint offset, proto_tree *tree, tds_conv_i offset += 2; proto_tree_add_text(tree, tvb, offset, 2, "Operation"); offset += 2; - if (TDS_PROTO_TDS7_2_OR_GREATER) { + if (TDS_PROTO_TDS7_2_OR_GREATER) { proto_tree_add_text(tree, tvb, offset, 8, "row count: %" G_GINT64_MODIFIER "u", tds_tvb_get_xxtoh64(tvb, offset, tds_little_endian)); } else { diff --git a/epan/dissectors/packet-teamspeak2.c b/epan/dissectors/packet-teamspeak2.c index 710d37a355..a1ccb4c636 100644 --- a/epan/dissectors/packet-teamspeak2.c +++ b/epan/dissectors/packet-teamspeak2.c @@ -139,6 +139,8 @@ static const fragment_items msg_frag_items = { &hf_msg_reassembled_in, /* Reassembled length field */ &hf_msg_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Message fragments" }; diff --git a/epan/dissectors/packet-tipc.c b/epan/dissectors/packet-tipc.c index ea0438be7d..f73665e9b6 100644 --- a/epan/dissectors/packet-tipc.c +++ b/epan/dissectors/packet-tipc.c @@ -220,6 +220,8 @@ static const fragment_items tipc_msg_frag_items = { &hf_tipc_msg_reassembled_in, /* Reassembled length field */ &hf_tipc_msg_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "TIPC Message fragments" }; diff --git a/epan/dissectors/packet-wai.c b/epan/dissectors/packet-wai.c index 1f951a070d..286069fd6b 100644 --- a/epan/dissectors/packet-wai.c +++ b/epan/dissectors/packet-wai.c @@ -182,6 +182,8 @@ static const fragment_items wai_frag_items = { &hf_wai_reassembled_in, /* Reassembled length field */ &hf_wai_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "Message fragments" }; diff --git a/epan/dissectors/packet-wtp.c b/epan/dissectors/packet-wtp.c index 68bc8395f3..a4498c9c0d 100644 --- a/epan/dissectors/packet-wtp.c +++ b/epan/dissectors/packet-wtp.c @@ -218,6 +218,8 @@ static const fragment_items wtp_frag_items = { &hf_wtp_fragment_count, &hf_wtp_reassembled_in, &hf_wtp_reassembled_length, + /* Reassembled data field */ + NULL, "fragments" }; diff --git a/epan/dissectors/packet-x25.c b/epan/dissectors/packet-x25.c index 1bc94dc610..97d69c0a17 100644 --- a/epan/dissectors/packet-x25.c +++ b/epan/dissectors/packet-x25.c @@ -251,6 +251,8 @@ static const fragment_items x25_frag_items = { &hf_x25_segment_count, NULL, &hf_x25_reassembled_length, + /* Reassembled data field */ + NULL, "segments" }; diff --git a/epan/dissectors/packet-zbee-aps.c b/epan/dissectors/packet-zbee-aps.c index 45174ec22d..a37b6d04a3 100644 --- a/epan/dissectors/packet-zbee-aps.c +++ b/epan/dissectors/packet-zbee-aps.c @@ -166,6 +166,8 @@ static const fragment_items zbee_aps_frag_items = { &hf_zbee_aps_reassembled_in, /* Reassembled length field */ &hf_zbee_aps_reassembled_length, + /* Reassembled data field */ + NULL, /* Tag */ "APS Message fragments" }; diff --git a/epan/reassemble.c b/epan/reassemble.c index c07a5c463e..5ef746dcb0 100644 --- a/epan/reassemble.c +++ b/epan/reassemble.c @@ -2085,6 +2085,12 @@ show_fragment_tree(fragment_data *fd_head, const fragment_items *fit, PROTO_ITEM_SET_GENERATED(fli); } + if (fit->hf_reassembled_data) { + proto_item *fli = proto_tree_add_item(ft, *(fit->hf_reassembled_data), + tvb, 0, tvb_length(tvb), ENC_NA); + PROTO_ITEM_SET_GENERATED(fli); + } + return show_fragment_errs_in_col(fd_head, fit, pinfo); } diff --git a/epan/reassemble.h b/epan/reassemble.h index 9f6c06b6ed..f35beb7009 100644 --- a/epan/reassemble.h +++ b/epan/reassemble.h @@ -289,25 +289,29 @@ fragment_get_reassembled_id(const packet_info *pinfo, const guint32 id, GHashTab extern unsigned char * fragment_delete(const packet_info *pinfo, const guint32 id, GHashTable *fragment_table); -/* hf_fragment, hf_fragment_error, and hf_reassembled_in should be - FT_FRAMENUM, the others should be FT_BOOLEAN -*/ +/* This struct holds references to all the tree and field handles used when + * displaying the reassembled fragment tree in the packet details view. A + * dissector will populate this structure with its own tree and field handles + * and then invoke show_fragement_tree to have those items added to the packet + * details tree. + */ typedef struct _fragment_items { - gint *ett_fragment; - gint *ett_fragments; - - int *hf_fragments; - int *hf_fragment; - int *hf_fragment_overlap; - int *hf_fragment_overlap_conflict; - int *hf_fragment_multiple_tails; - int *hf_fragment_too_long_fragment; - int *hf_fragment_error; - int *hf_fragment_count; - int *hf_reassembled_in; - int *hf_reassembled_length; - - const char *tag; + gint *ett_fragment; + gint *ett_fragments; + + int *hf_fragments; /* FT_BOOLEAN */ + int *hf_fragment; /* FT_FRAMENUM */ + int *hf_fragment_overlap; /* FT_BOOLEAN */ + int *hf_fragment_overlap_conflict; /* FT_BOOLEAN */ + int *hf_fragment_multiple_tails; /* FT_BOOLEAN */ + int *hf_fragment_too_long_fragment; /* FT_BOOLEAN */ + int *hf_fragment_error; /* FT_FRAMENUM */ + int *hf_fragment_count; /* FT_UINT32 */ + int *hf_reassembled_in; /* FT_FRAMENUM */ + int *hf_reassembled_length; /* FT_UINT32 */ + int *hf_reassembled_data; /* FT_BYTES */ + + const char *tag; } fragment_items; extern tvbuff_t * |