diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /epan/capture_dissectors.h | |
parent | Initial commit. (diff) | |
download | wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip |
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'epan/capture_dissectors.h')
-rw-r--r-- | epan/capture_dissectors.h | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/epan/capture_dissectors.h b/epan/capture_dissectors.h new file mode 100644 index 00000000..21df1798 --- /dev/null +++ b/epan/capture_dissectors.h @@ -0,0 +1,118 @@ +/* capture_dissectors.h + * Routines for handling capture dissectors + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef __CAPTURE_DISSECTORS_H__ +#define __CAPTURE_DISSECTORS_H__ + +#include "ws_symbol_export.h" +#include <wiretap/wtap.h> + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** @file + */ + +/** Table of counts of packets of various types. */ +typedef struct { + GHashTable* counts_hash; /* packet counters keyed by proto */ + gint other; /* Packets not counted in the hash total */ + gint total; /* Cache of total packets */ +} packet_counts; + +typedef struct _capture_packet_info { + GHashTable *counts; +} capture_packet_info_t; + +typedef struct capture_dissector_handle* capture_dissector_handle_t; + +/** callback function definition for capture dissectors */ +typedef gboolean (*capture_dissector_t)(const guint8 *pd, int offset, int len, capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header); + +/* a protocol uses the function to register a capture sub-dissector table + * @param[in] name Name of capture sub-dissector table. + * @param[in] ui_name Name string used when referring to capture sub-dissector table in UI. + */ +WS_DLL_PUBLIC void register_capture_dissector_table(const char *name, const char *ui_name); + +/* Create an anonymous handle for a capture dissector + * @param[in] dissector capture dissector function. + * @param[in] proto Protocol associated with capture dissector function. + * @return Handle created for capture dissector + */ +WS_DLL_PUBLIC capture_dissector_handle_t create_capture_dissector_handle(capture_dissector_t dissector, const int proto); + +/* Find a dissector by name + * @param[in] name Name of capture dissector + * @return Handle for capture dissector if found, NULL otherwise + */ +WS_DLL_PUBLIC capture_dissector_handle_t find_capture_dissector(const char *name); + +/* Register a new capture dissector + * @param[in] name Name of capture dissector function. + * @param[in] dissector capture dissector function. + * @param[in] proto Protocol associated with capture dissector function. + * @return Handle created for capture dissector + */ +WS_DLL_PUBLIC capture_dissector_handle_t register_capture_dissector(const char *name, capture_dissector_t dissector, int proto); + +/* Add an entry to a uint capture dissector table + * @param[in] name Name of capture dissector table + * @param[in] pattern Numerical value associated with capture dissector + * @param[in] handle Handle to capture dissector + */ +WS_DLL_PUBLIC void capture_dissector_add_uint(const char *name, const guint32 pattern, capture_dissector_handle_t handle); + +/* Look for a given value in a given uint capture dissector table and, if found, + * call the dissector with the arguments supplied, and return TRUE, + * otherwise return FALSE + * @param[in] name Name of capture dissector table + * @param[in] pattern Numerical value associated with capture dissector + * @param[in] pd Data buffer of captured bytes + * @param[in] offset Current offset into pd + * @param[in] len Length of pd + * @param[in] cpinfo Capture statistics + * @param[in] pseudo_header Wiretap pseudo header information + */ +WS_DLL_PUBLIC gboolean try_capture_dissector(const char* name, const guint32 pattern, const guint8 *pd, int offset, int len, capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header); + +/* Call a capture dissector through a handle. If handle is value return TRUE, + * otherwise return FALSE + * @param[in] handle Capture dissector handle + * @param[in] pd Data buffer of captured bytes + * @param[in] offset Current offset into pd + * @param[in] len Length of pd + * @param[in] cpinfo Capture statistics + * @param[in] pseudo_header Wiretap pseudo header information + */ +WS_DLL_PUBLIC gboolean call_capture_dissector(capture_dissector_handle_t handle, const guint8 *pd, int offset, int len, capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header); + +/* Get current capture packet count for a particular protocol + * @param[in] counts Packet count structure + * @param[in] proto Protocol to retrieve packet count from + * @return Number of packets captured for a particular protocol + */ +WS_DLL_PUBLIC guint32 capture_dissector_get_count(packet_counts* counts, const int proto); + +/* Increment packet capture count by 1 for a particular protocol. + * @param[in] cpinfo Capture statistics + * @param[in] proto Protocol to increment packet count + */ +WS_DLL_PUBLIC void capture_dissector_increment_count(capture_packet_info_t *cpinfo, const int proto); + +extern void capture_dissector_init(void); +extern void capture_dissector_cleanup(void); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* capture_dissectors.h */ |