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/proto_data.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/proto_data.h')
-rw-r--r-- | epan/proto_data.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/epan/proto_data.h b/epan/proto_data.h new file mode 100644 index 00000000..e10fda36 --- /dev/null +++ b/epan/proto_data.h @@ -0,0 +1,127 @@ +/* proto_data.h + * Definitions for protocol-specific data + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef __PROTO_DATA_H__ +#define __PROTO_DATA_H__ + +#include "ws_symbol_export.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** @file + * Dissected packet data and metadata. + */ + +/** @defgroup packetinfo Packet Data and Metadata + * + * @{ + */ + +/* Allocator should be either pinfo->pool or wmem_file_scope() */ + +/** + * Add data associated with a protocol. + * + * This can be used to persist file-scoped data between packets or share + * packet-scoped data between dissectors without having to use global + * variables. + * + * Each call adds a new entry to the protocol data list. + * + * @param scope The memory scope, either pinfo->pool or wmem_file_scope(). + * @param pinfo This dissection's packet info. + * @param proto The protocol ID. + * @param key A unique key for the data. + * @param proto_data The data to add. + */ +WS_DLL_PUBLIC void p_add_proto_data(wmem_allocator_t *scope, struct _packet_info* pinfo, int proto, guint32 key, void *proto_data); + +/** + * Set data associated with a protocol. + * + * This can be used to persist file-scoped data between packets or share + * packet-scoped data between dissectors without having to use global + * variables. + * + * If the protocol data list contains a matching entry it will be updated, + * otherwise a new entry will be created. + * + * @param scope The memory scope, either pinfo->pool or wmem_file_scope(). + * @param pinfo This dissection's packet info. + * @param proto The protocol ID. + * @param key A unique key for the data. + * @param proto_data The data to add. + */ +WS_DLL_PUBLIC void p_set_proto_data(wmem_allocator_t *scope, struct _packet_info* pinfo, int proto, guint32 key, void *proto_data); + +/** + * Fetch data associated with a protocol. + * + * @param scope The memory scope, typically pinfo->pool or wmem_file_scope(). + * @param pinfo This dissection's packet info. + * @param proto The protocol ID. + * @param key A unique key for the data. + * @return The data set using p_set_proto_data or most recently added + * using p_add_proto_data if the scope, protocol ID, and key match, + * otherwise NULL. + */ +WS_DLL_PUBLIC void *p_get_proto_data(wmem_allocator_t *scope, struct _packet_info* pinfo, int proto, guint32 key); + +/** + * Remove data associated with a protocol. + * + * @param scope The memory scope, typically pinfo->pool or wmem_file_scope(). + * @param pinfo This dissection's packet info. + * @param proto The protocol ID. + * @param key A unique key for the data. + */ +WS_DLL_PUBLIC void p_remove_proto_data(wmem_allocator_t *scope, struct _packet_info* pinfo, int proto, guint32 key); + +gchar *p_get_proto_name_and_key(wmem_allocator_t *scope, struct _packet_info* pinfo, guint pfd_index); + +/** + * Initialize or update a per-protocol and per-packet check for recursion, nesting, cycling, etc. + * + * @param pinfo Packet info for this packet. + * @param proto The current protocol. + * @param depth The depth to set. + */ +WS_DLL_PUBLIC void p_set_proto_depth(struct _packet_info* pinfo, int proto, unsigned depth); + +/** + * Fetch the current per-protocol and per-packet recursion, nesting, or cycling depth. + * @param pinfo Packet info for this packet. + * @param proto The current protocol. + * @return The current depth. + */ +WS_DLL_PUBLIC unsigned p_get_proto_depth(struct _packet_info* pinfo, int proto); + +/** @} */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __PROTO_DATA__ */ + +/* + * Editor modelines - https://www.wireshark.org/tools/modelines.html + * + * Local variables: + * c-basic-offset: 2 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * vi: set shiftwidth=2 tabstop=8 expandtab: + * :indentSize=2:tabSize=8:noTabs=true: + */ |