Wireshark
2.9.0-477-g68ec514b
The Wireshark network protocol analyzer
|
#include "ws_symbol_export.h"
#include "packet.h"
Go to the source code of this file.
Classes | |
struct | conversation |
Typedefs | |
typedef struct conversation_key * | conversation_key_t |
typedef struct conversation | conversation_t |
typedef struct endpoint * | endpoint_t |
Functions | |
WS_DLL_PUBLIC address * | conversation_key_addr1 (const conversation_key_t key) |
WS_DLL_PUBLIC address * | conversation_key_addr2 (const conversation_key_t key) |
WS_DLL_PUBLIC guint32 | conversation_key_port1 (const conversation_key_t key) |
WS_DLL_PUBLIC guint32 | conversation_key_port2 (const conversation_key_t key) |
void | conversation_init (void) |
void | conversation_epan_reset (void) |
WS_DLL_PUBLIC conversation_t * | conversation_new (const guint32 setup_frame, const address *addr1, const address *addr2, const endpoint_type etype, const guint32 port1, const guint32 port2, const guint options) |
WS_DLL_PUBLIC conversation_t * | conversation_new_by_id (const guint32 setup_frame, const endpoint_type etype, const guint32 id, const guint options) |
WS_DLL_PUBLIC conversation_t * | find_conversation (const guint32 frame_num, const address *addr_a, const address *addr_b, const endpoint_type etype, const guint32 port_a, const guint32 port_b, const guint options) |
WS_DLL_PUBLIC conversation_t * | find_conversation_by_id (const guint32 frame, const endpoint_type etype, const guint32 id, const guint options) |
WS_DLL_PUBLIC conversation_t * | find_conversation_pinfo (packet_info *pinfo, const guint options) |
WS_DLL_PUBLIC conversation_t * | find_or_create_conversation (packet_info *pinfo) |
WS_DLL_PUBLIC void | conversation_add_proto_data (conversation_t *conv, const int proto, void *proto_data) |
WS_DLL_PUBLIC void * | conversation_get_proto_data (const conversation_t *conv, const int proto) |
WS_DLL_PUBLIC void | conversation_delete_proto_data (conversation_t *conv, const int proto) |
WS_DLL_PUBLIC void | conversation_set_dissector (conversation_t *conversation, const dissector_handle_t handle) |
WS_DLL_PUBLIC void | conversation_set_dissector_from_frame_number (conversation_t *conversation, const guint32 starting_frame_num, const dissector_handle_t handle) |
WS_DLL_PUBLIC dissector_handle_t | conversation_get_dissector (conversation_t *conversation, const guint32 frame_num) |
WS_DLL_PUBLIC void | conversation_create_endpoint (struct _packet_info *pinfo, address *addr1, address *addr2, endpoint_type etype, guint32 port1, guint32 port2, const guint options) |
WS_DLL_PUBLIC void | conversation_create_endpoint_by_id (struct _packet_info *pinfo, endpoint_type etype, guint32 id, const guint options) |
WS_DLL_PUBLIC guint32 | conversation_get_endpoint_by_id (struct _packet_info *pinfo, endpoint_type etype, const guint options) |
gboolean | try_conversation_dissector (const address *addr_a, const address *addr_b, const endpoint_type etype, const guint32 port_a, const guint32 port_b, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data, const guint options) |
gboolean | try_conversation_dissector_by_id (const endpoint_type etype, const guint32 id, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) |
void | conversation_set_port2 (conversation_t *conv, const guint32 port) |
void | conversation_set_addr2 (conversation_t *conv, const address *addr) |
WS_DLL_PUBLIC wmem_map_t * | get_conversation_hashtable_exact (void) |
WS_DLL_PUBLIC wmem_map_t * | get_conversation_hashtable_no_addr2 (void) |
WS_DLL_PUBLIC wmem_map_t * | get_conversation_hashtable_no_port2 (void) |
WS_DLL_PUBLIC wmem_map_t * | get_conversation_hashtable_no_addr2_or_port2 (void) |
WS_DLL_PUBLIC endpoint_type | conversation_pt_to_endpoint_type (port_type pt) |
WS_DLL_PUBLIC guint | conversation_hash_exact (gconstpointer v) |
WS_DLL_PUBLIC gchar * | conversation_get_html_hash (const conversation_key_t key) |
void conversation_epan_reset | ( | void | ) |
Initialize some variables every time a file is loaded or re-loaded.
void conversation_init | ( | void | ) |
Create a new hash tables for conversations.
WS_DLL_PUBLIC conversation_t* find_conversation | ( | const guint32 | frame_num, |
const address * | addr_a, | ||
const address * | addr_b, | ||
const endpoint_type | etype, | ||
const guint32 | port_a, | ||
const guint32 | port_b, | ||
const guint | options | ||
) |
Given two address/port pairs for a packet, search for a conversation containing packets between those address/port pairs. Returns NULL if not found.
We try to find the most exact match that we can, and then proceed to try wildcard matches on the "addr_b" and/or "port_b" argument if a more exact match failed.
Either or both of the "addr_b" and "port_b" arguments may be specified as a wildcard by setting the NO_ADDR_B or NO_PORT_B flags in the "options" argument. We do only wildcard matches on addresses and ports specified as wildcards.
I.e.:
if neither "addr_b" nor "port_b" were specified as wildcards, we do an exact match (addr_a/port_a and addr_b/port_b) and, if that succeeds, we return a pointer to the matched conversation;
otherwise, if "port_b" wasn't specified as a wildcard, we try to match any address 2 with the specified port 2 (addr_a/port_a and {any}/addr_b) and, if that succeeds, we return a pointer to the matched conversation;
otherwise, if "addr_b" wasn't specified as a wildcard, we try to match any port 2 with the specified address 2 (addr_a/port_a and addr_b/{any}) and, if that succeeds, we return a pointer to the matched conversation;
otherwise, we try to match any address 2 and any port 2 (addr_a/port_a and {any}/{any}) and, if that succeeds, we return a pointer to the matched conversation;
otherwise, we found no matching conversation, and return NULL.
WS_DLL_PUBLIC conversation_t* find_conversation_pinfo | ( | packet_info * | pinfo, |
const guint | options | ||
) |
A helper function that calls find_conversation() using data from pinfo The frame number and addresses are taken from pinfo.
WS_DLL_PUBLIC conversation_t* find_or_create_conversation | ( | packet_info * | pinfo | ) |
A helper function that calls find_conversation() and, if a conversation is not found, calls conversation_new(). The frame number and addresses are taken from pinfo. No options are used, though we could extend this API to include an options parameter.
gboolean try_conversation_dissector | ( | const address * | addr_a, |
const address * | addr_b, | ||
const endpoint_type | etype, | ||
const guint32 | port_a, | ||
const guint32 | port_b, | ||
tvbuff_t * | tvb, | ||
packet_info * | pinfo, | ||
proto_tree * | tree, | ||
void * | data, | ||
const guint | options | ||
) |
Given two address/port pairs for a packet, search for a matching conversation and, if found and it has a conversation dissector, call that dissector and return TRUE, otherwise return FALSE.
This helper uses call_dissector_only which will NOT call the default "data" dissector if the packet was rejected. Our caller is responsible to call the data dissector explicitly in case this function returns FALSE.