Wireshark 4.7.0
The Wireshark network protocol analyzer
Loading...
Searching...
No Matches
reassemble.h
Go to the documentation of this file.
1
11/* make sure that all flags that are set in a fragment entry is also set for
12 * the flags field of fd_head !!!
13 */
14#pragma once
15#include <epan/packet_info.h>
16#include <epan/proto.h>
17#include "ws_symbol_export.h"
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23/* in fd_head: packet is defragmented
24 * in item: this item was used in defragmentation
25 * (An item can have this set when the head does not if defragmentation
26 * was reset due to changing the total length or partial reassembly.)
27 */
28#define FD_DEFRAGMENTED 0x0001
29
30/* there are overlapping fragments */
31#define FD_OVERLAP 0x0002
32
33/* overlapping fragments contain different data */
34#define FD_OVERLAPCONFLICT 0x0004
35
36/* more than one fragment which indicates end-of data */
37#define FD_MULTIPLETAILS 0x0008
38
39/* fragment starts before the end of the datagram but extends
40 past the end of the datagram */
41#define FD_TOOLONGFRAGMENT 0x0010
42
43/* fragment tvb is subset, don't tvb_free() it */
44#define FD_SUBSET_TVB 0x0020
45
46/* this flag is used to request fragment_add to continue the reassembly process */
47#define FD_PARTIAL_REASSEMBLY 0x0040
48
49/* fragment offset is indicated by sequence number and not byte offset
50 into the defragmented packet */
51#define FD_BLOCKSEQUENCE 0x0100
52
53/* This flag is set in (only) fd_head to denote that datalen has been set to a valid value.
54 * It's implied by FD_DEFRAGMENTED (we must know the total length of the
55 * datagram if we have defragmented it...)
56 */
57#define FD_DATALEN_SET 0x0400
58
59struct dissector_handle;
60
64typedef struct _fragment_item {
66 uint32_t frame;
67 uint32_t offset;
68 uint32_t len;
69 uint32_t flags;
72
73
77typedef struct _fragment_head {
81 unsigned ref_count;
82 uint32_t contiguous_len;
83 uint32_t frame;
84 uint32_t len;
88 uint32_t datalen;
91 uint32_t reassembled_in;
96 uint32_t flags;
98 const char* error;
101
102/*
103 * Flags for fragment_add_seq_*
104 */
105
106/* we don't have any sequence numbers - fragments are assumed to appear in
107 * order */
108#define REASSEMBLE_FLAGS_NO_FRAG_NUMBER 0x0001
109
110/* a special fudge for the 802.11 dissector */
111#define REASSEMBLE_FLAGS_802_11_HACK 0x0002
112
113/*
114 * Flags for fragment_add_seq_single_*
115 */
116
117/* we want to age off old packets */
118#define REASSEMBLE_FLAGS_AGING 0x0001
119
120/*
121 * Generates a fragment identifier based on the given parameters. "data" is an
122 * opaque type whose interpretation is up to the caller of fragment_add*
123 * functions and the fragment key function (possibly NULL if you do not care).
124 *
125 * Keys returned by this function are only used within this packet scope.
126 */
127typedef void * (*fragment_temporary_key)(const packet_info *pinfo,
128 const uint32_t id, const void *data);
129
130/*
131 * Like fragment_temporary_key, but used for identifying reassembled fragments
132 * which may persist through multiple packets.
133 */
134typedef void * (*fragment_persistent_key)(const packet_info *pinfo,
135 const uint32_t id, const void *data);
136
140typedef struct {
141 GHashTable* fragment_table;
142 GHashTable* reassembled_table;
143 fragment_temporary_key temporary_key_func;
144 fragment_persistent_key persistent_key_func;
145 GDestroyNotify free_temporary_key_func;
147
151typedef struct {
155 GHashFunc hash_func;
156
160 GEqualFunc equal_func;
161
165 fragment_temporary_key temporary_key_func;
166
170 fragment_persistent_key persistent_key_func;
171
176
182
183/*
184 * Tables of functions exported for the benefit of dissectors that
185 * don't need special items in their keys.
186 */
187WS_DLL_PUBLIC const reassembly_table_functions
188 addresses_reassembly_table_functions; /* keys have endpoint addresses and an ID */
189WS_DLL_PUBLIC const reassembly_table_functions
190 addresses_ports_reassembly_table_functions; /* keys have endpoint addresses and ports and an ID */
191
199WS_DLL_PUBLIC void
201 const reassembly_table_functions *funcs);
202
212WS_DLL_PUBLIC void
214 const reassembly_table_functions *funcs);
215
223WS_DLL_PUBLIC void
225
262WS_DLL_PUBLIC fragment_head *
263fragment_add(reassembly_table *table, tvbuff_t *tvb, const int offset,
264 const packet_info *pinfo, const uint32_t id, const void *data,
265 const uint32_t frag_offset, const uint32_t frag_data_len,
266 const bool more_frags);
267
286WS_DLL_PUBLIC fragment_head *
288 const int offset, const packet_info *pinfo,
289 const uint32_t id, const void *data,
290 const uint32_t frag_offset,
291 const uint32_t frag_data_len,
292 const bool more_frags);
293
322WS_DLL_PUBLIC fragment_head *
324 const int offset, const packet_info *pinfo,
325 const uint32_t id, const void *data,
326 const uint32_t frag_offset,
327 const uint32_t frag_data_len,
328 const bool more_frags, const uint32_t frag_frame);
329
365WS_DLL_PUBLIC fragment_head *
366fragment_add_check(reassembly_table *table, tvbuff_t *tvb, const int offset,
367 const packet_info *pinfo, const uint32_t id,
368 const void *data, const uint32_t frag_offset,
369 const uint32_t frag_data_len, const bool more_frags);
370
394WS_DLL_PUBLIC fragment_head *
395fragment_add_check_with_fallback(reassembly_table *table, tvbuff_t *tvb, const int offset,
396 const packet_info *pinfo, const uint32_t id,
397 const void *data, const uint32_t frag_offset,
398 const uint32_t frag_data_len, const bool more_frags,
399 const uint32_t fallback_frame);
400
446WS_DLL_PUBLIC fragment_head *
447fragment_add_seq(reassembly_table *table, tvbuff_t *tvb, const int offset,
448 const packet_info *pinfo, const uint32_t id, const void *data,
449 const uint32_t frag_number, const uint32_t frag_data_len,
450 const bool more_frags, const uint32_t flags);
451
478WS_DLL_PUBLIC fragment_head *
479fragment_add_seq_check(reassembly_table *table, tvbuff_t *tvb, const int offset,
480 const packet_info *pinfo, const uint32_t id,
481 const void *data,
482 const uint32_t frag_number, const uint32_t frag_data_len,
483 const bool more_frags);
484
504WS_DLL_PUBLIC fragment_head *
506 const int offset, const packet_info *pinfo,
507 const uint32_t id, const void *data,
508 const uint32_t frag_number, const uint32_t frag_data_len,
509 const bool more_frags);
510
533WS_DLL_PUBLIC fragment_head *
534fragment_add_seq_next(reassembly_table *table, tvbuff_t *tvb, const int offset,
535 const packet_info *pinfo, const uint32_t id,
536 const void *data, const uint32_t frag_data_len,
537 const bool more_frags);
538
563WS_DLL_PUBLIC fragment_head *
565 const int offset, const packet_info *pinfo, const uint32_t id,
566 const void* data, const uint32_t frag_data_len,
567 const bool first, const bool last,
568 const uint32_t max_frags);
569
590WS_DLL_PUBLIC fragment_head *
592 const int offset, const packet_info *pinfo, const uint32_t id,
593 const void* data, const uint32_t frag_data_len,
594 const bool first, const bool last,
595 const uint32_t max_frags, const uint32_t max_age);
596
606WS_DLL_PUBLIC void
608 const uint32_t id, const void *data,
609 const uint32_t tot_len);
610
626WS_DLL_PUBLIC fragment_head *
628 const uint32_t id, const void *data);
629
643WS_DLL_PUBLIC void
644fragment_add_seq_offset(reassembly_table *table, const packet_info *pinfo, const uint32_t id,
645 const void *data, const uint32_t fragment_offset);
646
664WS_DLL_PUBLIC void
666 const uint32_t id, const void *data, const uint32_t tot_len);
667
668
687WS_DLL_PUBLIC void
689 const uint32_t id, const void *data, const uint32_t tot_len);
690
710WS_DLL_PUBLIC void
712 const uint32_t id, const void *data, const uint32_t tot_len);
713
726WS_DLL_PUBLIC uint32_t
728 const uint32_t id, const void *data);
729
745WS_DLL_PUBLIC void
747 const packet_info *pinfo, const uint32_t id,
748 const void *data);
749
762WS_DLL_PUBLIC fragment_head *
763fragment_get(reassembly_table *table, const packet_info *pinfo,
764 const uint32_t id, const void *data);
765
766/* The same for the reassemble table */
775WS_DLL_PUBLIC fragment_head *
777 const uint32_t id);
778
795WS_DLL_PUBLIC tvbuff_t *
796fragment_delete(reassembly_table *table, const packet_info *pinfo,
797 const uint32_t id, const void *data);
798
829
843WS_DLL_PUBLIC tvbuff_t *
844process_reassembled_data(tvbuff_t *tvb, const int offset, packet_info *pinfo,
845 const char *name, fragment_head *fd_head, const fragment_items *fit,
846 bool *update_col_infop, proto_tree *tree);
847
859WS_DLL_PUBLIC bool
860show_fragment_tree(fragment_head *ipfd_head, const fragment_items *fit,
861 proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, proto_item **fi);
862
875WS_DLL_PUBLIC bool
877 proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, proto_item **fi);
878
885extern void reassembly_tables_init(void);
886
893extern void
895
896/* ===================== Streaming data reassembly helper ===================== */
923#define REASSEMBLE_ITEMS_DEFINE(var_prefix, name_prefix) \
924 static int ett_##var_prefix##_fragment; \
925 static int ett_##var_prefix##_fragments; \
926 static int hf_##var_prefix##_fragments; \
927 static int hf_##var_prefix##_fragment; \
928 static int hf_##var_prefix##_fragment_overlap; \
929 static int hf_##var_prefix##_fragment_overlap_conflicts; \
930 static int hf_##var_prefix##_fragment_multiple_tails; \
931 static int hf_##var_prefix##_fragment_too_long_fragment; \
932 static int hf_##var_prefix##_fragment_error; \
933 static int hf_##var_prefix##_fragment_count; \
934 static int hf_##var_prefix##_reassembled_in; \
935 static int hf_##var_prefix##_reassembled_length; \
936 static int hf_##var_prefix##_reassembled_data; \
937 static int hf_##var_prefix##_segment; \
938 static const fragment_items var_prefix##_fragment_items = { \
939 &ett_##var_prefix##_fragment, \
940 &ett_##var_prefix##_fragments, \
941 &hf_##var_prefix##_fragments, \
942 &hf_##var_prefix##_fragment, \
943 &hf_##var_prefix##_fragment_overlap, \
944 &hf_##var_prefix##_fragment_overlap_conflicts, \
945 &hf_##var_prefix##_fragment_multiple_tails, \
946 &hf_##var_prefix##_fragment_too_long_fragment, \
947 &hf_##var_prefix##_fragment_error, \
948 &hf_##var_prefix##_fragment_count, \
949 &hf_##var_prefix##_reassembled_in, \
950 &hf_##var_prefix##_reassembled_length, \
951 &hf_##var_prefix##_reassembled_data, \
952 name_prefix " fragments" \
953 }
954
1002#define REASSEMBLE_INIT_HF_ITEMS(var_prefix, name_prefix, abbrev_prefix) \
1003 { &hf_##var_prefix##_fragments, \
1004 { "Reassembled " name_prefix " fragments", abbrev_prefix ".fragments", \
1005 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } \
1006 }, \
1007 { &hf_##var_prefix##_fragment, \
1008 { name_prefix " fragment", abbrev_prefix ".fragment", \
1009 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL } \
1010 }, \
1011 { &hf_##var_prefix##_fragment_overlap, \
1012 { name_prefix " fragment overlap", abbrev_prefix ".fragment.overlap", \
1013 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
1014 }, \
1015 { &hf_##var_prefix##_fragment_overlap_conflicts, \
1016 { name_prefix " fragment overlapping with conflicting data", abbrev_prefix ".fragment.overlap.conflicts", \
1017 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
1018 }, \
1019 { &hf_##var_prefix##_fragment_multiple_tails, \
1020 { name_prefix " has multiple tail fragments", abbrev_prefix ".fragment.multiple_tails", \
1021 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
1022 }, \
1023 { &hf_##var_prefix##_fragment_too_long_fragment, \
1024 { name_prefix " fragment too long", abbrev_prefix ".fragment.too_long_fragment", \
1025 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
1026 }, \
1027 { &hf_##var_prefix##_fragment_error, \
1028 { name_prefix " defragment error", abbrev_prefix ".fragment.error", \
1029 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL } \
1030 }, \
1031 { &hf_##var_prefix##_fragment_count, \
1032 { name_prefix " fragment count", abbrev_prefix ".fragment.count", \
1033 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } \
1034 }, \
1035 { &hf_##var_prefix##_reassembled_in, \
1036 { "Reassembled in", abbrev_prefix ".reassembled.in", \
1037 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL } \
1038 }, \
1039 { &hf_##var_prefix##_reassembled_length, \
1040 { "Reassembled length", abbrev_prefix ".reassembled.length", \
1041 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } \
1042 }, \
1043 { &hf_##var_prefix##_reassembled_data, \
1044 { "Reassembled data", abbrev_prefix ".reassembled.data", \
1045 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } \
1046 }, \
1047 { &hf_##var_prefix##_segment, \
1048 { name_prefix " segment", abbrev_prefix ".segment", \
1049 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL} \
1050 }
1051
1083#define REASSEMBLE_INIT_ETT_ITEMS(var_prefix) \
1084 &ett_##var_prefix##_fragment, \
1085 &ett_##var_prefix##_fragments
1086
1089
1093WS_DLL_PUBLIC streaming_reassembly_info_t*
1095
1461WS_DLL_PUBLIC int
1463 tvbuff_t* tvb, packet_info* pinfo, unsigned offset, int length,
1464 proto_tree* segment_tree, proto_tree* reassembled_tree, reassembly_table streaming_reassembly_table,
1465 streaming_reassembly_info_t* reassembly_info, uint64_t cur_frame_num,
1466 struct dissector_handle* subdissector_handle, proto_tree* subdissector_tree, void* subdissector_data,
1467 const char* label, const fragment_items* frag_hf_items, int hf_segment_data
1468);
1469
1483static inline uint64_t
1484get_virtual_frame_num64(tvbuff_t* tvb, packet_info* pinfo, int offset)
1485{
1486 return (((uint64_t)pinfo->num) << 32) + (((uint64_t)pinfo->curr_layer_num) << 24)
1487 + ((uint64_t)tvb_raw_offset(tvb) + offset);
1488}
1489
1497WS_DLL_PUBLIC int
1499
1500/* ========================================================================= */
1501
1502#ifdef __cplusplus
1503}
1504#endif
unsigned tvb_raw_offset(tvbuff_t *tvb)
Returns the offset from the first byte of real data.
Definition tvbuff.c:5534
WS_DLL_PUBLIC fragment_head * fragment_add_seq_check(reassembly_table *table, tvbuff_t *tvb, const int offset, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t frag_number, const uint32_t frag_data_len, const bool more_frags)
Adds a fragment to the reassembly table and checks for sequence correctness.
Definition reassemble.c:2383
WS_DLL_PUBLIC fragment_head * fragment_end_seq_next(reassembly_table *table, const packet_info *pinfo, const uint32_t id, const void *data)
Adds a fragment with sequence numbering and sets an offset for subsequent fragments.
Definition reassemble.c:2765
WS_DLL_PUBLIC streaming_reassembly_info_t * streaming_reassembly_info_new(void)
Definition reassemble.c:3213
WS_DLL_PUBLIC fragment_head * fragment_add_seq_single(reassembly_table *table, tvbuff_t *tvb, const int offset, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t frag_data_len, const bool first, const bool last, const uint32_t max_frags)
Adds a single fragment to a reassembly table.
Definition reassemble.c:2714
WS_DLL_PUBLIC fragment_head * fragment_add_check(reassembly_table *table, tvbuff_t *tvb, const int offset, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t frag_offset, const uint32_t frag_data_len, const bool more_frags)
Adds a fragment to the reassembly table and checks for completeness.
Definition reassemble.c:1872
WS_DLL_PUBLIC fragment_head * fragment_add_seq_802_11(reassembly_table *table, tvbuff_t *tvb, const int offset, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t frag_number, const uint32_t frag_data_len, const bool more_frags)
Adds a fragment to an 802.11 reassembly table.
Definition reassemble.c:2395
WS_DLL_PUBLIC fragment_head * fragment_add_seq_single_aging(reassembly_table *table, tvbuff_t *tvb, const int offset, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t frag_data_len, const bool first, const bool last, const uint32_t max_frags, const uint32_t max_age)
Start a reassembly, expecting "tot_len" as the number of given fragments (not the number of bytes)....
Definition reassemble.c:2727
WS_DLL_PUBLIC void fragment_add_seq_offset(reassembly_table *table, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t fragment_offset)
Adds a fragment with sequence numbering and sets an offset for subsequent fragments.
Definition reassemble.c:689
WS_DLL_PUBLIC fragment_head * fragment_add_seq_next(reassembly_table *table, tvbuff_t *tvb, const int offset, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t frag_data_len, const bool more_frags)
Adds a fragment to a reassembly table for protocols with a single sequence number.
Definition reassemble.c:2408
WS_DLL_PUBLIC bool show_fragment_seq_tree(fragment_head *ipfd_head, const fragment_items *fit, proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, proto_item **fi)
Display the sequence tree for fragmented data.
Definition reassemble.c:3076
void reassembly_table_cleanup(void)
Cleanup internal structures used for reassembly.
Definition reassemble.c:3170
struct _fragment_head fragment_head
Represents the head of a fragment reassembly chain, tracking overall reassembly state across all cont...
struct _fragment_items fragment_items
Bundles all protocol tree and header field handles needed to display a reassembled fragment tree in t...
WS_DLL_PUBLIC void reassembly_table_register(reassembly_table *table, const reassembly_table_functions *funcs)
Register a reassembly table. By registering the table with epan, the creation and destruction of the ...
Definition reassemble.c:466
WS_DLL_PUBLIC fragment_head * fragment_get(reassembly_table *table, const packet_info *pinfo, const uint32_t id, const void *data)
Retrieves the partial or completed reassembly state for a packet.
Definition reassemble.c:664
WS_DLL_PUBLIC fragment_head * fragment_add_seq(reassembly_table *table, tvbuff_t *tvb, const int offset, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t frag_number, const uint32_t frag_data_len, const bool more_frags, const uint32_t flags)
Adds a fragment to the reassembly table and handles sequence-based reassembly.
Definition reassemble.c:2286
WS_DLL_PUBLIC fragment_head * fragment_add_out_of_order(reassembly_table *table, tvbuff_t *tvb, const int offset, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t frag_offset, const uint32_t frag_data_len, const bool more_frags, const uint32_t frag_frame)
Adds an out-of-order fragment to a reassembly table and maintains a table for completed reassemblies.
Definition reassemble.c:1767
WS_DLL_PUBLIC fragment_head * fragment_get_reassembled_id(reassembly_table *table, const packet_info *pinfo, const uint32_t id)
Get the reassembled data for a given ID.
Definition reassemble.c:671
WS_DLL_PUBLIC void fragment_set_tot_len(reassembly_table *table, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t tot_len)
Sets the expected total length for reassembly of a PDU.
Definition reassemble.c:817
WS_DLL_PUBLIC tvbuff_t * fragment_delete(reassembly_table *table, const packet_info *pinfo, const uint32_t id, const void *data)
Deletes a fragment from the reassembly table.
Definition reassemble.c:634
WS_DLL_PUBLIC bool show_fragment_tree(fragment_head *ipfd_head, const fragment_items *fit, proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, proto_item **fi)
Show the fragment tree for a sequence of fragments.
Definition reassemble.c:3025
WS_DLL_PUBLIC void reassembly_table_destroy(reassembly_table *table)
Destroy a reassembly table.
Definition reassemble.c:532
WS_DLL_PUBLIC fragment_head * fragment_add_check_with_fallback(reassembly_table *table, tvbuff_t *tvb, const int offset, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t frag_offset, const uint32_t frag_data_len, const bool more_frags, const uint32_t fallback_frame)
Adds a fragment to the reassembly table and checks for completeness.
Definition reassemble.c:1779
WS_DLL_PUBLIC fragment_head * fragment_add(reassembly_table *table, tvbuff_t *tvb, const int offset, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t frag_offset, const uint32_t frag_data_len, const bool more_frags)
Adds a fragment to a reassembly table.
Definition reassemble.c:1732
WS_DLL_PUBLIC int additional_bytes_expected_to_complete_reassembly(streaming_reassembly_info_t *reassembly_info)
Definition reassemble.c:3537
void reassembly_tables_init(void)
Initialize internal structures used for reassembly.
Definition reassemble.c:3155
struct _fragment_item fragment_item
Represents a single fragment contributing to a reassembled PDU.
WS_DLL_PUBLIC void fragment_reset_tot_len(reassembly_table *table, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t tot_len)
Clears the state of previously reassembled fragments and allows new fragments to extend the result ag...
Definition reassemble.c:857
WS_DLL_PUBLIC void fragment_truncate(reassembly_table *table, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t tot_len)
Adjusts the length of a fragment and resets defragmentation if necessary.
Definition reassemble.c:890
WS_DLL_PUBLIC void fragment_set_partial_reassembly(reassembly_table *table, const packet_info *pinfo, const uint32_t id, const void *data)
Set the partial reassembly flag for a fragment head.
Definition reassemble.c:988
WS_DLL_PUBLIC uint32_t fragment_get_tot_len(reassembly_table *table, const packet_info *pinfo, const uint32_t id, const void *data)
Get the total length of reassembled data.
Definition reassemble.c:965
WS_DLL_PUBLIC void fragment_start_seq_check(reassembly_table *table, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t tot_len)
Starts a sequence check for reassembly.
Definition reassemble.c:2741
WS_DLL_PUBLIC tvbuff_t * process_reassembled_data(tvbuff_t *tvb, const int offset, packet_info *pinfo, const char *name, fragment_head *fd_head, const fragment_items *fit, bool *update_col_infop, proto_tree *tree)
Process reassembled data and return a new tvbuff.
Definition reassemble.c:2832
WS_DLL_PUBLIC int reassemble_streaming_data_and_call_subdissector(tvbuff_t *tvb, packet_info *pinfo, unsigned offset, int length, proto_tree *segment_tree, proto_tree *reassembled_tree, reassembly_table streaming_reassembly_table, streaming_reassembly_info_t *reassembly_info, uint64_t cur_frame_num, struct dissector_handle *subdissector_handle, proto_tree *subdissector_tree, void *subdissector_data, const char *label, const fragment_items *frag_hf_items, int hf_segment_data)
WS_DLL_PUBLIC fragment_head * fragment_add_multiple_ok(reassembly_table *table, tvbuff_t *tvb, const int offset, const packet_info *pinfo, const uint32_t id, const void *data, const uint32_t frag_offset, const uint32_t frag_data_len, const bool more_frags)
Adds a fragment to a reassembly table, allowing for multiple tables.
Definition reassemble.c:1746
WS_DLL_PUBLIC void reassembly_table_init(reassembly_table *table, const reassembly_table_functions *funcs)
Initialize a reassembly table.
Definition reassemble.c:486
Represents the head of a fragment reassembly chain, tracking overall reassembly state across all cont...
Definition reassemble.h:77
unsigned ref_count
Definition reassemble.h:81
uint32_t flags
Definition reassemble.h:96
const char * error
Definition reassemble.h:98
struct _fragment_item * first_gap
Definition reassemble.h:79
uint32_t len
Definition reassemble.h:84
uint32_t contiguous_len
Definition reassemble.h:82
uint32_t datalen
Definition reassemble.h:88
uint32_t reassembled_in
Definition reassemble.h:91
uint32_t fragment_nr_offset
Definition reassemble.h:86
struct _fragment_item * next
Definition reassemble.h:78
uint8_t reas_in_layer_num
Definition reassemble.h:93
uint32_t frame
Definition reassemble.h:83
tvbuff_t * tvb_data
Definition reassemble.h:97
Represents a single fragment contributing to a reassembled PDU.
Definition reassemble.h:64
uint32_t frame
Definition reassemble.h:66
tvbuff_t * tvb_data
Definition reassemble.h:70
struct _fragment_item * next
Definition reassemble.h:65
uint32_t flags
Definition reassemble.h:69
uint32_t len
Definition reassemble.h:68
uint32_t offset
Definition reassemble.h:67
Bundles all protocol tree and header field handles needed to display a reassembled fragment tree in t...
Definition reassemble.h:811
int * hf_reassembled_length
Definition reassemble.h:824
int * hf_fragments
Definition reassemble.h:815
int * hf_fragment_multiple_tails
Definition reassemble.h:819
int * ett_fragments
Definition reassemble.h:813
int * hf_fragment_overlap
Definition reassemble.h:817
const char * tag
Definition reassemble.h:827
int * hf_reassembled_in
Definition reassemble.h:823
int * hf_fragment_count
Definition reassemble.h:822
int * hf_fragment_error
Definition reassemble.h:821
int * hf_reassembled_data
Definition reassemble.h:825
int * hf_fragment
Definition reassemble.h:816
int * hf_fragment_too_long_fragment
Definition reassemble.h:820
int * hf_fragment_overlap_conflict
Definition reassemble.h:818
int * ett_fragment
Definition reassemble.h:812
Represents the metadata and indexing information for a single captured frame.
Definition packet_info.h:43
uint32_t num
Definition packet_info.h:47
uint8_t curr_layer_num
Definition packet_info.h:150
Definition proto.h:909
Definition packet.c:852
Table of functions for a reassembly table.
Definition reassemble.h:151
GHashFunc hash_func
Hash function for fragment table keys.
Definition reassemble.h:155
fragment_temporary_key temporary_key_func
Create a temporary (short-lived) fragment key.
Definition reassemble.h:165
GEqualFunc equal_func
Equality function for fragment table keys.
Definition reassemble.h:160
GDestroyNotify free_temporary_key_func
Destroy a temporary fragment key.
Definition reassemble.h:175
GDestroyNotify free_persistent_key_func
Destroy a persistent fragment key.
Definition reassemble.h:180
fragment_persistent_key persistent_key_func
Create a persistent (long-lived) fragment key.
Definition reassemble.h:170
Tracks all in-progress fragment chains and completed reassemblies for a single reassembly context.
Definition reassemble.h:140
GDestroyNotify free_temporary_key_func
Definition reassemble.h:145
fragment_temporary_key temporary_key_func
Definition reassemble.h:143
GHashTable * reassembled_table
Definition reassemble.h:142
fragment_persistent_key persistent_key_func
Definition reassemble.h:144
GHashTable * fragment_table
Definition reassemble.h:141
Definition reassemble.c:3190
Core tvbuff (testy virtual buffer) structure representing a region of packet data,...
Definition tvbuff-int.h:95