Wireshark 4.7.2
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
649
655WS_DLL_PUBLIC bool dissector_table_supports_decode_as(dissector_table_t dissector_table);
656
657/* List of "heuristic" dissectors (which get handed a packet, look at it,
658 and either recognize it as being for their protocol, dissect it, and
659 return true, or don't recognize it and return false) to be called
660 by another dissector.
661
662 This is opaque outside of "packet.c". */
664typedef struct heur_dissector_list *heur_dissector_list_t;
665
666
679
687WS_DLL_PUBLIC heur_dissector_list_t register_heur_dissector_list_with_description(const char *name, const char *ui_name, const int proto);
688
693WS_DLL_PUBLIC const char *heur_dissector_list_get_description(heur_dissector_list_t list);
694
701WS_DLL_PUBLIC heur_dissector_list_t register_heur_dissector_list(const char *name, const int proto);
702
704void deregister_heur_dissector_list(const char *name);
705
706typedef void (*DATFunc_heur) (const char *table_name,
707 struct heur_dtbl_entry *entry, void *user_data);
708typedef void (*DATFunc_heur_table) (const char *table_name,
709 struct heur_dissector_list *table, void *user_data);
710
720WS_DLL_PUBLIC void heur_dissector_table_foreach(const char *table_name,
721 DATFunc_heur func, void *user_data);
722
731WS_DLL_PUBLIC void dissector_all_heur_tables_foreach_table (DATFunc_heur_table func,
732 void *user_data, GCompareFunc compare_key_func);
733
739WS_DLL_PUBLIC bool has_heur_dissector_list(const char *name);
740
753WS_DLL_PUBLIC bool dissector_try_heuristic(heur_dissector_list_t sub_dissectors,
754 tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, heur_dtbl_entry_t **hdtbl_entry, void *data);
755
761WS_DLL_PUBLIC heur_dissector_list_t find_heur_dissector_list(const char *name);
762
768WS_DLL_PUBLIC heur_dtbl_entry_t* find_heur_dissector_by_unique_short_name(const char *short_name);
769
780WS_DLL_PUBLIC void heur_dissector_add(const char *name, heur_dissector_t dissector,
781 const char *display_name, const char *internal_name, const int proto, heuristic_enable_e enable);
782
790WS_DLL_PUBLIC void heur_dissector_delete(const char *name, heur_dissector_t dissector, const int proto);
791
801WS_DLL_PUBLIC dissector_handle_t register_dissector(const char *name,
802 dissector_t dissector, const int proto);
803
813WS_DLL_PUBLIC dissector_handle_t register_dissector_with_description(const char *name,
814 const char *description, dissector_t dissector, const int proto);
815
826WS_DLL_PUBLIC dissector_handle_t register_dissector_with_data(const char *name,
827 dissector_cb_t dissector, const int proto, void *cb_data);
828
833void deregister_dissector(const char *name);
834
842WS_DLL_PUBLIC const char *dissector_handle_get_protocol_long_name(
843 const dissector_handle_t handle);
844
852WS_DLL_PUBLIC const char *dissector_handle_get_protocol_short_name(
853 const dissector_handle_t handle);
854
861WS_DLL_PUBLIC const char *dissector_handle_get_description(
862 const dissector_handle_t handle);
863
872 const dissector_handle_t handle);
873
878WS_DLL_PUBLIC GList *get_dissector_names(void);
879
887WS_DLL_PUBLIC dissector_handle_t find_dissector(const char *name);
888
896WS_DLL_PUBLIC dissector_handle_t find_dissector_add_dependency(const char *name,
897 const int parent_proto);
898
906WS_DLL_PUBLIC const char *dissector_handle_get_dissector_name(
907 const dissector_handle_t handle);
908
915WS_DLL_PUBLIC const char *dissector_handle_get_pref_suffix(
916 const dissector_handle_t handle);
917
931WS_DLL_PUBLIC dissector_handle_t create_dissector_handle(dissector_t dissector,
932 const int proto);
933
950WS_DLL_PUBLIC dissector_handle_t create_dissector_handle_with_name(
951 dissector_t dissector, const int proto, const char *name);
952
967WS_DLL_PUBLIC dissector_handle_t create_dissector_handle_with_name_and_description(dissector_t dissector,
968 const int proto, const char* name, const char* description);
969
982WS_DLL_PUBLIC dissector_handle_t create_dissector_handle_with_data(
983 dissector_cb_t dissector, const int proto, void *cb_data);
984
988WS_DLL_PUBLIC void dissector_dump_dissectors(void);
989
1004WS_DLL_PUBLIC int call_dissector_with_data(dissector_handle_t handle, tvbuff_t *tvb,
1005 packet_info *pinfo, proto_tree *tree, void *data);
1006
1020WS_DLL_PUBLIC int call_dissector(dissector_handle_t handle, tvbuff_t *tvb,
1021 packet_info *pinfo, proto_tree *tree);
1022
1031WS_DLL_PUBLIC int call_data_dissector(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
1032
1046WS_DLL_PUBLIC int call_dissector_only(dissector_handle_t handle, tvbuff_t *tvb,
1047 packet_info *pinfo, proto_tree *tree, void *data);
1048
1056WS_DLL_PUBLIC void call_heur_dissector_direct(heur_dtbl_entry_t *heur_dtbl_entry, tvbuff_t *tvb,
1057 packet_info *pinfo, proto_tree *tree, void *data);
1058
1059/* This is opaque outside of "packet.c". */
1061typedef struct depend_dissector_list *depend_dissector_list_t;
1062
1073WS_DLL_PUBLIC bool register_depend_dissector(const char* parent, const char* dependent);
1074
1084WS_DLL_PUBLIC bool deregister_depend_dissector(const char* parent, const char* dependent);
1085
1091WS_DLL_PUBLIC depend_dissector_list_t find_depend_dissector_list(const char* name);
1092
1100WS_DLL_PUBLIC void set_actual_length(tvbuff_t *tvb, const unsigned specified_len);
1101
1109WS_DLL_PUBLIC void register_init_routine(void (*func)(void));
1110
1118WS_DLL_PUBLIC void register_cleanup_routine(void (*func)(void));
1119
1124WS_DLL_PUBLIC void register_shutdown_routine(void (*func)(void));
1125
1130void init_dissection(const char* app_env_var_prefix);
1131
1133void cleanup_dissection(void);
1134
1139WS_DLL_PUBLIC void register_postseq_cleanup_routine(void (*func)(void));
1140
1142WS_DLL_PUBLIC void postseq_cleanup_all_protocols(void);
1143
1153WS_DLL_PUBLIC void
1154register_final_registration_routine(void (*func)(void));
1155
1159extern void
1161
1162// XXX Should we move frame_data.encoding here?
1170
1171struct data_source;
1172
1182WS_DLL_PUBLIC struct data_source* add_new_data_source(packet_info *pinfo, tvbuff_t *tvb,
1183 const char *name);
1184
1191WS_DLL_PUBLIC void set_data_source_name(packet_info *pinfo, struct data_source *src, const char *name);
1192
1199WS_DLL_PUBLIC void set_data_source_media_type(struct data_source *src, data_source_media_type_e media_type);
1200
1209WS_DLL_PUBLIC void remove_last_data_source(packet_info *pinfo);
1210
1217WS_DLL_PUBLIC const char *get_data_source_name(const struct data_source *src);
1218
1226WS_DLL_PUBLIC char *get_data_source_description(const struct data_source *src);
1227
1236WS_DLL_PUBLIC tvbuff_t *get_data_source_tvb(const struct data_source *src);
1243WS_DLL_PUBLIC struct data_source *get_data_source_by_name(const packet_info *pinfo, const char *name);
1244
1251WS_DLL_PUBLIC struct data_source *get_data_source_by_tvb(const packet_info *pinfo, const tvbuff_t *tvb);
1252
1260WS_DLL_PUBLIC int32_t get_data_source_index_by_tvb(const packet_info *pinfo, const tvbuff_t *tvb);
1261
1267WS_DLL_PUBLIC data_source_media_type_e get_data_source_media_type(const struct data_source *src);
1268
1273extern void free_data_sources(packet_info *pinfo);
1274
1293WS_DLL_PUBLIC void mark_frame_as_depended_upon(frame_data *fd, uint32_t frame_num);
1294
1305
1309typedef struct file_data_s
1310{
1311 wtap_block_t pkt_block;
1314
1323extern void dissect_record(struct epan_dissect *edt, int file_type_subtype,
1324 wtap_rec *rec, frame_data *fd, column_info *cinfo);
1325
1333extern void dissect_file(struct epan_dissect *edt,
1334 wtap_rec *rec, frame_data *fd, column_info *cinfo);
1335
1347
1352WS_DLL_PUBLIC void dissector_dump_decodes(void);
1353
1357WS_DLL_PUBLIC void dissector_dump_heur_decodes(void);
1358
1359/*
1360 * postdissectors are to be called by packet-frame.c after every other
1361 * dissector has been called.
1362 */
1363
1368WS_DLL_PUBLIC void register_postdissector(dissector_handle_t handle);
1369
1386WS_DLL_PUBLIC void set_postdissector_wanted_hfids(dissector_handle_t handle,
1387 GArray *wanted_hfids);
1388
1394void deregister_postdissector(dissector_handle_t handle);
1395
1406extern bool have_postdissector(void);
1407
1421extern void call_all_postdissectors(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
1422
1432WS_DLL_PUBLIC bool postdissectors_want_hfids(void);
1433
1447extern void
1449
1455WS_DLL_PUBLIC void increment_dissection_depth(packet_info *pinfo);
1456
1463WS_DLL_PUBLIC void increment_dissection_depth_by_n(packet_info *pinfo, unsigned n);
1464
1469WS_DLL_PUBLIC void decrement_dissection_depth(packet_info *pinfo);
1470
1476WS_DLL_PUBLIC void decrement_dissection_depth_by_n(packet_info *pinfo, unsigned n);
1477
1479
1480#ifdef __cplusplus
1481}
1482#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:2628
WS_DLL_PUBLIC void register_postdissector(dissector_handle_t handle)
Register a postdissector; the argument is the dissector handle for it.
Definition packet.c:4177
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:2958
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:3686
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:3385
void deregister_dissector(const char *name)
Deregister a previously registered dissector.
Definition packet.c:3670
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:1502
WS_DLL_PUBLIC dissector_handle_t dissector_get_default_string_handle(const char *name, const char *string)
Definition packet.c:2126
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:3582
WS_DLL_PUBLIC void increment_dissection_depth_by_n(packet_info *pinfo, unsigned n)
Definition packet.c:4288
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:2309
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:2303
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:2962
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:2705
WS_DLL_PUBLIC dissector_handle_t dissector_get_default_uint_handle(const char *name, const uint32_t uint_val)
Definition packet.c:1820
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:3453
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:3624
void deregister_dissector_table(const char *name)
Deregister the dissector table by table name.
Definition packet.c:2896
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:1349
WS_DLL_PUBLIC dissector_handle_t dissector_get_guid_handle(dissector_table_t const sub_dissectors, guid_key *guid_val)
Definition packet.c:2265
WS_DLL_PUBLIC void set_postdissector_wanted_hfids(dissector_handle_t handle, GArray *wanted_hfids)
Definition packet.c:4187
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:3644
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:1648
WS_DLL_PUBLIC heur_dissector_list_t find_heur_dissector_list(const char *name)
Definition packet.c:2952
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:1938
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:2500
void call_all_postdissectors(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
Invoke all registered postdissectors on the current frame.
Definition packet.c:4241
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:4006
void packet_all_tables_sort_handles(void)
Sort the dissector handles in all dissector tables.
Definition packet.c:2337
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:1798
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:3466
void deregister_heur_dissector_list(const char *name)
Definition packet.c:3359
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:3327
WS_DLL_PUBLIC dissector_handle_t dissector_get_custom_table_handle(dissector_table_t sub_dissectors, void *key)
Definition packet.c:2169
WS_DLL_PUBLIC GList * get_dissector_names(void)
Return a GList of all registered dissector name strings.
Definition packet.c:3436
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:3407
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:1531
bool dissector_table_supports_decode_as(dissector_table_t dissector_table)
Return whether a dissector table supports Decode As.
Definition packet.c:2520
WS_DLL_PUBLIC void decrement_dissection_depth(packet_info *pinfo)
Decrement the dissection depth.
Definition packet.c:4306
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:1808
WS_DLL_PUBLIC void heur_dissector_delete(const char *name, heur_dissector_t dissector, const int proto)
Definition packet.c:3054
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:3806
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:4205
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:3564
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:3475
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:2055
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:3396
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:2041
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:1554
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:1963
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:2923
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:3224
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:2142
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:1367
void dissector_table_allow_decode_as(dissector_table_t dissector_table)
Mark a dissector table as supporting Decode As.
Definition packet.c:2514
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:2288
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:4110
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:3447
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:3717
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:778
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:4295
WS_DLL_PUBLIC void dissector_all_tables_foreach_table(DATFunc_table func, void *user_data, GCompareFunc compare_key_func)
Definition packet.c:2760
WS_DLL_PUBLIC void dissector_all_heur_tables_foreach_table(DATFunc_heur_table func, void *user_data, GCompareFunc compare_key_func)
Definition packet.c:3280
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:2009
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:2453
WS_DLL_PUBLIC void dissector_all_tables_foreach_changed(DATFunc func, void *user_data)
Definition packet.c:2689
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:2294
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:3541
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:3418
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:2783
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:1726
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:3839
WS_DLL_PUBLIC const char * heur_dissector_list_get_description(heur_dissector_list_t list)
Definition packet.c:3370
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:1569
WS_DLL_PUBLIC void register_dissector_table_alias(dissector_table_t dissector_table, const char *alias_name)
Definition packet.c:2878
WS_DLL_PUBLIC bool postdissectors_want_hfids(void)
Return whether any postdissector has requested specific hfids.
Definition packet.c:4252
WS_DLL_PUBLIC bool deregister_depend_dissector(const char *parent, const char *dependent)
Definition packet.c:3829
WS_DLL_PUBLIC void decrement_dissection_depth_by_n(packet_info *pinfo, unsigned n)
Decrement the dissection depth by a value.
Definition packet.c:4300
WS_DLL_PUBLIC int call_data_dissector(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
Call a data dissector.
Definition packet.c:3724
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:2179
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:3700
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:3733
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:1876
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:4267
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:2968
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:3634
bool have_postdissector(void)
Return whether any postdissectors are registered.
Definition packet.c:4223
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:3556
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:2483
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:2356
void dissector_table_allow_decode_as_internal(dissector_table_t dissector_table)
Mark a dissector table as supporting Decode As.
Definition packet.c:2506
WS_DLL_PUBLIC heur_dissector_list_t register_heur_dissector_list(const char *name, const int proto)
Definition packet.c:3353
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:1741
data_source_media_type_e
MIME media type descriptor for a packet data source buffer.
Definition packet.h:1166
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:2647
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:2914
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:3080
WS_DLL_PUBLIC dissector_table_t find_dissector_table(const char *name)
Find a dissector table by its internal name.
Definition packet.c:1217
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:2447
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:2280
WS_DLL_PUBLIC void dissector_dump_dissectors(void)
Dump all registered dissectors to the standard output.
Definition packet.c:4149
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:1693
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:2434
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:2211
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:1616
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:2850
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:1513
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:2111
WS_DLL_PUBLIC int get_dissector_table_param(const char *name)
Return the parameter value associated with a dissector table.
Definition packet.c:2932
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:3334
@ HEURISTIC_DISABLE
Definition packet.h:110
@ HEURISTIC_ENABLE
Definition packet.h:111
@ DS_MEDIA_TYPE_APPLICATION_JSON
Definition packet.h:1168
@ DS_MEDIA_TYPE_APPLICATION_OCTET_STREAM
Definition packet.h:1167
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:865
Definition packet.c:97
Definition packet.c:1210
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:1340
int payload_offset
Definition packet.h:1342
uint16_t etype
Definition packet.h:1341
int fcs_len
Definition packet.h:1345
proto_tree * fh_tree
Definition packet.h:1343
int trailer_id
Definition packet.h:1344
Holds the data passed to the file dissector for dissection of a capture file as a whole.
Definition packet.h:1310
wtap_block_t pkt_block
Definition packet.h:1311
struct epan_dissect * color_edt
Definition packet.h:1312
Holds the data passed to the frame dissector for dissection of a single packet frame.
Definition packet.h:1299
int file_type_subtype
Definition packet.h:1300
wtap_block_t pkt_block
Definition packet.h:1301
struct epan_dissect * color_edt
Definition packet.h:1303
Definition packet.c:186
Represents a single entry in a heuristic dissector table, binding a heuristic dissector to its protoc...
Definition packet.h:670
const char * display_name
Definition packet.h:674
char * list_name
Definition packet.h:673
char * short_name
Definition packet.h:675
bool enabled
Definition packet.h:676
bool enabled_by_default
Definition packet.h:677
heur_dissector_t dissector
Definition packet.h:671
protocol_t * protocol
Definition packet.h:672
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:1597