Wireshark 4.7.0
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
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;
73
74/* Hash table for matching unsigned integers, or strings, and dissectors;
75 this is opaque outside of "packet.c". */
76struct dissector_table;
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
131
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
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
395WS_DEPRECATED_X("Use dissector_try_uint_with_data instead")
396static inline int dissector_try_uint_new(dissector_table_t sub_dissectors,
397 const uint32_t uint_val, tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, const bool add_proto_name, void* data) \
398{ return dissector_try_uint_with_data(sub_dissectors, uint_val, tvb, pinfo, tree, add_proto_name, data); }
399
408 dissector_table_t const sub_dissectors, const uint32_t uint_val);
409
418 const char *name, const uint32_t uint_val);
419
426WS_DLL_PUBLIC void dissector_add_string(const char *name, const char *pattern,
427 dissector_handle_t handle);
428
433WS_DLL_PUBLIC void dissector_delete_string(const char *name, const char *pattern,
434 dissector_handle_t handle);
435
440WS_DLL_PUBLIC void dissector_change_string(const char *name, const char *pattern,
441 dissector_handle_t handle);
442
446WS_DLL_PUBLIC void dissector_reset_string(const char *name, const char *pattern);
447
458WS_DLL_PUBLIC bool dissector_is_string_changed(dissector_table_t const subdissectors, const char *string);
459
473WS_DLL_PUBLIC int dissector_try_string_with_data(dissector_table_t sub_dissectors,
474 const char* string, tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, const bool add_proto_name, void* data);
475
488WS_DEPRECATED_X("Use dissector_try_string_with_data instead")
489static inline int
490dissector_try_string(dissector_table_t sub_dissectors, const char* string,\
491 tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data) \
492 { return dissector_try_string_with_data(sub_dissectors, string, tvb, pinfo, tree, true, data); }
493
507WS_DEPRECATED_X("Use dissector_try_string_with_data instead")
508static inline int
509dissector_try_string_new(dissector_table_t sub_dissectors, const char* string, \
510 tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, const bool add_proto_name, void* data) \
511{ return dissector_try_string_with_data(sub_dissectors, string, tvb, pinfo, tree, add_proto_name, data); }
512
513
522 dissector_table_t sub_dissectors, const char *string);
523
532 const char *name, const char *string);
533
540WS_DLL_PUBLIC void dissector_add_custom_table_handle(const char *name, void *pattern,
541 dissector_handle_t handle);
542
551 dissector_table_t sub_dissectors, void *key);
552
558typedef struct _guid_key {
560 uint16_t ver;
562
569WS_DLL_PUBLIC void dissector_add_guid(const char *name, guid_key* guid_val,
570 dissector_handle_t handle);
571
587WS_DLL_PUBLIC int dissector_try_guid_with_data(dissector_table_t sub_dissectors,
588 guid_key* guid_val, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, const bool add_proto_name, void *data);
589
596WS_DLL_PUBLIC void dissector_delete_guid(const char *name, guid_key* guid_val,
597 dissector_handle_t handle);
598
607 dissector_table_t const sub_dissectors, guid_key* guid_val);
608
627WS_DLL_PUBLIC int dissector_try_payload_with_data(dissector_table_t sub_dissectors,
628 tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, const bool add_proto_name, void *data);
629
642WS_DEPRECATED_X("Use dissector_try_payload_with_data instead")
643static inline int dissector_try_payload_new(dissector_table_t sub_dissectors,
644 tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, const bool add_proto_name, void* data){ \
645 return dissector_try_payload_with_data(sub_dissectors, tvb, pinfo, tree, add_proto_name, data); \
646}
647
660WS_DEPRECATED_X("Use dissector_try_payload_with_data instead")
661static inline int dissector_try_payload(dissector_table_t sub_dissectors,
662 tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree) {
663 \
664 return dissector_try_payload_with_data(sub_dissectors, tvb, pinfo, tree, true, NULL); \
665}
666
670WS_DLL_PUBLIC void dissector_change_payload(const char *abbrev, dissector_handle_t handle);
671
674WS_DLL_PUBLIC void dissector_reset_payload(const char *name);
675
685
694WS_DLL_PUBLIC void dissector_add_for_decode_as(const char *name,
695 dissector_handle_t handle);
696
701WS_DLL_PUBLIC void dissector_add_for_decode_as_with_preference(const char *name,
702 dissector_handle_t handle);
703
708
714
721
731
738
739/* List of "heuristic" dissectors (which get handed a packet, look at it,
740 and either recognize it as being for their protocol, dissect it, and
741 return true, or don't recognize it and return false) to be called
742 by another dissector.
743
744 This is opaque outside of "packet.c". */
747
748
761
769WS_DLL_PUBLIC heur_dissector_list_t register_heur_dissector_list_with_description(const char *name, const char *ui_name, const int proto);
770
775WS_DLL_PUBLIC const char *heur_dissector_list_get_description(heur_dissector_list_t list);
776
783WS_DLL_PUBLIC heur_dissector_list_t register_heur_dissector_list(const char *name, const int proto);
784
786void deregister_heur_dissector_list(const char *name);
787
788typedef void (*DATFunc_heur) (const char *table_name,
789 struct heur_dtbl_entry *entry, void *user_data);
790typedef void (*DATFunc_heur_table) (const char *table_name,
791 struct heur_dissector_list *table, void *user_data);
792
802WS_DLL_PUBLIC void heur_dissector_table_foreach(const char *table_name,
803 DATFunc_heur func, void *user_data);
804
813WS_DLL_PUBLIC void dissector_all_heur_tables_foreach_table (DATFunc_heur_table func,
814 void *user_data, GCompareFunc compare_key_func);
815
821WS_DLL_PUBLIC bool has_heur_dissector_list(const char *name);
822
835WS_DLL_PUBLIC bool dissector_try_heuristic(heur_dissector_list_t sub_dissectors,
836 tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, heur_dtbl_entry_t **hdtbl_entry, void *data);
837
843WS_DLL_PUBLIC heur_dissector_list_t find_heur_dissector_list(const char *name);
844
850WS_DLL_PUBLIC heur_dtbl_entry_t* find_heur_dissector_by_unique_short_name(const char *short_name);
851
862WS_DLL_PUBLIC void heur_dissector_add(const char *name, heur_dissector_t dissector,
863 const char *display_name, const char *internal_name, const int proto, heuristic_enable_e enable);
864
872WS_DLL_PUBLIC void heur_dissector_delete(const char *name, heur_dissector_t dissector, const int proto);
873
883WS_DLL_PUBLIC dissector_handle_t register_dissector(const char *name,
884 dissector_t dissector, const int proto);
885
895WS_DLL_PUBLIC dissector_handle_t register_dissector_with_description(const char *name,
896 const char *description, dissector_t dissector, const int proto);
897
908WS_DLL_PUBLIC dissector_handle_t register_dissector_with_data(const char *name,
909 dissector_cb_t dissector, const int proto, void *cb_data);
910
915void deregister_dissector(const char *name);
916
924WS_DLL_PUBLIC const char *dissector_handle_get_protocol_long_name(
925 const dissector_handle_t handle);
926
934WS_DLL_PUBLIC const char *dissector_handle_get_protocol_short_name(
935 const dissector_handle_t handle);
936
946WS_DLL_PUBLIC const char *dissector_handle_get_short_name(
947 const dissector_handle_t handle);
948
949
956WS_DLL_PUBLIC const char *dissector_handle_get_description(
957 const dissector_handle_t handle);
958
967 const dissector_handle_t handle);
968
973WS_DLL_PUBLIC GList *get_dissector_names(void);
974
982WS_DLL_PUBLIC dissector_handle_t find_dissector(const char *name);
983
991WS_DLL_PUBLIC dissector_handle_t find_dissector_add_dependency(const char *name,
992 const int parent_proto);
993
1001WS_DLL_PUBLIC const char *dissector_handle_get_dissector_name(
1002 const dissector_handle_t handle);
1003
1010WS_DLL_PUBLIC const char *dissector_handle_get_pref_suffix(
1011 const dissector_handle_t handle);
1012
1026WS_DLL_PUBLIC dissector_handle_t create_dissector_handle(dissector_t dissector,
1027 const int proto);
1028
1046 dissector_t dissector, const int proto, const char *name);
1047
1063 const int proto, const char* name, const char* description);
1064
1078 dissector_cb_t dissector, const int proto, void *cb_data);
1079
1083WS_DLL_PUBLIC void dissector_dump_dissectors(void);
1084
1099WS_DLL_PUBLIC int call_dissector_with_data(dissector_handle_t handle, tvbuff_t *tvb,
1100 packet_info *pinfo, proto_tree *tree, void *data);
1101
1115WS_DLL_PUBLIC int call_dissector(dissector_handle_t handle, tvbuff_t *tvb,
1116 packet_info *pinfo, proto_tree *tree);
1117
1126WS_DLL_PUBLIC int call_data_dissector(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
1127
1141WS_DLL_PUBLIC int call_dissector_only(dissector_handle_t handle, tvbuff_t *tvb,
1142 packet_info *pinfo, proto_tree *tree, void *data);
1143
1152 packet_info *pinfo, proto_tree *tree, void *data);
1153
1154/* This is opaque outside of "packet.c". */
1157
1168WS_DLL_PUBLIC bool register_depend_dissector(const char* parent, const char* dependent);
1169
1179WS_DLL_PUBLIC bool deregister_depend_dissector(const char* parent, const char* dependent);
1180
1186WS_DLL_PUBLIC depend_dissector_list_t find_depend_dissector_list(const char* name);
1187
1195WS_DLL_PUBLIC void set_actual_length(tvbuff_t *tvb, const unsigned specified_len);
1196
1204WS_DLL_PUBLIC void register_init_routine(void (*func)(void));
1205
1213WS_DLL_PUBLIC void register_cleanup_routine(void (*func)(void));
1214
1219WS_DLL_PUBLIC void register_shutdown_routine(void (*func)(void));
1220
1225void init_dissection(const char* app_env_var_prefix);
1226
1228void cleanup_dissection(void);
1229
1234WS_DLL_PUBLIC void register_postseq_cleanup_routine(void (*func)(void));
1235
1237WS_DLL_PUBLIC void postseq_cleanup_all_protocols(void);
1238
1248WS_DLL_PUBLIC void
1249register_final_registration_routine(void (*func)(void));
1250
1254extern void
1256
1257// XXX Should we move frame_data.encoding here?
1265
1266struct data_source;
1267
1277WS_DLL_PUBLIC struct data_source* add_new_data_source(packet_info *pinfo, tvbuff_t *tvb,
1278 const char *name);
1279
1286WS_DLL_PUBLIC void set_data_source_name(packet_info *pinfo, struct data_source *src, const char *name);
1287
1294WS_DLL_PUBLIC void set_data_source_media_type(struct data_source *src, data_source_media_type_e media_type);
1295
1304WS_DLL_PUBLIC void remove_last_data_source(packet_info *pinfo);
1305
1312WS_DLL_PUBLIC const char *get_data_source_name(const struct data_source *src);
1313
1321WS_DLL_PUBLIC char *get_data_source_description(const struct data_source *src);
1322
1331WS_DLL_PUBLIC tvbuff_t *get_data_source_tvb(const struct data_source *src);
1338WS_DLL_PUBLIC struct data_source *get_data_source_by_name(const packet_info *pinfo, const char *name);
1339
1346WS_DLL_PUBLIC struct data_source *get_data_source_by_tvb(const packet_info *pinfo, const tvbuff_t *tvb);
1347
1353WS_DLL_PUBLIC data_source_media_type_e get_data_source_media_type(const struct data_source *src);
1354
1359extern void free_data_sources(packet_info *pinfo);
1360
1379WS_DLL_PUBLIC void mark_frame_as_depended_upon(frame_data *fd, uint32_t frame_num);
1380
1391
1400
1409extern void dissect_record(struct epan_dissect *edt, int file_type_subtype,
1410 wtap_rec *rec, frame_data *fd, column_info *cinfo);
1411
1419extern void dissect_file(struct epan_dissect *edt,
1420 wtap_rec *rec, frame_data *fd, column_info *cinfo);
1421
1433
1438WS_DLL_PUBLIC void dissector_dump_decodes(void);
1439
1443WS_DLL_PUBLIC void dissector_dump_heur_decodes(void);
1444
1445/*
1446 * postdissectors are to be called by packet-frame.c after every other
1447 * dissector has been called.
1448 */
1449
1454WS_DLL_PUBLIC void register_postdissector(dissector_handle_t handle);
1455
1472WS_DLL_PUBLIC void set_postdissector_wanted_hfids(dissector_handle_t handle,
1473 GArray *wanted_hfids);
1474
1481
1492extern bool have_postdissector(void);
1493
1507extern void call_all_postdissectors(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
1508
1518WS_DLL_PUBLIC bool postdissectors_want_hfids(void);
1519
1533extern void
1535
1541WS_DLL_PUBLIC void increment_dissection_depth(packet_info *pinfo);
1542
1549WS_DLL_PUBLIC void increment_dissection_depth_by_n(packet_info *pinfo, unsigned n);
1550
1555WS_DLL_PUBLIC void decrement_dissection_depth(packet_info *pinfo);
1556
1562WS_DLL_PUBLIC void decrement_dissection_depth_by_n(packet_info *pinfo, unsigned n);
1563
1566#ifdef __cplusplus
1567}
1568#endif /* __cplusplus */
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:2611
WS_DLL_PUBLIC void register_postdissector(dissector_handle_t handle)
Register a postdissector; the argument is the dissector handle for it.
Definition packet.c:4173
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:2947
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:3682
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:3374
void deregister_dissector(const char *name)
Deregister a previously registered dissector.
Definition packet.c:3666
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:1490
WS_DLL_PUBLIC dissector_handle_t dissector_get_default_string_handle(const char *name, const char *string)
Definition packet.c:2114
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:3578
WS_DLL_PUBLIC void increment_dissection_depth_by_n(packet_info *pinfo, unsigned n)
Definition packet.c:4284
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:2297
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:2291
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:340
WS_DLL_PUBLIC heur_dtbl_entry_t * find_heur_dissector_by_unique_short_name(const char *short_name)
Definition packet.c:2951
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:496
void dissector_table_foreach_changed(const char *table_name, DATFunc func, void *user_data)
Definition packet.c:2688
WS_DLL_PUBLIC dissector_handle_t dissector_get_default_uint_handle(const char *name, const uint32_t uint_val)
Definition packet.c:1808
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:3449
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:3620
void deregister_dissector_table(const char *name)
Deregister the dissector table by table name.
Definition packet.c:2885
void packet_cleanup(void)
Clean up the packet dissection engine.
Definition packet.c:312
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:1336
WS_DLL_PUBLIC dissector_handle_t dissector_get_guid_handle(dissector_table_t const sub_dissectors, guid_key *guid_val)
Definition packet.c:2253
WS_DLL_PUBLIC void set_postdissector_wanted_hfids(dissector_handle_t handle, GArray *wanted_hfids)
Definition packet.c:4183
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:3640
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:1636
WS_DLL_PUBLIC heur_dissector_list_t find_heur_dissector_list(const char *name)
Definition packet.c:2941
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:1926
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:2488
void call_all_postdissectors(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
Invoke all registered postdissectors on the current frame.
Definition packet.c:4237
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:4002
void packet_all_tables_sort_handles(void)
Sort the dissector handles in all dissector tables.
Definition packet.c:2325
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:421
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:1786
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:3462
void deregister_heur_dissector_list(const char *name)
Definition packet.c:3348
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:3316
WS_DLL_PUBLIC dissector_handle_t dissector_get_custom_table_handle(dissector_table_t sub_dissectors, void *key)
Definition packet.c:2157
WS_DLL_PUBLIC GList * get_dissector_names(void)
Return a GList of all registered dissector name strings.
Definition packet.c:3432
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:3403
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:1519
WS_DLL_PUBLIC bool dissector_table_supports_decode_as(dissector_table_t dissector_table)
Return whether a dissector table supports Decode As.
Definition packet.c:2503
WS_DLL_PUBLIC void decrement_dissection_depth(packet_info *pinfo)
Decrement the dissection depth.
Definition packet.c:4302
WS_DLL_PUBLIC void register_init_routine(void(*func)(void))
Definition packet.c:354
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:1796
WS_DLL_PUBLIC void heur_dissector_delete(const char *name, heur_dissector_t dissector, const int proto)
Definition packet.c:3043
WS_DLL_PUBLIC void set_data_source_name(packet_info *pinfo, struct data_source *src, const char *name)
Definition packet.c:454
WS_DLL_PUBLIC bool register_depend_dissector(const char *parent, const char *dependent)
Definition packet.c:3802
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:4201
WS_DLL_PUBLIC void register_cleanup_routine(void(*func)(void))
Definition packet.c:360
WS_DLL_PUBLIC dissector_handle_t create_dissector_handle(dissector_t dissector, const int proto)
Create an anonymous, unregistered dissector handle.
Definition packet.c:3560
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:3471
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:2043
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:3385
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:2029
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:1542
WS_DLL_PUBLIC void remove_last_data_source(packet_info *pinfo)
Remove the most recently added data source from a packet.
Definition packet.c:469
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:1951
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:2912
WS_DLL_PUBLIC void register_final_registration_routine(void(*func)(void))
Definition packet.c:587
WS_DLL_PUBLIC void heur_dissector_table_foreach(const char *table_name, DATFunc_heur func, void *user_data)
Definition packet.c:3213
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:2130
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:1354
WS_DLL_PUBLIC void dissector_table_allow_decode_as(dissector_table_t dissector_table)
Mark a dissector table as supporting Decode As.
Definition packet.c:2494
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:2276
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:4106
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:508
WS_DLL_PUBLIC dissector_handle_t find_dissector(const char *name)
Find a registered dissector by name.
Definition packet.c:3443
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:3713
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:765
void init_dissection(const char *app_env_var_prefix)
Initialize all data structures used for dissection.
Definition packet.c:374
WS_DLL_PUBLIC void increment_dissection_depth(packet_info *pinfo)
Definition packet.c:4291
WS_DLL_PUBLIC void dissector_all_tables_foreach_table(DATFunc_table func, void *user_data, GCompareFunc compare_key_func)
Definition packet.c:2743
WS_DLL_PUBLIC void dissector_all_heur_tables_foreach_table(DATFunc_heur_table func, void *user_data, GCompareFunc compare_key_func)
Definition packet.c:3269
void packet_init(void)
Initialize the packet dissection engine.
Definition packet.c:231
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:604
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:1997
WS_DLL_PUBLIC char * get_data_source_description(const struct data_source *src)
Return the description of a data source.
Definition packet.c:478
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:2441
WS_DLL_PUBLIC void dissector_all_tables_foreach_changed(DATFunc func, void *user_data)
Definition packet.c:2672
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:2282
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:3537
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:3414
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:563
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:2766
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:1714
WS_DLL_PUBLIC void set_data_source_media_type(struct data_source *src, data_source_media_type_e media_type)
Definition packet.c:461
WS_DLL_PUBLIC depend_dissector_list_t find_depend_dissector_list(const char *name)
Definition packet.c:3835
WS_DLL_PUBLIC const char * heur_dissector_list_get_description(heur_dissector_list_t list)
Definition packet.c:3359
void cleanup_dissection(void)
Free data structures allocated for dissection.
Definition packet.c:399
void packet_cache_proto_handles(void)
Cache protocol handles for fast lookup during dissection.
Definition packet.c:255
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:1557
WS_DLL_PUBLIC void register_dissector_table_alias(dissector_table_t dissector_table, const char *alias_name)
Definition packet.c:2867
WS_DLL_PUBLIC bool postdissectors_want_hfids(void)
Return whether any postdissector has requested specific hfids.
Definition packet.c:4248
WS_DLL_PUBLIC bool deregister_depend_dissector(const char *parent, const char *dependent)
Definition packet.c:3825
WS_DLL_PUBLIC void decrement_dissection_depth_by_n(packet_info *pinfo, unsigned n)
Decrement the dissection depth by a value.
Definition packet.c:4296
WS_DLL_PUBLIC int call_data_dissector(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
Call a data dissector.
Definition packet.c:3720
WS_DLL_PUBLIC struct data_source * add_new_data_source(packet_info *pinfo, tvbuff_t *tvb, const char *name)
Definition packet.c:439
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:2167
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:3696
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:3729
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:1864
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:4263
WS_DLL_PUBLIC const char * dissector_handle_get_short_name(const dissector_handle_t handle)
Return the short protocol name for a dissector handle.
Definition packet.c:3395
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:2957
WS_DLL_PUBLIC void postseq_cleanup_all_protocols(void)
Call all the registered "postseq_cleanup" routines.
Definition packet.c:429
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:3630
bool have_postdissector(void)
Return whether any postdissectors are registered.
Definition packet.c:4219
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:3552
WS_DLL_PUBLIC struct data_source * get_data_source_by_tvb(const packet_info *pinfo, const tvbuff_t *tvb)
Definition packet.c:526
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:2471
void free_data_sources(packet_info *pinfo)
Free up a frame's list of data sources.
Definition packet.c:554
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:2344
WS_DLL_PUBLIC heur_dissector_list_t register_heur_dissector_list(const char *name, const int proto)
Definition packet.c:3342
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:487
void final_registration_all_protocols(void)
Call all the registered "final_registration" routines.
Definition packet.c:595
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:1729
data_source_media_type_e
MIME media type descriptor for a packet data source buffer.
Definition packet.h:1261
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:2630
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:2903
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:3069
WS_DLL_PUBLIC dissector_table_t find_dissector_table(const char *name)
Find a dissector table by its internal name.
Definition packet.c:1204
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:2435
WS_DLL_PUBLIC void register_shutdown_routine(void(*func)(void))
Definition packet.c:367
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:2268
WS_DLL_PUBLIC void dissector_dump_dissectors(void)
Dump all registered dissectors to the standard output.
Definition packet.c:4145
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:1681
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:2422
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:2199
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:1604
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:2837
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:1501
WS_DLL_PUBLIC dissector_handle_t dissector_get_string_handle(dissector_table_t sub_dissectors, const char *string)
Definition packet.c:2099
WS_DLL_PUBLIC int get_dissector_table_param(const char *name)
Return the parameter value associated with a dissector table.
Definition packet.c:2921
WS_DLL_PUBLIC data_source_media_type_e get_data_source_media_type(const struct data_source *src)
Definition packet.c:541
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:3323
@ HEURISTIC_DISABLE
Definition packet.h:110
@ HEURISTIC_ENABLE
Definition packet.h:111
@ DS_MEDIA_TYPE_APPLICATION_JSON
Definition packet.h:1263
@ DS_MEDIA_TYPE_APPLICATION_OCTET_STREAM
Definition packet.h:1262
Represents a GUID/UUID value; may be larger than GUID_LEN so must not be used to directly overlay pac...
Definition guid-utils.h:21
Lookup key for GUID-indexed dissector tables, combining a GUID with an optional version field.
Definition packet.h:558
uint16_t ver
Definition packet.h:560
e_guid_t guid
Definition packet.h:559
Represents the metadata and indexing information for a single captured frame.
Definition packet_info.h:43
Definition proto.h:909
Definition proto.c:385
Definition packet.c:56
Definition packet.c:131
Definition packet.c:852
Definition packet.c:97
Definition packet.c:1197
Definition column-info.h:59
Holds all state for the dissection of a single byte array, including session, buffer,...
Definition epan_dissect.h:28
Definition range.h:42
Holds the parameters passed to the Ethertype dissector for dissecting an Ethernet payload.
Definition packet.h:1426
int payload_offset
Definition packet.h:1428
uint16_t etype
Definition packet.h:1427
int fcs_len
Definition packet.h:1431
proto_tree * fh_tree
Definition packet.h:1429
int trailer_id
Definition packet.h:1430
Holds the data passed to the file dissector for dissection of a capture file as a whole.
Definition packet.h:1396
wtap_block_t pkt_block
Definition packet.h:1397
struct epan_dissect * color_edt
Definition packet.h:1398
Holds the data passed to the frame dissector for dissection of a single packet frame.
Definition packet.h:1385
int file_type_subtype
Definition packet.h:1386
wtap_block_t pkt_block
Definition packet.h:1387
struct epan_dissect * color_edt
Definition packet.h:1389
Definition packet.c:188
Represents a single entry in a heuristic dissector table, binding a heuristic dissector to its protoc...
Definition packet.h:752
const char * display_name
Definition packet.h:756
char * list_name
Definition packet.h:755
char * short_name
Definition packet.h:757
bool enabled
Definition packet.h:758
bool enabled_by_default
Definition packet.h:759
heur_dissector_t dissector
Definition packet.h:753
protocol_t * protocol
Definition packet.h:754
Core tvbuff (testy virtual buffer) structure representing a region of packet data,...
Definition tvbuff-int.h:95
Definition wtap_opttypes.h:272
Definition wtap.h:1540
WS_DEPRECATED_X("Use ip_num_to_str_buf() or ip_addr_to_str() instead") WS_DLL_PUBLIC void ip_to_str_buf(const uint8_t *ad
Converts a 32-bit IPv4 address to string format.