Wireshark 4.7.3
The Wireshark network protocol analyzer
Loading...
Searching...
No Matches
packet.h
Go to the documentation of this file.
1
10#pragma once
11#include <wsutil/array.h>
12#include "proto.h"
13#include "range.h"
14#include "tvbuff.h"
15#include "epan.h"
16#include "frame_data.h"
17#include "packet_info.h"
18#include "column-utils.h"
19#include "guid-utils.h"
20
21#ifdef __cplusplus
22extern "C" {
23#endif /* __cplusplus */
24
25struct wtap_block;
26typedef struct wtap_block* wtap_block_t;
27
28
33
34#define hi_nibble(b) (((b) & 0xf0) >> 4)
35#define lo_nibble(b) ((b) & 0x0f)
36
37/* Check whether the "len" bytes of data starting at "offset" is
38 * entirely inside the captured data for this packet. */
39#define BYTES_ARE_IN_FRAME(offset, captured_len, len) \
40 ((unsigned)(offset) + (unsigned)(len) > (unsigned)(offset) && \
41 (unsigned)(offset) + (unsigned)(len) <= (unsigned)(captured_len))
42
43/* 0 is case sensitive for backwards compatibility with tables that
44 * used false or BASE_NONE for case sensitive, which was the default.
45 */
46#define STRING_CASE_SENSITIVE 0
47#define STRING_CASE_INSENSITIVE 1
48
52extern void packet_init(void);
53
57extern void packet_cache_proto_handles(void);
58
62extern void packet_all_tables_sort_handles(void);
63
67extern void packet_cleanup(void);
68
69/* Handle for dissectors you call directly or register with "dissector_add_uint()".
70 This handle is opaque outside of "packet.c". */
71struct dissector_handle;
72typedef struct dissector_handle *dissector_handle_t;
73
74/* Hash table for matching unsigned integers, or strings, and dissectors;
75 this is opaque outside of "packet.c". */
76struct dissector_table;
77typedef struct dissector_table *dissector_table_t;
78
79/*
80 * Dissector that returns:
81 *
82 * The amount of data in the protocol's PDU, if it was able to
83 * dissect all the data;
84 *
85 * 0, if the tvbuff doesn't contain a PDU for that protocol;
86 *
87 * The negative of the amount of additional data needed, if
88 * we need more data (e.g., from subsequent TCP segments) to
89 * dissect the entire PDU.
90 */
91typedef int (*dissector_t)(tvbuff_t *, packet_info *, proto_tree *, void *);
92
93/* Same as dissector_t with an extra parameter for callback pointer */
94typedef int (*dissector_cb_t)(tvbuff_t *, packet_info *, proto_tree *, void *, void *);
95
103typedef bool (*heur_dissector_t)(tvbuff_t *tvb, packet_info *pinfo,
104 proto_tree *tree, void *);
105
113
114typedef void (*DATFunc) (const char *table_name, ftenum_t selector_type,
115 void *key, void *value, void *user_data);
116typedef void (*DATFunc_handle) (const char *table_name, void *value,
117 void *user_data);
118typedef void (*DATFunc_table) (const char *table_name, const char *ui_name,
119 void *user_data);
120
121/* Opaque structure - provides type checking but no access to components */
122typedef struct dtbl_entry dtbl_entry_t;
123
130WS_DLL_PUBLIC dissector_handle_t dtbl_entry_get_handle(dtbl_entry_t *dtbl_entry);
131
139WS_DLL_PUBLIC dissector_handle_t dtbl_entry_get_initial_handle(dtbl_entry_t *entry);
140
150void dissector_table_foreach_changed (const char *table_name, DATFunc func,
151 void *user_data);
152
162WS_DLL_PUBLIC void dissector_table_foreach (const char *table_name, DATFunc func,
163 void *user_data);
164
173WS_DLL_PUBLIC void dissector_all_tables_foreach_changed (DATFunc func,
174 void *user_data);
175
185WS_DLL_PUBLIC void dissector_table_foreach_handle(const char *table_name, DATFunc_handle func,
186 void *user_data);
187
196WS_DLL_PUBLIC void dissector_all_tables_foreach_table (DATFunc_table func,
197 void *user_data, GCompareFunc compare_key_func);
198
213WS_DLL_PUBLIC dissector_table_t register_dissector_table(const char *name,
214 const char *ui_name, const int proto, const ftenum_t type, const int param);
215
226WS_DLL_PUBLIC dissector_table_t register_custom_dissector_table(const char *name,
227 const char *ui_name, const int proto, GHashFunc hash_func, GEqualFunc key_equal_func,
228 GDestroyNotify key_destroy_func);
229
235WS_DLL_PUBLIC void register_dissector_table_alias(dissector_table_t dissector_table,
236 const char *alias_name);
237
242void deregister_dissector_table(const char *name);
243
247WS_DLL_PUBLIC dissector_table_t find_dissector_table(const char *name);
248
252WS_DLL_PUBLIC const char *get_dissector_table_ui_name(const char *name);
253
257WS_DLL_PUBLIC ftenum_t get_dissector_table_selector_type(const char *name);
258
262WS_DLL_PUBLIC int get_dissector_table_param(const char *name);
263
270WS_DLL_PUBLIC void dissector_dump_dissector_tables(void);
271
276WS_DLL_PUBLIC void dissector_add_uint(const char *name, const uint32_t pattern,
277 dissector_handle_t handle);
278
284WS_DLL_PUBLIC void dissector_add_uint_with_preference(const char *name, const uint32_t pattern,
285 dissector_handle_t handle);
286
291WS_DLL_PUBLIC void dissector_add_uint_range(const char *abbrev, range_t *range,
292 dissector_handle_t handle);
293
299WS_DLL_PUBLIC void dissector_add_uint_range_with_preference(const char *abbrev, const char* range_str,
300 dissector_handle_t handle);
301
306WS_DLL_PUBLIC void dissector_delete_uint(const char *name, const uint32_t pattern,
307 dissector_handle_t handle);
308
313WS_DLL_PUBLIC void dissector_delete_uint_range(const char *abbrev, range_t *range,
314 dissector_handle_t handle);
315
321WS_DLL_PUBLIC void dissector_delete_all(const char *name, dissector_handle_t handle);
322
327WS_DLL_PUBLIC void dissector_change_uint(const char *abbrev, const uint32_t pattern,
328 dissector_handle_t handle);
329
333WS_DLL_PUBLIC void dissector_reset_uint(const char *name, const uint32_t pattern);
334
346WS_DLL_PUBLIC bool dissector_is_uint_changed(dissector_table_t const sub_dissectors, const uint32_t uint_val);
347
361WS_DLL_PUBLIC int dissector_try_uint(dissector_table_t sub_dissectors,
362 const uint32_t uint_val, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
363
380WS_DLL_PUBLIC int dissector_try_uint_with_data(dissector_table_t sub_dissectors,
381 const uint32_t uint_val, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, const bool add_proto_name, void *data);
382
390WS_DLL_PUBLIC dissector_handle_t dissector_get_uint_handle(
391 dissector_table_t const sub_dissectors, const uint32_t uint_val);
392
400WS_DLL_PUBLIC dissector_handle_t dissector_get_default_uint_handle(
401 const char *name, const uint32_t uint_val);
402
409WS_DLL_PUBLIC void dissector_add_string(const char *name, const char *pattern,
410 dissector_handle_t handle);
411
416WS_DLL_PUBLIC void dissector_delete_string(const char *name, const char *pattern,
417 dissector_handle_t handle);
418
423WS_DLL_PUBLIC void dissector_change_string(const char *name, const char *pattern,
424 dissector_handle_t handle);
425
429WS_DLL_PUBLIC void dissector_reset_string(const char *name, const char *pattern);
430
441WS_DLL_PUBLIC bool dissector_is_string_changed(dissector_table_t const subdissectors, const char *string);
442
456WS_DLL_PUBLIC int dissector_try_string_with_data(dissector_table_t sub_dissectors,
457 const char* string, tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, const bool add_proto_name, void* data);
458
466WS_DLL_PUBLIC dissector_handle_t dissector_get_string_handle(
467 dissector_table_t sub_dissectors, const char *string);
468
476WS_DLL_PUBLIC dissector_handle_t dissector_get_default_string_handle(
477 const char *name, const char *string);
478
485WS_DLL_PUBLIC void dissector_add_custom_table_handle(const char *name, void *pattern,
486 dissector_handle_t handle);
487
495WS_DLL_PUBLIC dissector_handle_t dissector_get_custom_table_handle(
496 dissector_table_t sub_dissectors, void *key);
497
503typedef struct _guid_key {
505 uint16_t ver;
507
514WS_DLL_PUBLIC void dissector_add_guid(const char *name, guid_key* guid_val,
515 dissector_handle_t handle);
516
532WS_DLL_PUBLIC int dissector_try_guid_with_data(dissector_table_t sub_dissectors,
533 guid_key* guid_val, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, const bool add_proto_name, void *data);
534
541WS_DLL_PUBLIC void dissector_delete_guid(const char *name, guid_key* guid_val,
542 dissector_handle_t handle);
543
551WS_DLL_PUBLIC dissector_handle_t dissector_get_guid_handle(
552 dissector_table_t const sub_dissectors, guid_key* guid_val);
553
572WS_DLL_PUBLIC int dissector_try_payload_with_data(dissector_table_t sub_dissectors,
573 tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, const bool add_proto_name, void *data);
574
578WS_DLL_PUBLIC void dissector_change_payload(const char *abbrev, dissector_handle_t handle);
579
582WS_DLL_PUBLIC void dissector_reset_payload(const char *name);
583
591WS_DLL_PUBLIC dissector_handle_t dissector_get_payload_handle(
592 dissector_table_t const dissector_table);
593
602WS_DLL_PUBLIC void dissector_add_for_decode_as(const char *name,
603 dissector_handle_t handle);
604
609WS_DLL_PUBLIC void dissector_add_for_decode_as_with_preference(const char *name,
610 dissector_handle_t handle);
611
615WS_DLL_PUBLIC GSList *dissector_table_get_dissector_handles(dissector_table_t dissector_table);
616
621WS_DLL_PUBLIC dissector_handle_t dissector_table_get_dissector_handle(dissector_table_t dissector_table, const char* description);
622
628WS_DLL_PUBLIC ftenum_t dissector_table_get_type(dissector_table_t dissector_table);
629
638WS_DEPRECATED_X("Use register_decode_as instead")
639WS_DLL_PUBLIC void dissector_table_allow_decode_as(dissector_table_t dissector_table);
640
648extern void
650
656WS_DLL_PUBLIC bool dissector_table_supports_decode_as(dissector_table_t dissector_table);
657
658/* List of "heuristic" dissectors (which get handed a packet, look at it,
659 and either recognize it as being for their protocol, dissect it, and
660 return true, or don't recognize it and return false) to be called
661 by another dissector.
662
663 This is opaque outside of "packet.c". */
665typedef struct heur_dissector_list *heur_dissector_list_t;
666
667
680
688WS_DLL_PUBLIC heur_dissector_list_t register_heur_dissector_list_with_description(const char *name, const char *ui_name, const int proto);
689
694WS_DLL_PUBLIC const char *heur_dissector_list_get_description(heur_dissector_list_t list);
695
702WS_DLL_PUBLIC heur_dissector_list_t register_heur_dissector_list(const char *name, const int proto);
703
705void deregister_heur_dissector_list(const char *name);
706
707typedef void (*DATFunc_heur) (const char *table_name,
708 struct heur_dtbl_entry *entry, void *user_data);
709typedef void (*DATFunc_heur_table) (const char *table_name,
710 struct heur_dissector_list *table, void *user_data);
711
721WS_DLL_PUBLIC void heur_dissector_table_foreach(const char *table_name,
722 DATFunc_heur func, void *user_data);
723
732WS_DLL_PUBLIC void dissector_all_heur_tables_foreach_table (DATFunc_heur_table func,
733 void *user_data, GCompareFunc compare_key_func);
734
740WS_DLL_PUBLIC bool has_heur_dissector_list(const char *name);
741
754WS_DLL_PUBLIC bool dissector_try_heuristic(heur_dissector_list_t sub_dissectors,
755 tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, heur_dtbl_entry_t **hdtbl_entry, void *data);
756
762WS_DLL_PUBLIC heur_dissector_list_t find_heur_dissector_list(const char *name);
763
769WS_DLL_PUBLIC heur_dtbl_entry_t* find_heur_dissector_by_unique_short_name(const char *short_name);
770
781WS_DLL_PUBLIC void heur_dissector_add(const char *name, heur_dissector_t dissector,
782 const char *display_name, const char *internal_name, const int proto, heuristic_enable_e enable);
783
791WS_DLL_PUBLIC void heur_dissector_delete(const char *name, heur_dissector_t dissector, const int proto);
792
802WS_DLL_PUBLIC dissector_handle_t register_dissector(const char *name,
803 dissector_t dissector, const int proto);
804
814WS_DLL_PUBLIC dissector_handle_t register_dissector_with_description(const char *name,
815 const char *description, dissector_t dissector, const int proto);
816
827WS_DLL_PUBLIC dissector_handle_t register_dissector_with_data(const char *name,
828 dissector_cb_t dissector, const int proto, void *cb_data);
829
834void deregister_dissector(const char *name);
835
843WS_DLL_PUBLIC const char *dissector_handle_get_protocol_long_name(
844 const dissector_handle_t handle);
845
853WS_DLL_PUBLIC const char *dissector_handle_get_protocol_short_name(
854 const dissector_handle_t handle);
855
862WS_DLL_PUBLIC const char *dissector_handle_get_description(
863 const dissector_handle_t handle);
864
873 const dissector_handle_t handle);
874
879WS_DLL_PUBLIC GList *get_dissector_names(void);
880
888WS_DLL_PUBLIC dissector_handle_t find_dissector(const char *name);
889
897WS_DLL_PUBLIC dissector_handle_t find_dissector_add_dependency(const char *name,
898 const int parent_proto);
899
907WS_DLL_PUBLIC const char *dissector_handle_get_dissector_name(
908 const dissector_handle_t handle);
909
916WS_DLL_PUBLIC const char *dissector_handle_get_pref_suffix(
917 const dissector_handle_t handle);
918
932WS_DLL_PUBLIC dissector_handle_t create_dissector_handle(dissector_t dissector,
933 const int proto);
934
951WS_DLL_PUBLIC dissector_handle_t create_dissector_handle_with_name(
952 dissector_t dissector, const int proto, const char *name);
953
968WS_DLL_PUBLIC dissector_handle_t create_dissector_handle_with_name_and_description(dissector_t dissector,
969 const int proto, const char* name, const char* description);
970
983WS_DLL_PUBLIC dissector_handle_t create_dissector_handle_with_data(
984 dissector_cb_t dissector, const int proto, void *cb_data);
985
989WS_DLL_PUBLIC void dissector_dump_dissectors(void);
990
1005WS_DLL_PUBLIC int call_dissector_with_data(dissector_handle_t handle, tvbuff_t *tvb,
1006 packet_info *pinfo, proto_tree *tree, void *data);
1007
1021WS_DLL_PUBLIC int call_dissector(dissector_handle_t handle, tvbuff_t *tvb,
1022 packet_info *pinfo, proto_tree *tree);
1023
1032WS_DLL_PUBLIC int call_data_dissector(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
1033
1047WS_DLL_PUBLIC int call_dissector_only(dissector_handle_t handle, tvbuff_t *tvb,
1048 packet_info *pinfo, proto_tree *tree, void *data);
1049
1057WS_DLL_PUBLIC void call_heur_dissector_direct(heur_dtbl_entry_t *heur_dtbl_entry, tvbuff_t *tvb,
1058 packet_info *pinfo, proto_tree *tree, void *data);
1059
1060/* This is opaque outside of "packet.c". */
1062typedef struct depend_dissector_list *depend_dissector_list_t;
1063
1074WS_DLL_PUBLIC bool register_depend_dissector(const char* parent, const char* dependent);
1075
1085WS_DLL_PUBLIC bool deregister_depend_dissector(const char* parent, const char* dependent);
1086
1092WS_DLL_PUBLIC depend_dissector_list_t find_depend_dissector_list(const char* name);
1093
1101WS_DLL_PUBLIC void set_actual_length(tvbuff_t *tvb, const unsigned specified_len);
1102
1110WS_DLL_PUBLIC void register_init_routine(void (*func)(void));
1111
1119WS_DLL_PUBLIC void register_cleanup_routine(void (*func)(void));
1120
1125WS_DLL_PUBLIC void register_shutdown_routine(void (*func)(void));
1126
1131void init_dissection(const char* app_env_var_prefix);
1132
1134void cleanup_dissection(void);
1135
1140WS_DLL_PUBLIC void register_postseq_cleanup_routine(void (*func)(void));
1141
1143WS_DLL_PUBLIC void postseq_cleanup_all_protocols(void);
1144
1154WS_DLL_PUBLIC void
1155register_final_registration_routine(void (*func)(void));
1156
1160extern void
1162
1163// XXX Should we move frame_data.encoding here?
1171
1172struct data_source;
1173
1183WS_DLL_PUBLIC struct data_source* add_new_data_source(packet_info *pinfo, tvbuff_t *tvb,
1184 const char *name);
1185
1192WS_DLL_PUBLIC void set_data_source_name(packet_info *pinfo, struct data_source *src, const char *name);
1193
1200WS_DLL_PUBLIC void set_data_source_media_type(struct data_source *src, data_source_media_type_e media_type);
1201
1210WS_DLL_PUBLIC void remove_last_data_source(packet_info *pinfo);
1211
1219WS_DLL_PUBLIC const char *get_data_source_name(const struct data_source *src);
1220
1228WS_DLL_PUBLIC char *get_data_source_description(const struct data_source *src);
1229
1238WS_DLL_PUBLIC tvbuff_t *get_data_source_tvb(const struct data_source *src);
1245WS_DLL_PUBLIC struct data_source *get_data_source_by_name(const packet_info *pinfo, const char *name);
1246
1253WS_DLL_PUBLIC struct data_source *get_data_source_by_tvb(const packet_info *pinfo, const tvbuff_t *tvb);
1254
1262WS_DLL_PUBLIC int32_t get_data_source_index_by_tvb(const packet_info *pinfo, const tvbuff_t *tvb);
1263
1269WS_DLL_PUBLIC data_source_media_type_e get_data_source_media_type(const struct data_source *src);
1270
1275extern void free_data_sources(packet_info *pinfo);
1276
1295WS_DLL_PUBLIC void mark_frame_as_depended_upon(frame_data *fd, uint32_t frame_num);
1296
1307
1311typedef struct file_data_s
1312{
1313 wtap_block_t pkt_block;
1316
1325extern void dissect_record(struct epan_dissect *edt, int file_type_subtype,
1326 wtap_rec *rec, frame_data *fd, column_info *cinfo);
1327
1335extern void dissect_file(struct epan_dissect *edt,
1336 wtap_rec *rec, frame_data *fd, column_info *cinfo);
1337
1349
1354WS_DLL_PUBLIC void dissector_dump_decodes(void);
1355
1359WS_DLL_PUBLIC void dissector_dump_heur_decodes(void);
1360
1361/*
1362 * postdissectors are to be called by packet-frame.c after every other
1363 * dissector has been called.
1364 */
1365
1370WS_DLL_PUBLIC void register_postdissector(dissector_handle_t handle);
1371
1388WS_DLL_PUBLIC void set_postdissector_wanted_hfids(dissector_handle_t handle,
1389 GArray *wanted_hfids);
1390
1396void deregister_postdissector(dissector_handle_t handle);
1397
1408extern bool have_postdissector(void);
1409
1423extern void call_all_postdissectors(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
1424
1434WS_DLL_PUBLIC bool postdissectors_want_hfids(void);
1435
1449extern void
1451
1457WS_DLL_PUBLIC void increment_dissection_depth(packet_info *pinfo);
1458
1465WS_DLL_PUBLIC void increment_dissection_depth_by_n(packet_info *pinfo, unsigned n);
1466
1471WS_DLL_PUBLIC void decrement_dissection_depth(packet_info *pinfo);
1472
1478WS_DLL_PUBLIC void decrement_dissection_depth_by_n(packet_info *pinfo, unsigned n);
1479
1481
1482#ifdef __cplusplus
1483}
1484#endif /* __cplusplus */
struct epan_dissect epan_dissect_t
Opaque type representing a single packet dissection context.
Definition epan.h:62
enum ftenum ftenum_t
Convenience typedef for ftenum.
Definition ftypes.h:190
DIAG_OFF_PEDANTIC struct _frame_data frame_data
Frame data structure.
WS_DLL_PUBLIC void dissector_table_foreach(const char *table_name, DATFunc func, void *user_data)
Definition packet.c:2630
WS_DLL_PUBLIC void register_postdissector(dissector_handle_t handle)
Register a postdissector; the argument is the dissector handle for it.
Definition packet.c:4179
WS_DLL_PUBLIC bool has_heur_dissector_list(const char *name)
Check if a heuristic dissector list of the given name exists.
Definition packet.c:2960
WS_DLL_PUBLIC int call_dissector_only(dissector_handle_t handle, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
Definition packet.c:3688
WS_DLL_PUBLIC const char * dissector_handle_get_protocol_long_name(const dissector_handle_t handle)
Return the long (full) protocol name for a dissector handle.
Definition packet.c:3387
void deregister_dissector(const char *name)
Deregister a previously registered dissector.
Definition packet.c:3672
WS_DLL_PUBLIC void dissector_add_uint_with_preference(const char *name, const uint32_t pattern, dissector_handle_t handle)
Add a uint-keyed entry to a dissector table and automatically register a corresponding user preferenc...
Definition packet.c:1504
WS_DLL_PUBLIC dissector_handle_t dissector_get_default_string_handle(const char *name, const char *string)
Definition packet.c:2128
WS_DLL_PUBLIC dissector_handle_t create_dissector_handle_with_data(dissector_cb_t dissector, const int proto, void *cb_data)
Create an anonymous, unregistered callback-style dissector handle.
Definition packet.c:3584
WS_DLL_PUBLIC void increment_dissection_depth_by_n(packet_info *pinfo, unsigned n)
Definition packet.c:4290
WS_DLL_PUBLIC dissector_handle_t dtbl_entry_get_handle(dtbl_entry_t *dtbl_entry)
Return the currently active dissector handle for a dissector table entry.
Definition packet.c:2311
WS_DLL_PUBLIC dissector_handle_t dissector_get_payload_handle(dissector_table_t const dissector_table)
Return the currently active dissector handle for a payload dissector table.
Definition packet.c:2305
WS_DLL_PUBLIC void set_actual_length(tvbuff_t *tvb, const unsigned specified_len)
Given a tvbuff, and a length from a packet header, adjust the length of the tvbuff to reflect the spe...
Definition packet.c:338
WS_DLL_PUBLIC heur_dtbl_entry_t * find_heur_dissector_by_unique_short_name(const char *short_name)
Definition packet.c:2964
WS_DLL_PUBLIC tvbuff_t * get_data_source_tvb(const struct data_source *src)
Return the tvbuff associated with a data source.
Definition packet.c:494
void dissector_table_foreach_changed(const char *table_name, DATFunc func, void *user_data)
Definition packet.c:2707
WS_DLL_PUBLIC dissector_handle_t dissector_get_default_uint_handle(const char *name, const uint32_t uint_val)
Definition packet.c:1822
WS_DLL_PUBLIC dissector_handle_t find_dissector_add_dependency(const char *name, const int parent_proto)
Find a registered dissector by name and record a protocol dependency.
Definition packet.c:3455
WS_DLL_PUBLIC dissector_handle_t register_dissector(const char *name, dissector_t dissector, const int proto)
Register a new dissector with the global dissector registry.
Definition packet.c:3626
void deregister_dissector_table(const char *name)
Deregister the dissector table by table name.
Definition packet.c:2898
void packet_cleanup(void)
Clean up the packet dissection engine.
Definition packet.c:310
WS_DLL_PUBLIC void dissector_add_uint(const char *name, const uint32_t pattern, dissector_handle_t handle)
Add a uint-keyed entry to a dissector table.
Definition packet.c:1351
WS_DLL_PUBLIC dissector_handle_t dissector_get_guid_handle(dissector_table_t const sub_dissectors, guid_key *guid_val)
Definition packet.c:2267
WS_DLL_PUBLIC void set_postdissector_wanted_hfids(dissector_handle_t handle, GArray *wanted_hfids)
Definition packet.c:4189
WS_DLL_PUBLIC dissector_handle_t register_dissector_with_data(const char *name, dissector_cb_t dissector, const int proto, void *cb_data)
Register a new dissector that carries an opaque callback pointer.
Definition packet.c:3646
WS_DLL_PUBLIC void dissector_change_uint(const char *abbrev, const uint32_t pattern, dissector_handle_t handle)
Override the dissector for a uint value in a dissector table.
Definition packet.c:1650
WS_DLL_PUBLIC heur_dissector_list_t find_heur_dissector_list(const char *name)
Definition packet.c:2954
WS_DLL_PUBLIC void dissector_delete_string(const char *name, const char *pattern, dissector_handle_t handle)
Remove the entry for a specific string value from a dissector table.
Definition packet.c:1940
WS_DLL_PUBLIC ftenum_t dissector_table_get_type(dissector_table_t dissector_table)
Return the selector field type of a dissector table.
Definition packet.c:2502
void call_all_postdissectors(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
Invoke all registered postdissectors on the current frame.
Definition packet.c:4243
WS_DLL_PUBLIC void dissector_dump_decodes(void)
Dump layer/selector/dissector records in a fashion similar to the proto_registrar_dump_* routines.
Definition packet.c:4008
void packet_all_tables_sort_handles(void)
Sort the dissector handles in all dissector tables.
Definition packet.c:2339
WS_DLL_PUBLIC void register_postseq_cleanup_routine(void(*func)(void))
Allow protocols to register a "cleanup" routine to be run after the initial sequential run through th...
Definition packet.c:419
WS_DLL_PUBLIC int dissector_try_uint(dissector_table_t sub_dissectors, const uint32_t uint_val, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
Try to dissect using a uint-keyed dissector table entry.
Definition packet.c:1800
WS_DLL_PUBLIC const char * dissector_handle_get_dissector_name(const dissector_handle_t handle)
Return the registered name of a dissector from its handle.
Definition packet.c:3468
void deregister_heur_dissector_list(const char *name)
Definition packet.c:3361
WS_DLL_PUBLIC void dissector_dump_heur_decodes(void)
For each heuristic dissector table, dump list of dissectors (filter_names) for that table.
Definition packet.c:3329
WS_DLL_PUBLIC dissector_handle_t dissector_get_custom_table_handle(dissector_table_t sub_dissectors, void *key)
Definition packet.c:2171
WS_DLL_PUBLIC GList * get_dissector_names(void)
Return a GList of all registered dissector name strings.
Definition packet.c:3438
WS_DLL_PUBLIC const char * dissector_handle_get_description(const dissector_handle_t handle)
Return the user-visible description for a dissector handle.
Definition packet.c:3409
WS_DLL_PUBLIC void dissector_delete_uint(const char *name, const uint32_t pattern, dissector_handle_t handle)
Remove the entry for a specific uint value from a dissector table.
Definition packet.c:1533
bool dissector_table_supports_decode_as(dissector_table_t dissector_table)
Return whether a dissector table supports Decode As.
Definition packet.c:2522
WS_DLL_PUBLIC void decrement_dissection_depth(packet_info *pinfo)
Decrement the dissection depth.
Definition packet.c:4308
WS_DLL_PUBLIC void register_init_routine(void(*func)(void))
Definition packet.c:352
struct file_data_s file_data_t
Holds the data passed to the file dissector for dissection of a capture file as a whole.
WS_DLL_PUBLIC dissector_handle_t dissector_get_uint_handle(dissector_table_t const sub_dissectors, const uint32_t uint_val)
Definition packet.c:1810
WS_DLL_PUBLIC void heur_dissector_delete(const char *name, heur_dissector_t dissector, const int proto)
Definition packet.c:3056
WS_DLL_PUBLIC void set_data_source_name(packet_info *pinfo, struct data_source *src, const char *name)
Definition packet.c:452
WS_DLL_PUBLIC bool register_depend_dissector(const char *parent, const char *dependent)
Definition packet.c:3808
struct _guid_key guid_key
Lookup key for GUID-indexed dissector tables, combining a GUID with an optional version field.
void deregister_postdissector(dissector_handle_t handle)
Deregister a postdissector. Not for use in (post)dissectors or applications; only to be used by libwi...
Definition packet.c:4207
WS_DLL_PUBLIC void register_cleanup_routine(void(*func)(void))
Definition packet.c:358
WS_DLL_PUBLIC dissector_handle_t create_dissector_handle(dissector_t dissector, const int proto)
Create an anonymous, unregistered dissector handle.
Definition packet.c:3566
WS_DLL_PUBLIC const char * dissector_handle_get_pref_suffix(const dissector_handle_t handle)
Return the preferences suffix string for a dissector handle.
Definition packet.c:3477
WS_DLL_PUBLIC int dissector_try_string_with_data(dissector_table_t sub_dissectors, const char *string, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, const bool add_proto_name, void *data)
Look for a given string in a given dissector table and, if found, call the dissector with the argumen...
Definition packet.c:2057
WS_DLL_PUBLIC const char * dissector_handle_get_protocol_short_name(const dissector_handle_t handle)
Return the short protocol name for a dissector handle.
Definition packet.c:3398
WS_DLL_PUBLIC bool dissector_is_string_changed(dissector_table_t const subdissectors, const char *string)
Return whether a string dissector table entry has been overridden.
Definition packet.c:2043
WS_DLL_PUBLIC void dissector_delete_uint_range(const char *abbrev, range_t *range, dissector_handle_t handle)
Remove a range of uint-keyed entries from a dissector table.
Definition packet.c:1556
WS_DLL_PUBLIC void remove_last_data_source(packet_info *pinfo)
Remove the most recently added data source from a packet.
Definition packet.c:467
WS_DLL_PUBLIC void dissector_change_string(const char *name, const char *pattern, dissector_handle_t handle)
Override the dissector for a string value in a dissector table.
Definition packet.c:1965
WS_DLL_PUBLIC ftenum_t get_dissector_table_selector_type(const char *name)
Return the field type of the selector for a dissector table.
Definition packet.c:2925
WS_DLL_PUBLIC void register_final_registration_routine(void(*func)(void))
Definition packet.c:600
WS_DLL_PUBLIC void heur_dissector_table_foreach(const char *table_name, DATFunc_heur func, void *user_data)
Definition packet.c:3226
WS_DLL_PUBLIC void dissector_add_custom_table_handle(const char *name, void *pattern, dissector_handle_t handle)
Add an entry to a "custom" dissector table.
Definition packet.c:2144
WS_DLL_PUBLIC void dissector_add_uint_range(const char *abbrev, range_t *range, dissector_handle_t handle)
Add a range of uint-keyed entries to a dissector table.
Definition packet.c:1369
void dissector_table_allow_decode_as(dissector_table_t dissector_table)
Mark a dissector table as supporting Decode As.
Definition packet.c:2516
WS_DLL_PUBLIC void dissector_change_payload(const char *abbrev, dissector_handle_t handle)
Override the payload dissector for an FT_NONE dissector table.
Definition packet.c:2290
heuristic_enable_e
Controls whether a heuristic dissector is active.
Definition packet.h:109
WS_DLL_PUBLIC void dissector_dump_dissector_tables(void)
Print information about all registered dissector tables to standard output.
Definition packet.c:4112
struct frame_data_s frame_data_t
Holds the data passed to the frame dissector for dissection of a single packet frame.
WS_DLL_PUBLIC struct data_source * get_data_source_by_name(const packet_info *pinfo, const char *name)
Definition packet.c:506
WS_DLL_PUBLIC dissector_handle_t find_dissector(const char *name)
Find a registered dissector by name.
Definition packet.c:3449
WS_DLL_PUBLIC int call_dissector(dissector_handle_t handle, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
Call a dissector through its handle, falling back to the data dissector.
Definition packet.c:3719
void dissect_file(struct epan_dissect *edt, wtap_rec *rec, frame_data *fd, column_info *cinfo)
Dissectors should never modify the file data.
Definition packet.c:779
void init_dissection(const char *app_env_var_prefix)
Initialize all data structures used for dissection.
Definition packet.c:372
WS_DLL_PUBLIC void increment_dissection_depth(packet_info *pinfo)
Definition packet.c:4297
WS_DLL_PUBLIC void dissector_all_tables_foreach_table(DATFunc_table func, void *user_data, GCompareFunc compare_key_func)
Definition packet.c:2762
WS_DLL_PUBLIC void dissector_all_heur_tables_foreach_table(DATFunc_heur_table func, void *user_data, GCompareFunc compare_key_func)
Definition packet.c:3282
void packet_init(void)
Initialize the packet dissection engine.
Definition packet.c:229
void dissect_record(struct epan_dissect *edt, int file_type_subtype, wtap_rec *rec, frame_data *fd, column_info *cinfo)
Dissectors should never modify the record data.
Definition packet.c:617
WS_DLL_PUBLIC void dissector_reset_string(const char *name, const char *pattern)
Reset a string dissector table entry to its initial registered value.
Definition packet.c:2011
WS_DLL_PUBLIC char * get_data_source_description(const struct data_source *src)
Return the description of a data source.
Definition packet.c:476
WS_DLL_PUBLIC GSList * dissector_table_get_dissector_handles(dissector_table_t dissector_table)
Return the list of all dissector handles registered with a table.
Definition packet.c:2455
WS_DLL_PUBLIC void dissector_all_tables_foreach_changed(DATFunc func, void *user_data)
Definition packet.c:2691
WS_DLL_PUBLIC void dissector_reset_payload(const char *name)
Reset an FT_NONE payload dissector table to its initial registered value.
Definition packet.c:2296
WS_DLL_PUBLIC dissector_handle_t create_dissector_handle_with_name_and_description(dissector_t dissector, const int proto, const char *name, const char *description)
Definition packet.c:3543
WS_DLL_PUBLIC int dissector_handle_get_protocol_index(const dissector_handle_t handle)
Return the protocol index for a dissector handle.
Definition packet.c:3420
WS_DLL_PUBLIC void mark_frame_as_depended_upon(frame_data *fd, uint32_t frame_num)
Mark another frame as depended upon by the current frame.
Definition packet.c:576
WS_DLL_PUBLIC dissector_table_t register_dissector_table(const char *name, const char *ui_name, const int proto, const ftenum_t type, const int param)
a protocol uses the function to register a sub-dissector table
Definition packet.c:2785
WS_DLL_PUBLIC bool dissector_is_uint_changed(dissector_table_t const sub_dissectors, const uint32_t uint_val)
Return whether a uint dissector table entry has been overridden.
Definition packet.c:1728
WS_DLL_PUBLIC void set_data_source_media_type(struct data_source *src, data_source_media_type_e media_type)
Definition packet.c:459
WS_DLL_PUBLIC depend_dissector_list_t find_depend_dissector_list(const char *name)
Definition packet.c:3841
WS_DLL_PUBLIC const char * heur_dissector_list_get_description(heur_dissector_list_t list)
Definition packet.c:3372
void cleanup_dissection(void)
Free data structures allocated for dissection.
Definition packet.c:397
void packet_cache_proto_handles(void)
Cache protocol handles for fast lookup during dissection.
Definition packet.c:253
WS_DLL_PUBLIC void dissector_delete_guid(const char *name, guid_key *guid_val, dissector_handle_t handle)
Delete a GUID from a dissector table.
Definition packet.c:1571
WS_DLL_PUBLIC void register_dissector_table_alias(dissector_table_t dissector_table, const char *alias_name)
Definition packet.c:2880
WS_DLL_PUBLIC bool postdissectors_want_hfids(void)
Return whether any postdissector has requested specific hfids.
Definition packet.c:4254
WS_DLL_PUBLIC bool deregister_depend_dissector(const char *parent, const char *dependent)
Definition packet.c:3831
WS_DLL_PUBLIC void decrement_dissection_depth_by_n(packet_info *pinfo, unsigned n)
Decrement the dissection depth by a value.
Definition packet.c:4302
WS_DLL_PUBLIC int call_data_dissector(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
Call a data dissector.
Definition packet.c:3726
WS_DLL_PUBLIC struct data_source * add_new_data_source(packet_info *pinfo, tvbuff_t *tvb, const char *name)
Definition packet.c:437
WS_DLL_PUBLIC void dissector_add_guid(const char *name, guid_key *guid_val, dissector_handle_t handle)
Add an entry to a guid dissector table.
Definition packet.c:2181
WS_DLL_PUBLIC int call_dissector_with_data(dissector_handle_t handle, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
Call a dissector through a handle and if no dissector was found pass it over to the "data" dissector ...
Definition packet.c:3702
WS_DLL_PUBLIC void call_heur_dissector_direct(heur_dtbl_entry_t *heur_dtbl_entry, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
Definition packet.c:3735
WS_DLL_PUBLIC void dissector_add_string(const char *name, const char *pattern, dissector_handle_t handle)
Add a string-keyed entry to a dissector table.
Definition packet.c:1878
void prime_epan_dissect_with_postdissector_wanted_hfids(epan_dissect_t *edt)
Prime an epan_dissect_t with all hfids requested by postdissectors.
Definition packet.c:4269
WS_DLL_PUBLIC void heur_dissector_add(const char *name, heur_dissector_t dissector, const char *display_name, const char *internal_name, const int proto, heuristic_enable_e enable)
Definition packet.c:2970
WS_DLL_PUBLIC void postseq_cleanup_all_protocols(void)
Call all the registered "postseq_cleanup" routines.
Definition packet.c:427
WS_DLL_PUBLIC dissector_handle_t register_dissector_with_description(const char *name, const char *description, dissector_t dissector, const int proto)
Register a new dissector with a custom user-visible description.
Definition packet.c:3636
bool have_postdissector(void)
Return whether any postdissectors are registered.
Definition packet.c:4225
WS_DLL_PUBLIC dissector_handle_t create_dissector_handle_with_name(dissector_t dissector, const int proto, const char *name)
Create a named, unregistered dissector handle.
Definition packet.c:3558
WS_DLL_PUBLIC struct data_source * get_data_source_by_tvb(const packet_info *pinfo, const tvbuff_t *tvb)
Definition packet.c:524
bool(* heur_dissector_t)(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *)
Definition packet.h:103
WS_DLL_PUBLIC dissector_handle_t dissector_table_get_dissector_handle(dissector_table_t dissector_table, const char *description)
Look up a dissector handle in a table by its description string.
Definition packet.c:2485
void free_data_sources(packet_info *pinfo)
Free up a frame's list of data sources.
Definition packet.c:567
WS_DLL_PUBLIC void dissector_add_for_decode_as(const char *name, dissector_handle_t handle)
Register a dissector handle as a candidate for Decode As on a table.
Definition packet.c:2358
void dissector_table_allow_decode_as_internal(dissector_table_t dissector_table)
Mark a dissector table as supporting Decode As.
Definition packet.c:2508
WS_DLL_PUBLIC heur_dissector_list_t register_heur_dissector_list(const char *name, const int proto)
Definition packet.c:3355
WS_DLL_PUBLIC const char * get_data_source_name(const struct data_source *src)
Return the display name of a data source.
Definition packet.c:485
void final_registration_all_protocols(void)
Call all the registered "final_registration" routines.
Definition packet.c:608
WS_DLL_PUBLIC int dissector_try_uint_with_data(dissector_table_t sub_dissectors, const uint32_t uint_val, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, const bool add_proto_name, void *data)
Try to dissect using a uint-keyed dissector table entry, with additional options and caller data.
Definition packet.c:1743
data_source_media_type_e
MIME media type descriptor for a packet data source buffer.
Definition packet.h:1167
struct ethertype_data_s ethertype_data_t
Holds the parameters passed to the Ethertype dissector for dissecting an Ethernet payload.
WS_DLL_PUBLIC void dissector_table_foreach_handle(const char *table_name, DATFunc_handle func, void *user_data)
Definition packet.c:2649
WS_DLL_PUBLIC const char * get_dissector_table_ui_name(const char *name)
Return the UI display name for a dissector table.
Definition packet.c:2916
WS_DLL_PUBLIC bool dissector_try_heuristic(heur_dissector_list_t sub_dissectors, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, heur_dtbl_entry_t **hdtbl_entry, void *data)
Definition packet.c:3082
WS_DLL_PUBLIC dissector_table_t find_dissector_table(const char *name)
Find a dissector table by its internal name.
Definition packet.c:1219
WS_DLL_PUBLIC dissector_handle_t dtbl_entry_get_initial_handle(dtbl_entry_t *entry)
Return the initial (registered) dissector handle for a dissector table entry.
Definition packet.c:2449
WS_DLL_PUBLIC void register_shutdown_routine(void(*func)(void))
Definition packet.c:365
WS_DLL_PUBLIC int dissector_try_payload_with_data(dissector_table_t sub_dissectors, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, const bool add_proto_name, void *data)
Invoke the currently assigned payload dissector for a dissector table.
Definition packet.c:2282
WS_DLL_PUBLIC void dissector_dump_dissectors(void)
Dump all registered dissectors to the standard output.
Definition packet.c:4151
WS_DLL_PUBLIC void dissector_reset_uint(const char *name, const uint32_t pattern)
Reset a uint dissector table entry to its initial registered value.
Definition packet.c:1695
WS_DLL_PUBLIC void dissector_add_for_decode_as_with_preference(const char *name, dissector_handle_t handle)
Same as dissector_add_for_decode_as(), but also registers a user preference for the dissector table v...
Definition packet.c:2436
WS_DLL_PUBLIC int dissector_try_guid_with_data(dissector_table_t sub_dissectors, guid_key *guid_val, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, const bool add_proto_name, void *data)
Look for a given value in a given guid dissector table and, if found, call the dissector with the arg...
Definition packet.c:2213
WS_DLL_PUBLIC void dissector_delete_all(const char *name, dissector_handle_t handle)
Remove all entries for a given dissector handle from a table.
Definition packet.c:1618
WS_DLL_PUBLIC dissector_table_t register_custom_dissector_table(const char *name, const char *ui_name, const int proto, GHashFunc hash_func, GEqualFunc key_equal_func, GDestroyNotify key_destroy_func)
Similar to register_dissector_table, but with a "custom" hash function to store subdissectors.
Definition packet.c:2852
WS_DLL_PUBLIC void dissector_add_uint_range_with_preference(const char *abbrev, const char *range_str, dissector_handle_t handle)
Add a range of uint-keyed entries to a dissector table and automatically register a corresponding use...
Definition packet.c:1515
WS_DLL_PUBLIC int32_t get_data_source_index_by_tvb(const packet_info *pinfo, const tvbuff_t *tvb)
Definition packet.c:538
WS_DLL_PUBLIC dissector_handle_t dissector_get_string_handle(dissector_table_t sub_dissectors, const char *string)
Definition packet.c:2113
WS_DLL_PUBLIC int get_dissector_table_param(const char *name)
Return the parameter value associated with a dissector table.
Definition packet.c:2934
WS_DLL_PUBLIC data_source_media_type_e get_data_source_media_type(const struct data_source *src)
Definition packet.c:554
struct heur_dtbl_entry heur_dtbl_entry_t
Represents a single entry in a heuristic dissector table, binding a heuristic dissector to its protoc...
WS_DLL_PUBLIC heur_dissector_list_t register_heur_dissector_list_with_description(const char *name, const char *ui_name, const int proto)
Definition packet.c:3336
@ HEURISTIC_DISABLE
Definition packet.h:110
@ HEURISTIC_ENABLE
Definition packet.h:111
@ DS_MEDIA_TYPE_APPLICATION_JSON
Definition packet.h:1169
@ DS_MEDIA_TYPE_APPLICATION_OCTET_STREAM
Definition packet.h:1168
struct _packet_info packet_info
Represents the metadata and indexing information for a single captured frame.
struct _protocol protocol_t
Definition proto.h:100
struct _e_guid_t e_guid_t
Represents a GUID/UUID value; may be larger than GUID_LEN so must not be used to directly overlay pac...
struct epan_range range_t
Lookup key for GUID-indexed dissector tables, combining a GUID with an optional version field.
Definition packet.h:503
uint16_t ver
Definition packet.h:505
e_guid_t guid
Definition packet.h:504
Definition packet.c:56
Definition packet.c:129
Definition packet.c:867
Definition packet.c:97
Definition packet.c:1212
Holds all state for the dissection of a single byte array, including session, buffer,...
Definition epan_dissect.h:28
Holds the parameters passed to the Ethertype dissector for dissecting an Ethernet payload.
Definition packet.h:1342
int payload_offset
Definition packet.h:1344
uint16_t etype
Definition packet.h:1343
int fcs_len
Definition packet.h:1347
proto_tree * fh_tree
Definition packet.h:1345
int trailer_id
Definition packet.h:1346
Holds the data passed to the file dissector for dissection of a capture file as a whole.
Definition packet.h:1312
wtap_block_t pkt_block
Definition packet.h:1313
struct epan_dissect * color_edt
Definition packet.h:1314
Holds the data passed to the frame dissector for dissection of a single packet frame.
Definition packet.h:1301
int file_type_subtype
Definition packet.h:1302
wtap_block_t pkt_block
Definition packet.h:1303
struct epan_dissect * color_edt
Definition packet.h:1305
Definition packet.c:186
Represents a single entry in a heuristic dissector table, binding a heuristic dissector to its protoc...
Definition packet.h:671
const char * display_name
Definition packet.h:675
char * list_name
Definition packet.h:674
char * short_name
Definition packet.h:676
bool enabled
Definition packet.h:677
bool enabled_by_default
Definition packet.h:678
heur_dissector_t dissector
Definition packet.h:672
protocol_t * protocol
Definition packet.h:673
A single instance of a pcapng block, holding its type descriptor, mandatory data payload,...
Definition wtap_opttypes.h:274
Represents a single capture record read from or written to a capture file, regardless of record type.
Definition wtap.h:1599