aboutsummaryrefslogtreecommitdiffstats
path: root/epan/conversation.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2017-10-29 10:12:59 -0400
committerMichael Mann <mmann78@netscape.net>2017-10-29 16:53:57 +0000
commitabfb6441177961fbdfa9648fdd2c40ef0ef3cefd (patch)
treedc5d1b438a052e73ec243d2f10e772e39fec3894 /epan/conversation.c
parent1bc6d4e96573f89ecdd719cb3cac92754b91f52c (diff)
Add conversation endpoint type
For the moment this mirrors the port_type enumeration (PT_XXX), but the intent is to move away from using "port types", eliminating most (if not all) Added conversation_pt_to_endpoint_type() so that conversations deal with the correct enumeration. This is for dissector that use pinfo->ptype as input to conversation APIs. Explicit use of port types are converted to using ENDPOINT_XXX type. Change-Id: Ia0bf553a3943b702c921f185407e03ce93ebf0ef Reviewed-on: https://code.wireshark.org/review/24166 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/conversation.c')
-rw-r--r--epan/conversation.c121
1 files changed, 83 insertions, 38 deletions
diff --git a/epan/conversation.c b/epan/conversation.c
index 21e8bf160a..532a4361b4 100644
--- a/epan/conversation.c
+++ b/epan/conversation.c
@@ -40,7 +40,7 @@ struct conversation_key {
struct conversation_key *next;
address addr1;
address addr2;
- port_type ptype;
+ endpoint_type etype;
guint32 port1;
guint32 port2;
};
@@ -90,7 +90,7 @@ conversation_create_from_template(conversation_t *conversation, const address *a
* CONVERSATION_TEMPLATE bit is set for a connection oriented protocol.
*/
if(conversation->options & CONVERSATION_TEMPLATE &&
- conversation->key_ptr->ptype != PT_UDP)
+ conversation->key_ptr->etype != ENDPOINT_UDP)
{
/*
* Set up a new options mask where the conversation template bit and the
@@ -113,7 +113,7 @@ conversation_create_from_template(conversation_t *conversation, const address *a
new_conversation_from_template =
conversation_new(conversation->setup_frame,
&conversation->key_ptr->addr1, addr2,
- conversation->key_ptr->ptype, conversation->key_ptr->port1,
+ conversation->key_ptr->etype, conversation->key_ptr->port1,
port2, options);
}
else if(conversation->options & NO_PORT2)
@@ -125,7 +125,7 @@ conversation_create_from_template(conversation_t *conversation, const address *a
new_conversation_from_template =
conversation_new(conversation->setup_frame,
&conversation->key_ptr->addr1, &conversation->key_ptr->addr2,
- conversation->key_ptr->ptype, conversation->key_ptr->port1,
+ conversation->key_ptr->etype, conversation->key_ptr->port1,
port2, options);
}
else if(conversation->options & NO_ADDR2)
@@ -137,7 +137,7 @@ conversation_create_from_template(conversation_t *conversation, const address *a
new_conversation_from_template =
conversation_new(conversation->setup_frame,
&conversation->key_ptr->addr1, addr2,
- conversation->key_ptr->ptype, conversation->key_ptr->port1,
+ conversation->key_ptr->etype, conversation->key_ptr->port1,
conversation->key_ptr->port2, options);
}
else
@@ -207,7 +207,7 @@ conversation_match_exact(gconstpointer v, gconstpointer w)
const conversation_key_t v1 = (const conversation_key_t)v;
const conversation_key_t v2 = (const conversation_key_t)w;
- if (v1->ptype != v2->ptype)
+ if (v1->etype != v2->etype)
return 0; /* different types of port */
/*
@@ -291,7 +291,7 @@ conversation_match_no_addr2(gconstpointer v, gconstpointer w)
const conversation_key_t v1 = (const conversation_key_t)v;
const conversation_key_t v2 = (const conversation_key_t)w;
- if (v1->ptype != v2->ptype)
+ if (v1->etype != v2->etype)
return 0; /* different types of port */
/*
@@ -355,7 +355,7 @@ conversation_match_no_port2(gconstpointer v, gconstpointer w)
const conversation_key_t v1 = (const conversation_key_t)v;
const conversation_key_t v2 = (const conversation_key_t)w;
- if (v1->ptype != v2->ptype)
+ if (v1->etype != v2->etype)
return 0; /* different types of port */
/*
@@ -417,7 +417,7 @@ conversation_match_no_addr2_or_port2(gconstpointer v, gconstpointer w)
const conversation_key_t v1 = (const conversation_key_t)v;
const conversation_key_t v2 = (const conversation_key_t)w;
- if (v1->ptype != v2->ptype)
+ if (v1->etype != v2->etype)
return 0; /* different types of port */
/*
@@ -606,8 +606,8 @@ conversation_remove_from_hashtable(wmem_map_t *hashtable, conversation_t *conv)
* when searching for this conversation.
*/
conversation_t *
-conversation_new(const guint32 setup_frame, const address *addr1, const address *addr2, const port_type ptype,
- const guint32 port1, const guint32 port2, const guint options)
+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)
{
/*
DISSECTOR_ASSERT(!(options | CONVERSATION_TEMPLATE) || ((options | (NO_ADDR2 | NO_PORT2 | NO_PORT2_FORCE))) &&
@@ -638,7 +638,7 @@ conversation_new(const guint32 setup_frame, const address *addr1, const address
new_key = wmem_new(wmem_file_scope(), struct conversation_key);
copy_address_wmem(wmem_file_scope(), &new_key->addr1, addr1);
copy_address_wmem(wmem_file_scope(), &new_key->addr2, addr2);
- new_key->ptype = ptype;
+ new_key->etype = etype;
new_key->port1 = port1;
new_key->port2 = port2;
@@ -741,7 +741,7 @@ conversation_set_addr2(conversation_t *conv, const address *addr)
*/
static conversation_t *
conversation_lookup_hashtable(wmem_map_t *hashtable, const guint32 frame_num, const address *addr1, const address *addr2,
- const port_type ptype, const guint32 port1, const guint32 port2)
+ const endpoint_type etype, const guint32 port1, const guint32 port2)
{
conversation_t* convo=NULL;
conversation_t* match=NULL;
@@ -754,7 +754,7 @@ conversation_lookup_hashtable(wmem_map_t *hashtable, const guint32 frame_num, co
*/
key.addr1 = *addr1;
key.addr2 = *addr2;
- key.ptype = ptype;
+ key.etype = etype;
key.port1 = port1;
key.port2 = port2;
@@ -820,7 +820,7 @@ conversation_lookup_hashtable(wmem_map_t *hashtable, const guint32 frame_num, co
* otherwise, we found no matching conversation, and return NULL.
*/
conversation_t *
-find_conversation(const guint32 frame_num, const address *addr_a, const address *addr_b, const port_type ptype,
+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)
{
conversation_t *conversation;
@@ -836,14 +836,14 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
DPRINT(("trying exact match"));
conversation =
conversation_lookup_hashtable(conversation_hashtable_exact,
- frame_num, addr_a, addr_b, ptype,
+ frame_num, addr_a, addr_b, etype,
port_a, port_b);
/* Didn't work, try the other direction */
if (conversation == NULL) {
DPRINT(("trying opposite direction"));
conversation =
conversation_lookup_hashtable(conversation_hashtable_exact,
- frame_num, addr_b, addr_a, ptype,
+ frame_num, addr_b, addr_a, etype,
port_b, port_a);
}
if ((conversation == NULL) && (addr_a->type == AT_FC)) {
@@ -852,7 +852,7 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
*/
conversation =
conversation_lookup_hashtable(conversation_hashtable_exact,
- frame_num, addr_b, addr_a, ptype,
+ frame_num, addr_b, addr_a, etype,
port_a, port_b);
}
DPRINT(("exact match %sfound",conversation?"":"not "));
@@ -877,14 +877,14 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
DPRINT(("trying wildcarded dest address"));
conversation =
conversation_lookup_hashtable(conversation_hashtable_no_addr2,
- frame_num, addr_a, addr_b, ptype, port_a, port_b);
+ frame_num, addr_a, addr_b, etype, port_a, port_b);
if ((conversation == NULL) && (addr_a->type == AT_FC)) {
/* In Fibre channel, OXID & RXID are never swapped as
* TCP/UDP ports are in TCP/IP.
*/
conversation =
conversation_lookup_hashtable(conversation_hashtable_no_addr2,
- frame_num, addr_b, addr_a, ptype,
+ frame_num, addr_b, addr_a, etype,
port_a, port_b);
}
if (conversation != NULL) {
@@ -900,7 +900,7 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
* address, unless the CONVERSATION_TEMPLATE option is set.)
*/
DPRINT(("wildcarded dest address match found"));
- if (!(conversation->options & NO_ADDR_B) && ptype != PT_UDP)
+ if (!(conversation->options & NO_ADDR_B) && etype != ENDPOINT_UDP)
{
if(!(conversation->options & CONVERSATION_TEMPLATE))
{
@@ -929,7 +929,7 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
DPRINT(("trying dest addr:port as source addr:port with wildcarded dest addr"));
conversation =
conversation_lookup_hashtable(conversation_hashtable_no_addr2,
- frame_num, addr_b, addr_a, ptype, port_b, port_a);
+ frame_num, addr_b, addr_a, etype, port_b, port_a);
if (conversation != NULL) {
/*
* If this is for a connection-oriented
@@ -940,7 +940,7 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
* conversation.
*/
DPRINT(("match found"));
- if (ptype != PT_UDP) {
+ if (etype != ENDPOINT_UDP) {
if(!(conversation->options & CONVERSATION_TEMPLATE))
{
conversation_set_addr2(conversation, addr_a);
@@ -973,14 +973,14 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
DPRINT(("trying wildcarded dest port"));
conversation =
conversation_lookup_hashtable(conversation_hashtable_no_port2,
- frame_num, addr_a, addr_b, ptype, port_a, port_b);
+ frame_num, addr_a, addr_b, etype, port_a, port_b);
if ((conversation == NULL) && (addr_a->type == AT_FC)) {
/* In Fibre channel, OXID & RXID are never swapped as
* TCP/UDP ports are in TCP/IP
*/
conversation =
conversation_lookup_hashtable(conversation_hashtable_no_port2,
- frame_num, addr_b, addr_a, ptype, port_a, port_b);
+ frame_num, addr_b, addr_a, etype, port_a, port_b);
}
if (conversation != NULL) {
/*
@@ -995,7 +995,7 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
* unless the CONVERSATION_TEMPLATE option is set.)
*/
DPRINT(("match found"));
- if (!(conversation->options & NO_PORT_B) && ptype != PT_UDP)
+ if (!(conversation->options & NO_PORT_B) && etype != ENDPOINT_UDP)
{
if(!(conversation->options & CONVERSATION_TEMPLATE))
{
@@ -1024,7 +1024,7 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
DPRINT(("trying dest addr:port as source addr:port and wildcarded dest port"));
conversation =
conversation_lookup_hashtable(conversation_hashtable_no_port2,
- frame_num, addr_b, addr_a, ptype, port_b, port_a);
+ frame_num, addr_b, addr_a, etype, port_b, port_a);
if (conversation != NULL) {
/*
* If this is for a connection-oriented
@@ -1035,7 +1035,7 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
* conversation.
*/
DPRINT(("match found"));
- if (ptype != PT_UDP)
+ if (etype != ENDPOINT_UDP)
{
if(!(conversation->options & CONVERSATION_TEMPLATE))
{
@@ -1063,7 +1063,7 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
DPRINT(("trying wildcarding dest addr:port"));
conversation =
conversation_lookup_hashtable(conversation_hashtable_no_addr2_or_port2,
- frame_num, addr_a, addr_b, ptype, port_a, port_b);
+ frame_num, addr_a, addr_b, etype, port_a, port_b);
if (conversation != NULL) {
/*
* If this is for a connection-oriented protocol:
@@ -1079,7 +1079,7 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
* second port for this conversation.
*/
DPRINT(("match found"));
- if (ptype != PT_UDP)
+ if (etype != ENDPOINT_UDP)
{
if(!(conversation->options & CONVERSATION_TEMPLATE))
{
@@ -1101,7 +1101,7 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
* valid conversation than what is being searched using
* addr_a, port_a.
*/
- if (ptype != PT_IBQP)
+ if (etype != ENDPOINT_IBQP)
{
/*
@@ -1117,11 +1117,11 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
if (addr_a->type == AT_FC)
conversation =
conversation_lookup_hashtable(conversation_hashtable_no_addr2_or_port2,
- frame_num, addr_b, addr_a, ptype, port_a, port_b);
+ frame_num, addr_b, addr_a, etype, port_a, port_b);
else
conversation =
conversation_lookup_hashtable(conversation_hashtable_no_addr2_or_port2,
- frame_num, addr_b, addr_a, ptype, port_b, port_a);
+ frame_num, addr_b, addr_a, etype, port_b, port_a);
if (conversation != NULL) {
/*
* If this is for a connection-oriented protocol, set the
@@ -1133,7 +1133,7 @@ find_conversation(const guint32 frame_num, const address *addr_a, const address
* conversation.
*/
DPRINT(("match found"));
- if (ptype != PT_UDP)
+ if (etype != ENDPOINT_UDP)
{
if(!(conversation->options & CONVERSATION_TEMPLATE))
{
@@ -1213,13 +1213,13 @@ conversation_get_dissector(conversation_t *conversation, const guint32 frame_num
* this function returns FALSE.
*/
gboolean
-try_conversation_dissector(const address *addr_a, const address *addr_b, const port_type ptype,
+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)
{
conversation_t *conversation;
- conversation = find_conversation(pinfo->num, addr_a, addr_b, ptype, port_a,
+ conversation = find_conversation(pinfo->num, addr_a, addr_b, etype, port_a,
port_b, 0);
if (conversation != NULL) {
@@ -1255,7 +1255,7 @@ find_conversation_pinfo(packet_info *pinfo, const guint options)
/* Have we seen this conversation before? */
if((conv = find_conversation(pinfo->num, &pinfo->src, &pinfo->dst,
- pinfo->ptype, pinfo->srcport,
+ conversation_pt_to_endpoint_type(pinfo->ptype), pinfo->srcport,
pinfo->destport, options)) != NULL) {
DPRINT(("found previous conversation for frame #%d (last_frame=%d)",
pinfo->num, conv->last_frame));
@@ -1285,7 +1285,7 @@ find_or_create_conversation(packet_info *pinfo)
pinfo->num));
DINDENT();
conv = conversation_new(pinfo->num, &pinfo->src,
- &pinfo->dst, pinfo->ptype,
+ &pinfo->dst, conversation_pt_to_endpoint_type(pinfo->ptype),
pinfo->srcport, pinfo->destport, 0);
DENDENT();
}
@@ -1343,6 +1343,51 @@ conversation_key_port2(const conversation_key_t key)
return key->port2;
}
+WS_DLL_PUBLIC
+endpoint_type conversation_pt_to_endpoint_type(port_type pt)
+{
+ switch (pt)
+ {
+ case PT_NONE:
+ return ENDPOINT_NONE;
+ case PT_SCTP:
+ return ENDPOINT_SCTP;
+ case PT_TCP:
+ return ENDPOINT_TCP;
+ case PT_UDP:
+ return ENDPOINT_UDP;
+ case PT_DCCP:
+ return ENDPOINT_DCCP;
+ case PT_IPX:
+ return ENDPOINT_IPX;
+ case PT_NCP:
+ return ENDPOINT_NCP;
+ case PT_EXCHG:
+ return ENDPOINT_EXCHG;
+ case PT_DDP:
+ return ENDPOINT_DDP;
+ case PT_IDP:
+ return ENDPOINT_IDP;
+ case PT_TIPC:
+ return ENDPOINT_TIPC;
+ case PT_USB:
+ return ENDPOINT_USB;
+ case PT_I2C:
+ return ENDPOINT_I2C;
+ case PT_IBQP:
+ return ENDPOINT_IBQP;
+ case PT_SBCCS:
+ return ENDPOINT_SBCCS;
+ case PT_BLUETOOTH:
+ return ENDPOINT_BLUETOOTH;
+ case PT_TDMOP:
+ return ENDPOINT_TDMOP;
+ }
+
+ DISSECTOR_ASSERT(FALSE);
+ return ENDPOINT_NONE;
+}
+
gchar*
conversation_get_html_hash(const conversation_key_t key)
{