Ethereal-dev: [Ethereal-dev] [patch] conversations demarked by setup frame number
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Jon Ringle <ml-ethereal@xxxxxxxxxx>
Date: Tue, 18 Jan 2005 02:01:55 -0500
1) Added a setup_frame parameter to conversation_t 2) Used the conversation_t next to maintain a list of conversations with the same src/dest tuple but different setup_frame number. 3) Changed the signature of find_conversation() and conversation_new() to pass in the frame number. 4) Adjusted packet-sdp to select RTP conversation if both m=audio and m=image are present, and T.38 conversation if only m=image is present. I expect that RTP/T.38 dissecting to be better, but I don't have a way to generate T.38 packets. Potential problems I noticed: 1) packet-quake.c and packet-bittorrent.c make calls to conversation_new() without checking to see if there is an already existing conversation with find_conversation() 2) packet-dcerpc.c in dcerpc_add_conv_to_bind_table() makes calls to find_conversation() and conversation_new() without a means to get a frame number. I faked it with a zero. Comments welcome... Jon
Index: asn1/h225/packet-h225-template.c =================================================================== --- asn1/h225/packet-h225-template.c (revision 13086) +++ asn1/h225/packet-h225-template.c (working copy) @@ -310,13 +310,13 @@ msg_category = pi->msg_tag / 3; if(pi->msg_tag % 3 == 0) { /* Request Message */ - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { /* It's not part of any conversation - create a new one. */ - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); @@ -383,7 +383,7 @@ /* end of request message handling*/ } else { /* Confirm or Reject Message */ - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation != NULL) { Index: plugins/irda/packet-irda.c =================================================================== --- plugins/irda/packet-irda.c (revision 13086) +++ plugins/irda/packet-irda.c (working copy) @@ -565,7 +565,7 @@ destaddr.len = 1; destaddr.data = (char*)&pinfo->circuit_id; - conv = find_conversation(&srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0); + conv = find_conversation(pinfo->fd->num, &srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0); if (conv) { iap_conv = (iap_conversation_t*)conversation_get_proto_data(conv, PT_NONE); @@ -587,7 +587,7 @@ } else { - conv = conversation_new(&srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0); + conv = conversation_new(pinfo->fd->num, &srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0); iap_conv = g_mem_chunk_alloc(iap_conv_chunk); conversation_add_proto_data(conv, PT_NONE, (void*)iap_conv); } @@ -726,7 +726,7 @@ destaddr.data = (char*)&pinfo->circuit_id; /* Find result value dissector */ - conv = find_conversation(&srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0); + conv = find_conversation(pinfo->fd->num, &srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0); if (conv) { num = pinfo->fd->num; @@ -1015,7 +1015,7 @@ destaddr.data = (char*)&pinfo->circuit_id; /* Find result value dissector */ - conv = find_conversation(&srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0); + conv = find_conversation(pinfo->fd->num, &srcaddr, &destaddr, PT_NONE, pinfo->srcport, pinfo->destport, 0); if (conv) { num = pinfo->fd->num; @@ -1255,7 +1255,7 @@ destaddr.len = 1; destaddr.data = (char*)&dest; - conv = find_conversation(&destaddr, &srcaddr, PT_NONE, dlsap, 0, NO_PORT_B); + conv = find_conversation(pinfo->fd->num, &destaddr, &srcaddr, PT_NONE, dlsap, 0, NO_PORT_B); if (conv) { lmp_conv = (lmp_conversation_t*)conversation_get_proto_data(conv, PT_NONE); @@ -1276,7 +1276,7 @@ } else { - conv = conversation_new(&destaddr, &srcaddr, PT_NONE, dlsap, 0, NO_PORT_B); + conv = conversation_new(pinfo->fd->num, &destaddr, &srcaddr, PT_NONE, dlsap, 0, NO_PORT_B); lmp_conv = g_mem_chunk_alloc(lmp_conv_chunk); conversation_add_proto_data(conv, PT_NONE, (void*)lmp_conv); } Index: plugins/mgcp/packet-mgcp.c =================================================================== --- plugins/mgcp/packet-mgcp.c (revision 13086) +++ plugins/mgcp/packet-mgcp.c (working copy) @@ -1189,7 +1189,7 @@ guarantee that the reply will come from the address to which the call was sent. */ if (pinfo->ptype == PT_TCP) { - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } else { @@ -1199,7 +1199,7 @@ * pointer for the second address argument even * if you do that. */ - conversation = find_conversation(&null_address, + conversation = find_conversation(pinfo->fd->num, &null_address, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } @@ -1275,7 +1275,7 @@ guarantee that the reply will come from the address to which the call was sent. */ if (pinfo->ptype == PT_TCP) { - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } else { @@ -1285,7 +1285,7 @@ * pointer for the second address argument even * if you do that. */ - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &null_address, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } @@ -1293,11 +1293,11 @@ /* It's not part of any conversation - create a new one. */ if (pinfo->ptype == PT_TCP) { - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } else { - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &null_address, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/conversation.c =================================================================== --- epan/conversation.c (revision 13086) +++ epan/conversation.c (working copy) @@ -130,7 +130,8 @@ * conversation with new 2nd address and 2nd port. */ new_conversation_from_template = - conversation_new(&conversation->key_ptr->addr1, addr2, + conversation_new(conversation->setup_frame, + &conversation->key_ptr->addr1, addr2, conversation->key_ptr->ptype, conversation->key_ptr->port1, port2, options); } @@ -141,7 +142,8 @@ * only. Create a new conversation with new 2nd port. */ new_conversation_from_template = - conversation_new(&conversation->key_ptr->addr1, &conversation->key_ptr->addr2, + conversation_new(conversation->setup_frame, + &conversation->key_ptr->addr1, &conversation->key_ptr->addr2, conversation->key_ptr->ptype, conversation->key_ptr->port1, port2, options); } @@ -152,7 +154,8 @@ * 2. Create a new conversation with new 2nd address. */ new_conversation_from_template = - conversation_new(&conversation->key_ptr->addr1, addr2, + conversation_new(conversation->setup_frame, + &conversation->key_ptr->addr1, addr2, conversation->key_ptr->ptype, conversation->key_ptr->port1, conversation->key_ptr->port2, options); } @@ -528,16 +531,42 @@ * when searching for this conversation. */ conversation_t * -conversation_new(address *addr1, address *addr2, port_type ptype, +conversation_new(guint32 setup_frame, address *addr1, address *addr2, port_type ptype, guint32 port1, guint32 port2, guint options) { /* g_assert(!(options | CONVERSATION_TEMPLATE) || ((options | (NO_ADDR2 | NO_PORT2 | NO_PORT2_FORCE))) && "A conversation template may not be constructed without wildcard options"); */ + GHashTable* hashtable; conversation_t *conversation; + conversation_t *tc; + conversation_key existing_key; conversation_key *new_key; + if (options & NO_ADDR2) { + if (options & (NO_PORT2|NO_PORT2_FORCE)) { + hashtable = conversation_hashtable_no_addr2_or_port2; + } else { + hashtable = conversation_hashtable_no_addr2; + } + } else { + if (options & (NO_PORT2|NO_PORT2_FORCE)) { + hashtable = conversation_hashtable_no_port2; + } else { + hashtable = conversation_hashtable_exact; + } + } + + existing_key.addr1 = *addr1; + existing_key.addr2 = *addr2; + existing_key.ptype = ptype; + existing_key.port1 = port1; + existing_key.port2 = port2; + + conversation = g_hash_table_lookup(hashtable, &existing_key); + tc = conversation; /* Remember if lookup was successful */ + new_key = g_mem_chunk_alloc(conversation_key_chunk); new_key->next = conversation_keys; conversation_keys = new_key; @@ -547,8 +576,18 @@ new_key->port1 = port1; new_key->port2 = port2; - conversation = g_mem_chunk_alloc(conversation_chunk); + if (conversation) { + for (; conversation->next; conversation = conversation->next) + ; + conversation->next = g_mem_chunk_alloc(conversation_chunk); + conversation = conversation->next; + } else { + conversation = g_mem_chunk_alloc(conversation_chunk); + } + + conversation->next = NULL; conversation->index = new_index; + conversation->setup_frame = setup_frame; conversation->data_list = NULL; /* clear dissector handle */ @@ -560,23 +599,11 @@ new_index++; - if (options & NO_ADDR2) { - if (options & (NO_PORT2|NO_PORT2_FORCE)) { - g_hash_table_insert(conversation_hashtable_no_addr2_or_port2, - new_key, conversation); - } else { - g_hash_table_insert(conversation_hashtable_no_addr2, - new_key, conversation); - } - } else { - if (options & (NO_PORT2|NO_PORT2_FORCE)) { - g_hash_table_insert(conversation_hashtable_no_port2, - new_key, conversation); - } else { - g_hash_table_insert(conversation_hashtable_exact, - new_key, conversation); - } - } + /* only insert a hash table entry if this + * is the first conversation with this key */ + if (!tc) + g_hash_table_insert(hashtable, new_key, conversation); + return conversation; } @@ -653,9 +680,11 @@ * addr1, port1, addr2, and port2. */ static conversation_t * -conversation_lookup_hashtable(GHashTable *hashtable, address *addr1, address *addr2, +conversation_lookup_hashtable(GHashTable *hashtable, guint32 frame_num, address *addr1, address *addr2, port_type ptype, guint32 port1, guint32 port2) { + conversation_t* conversation; + conversation_t* match; conversation_key key; /* @@ -667,7 +696,18 @@ key.ptype = ptype; key.port1 = port1; key.port2 = port2; - return g_hash_table_lookup(hashtable, &key); + + match = g_hash_table_lookup(hashtable, &key); + + if (match) { + for (conversation = match->next; conversation; conversation = conversation->next) { + if ((conversation->setup_frame < frame_num) + && (conversation->setup_frame > match->setup_frame)) + match = conversation; + } + } + + return match; } @@ -708,7 +748,7 @@ * otherwise, we found no matching conversation, and return NULL. */ conversation_t * -find_conversation(address *addr_a, address *addr_b, port_type ptype, +find_conversation(guint32 frame_num, address *addr_a, address *addr_b, port_type ptype, guint32 port_a, guint32 port_b, guint options) { conversation_t *conversation; @@ -724,7 +764,7 @@ */ conversation = conversation_lookup_hashtable(conversation_hashtable_exact, - addr_a, addr_b, ptype, + frame_num, addr_a, addr_b, ptype, port_a, port_b); if ((conversation == NULL) && (addr_a->type == AT_FC)) { /* In Fibre channel, OXID & RXID are never swapped as @@ -732,7 +772,7 @@ */ conversation = conversation_lookup_hashtable(conversation_hashtable_exact, - addr_b, addr_a, ptype, + frame_num, addr_b, addr_a, ptype, port_a, port_b); } if (conversation != NULL) @@ -755,14 +795,14 @@ */ conversation = conversation_lookup_hashtable(conversation_hashtable_no_addr2, - addr_a, addr_b, ptype, port_a, port_b); + frame_num, addr_a, addr_b, ptype, 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, - addr_b, addr_a, ptype, + frame_num, addr_b, addr_a, ptype, port_a, port_b); } if (conversation != NULL) { @@ -805,7 +845,7 @@ if (!(options & NO_ADDR_B)) { conversation = conversation_lookup_hashtable(conversation_hashtable_no_addr2, - addr_b, addr_a, ptype, port_b, port_a); + frame_num, addr_b, addr_a, ptype, port_b, port_a); if (conversation != NULL) { /* * If this is for a connection-oriented @@ -847,14 +887,14 @@ */ conversation = conversation_lookup_hashtable(conversation_hashtable_no_port2, - addr_a, addr_b, ptype, port_a, port_b); + frame_num, addr_a, addr_b, ptype, 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, - addr_b, addr_a, ptype, port_a, port_b); + frame_num, addr_b, addr_a, ptype, port_a, port_b); } if (conversation != NULL) { /* @@ -896,7 +936,7 @@ if (!(options & NO_PORT_B)) { conversation = conversation_lookup_hashtable(conversation_hashtable_no_port2, - addr_b, addr_a, ptype, port_b, port_a); + frame_num, addr_b, addr_a, ptype, port_b, port_a); if (conversation != NULL) { /* * If this is for a connection-oriented @@ -933,7 +973,7 @@ */ conversation = conversation_lookup_hashtable(conversation_hashtable_no_addr2_or_port2, - addr_a, addr_b, ptype, port_a, port_b); + frame_num, addr_a, addr_b, ptype, port_a, port_b); if (conversation != NULL) { /* * If this is for a connection-oriented protocol: @@ -978,11 +1018,11 @@ if (addr_a->type == AT_FC) conversation = conversation_lookup_hashtable(conversation_hashtable_no_addr2_or_port2, - addr_b, addr_a, ptype, port_a, port_b); + frame_num, addr_b, addr_a, ptype, port_a, port_b); else conversation = conversation_lookup_hashtable(conversation_hashtable_no_addr2_or_port2, - addr_b, addr_a, ptype, port_b, port_a); + frame_num, addr_b, addr_a, ptype, port_b, port_a); if (conversation != NULL) { /* * If this is for a connection-oriented protocol, set the @@ -1097,7 +1137,7 @@ { conversation_t *conversation; - conversation = find_conversation(addr_a, addr_b, ptype, port_a, + conversation = find_conversation(pinfo->fd->num, addr_a, addr_b, ptype, port_a, port_b, 0); if (conversation != NULL) { Index: epan/conversation.h =================================================================== --- epan/conversation.h (revision 13086) +++ epan/conversation.h (working copy) @@ -66,6 +66,7 @@ typedef struct conversation { struct conversation *next; /* pointer to next conversation on hash chain */ guint32 index; /* unique ID for conversation */ + guint32 setup_frame; /* frame number that setup this conversation */ GSList *data_list; /* list of data associated with conversation */ dissector_handle_t dissector_handle; /* handle for protocol dissector client associated with conversation */ @@ -75,10 +76,10 @@ extern void conversation_init(void); -extern conversation_t *conversation_new(address *addr1, address *addr2, +extern conversation_t *conversation_new(guint32 setup_frame, address *addr1, address *addr2, port_type ptype, guint32 port1, guint32 port2, guint options); -extern conversation_t *find_conversation(address *addr_a, address *addr_b, +extern conversation_t *find_conversation(guint32 frame_num, address *addr_a, address *addr_b, port_type ptype, guint32 port_a, guint32 port_b, guint options); extern void conversation_add_proto_data(conversation_t *conv, int proto, Index: epan/dissectors/packet-ndmp.c =================================================================== --- epan/dissectors/packet-ndmp.c (revision 13086) +++ epan/dissectors/packet-ndmp.c (working copy) @@ -1166,10 +1166,10 @@ * sequence number in requests and the reply sequence * number in replies to identify SCSI tasks. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } task_key.conv_id = conversation->index; @@ -1255,7 +1255,7 @@ * sequence number in requests and the reply sequence * number in replies to identify SCSI tasks. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation != NULL) { task_key.conv_id = conversation->index; Index: epan/dissectors/packet-snmp.c =================================================================== --- epan/dissectors/packet-snmp.c (revision 13086) +++ epan/dissectors/packet-snmp.c (working copy) @@ -2324,10 +2324,10 @@ * wildcarded, and give it the SNMP dissector as a dissector. */ if (pinfo->destport == UDP_PORT_SNMP) { - conversation = find_conversation(&pinfo->src, &pinfo->dst, PT_UDP, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_UDP, pinfo->srcport, 0, NO_PORT_B); if (conversation == NULL) { - conversation = conversation_new(&pinfo->src, &pinfo->dst, PT_UDP, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_UDP, pinfo->srcport, 0, NO_PORT2); conversation_set_dissector(conversation, snmp_handle); } Index: epan/dissectors/packet-fcfcs.c =================================================================== --- epan/dissectors/packet-fcfcs.c (revision 13086) +++ epan/dissectors/packet-fcfcs.c (working copy) @@ -843,11 +843,11 @@ cthdr.maxres_size = ntohs (cthdr.maxres_size); if ((opcode != FCCT_MSG_ACC) && (opcode != FCCT_MSG_RJT)) { - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); if (!conversation) { - conversation = conversation_new (&pinfo->src, &pinfo->dst, + conversation = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); } @@ -879,7 +879,7 @@ } else { /* Opcode is ACC or RJT */ - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); isreq = 0; Index: epan/dissectors/packet-pgsql.c =================================================================== --- epan/dissectors/packet-pgsql.c (revision 13086) +++ epan/dissectors/packet-pgsql.c (working copy) @@ -321,10 +321,10 @@ first_message = TRUE; /* We don't use conversation data yet, but... */ - cv = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + cv = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (!cv) { - cv = conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, + cv = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-spnego.c =================================================================== --- epan/dissectors/packet-spnego.c (revision 13086) +++ epan/dissectors/packet-spnego.c (working copy) @@ -1082,7 +1082,7 @@ * could override that. :-( */ - if ((conversation = find_conversation(&pinfo->src, &pinfo->dst, + if ((conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0))) { @@ -1294,7 +1294,7 @@ * If we have a conversation, try to get the handle, * and if we get one, attach it to the frame. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); @@ -1427,7 +1427,7 @@ * If we have a conversation, try to get the handle, * and if we get one, attach it to the frame. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); Index: epan/dissectors/packet-rtsp.c =================================================================== --- epan/dissectors/packet-rtsp.c (revision 13086) +++ epan/dissectors/packet-rtsp.c (working copy) @@ -233,7 +233,7 @@ length_remaining = rf_len; next_tvb = tvb_new_subset(tvb, offset, length_remaining, rf_len); - conv = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conv && @@ -410,10 +410,10 @@ pinfo->fd->num); return; } - conv = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (!conv) { - conv = conversation_new(&pinfo->src, &pinfo->dst, + conv = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-ntlmssp.c =================================================================== --- epan/dissectors/packet-ntlmssp.c (revision 13086) +++ epan/dissectors/packet-ntlmssp.c (working copy) @@ -926,11 +926,11 @@ * Store the flags and the RC4 state information with the conversation, * as they're needed in order to dissect subsequent messages. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (!conversation) { /* Create one */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } @@ -1019,7 +1019,7 @@ * it means this is the first time we've dissected this frame, so * we should give it flag info. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation != NULL) { @@ -1203,7 +1203,7 @@ conversation_t *conversation; ntlmssp_info *conv_ntlmssp_info; - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { @@ -1258,7 +1258,7 @@ return; } if (!packet_ntlmssp_info->verifier_decrypted) { - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { @@ -1437,7 +1437,7 @@ if (!packet_ntlmssp_info->payload_decrypted) { /* Pull the challenge info from the conversation */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { Index: epan/dissectors/packet-quake.c =================================================================== --- epan/dissectors/packet-quake.c (revision 13086) +++ epan/dissectors/packet-quake.c (working copy) @@ -220,7 +220,7 @@ conversation_t *c; port = tvb_get_letohl(tvb, 0); - c = conversation_new( &pinfo->src, &pinfo->dst, PT_UDP, port, + c = conversation_new( pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_UDP, port, pinfo->destport, 0); if (c) { conversation_set_dissector(c, quake_handle); Index: epan/dissectors/packet-fc.c =================================================================== --- epan/dissectors/packet-fc.c (revision 13086) +++ epan/dissectors/packet-fc.c (working copy) @@ -1165,11 +1165,11 @@ * SEQ_CNT of the first frame in sequence and use this value to * determine the actual offset into a frame. */ - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); if (!conversation) { - conversation = conversation_new (&pinfo->src, &pinfo->dst, + conversation = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); } Index: epan/dissectors/packet-fcfzs.c =================================================================== --- epan/dissectors/packet-fcfzs.c (revision 13086) +++ epan/dissectors/packet-fcfzs.c (working copy) @@ -664,11 +664,11 @@ } if ((opcode != FCCT_MSG_ACC) && (opcode != FCCT_MSG_RJT)) { - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); if (!conversation) { - conversation = conversation_new (&pinfo->src, &pinfo->dst, + conversation = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); } @@ -700,7 +700,7 @@ } else { /* Opcode is ACC or RJT */ - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); isreq = 0; Index: epan/dissectors/packet-rsync.c =================================================================== --- epan/dissectors/packet-rsync.c (revision 13086) +++ epan/dissectors/packet-rsync.c (working copy) @@ -106,10 +106,10 @@ if (check_col(pinfo->cinfo, COL_INFO)) col_clear(pinfo->cinfo, COL_INFO); - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-x11.c =================================================================== --- epan/dissectors/packet-x11.c (revision 13086) +++ epan/dissectors/packet-x11.c (working copy) @@ -4122,13 +4122,13 @@ * if we don't have one, and create the state if we don't have * any. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { /* * No - create one. */ - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } @@ -4407,13 +4407,13 @@ * if we don't have one, and create the state if we don't have * any. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { /* * No - create one. */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-isns.c =================================================================== --- epan/dissectors/packet-isns.c (revision 13086) +++ epan/dissectors/packet-isns.c (working copy) @@ -942,19 +942,19 @@ if ((port_type == ISNS_ESI_PORT) || (port_type == ISNS_SCN_PORT)) { if (isudp) { - conversation = find_conversation (&pinfo->src, &pinfo->dst, PT_UDP, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_UDP, port, 0, NO_PORT_B); if (conversation == NULL) { - conversation = conversation_new (&pinfo->src, &pinfo->dst, + conversation = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_UDP, port, 0, NO_PORT2_FORCE); conversation_set_dissector (conversation, isns_udp_handle); } } else { - conversation = find_conversation (&pinfo->src, &pinfo->dst, PT_TCP, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_TCP, port, 0, NO_PORT_B); if (conversation == NULL) { - conversation = conversation_new (&pinfo->src, &pinfo->dst, + conversation = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_TCP, port, 0, NO_PORT2_FORCE); conversation_set_dissector (conversation, isns_tcp_handle); } Index: epan/dissectors/packet-portmap.c =================================================================== --- epan/dissectors/packet-portmap.c (revision 13086) +++ epan/dissectors/packet-portmap.c (working copy) @@ -123,9 +123,9 @@ port=tvb_get_ntohl(tvb, offset); if(port){ conversation_t *conv; - conv=find_conversation(&pinfo->src, &pinfo->dst, (port_type)rpc_call->private_data, port, 0, NO_ADDR_B|NO_PORT_B); + conv=find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, (port_type)rpc_call->private_data, port, 0, NO_ADDR_B|NO_PORT_B); if(!conv){ - conv=conversation_new(&pinfo->src, &pinfo->dst, (port_type)rpc_call->private_data, port, 0, NO_ADDR2|NO_PORT2); + conv=conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, (port_type)rpc_call->private_data, port, 0, NO_ADDR2|NO_PORT2); } conversation_set_dissector(conv, rpc_handle); } Index: epan/dissectors/packet-dcm.c =================================================================== --- epan/dissectors/packet-dcm.c (revision 13086) +++ epan/dissectors/packet-dcm.c (working copy) @@ -898,14 +898,14 @@ guint32 len, tlen; dcmState_t *dcm_data = NULL; - conv = find_conversation(&pinfo->src, &pinfo->dst, + conv = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (NULL != conv) /* conversation exists */ /* do we have any data for this conversation ? */ dcm_data = conversation_get_proto_data(conv, proto_dcm); else - conv = conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (NULL == dcm_data) { @@ -950,7 +950,7 @@ char *buf; int offset = 0; - if (NULL == (conv = find_conversation(&pinfo->src, &pinfo->dst, + if (NULL == (conv = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0))) return; /* OOPS */ Index: epan/dissectors/packet-kerberos.c =================================================================== --- epan/dissectors/packet-kerberos.c (revision 13086) +++ epan/dissectors/packet-kerberos.c (working copy) @@ -3044,10 +3044,10 @@ * http://www.ietf.org/internet-drafts/draft-ietf-krb-wg-kerberos-clarifications-07.txt */ if (pinfo->destport == UDP_PORT_KERBEROS && pinfo->ptype == PT_UDP) { - conversation = find_conversation(&pinfo->src, &pinfo->dst, PT_UDP, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_UDP, pinfo->srcport, 0, NO_PORT_B); if (conversation == NULL) { - conversation = conversation_new(&pinfo->src, &pinfo->dst, PT_UDP, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_UDP, pinfo->srcport, 0, NO_PORT2); conversation_set_dissector(conversation, kerberos_handle_udp); } Index: epan/dissectors/packet-h225.c =================================================================== --- epan/dissectors/packet-h225.c (revision 13086) +++ epan/dissectors/packet-h225.c (working copy) @@ -2221,9 +2221,9 @@ src_addr.len=4; src_addr.data=(const guint8 *)&ipv4_address; - conv=find_conversation(&src_addr, &src_addr, PT_TCP, ipv4_port, ipv4_port, NO_ADDR_B|NO_PORT_B); + conv=find_conversation(pinfo->fd->num, &src_addr, &src_addr, PT_TCP, ipv4_port, ipv4_port, NO_ADDR_B|NO_PORT_B); if(!conv){ - conv=conversation_new(&src_addr, &src_addr, PT_TCP, ipv4_port, ipv4_port, NO_ADDR2|NO_PORT2); + conv=conversation_new(pinfo->fd->num, &src_addr, &src_addr, PT_TCP, ipv4_port, ipv4_port, NO_ADDR2|NO_PORT2); conversation_set_dissector(conv, h245_handle); } } @@ -12115,13 +12115,13 @@ msg_category = pi->msg_tag / 3; if(pi->msg_tag % 3 == 0) { /* Request Message */ - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { /* It's not part of any conversation - create a new one. */ - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); @@ -12188,7 +12188,7 @@ /* end of request message handling*/ } else { /* Confirm or Reject Message */ - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation != NULL) { Index: epan/dissectors/packet-mysql.c =================================================================== --- epan/dissectors/packet-mysql.c (revision 13086) +++ epan/dissectors/packet-mysql.c (working copy) @@ -251,12 +251,12 @@ gboolean is_response; - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (!conversation) { /* create a new conversation */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-ftp.c =================================================================== --- epan/dissectors/packet-ftp.c (revision 13086) +++ epan/dissectors/packet-ftp.c (working copy) @@ -462,7 +462,7 @@ * "ftp_ip_address" and "server_port", and * wildcard everything else? */ - conversation = find_conversation(&ftp_ip_address, + conversation = find_conversation(pinfo->fd->num, &ftp_ip_address, &pinfo->dst, PT_TCP, ftp_port, 0, NO_PORT_B); if (conversation == NULL) { @@ -489,7 +489,7 @@ * and a new one was opened? */ conversation = conversation_new( - &ftp_ip_address, &pinfo->dst, + pinfo->fd->num, &ftp_ip_address, &pinfo->dst, PT_TCP, ftp_port, 0, NO_PORT2); conversation_set_dissector(conversation, ftpdata_handle); Index: epan/dissectors/packet-bittorrent.c =================================================================== --- epan/dissectors/packet-bittorrent.c (revision 13086) +++ epan/dissectors/packet-bittorrent.c (working copy) @@ -221,7 +221,7 @@ return FALSE; } - conversation = conversation_new (&pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); + conversation = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); g_assert(find_dissector("bittorrent")); Index: epan/dissectors/packet-ndps.c =================================================================== --- epan/dissectors/packet-ndps.c (revision 13086) +++ epan/dissectors/packet-ndps.c (working copy) @@ -3818,13 +3818,13 @@ if (!pinfo->fd->flags.visited) { /* Lets see if this is a new conversation */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, (guint32) pinfo->srcport, (guint32) pinfo->srcport, 0); if (conversation == NULL) { /* It's not part of any conversation - create a new one. */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, (guint32) pinfo->srcport, (guint32) pinfo->srcport, 0); /* Create new request value hash */ request_value = ndps_hash_insert(conversation, (guint32) pinfo->srcport); @@ -4015,13 +4015,13 @@ as being part of a single conversation so that we can let the user select that conversation to be displayed.) */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, (guint32) pinfo->srcport, (guint32) pinfo->srcport, 0); if (conversation == NULL) { /* It's not part of any conversation - create a new one. */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, (guint32) pinfo->srcport, (guint32) pinfo->srcport, 0); } @@ -6247,7 +6247,7 @@ if (!pinfo->fd->flags.visited) { /* Find the conversation whence the request would have come. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, (guint32) pinfo->destport, (guint32) pinfo->destport, 0); if (conversation != NULL) { /* find the record telling us the request made that caused Index: epan/dissectors/packet-beep.c =================================================================== --- epan/dissectors/packet-beep.c (revision 13086) +++ epan/dissectors/packet-beep.c (working copy) @@ -870,10 +870,10 @@ if (!frame_data) { - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { /* No conversation, create one */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-ssh.c =================================================================== --- epan/dissectors/packet-ssh.c (revision 13086) +++ epan/dissectors/packet-ssh.c (working copy) @@ -227,12 +227,12 @@ is_newdata = FALSE; this_data = p_get_proto_data(pinfo->fd, proto_ssh); - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (!conversation) { /* create a new conversation */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-afp.c =================================================================== --- epan/dissectors/packet-afp.c (revision 13086) +++ epan/dissectors/packet-afp.c (working copy) @@ -3313,12 +3313,12 @@ if (col_info) col_clear(pinfo->cinfo, COL_INFO); - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-wsp.c =================================================================== --- epan/dissectors/packet-wsp.c (revision 13086) +++ epan/dissectors/packet-wsp.c (working copy) @@ -4506,10 +4506,10 @@ redir_address.len = 4; redir_address.data = (const guint8 *)&address_ipv4; /* Find a conversation based on redir_address and pinfo->dst */ - conv = find_conversation(&redir_address, &pinfo->dst, + conv = find_conversation(pinfo->fd->num, &redir_address, &pinfo->dst, PT_UDP, port_num, 0, NO_PORT_B); if (conv == NULL) { /* This conversation does not exist yet */ - conv = conversation_new(&redir_address, + conv = conversation_new(pinfo->fd->num, &redir_address, &pinfo->dst, PT_UDP, port_num, 0, NO_PORT2); } /* Apply WSP dissection to the conversation */ @@ -4542,10 +4542,10 @@ redir_address.len = 16; redir_address.data = (const guint8 *)&address_ipv4; /* Find a conversation based on redir_address and pinfo->dst */ - conv = find_conversation(&redir_address, &pinfo->dst, + conv = find_conversation(pinfo->fd->num, &redir_address, &pinfo->dst, PT_UDP, port_num, 0, NO_PORT_B); if (conv == NULL) { /* This conversation does not exist yet */ - conv = conversation_new(&redir_address, + conv = conversation_new(pinfo->fd->num, &redir_address, &pinfo->dst, PT_UDP, port_num, 0, NO_PORT2); } /* Apply WSP dissection to the conversation */ Index: epan/dissectors/packet-t38.c =================================================================== --- epan/dissectors/packet-t38.c (revision 13086) +++ epan/dissectors/packet-t38.c (working copy) @@ -199,14 +199,14 @@ * Check if the ip address and port combination is not * already registered as a conversation. */ - p_conv = find_conversation( addr, &null_addr, PT_UDP, port, other_port, + p_conv = find_conversation( setup_frame_number, addr, &null_addr, PT_UDP, port, other_port, NO_ADDR_B | (!other_port ? NO_PORT_B : 0)); /* * If not, create a new conversation. */ - if ( ! p_conv ) { - p_conv = conversation_new( addr, &null_addr, PT_UDP, + if ( !p_conv || p_conv->setup_frame != setup_frame_number) { + p_conv = conversation_new( setup_frame_number, addr, &null_addr, PT_UDP, (guint32)port, (guint32)other_port, NO_ADDR2 | (!other_port ? NO_PORT2 : 0)); } @@ -892,7 +892,7 @@ if (!p_conv_data) { /* First time, get info from conversation */ - p_conv = find_conversation(&pinfo->net_src, &pinfo->net_dst, + p_conv = find_conversation(pinfo->fd->num, &pinfo->net_src, &pinfo->net_dst, pinfo->ptype, pinfo->srcport, pinfo->destport, NO_ADDR_B); if (p_conv) Index: epan/dissectors/packet-eap.c =================================================================== --- epan/dissectors/packet-eap.c (revision 13086) +++ epan/dissectors/packet-eap.c (working copy) @@ -647,21 +647,21 @@ * keep them separate? (Or is that not going to happen?) */ if (pinfo->destport == pinfo->match_port) { - conversation = find_conversation(&pinfo->dst, &pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->dst, &pinfo->src, pinfo->ptype, pinfo->destport, 0, NO_PORT_B); } else { - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, 0, NO_PORT_B); } if (conversation == NULL) { if (pinfo->destport == pinfo->match_port) { - conversation = conversation_new(&pinfo->dst, &pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->dst, &pinfo->src, pinfo->ptype, pinfo->destport, 0, NO_PORT2); } else { - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, 0, NO_PORT2); } Index: epan/dissectors/packet-ldap.c =================================================================== --- epan/dissectors/packet-ldap.c (revision 13086) +++ epan/dissectors/packet-ldap.c (working copy) @@ -2374,12 +2374,12 @@ /* * Do we have a conversation for this connection? */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { /* We don't yet have a conversation, so create one. */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-smb.c =================================================================== --- epan/dissectors/packet-smb.c (revision 13086) +++ epan/dissectors/packet-smb.c (working copy) @@ -14594,11 +14594,11 @@ /* find which conversation we are part of and get the tables for that conversation*/ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if(!conversation){ /* OK this is a new conversation so lets create it */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } /* see if we already have the smb data for this conversation */ Index: epan/dissectors/packet-xyplex.c =================================================================== --- epan/dissectors/packet-xyplex.c (revision 13086) +++ epan/dissectors/packet-xyplex.c (working copy) @@ -115,10 +115,10 @@ * requestiong server and the Xyplex host using the * return_port. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_TCP, return_port, 0, NO_PORT_B); if (conversation == NULL) { - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_TCP, return_port, 0, NO_PORT2); conversation_set_dissector(conversation, xyplex_handle); } Index: epan/dissectors/packet-smtp.c =================================================================== --- epan/dissectors/packet-smtp.c (revision 13086) +++ epan/dissectors/packet-smtp.c (working copy) @@ -177,10 +177,10 @@ if (!frame_data) { - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { /* No conversation, create one */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-sdp.c =================================================================== --- epan/dissectors/packet-sdp.c (revision 13086) +++ epan/dissectors/packet-sdp.c (working copy) @@ -207,7 +207,8 @@ guint32 port=0; gboolean is_rtp=FALSE; - gboolean is_t38=FALSE; + gboolean is_t38=FALSE; + gboolean set_rtp=FALSE; gboolean is_ipv4_addr=FALSE; gboolean is_ipv6_addr=FALSE; guint32 ipaddr[4]; @@ -399,12 +400,13 @@ } } } - /* Add rtp and rtcp conversation, if available */ + /* Add rtp and rtcp conversation, if available (overrides t38 if conversation already set) */ if((!pinfo->fd->flags.visited) && port!=0 && is_rtp && (is_ipv4_addr || is_ipv6_addr)){ src_addr.data=(char *)&ipaddr; if(rtp_handle){ rtp_add_address(pinfo, &src_addr, port, 0, "SDP", pinfo->fd->num); + set_rtp = TRUE; } if(rtcp_handle){ port++; @@ -413,8 +415,8 @@ } } - /* Add t38 conversation, if available */ - if((!pinfo->fd->flags.visited) && port!=0 && is_t38 && is_ipv4_addr){ + /* Add t38 conversation, if available and only if no rtp */ + if((!pinfo->fd->flags.visited) && port!=0 && !set_rtp && is_t38 && is_ipv4_addr){ src_addr.data=(char *)&ipaddr; if(t38_handle){ t38_add_address(pinfo, &src_addr, port, 0, "SDP", pinfo->fd->num); Index: epan/dissectors/packet-atalk.c =================================================================== --- epan/dissectors/packet-atalk.c (revision 13086) +++ epan/dissectors/packet-atalk.c (working copy) @@ -759,12 +759,12 @@ aspinfo.code = 0; query = (!aspinfo.reply && !aspinfo.release); - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } @@ -1117,12 +1117,12 @@ asp_request_val *request_val; guint8 fn; - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-tcp.c =================================================================== --- epan/dissectors/packet-tcp.c (revision 13086) +++ epan/dissectors/packet-tcp.c (working copy) @@ -289,9 +289,9 @@ struct tcp_analysis *tcpd=NULL; /* Have we seen this conversation before? */ - if( (conv=find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0)) == NULL){ + if( (conv=find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0)) == NULL){ /* No this is a new conversation. */ - conv=conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); + conv=conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } /* check if we have any data for this conversation */ Index: epan/dissectors/packet-fcsb3.c =================================================================== --- epan/dissectors/packet-fcsb3.c (revision 13086) +++ epan/dissectors/packet-fcsb3.c (working copy) @@ -780,7 +780,7 @@ } /* Retrieve conversation state to determine expected payload */ - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_SBCCS, ch_cu_id, dev_addr, 0); if (conversation) { @@ -791,7 +791,7 @@ } else if ((type == FC_SBCCS_IU_CMD_HDR) || (type != FC_SBCCS_IU_CMD_DATA)) { - conversation = conversation_new (&pinfo->src, &pinfo->dst, + conversation = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_SBCCS, ch_cu_id, dev_addr, 0); task_key.conv_id = conversation->index; task_key.task_id = ccw; Index: epan/dissectors/packet-tuxedo.c =================================================================== --- epan/dissectors/packet-tuxedo.c (revision 13086) +++ epan/dissectors/packet-tuxedo.c (working copy) @@ -154,10 +154,10 @@ { /* Register this dissector for this conversation */ conversation_t *conversation = NULL; - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { - conversation = conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } conversation_set_dissector(conversation, tuxedo_handle); Index: epan/dissectors/packet-fcswils.c =================================================================== --- epan/dissectors/packet-fcswils.c (revision 13086) +++ epan/dissectors/packet-fcswils.c (working copy) @@ -1476,11 +1476,11 @@ /* Register conversation if this is not a response */ if ((opcode != FC_SWILS_SWACC) && (opcode != FC_SWILS_SWRJT)) { - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); if (!conversation) { - conversation = conversation_new (&pinfo->src, &pinfo->dst, + conversation = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); } @@ -1508,7 +1508,7 @@ } else { /* Opcode is ACC or RJT */ - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); isreq = FC_SWILS_RPLY; Index: epan/dissectors/packet-ncp2222.inc =================================================================== --- epan/dissectors/packet-ncp2222.inc (revision 13086) +++ epan/dissectors/packet-ncp2222.inc (working copy) @@ -4129,7 +4129,7 @@ /* Has this already been dissected? */ if (!pinfo->fd->flags.visited) { /* Find the conversation whence the request would have come. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, nw_connection, nw_connection, 0); if (conversation != NULL) { /* find the record telling us the request made that caused @@ -4438,12 +4438,12 @@ to have all packets over the same connection treated as being part of a single conversation so that we can let the user select that conversation to be displayed.) */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, nw_connection, nw_connection, 0); if (conversation == NULL) { /* It's not part of any conversation - create a new one. */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, nw_connection, nw_connection, 0); } request_value = ncp_hash_insert(conversation, sequence, ncp_rec); @@ -4596,7 +4596,7 @@ if (!request_value) { - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, nw_connection, nw_connection, 0); if (conversation != NULL) { /* find the record telling us the request made that caused @@ -4736,7 +4736,7 @@ if (!pinfo->fd->flags.visited) { /* Find the conversation whence the request would have come. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, nw_connection, nw_connection, 0); if (conversation != NULL) { /* find the record telling us the request made that caused @@ -8198,11 +8198,11 @@ as being part of a single conversation so that we can let the user select that conversation to be displayed.) */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, nw_connection, nw_connection, 0); if (conversation == NULL) { /* It's not part of any conversation - create a new one. */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, nw_connection, nw_connection, 0); } @@ -8471,13 +8471,13 @@ as being part of a single conversation so that we can let the user select that conversation to be displayed.) */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, nw_connection, nw_connection, 0); if (conversation == NULL) { /* It's not part of any conversation - create a new one. */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, nw_connection, nw_connection, 0); } Index: epan/dissectors/packet-aoe.c =================================================================== --- epan/dissectors/packet-aoe.c (revision 13086) +++ epan/dissectors/packet-aoe.c (working copy) @@ -226,12 +226,12 @@ conversation_t *conversation; /* only create a conversation for ATA commands */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { /* We don't yet have a conversation, so create one. */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-rtcp.c =================================================================== --- epan/dissectors/packet-rtcp.c (revision 13086) +++ epan/dissectors/packet-rtcp.c (working copy) @@ -284,14 +284,14 @@ * Check if the ip address and port combination is not * already registered as a conversation. */ - p_conv = find_conversation( addr, &null_addr, PT_UDP, port, other_port, + p_conv = find_conversation( pinfo->fd->num, addr, &null_addr, PT_UDP, port, other_port, NO_ADDR_B | (!other_port ? NO_PORT_B : 0)); /* * If not, create a new conversation. */ if ( ! p_conv ) { - p_conv = conversation_new( addr, &null_addr, PT_UDP, + p_conv = conversation_new( pinfo->fd->num, addr, &null_addr, PT_UDP, (guint32)port, (guint32)other_port, NO_ADDR2 | (!other_port ? NO_PORT2 : 0)); } @@ -867,7 +867,7 @@ if (!p_conv_data) { /* First time, get info from conversation */ - p_conv = find_conversation(&pinfo->net_dst, &pinfo->net_src, + p_conv = find_conversation(pinfo->fd->num, &pinfo->net_dst, &pinfo->net_src, pinfo->ptype, pinfo->destport, pinfo->srcport, NO_ADDR_B); @@ -950,14 +950,14 @@ /* First time, get info from conversation. Even though we think of this as an outgoing packet being sent, we store the time as being received by the destination. */ - p_conv = find_conversation(&pinfo->net_dst, &pinfo->net_src, + p_conv = find_conversation(pinfo->fd->num, &pinfo->net_dst, &pinfo->net_src, pinfo->ptype, pinfo->destport, pinfo->srcport, NO_ADDR_B); /* If the conversation doesn't exist, create it now. */ if (!p_conv) { - p_conv = conversation_new(&pinfo->net_dst, &pinfo->net_src, PT_UDP, + p_conv = conversation_new(pinfo->fd->num, &pinfo->net_dst, &pinfo->net_src, PT_UDP, pinfo->destport, pinfo->srcport, NO_ADDR2); if (!p_conv) @@ -1056,7 +1056,7 @@ /********************************************************************/ /* Look for captured timestamp of last SR in conversation of sender */ /* of this packet */ - p_conv = find_conversation(&pinfo->net_src, &pinfo->net_dst, + p_conv = find_conversation(pinfo->fd->num, &pinfo->net_src, &pinfo->net_dst, pinfo->ptype, pinfo->srcport, pinfo->destport, NO_ADDR_B); if (!p_conv) Index: epan/dissectors/packet-afs.c =================================================================== --- epan/dissectors/packet-afs.c (revision 13086) +++ epan/dissectors/packet-afs.c (working copy) @@ -216,11 +216,11 @@ * packets from A:X to B:Y as being part of the same conversation as * packets from B:Y to A:X. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { /* It's not part of any conversation - create a new one. */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-iscsi.c =================================================================== --- epan/dissectors/packet-iscsi.c (revision 13086) +++ epan/dissectors/packet-iscsi.c (working copy) @@ -1789,11 +1789,11 @@ } /* make sure we have a conversation for this session */ - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (!conversation) { - conversation = conversation_new (&pinfo->src, &pinfo->dst, + conversation = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); iscsi_session=g_mem_chunk_alloc(iscsi_sessions); Index: epan/dissectors/packet-rlogin.c =================================================================== --- epan/dissectors/packet-rlogin.c (revision 13086) +++ epan/dissectors/packet-rlogin.c (working copy) @@ -338,11 +338,11 @@ gint ti_offset; /* Lookup this connection*/ - conversation = find_conversation( &pinfo->src, &pinfo->dst, + conversation = find_conversation( pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if ( !conversation) { - conversation = conversation_new( &pinfo->src, &pinfo->dst, + conversation = conversation_new( pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } hash_info = conversation_get_proto_data(conversation, proto_rlogin); Index: epan/dissectors/packet-dcerpc.c =================================================================== --- epan/dissectors/packet-dcerpc.c (revision 13086) +++ epan/dissectors/packet-dcerpc.c (working copy) @@ -2412,10 +2412,10 @@ } if (!saw_ctx_item) { - conv = find_conversation (&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conv == NULL) { - conv = conversation_new (&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } @@ -2914,6 +2914,7 @@ conversation_t *conv; conv = find_conversation ( + 0, &binding->addr_a, &binding->addr_b, binding->ptype, @@ -2923,6 +2924,7 @@ if (!conv) { conv = conversation_new ( + 0, &binding->addr_a, &binding->addr_b, binding->ptype, @@ -3014,7 +3016,7 @@ */ dissect_dcerpc_cn_auth (tvb, offset, pinfo, dcerpc_tree, hdr, FALSE, &auth_info); - conv = find_conversation (&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (!conv) show_stub_data (tvb, offset, dcerpc_tree, &auth_info, TRUE); @@ -3159,7 +3161,7 @@ */ dissect_dcerpc_cn_auth (tvb, offset, pinfo, dcerpc_tree, hdr, FALSE, &auth_info); - conv = find_conversation (&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (!conv) { @@ -3280,7 +3282,7 @@ */ dissect_dcerpc_cn_auth (tvb, offset, pinfo, dcerpc_tree, hdr, FALSE, &auth_info); - conv = find_conversation (&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (!conv) { /* no point in creating one here, really */ @@ -4498,10 +4500,10 @@ * activity_id and seqnum. I haven't seen anywhere that it would * make a difference, but for future reference... */ - conv = find_conversation (&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (!conv) { - conv = conversation_new (&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-ssl.c =================================================================== --- epan/dissectors/packet-ssl.c (revision 13086) +++ epan/dissectors/packet-ssl.c (working copy) @@ -843,12 +843,12 @@ * the conv_version, must set the copy in the conversation * in addition to conv_version */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (!conversation) { /* create a new conversation */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } conv_data = conversation_get_proto_data(conversation, proto_ssl); @@ -2841,13 +2841,13 @@ return; } - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { /* create a new conversation */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } Index: epan/dissectors/packet-ajp13.c =================================================================== --- epan/dissectors/packet-ajp13.c (revision 13086) +++ epan/dissectors/packet-ajp13.c (working copy) @@ -640,10 +640,10 @@ /* conversational state really only does us good during the first * in-order traversal */ - conv = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (!conv) { - conv = conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } cd = (ajp13_conv_data*)conversation_get_proto_data(conv, proto_ajp13); Index: epan/dissectors/packet-rpc.c =================================================================== --- epan/dissectors/packet-rpc.c (revision 13086) +++ epan/dissectors/packet-rpc.c (working copy) @@ -1391,7 +1391,7 @@ NFS client *cough) might send retransmissions from a different port from the original request. */ if (pinfo->ptype == PT_TCP) { - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } else { @@ -1400,7 +1400,7 @@ * pointer for the second address argument even * if you use NO_ADDR_B. */ - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &null_address, pinfo->ptype, pinfo->destport, 0, NO_ADDR_B|NO_PORT_B); } @@ -1412,11 +1412,11 @@ created a conversation for it in the RPC dissector. */ if (pinfo->ptype == PT_TCP) { - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } else { - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &null_address, pinfo->ptype, pinfo->destport, 0, NO_ADDR2|NO_PORT2); } @@ -1528,7 +1528,7 @@ NFS client *cough) might send retransmissions from a different port from the original request. */ if (pinfo->ptype == PT_TCP) { - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } else { /* @@ -1536,7 +1536,7 @@ * pointer for the second address argument even * if you use NO_ADDR_B. */ - conversation = find_conversation(&pinfo->dst, &null_address, + conversation = find_conversation(pinfo->fd->num, &pinfo->dst, &null_address, pinfo->ptype, pinfo->srcport, 0, NO_ADDR_B|NO_PORT_B); } if (conversation == NULL) { @@ -1804,7 +1804,7 @@ NFS client *cough) might send retransmissions from a different port from the original request. */ if (pinfo->ptype == PT_TCP) { - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } else { @@ -1813,7 +1813,7 @@ * pointer for the second address argument even * if you use NO_ADDR_B. */ - conversation = find_conversation(&pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->dst, &null_address, pinfo->ptype, pinfo->srcport, 0, NO_ADDR_B|NO_PORT_B); } @@ -2039,7 +2039,7 @@ NFS client *cough) might send retransmissions from a different port from the original request. */ if (pinfo->ptype == PT_TCP) { - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } else { @@ -2048,7 +2048,7 @@ * pointer for the second address argument even * if you use NO_ADDR_B. */ - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &null_address, pinfo->ptype, pinfo->destport, 0, NO_ADDR_B|NO_PORT_B); } @@ -2056,11 +2056,11 @@ /* It's not part of any conversation - create a new one. */ if (pinfo->ptype == PT_TCP) { - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } else { - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &null_address, pinfo->ptype, pinfo->destport, 0, NO_ADDR2|NO_PORT2); } @@ -2920,13 +2920,13 @@ * one, create it. We know this is running over TCP, so the * conversation should not wildcard either address or port. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { /* * It's not part of any conversation - create a new one. */ - conversation = conversation_new(&pinfo->src, &pinfo->dst, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } old_rfk.conv_id = conversation->index; Index: epan/dissectors/packet-msproxy.c =================================================================== --- epan/dissectors/packet-msproxy.c (revision 13086) +++ epan/dissectors/packet-msproxy.c (working copy) @@ -203,7 +203,7 @@ proto_tree *msp_tree; proto_item *ti; - conversation = find_conversation( &pinfo->src, &pinfo->dst, + conversation = find_conversation( pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); g_assert( conversation); /* should always find a conversation */ @@ -279,12 +279,12 @@ return; } - conversation = find_conversation( &pinfo->src, + conversation = find_conversation( pinfo->fd->num, &pinfo->src, &pinfo->dst, hash_info->proto, hash_info->server_int_port, hash_info->clnt_port, 0); if ( !conversation) { - conversation = conversation_new( &pinfo->src, &pinfo->dst, + conversation = conversation_new( pinfo->fd->num, &pinfo->src, &pinfo->dst, hash_info->proto, hash_info->server_int_port, hash_info->clnt_port, 0); } @@ -1099,11 +1099,11 @@ if (check_col(pinfo->cinfo, COL_INFO)) col_clear(pinfo->cinfo, COL_INFO); - conversation = find_conversation( &pinfo->src, &pinfo->dst, + conversation = find_conversation( pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if ( !conversation) { - conversation = conversation_new( &pinfo->src, &pinfo->dst, + conversation = conversation_new( pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } hash_info = conversation_get_proto_data(conversation, proto_msproxy); Index: epan/dissectors/packet-fcp.c =================================================================== --- epan/dissectors/packet-fcp.c (revision 13086) +++ epan/dissectors/packet-fcp.c (working copy) @@ -262,11 +262,11 @@ /* by the data that is sent back or sent next by the initiator as part */ /* of this command. The state is destroyed in the response dissector */ - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); if (!conversation) { - conversation = conversation_new (&pinfo->src, &pinfo->dst, + conversation = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); } @@ -353,7 +353,7 @@ scsi_task_id_t task_key; /* Retrieve conversation state to determine expected payload */ - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); if (conversation) { @@ -410,7 +410,7 @@ } /* Response marks the end of the conversation. So destroy state */ - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); if (conversation) { @@ -494,11 +494,11 @@ fcp_conv_key_t ckey, *req_key; /* Retrieve conversation state to determine expected payload */ - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); if (!conversation) { - conversation = conversation_new (&pinfo->src, &pinfo->dst, + conversation = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); } Index: epan/dissectors/packet-mq.c =================================================================== --- epan/dissectors/packet-mq.c (revision 13086) +++ epan/dissectors/packet-mq.c (working copy) @@ -2433,10 +2433,10 @@ { /* Register this dissector for this conversation */ conversation_t *conversation = NULL; - conversation = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conversation == NULL) { - conversation = conversation_new(&pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } if (iProto == MQ_XPT_TCP) conversation_set_dissector(conversation, mq_tcp_handle); Index: epan/dissectors/packet-tftp.c =================================================================== --- epan/dissectors/packet-tftp.c (revision 13086) +++ epan/dissectors/packet-tftp.c (working copy) @@ -115,10 +115,10 @@ * wildcarded, and give it the TFTP dissector as a dissector. */ if (pinfo->destport == UDP_PORT_TFTP) { - conversation = find_conversation(&pinfo->src, &pinfo->dst, PT_UDP, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_UDP, pinfo->srcport, 0, NO_PORT_B); if (conversation == NULL) { - conversation = conversation_new(&pinfo->src, &pinfo->dst, PT_UDP, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_UDP, pinfo->srcport, 0, NO_PORT2); conversation_set_dissector(conversation, tftp_handle); } Index: epan/dissectors/packet-ncp.c =================================================================== --- epan/dissectors/packet-ncp.c (revision 13086) +++ epan/dissectors/packet-ncp.c (working copy) @@ -355,7 +355,7 @@ * packets we will be able to determine if we need * to also dissect with a signature. */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, (guint32) pinfo->srcport, (guint32) pinfo->destport, 0); if ((ncpiph.length & 0x80000000) || @@ -382,7 +382,7 @@ /* It's not part of any conversation * - create a new one. */ - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, (guint32) pinfo->srcport, (guint32) pinfo->destport, 0); @@ -443,7 +443,7 @@ /* It's not part of any conversation * - create a new one. */ - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, (guint32) pinfo->srcport, (guint32) pinfo->destport, 0); Index: epan/dissectors/packet-socks.c =================================================================== --- epan/dissectors/packet-socks.c (revision 13086) +++ epan/dissectors/packet-socks.c (working copy) @@ -376,7 +376,7 @@ proto_tree *socks_tree; proto_item *ti; - conversation = find_conversation( &pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation( pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); g_assert( conversation); /* should always find a conversation */ @@ -435,7 +435,7 @@ static void new_udp_conversation( socks_hash_entry_t *hash_info, packet_info *pinfo){ - conversation_t *conversation = conversation_new( &pinfo->src, &pinfo->dst, PT_UDP, + conversation_t *conversation = conversation_new( pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_UDP, hash_info->udp_port, hash_info->port, 0); g_assert( conversation); @@ -1000,11 +1000,11 @@ return; } - conversation = find_conversation( &pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = find_conversation( pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if ( !conversation){ - conversation = conversation_new( &pinfo->src, &pinfo->dst, pinfo->ptype, + conversation = conversation_new( pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } hash_info = conversation_get_proto_data(conversation,proto_socks); Index: epan/dissectors/packet-gssapi.c =================================================================== --- epan/dissectors/packet-gssapi.c (revision 13086) +++ epan/dissectors/packet-gssapi.c (working copy) @@ -167,7 +167,7 @@ * We need this later, so lets get it now ... */ - conversation = find_conversation(&pinfo->src, &pinfo->dst, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); @@ -334,7 +334,7 @@ */ if (!conversation) { /* Create one */ - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, Index: epan/dissectors/packet-fcels.c =================================================================== --- epan/dissectors/packet-fcels.c (revision 13086) +++ epan/dissectors/packet-fcels.c (working copy) @@ -1531,12 +1531,12 @@ else { options = NO_PORT2; } - conversation = find_conversation (&pinfo->dst, &pinfo->src, + conversation = find_conversation (pinfo->fd->num, &pinfo->dst, &pinfo->src, pinfo->ptype, pinfo->oxid, pinfo->rxid, options); if (!conversation) { - conversation = conversation_new (&pinfo->dst, &pinfo->src, + conversation = conversation_new (pinfo->fd->num, &pinfo->dst, &pinfo->src, pinfo->ptype, pinfo->oxid, pinfo->rxid, options); } @@ -1566,7 +1566,7 @@ isreq = FC_ELS_RPLY; options = NO_PORT2; - conversation = find_conversation (&pinfo->dst, &pinfo->src, + conversation = find_conversation (pinfo->fd->num, &pinfo->dst, &pinfo->src, pinfo->ptype, pinfo->oxid, pinfo->rxid, options); if (!conversation) { @@ -1576,7 +1576,7 @@ addrdata[0] = addrdata[1] = 0; addrdata[2] = pinfo->dst.data[2]; SET_ADDRESS (&dstaddr, AT_FC, 3, addrdata); - conversation = find_conversation (&dstaddr, &pinfo->src, + conversation = find_conversation (pinfo->fd->num, &dstaddr, &pinfo->src, pinfo->ptype, pinfo->oxid, pinfo->rxid, options); } @@ -1584,7 +1584,7 @@ if (!conversation) { /* Finally check for FLOGI with both NO_PORT2 and NO_ADDR2 set */ options = NO_ADDR2 | NO_PORT2; - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, options); if (!conversation) { Index: epan/dissectors/packet-tds.c =================================================================== --- epan/dissectors/packet-tds.c (revision 13086) +++ epan/dissectors/packet-tds.c (working copy) @@ -1930,13 +1930,13 @@ * OK, it passes the test; assume the rest of this conversation * is TDS. */ - conv = find_conversation(&pinfo->src, &pinfo->dst, pinfo->ptype, + conv = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); if (conv == NULL) { /* * No conversation exists yet - create one. */ - conv = conversation_new(&pinfo->src, &pinfo->dst, + conv = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->srcport, pinfo->destport, 0); } conversation_set_dissector(conv, tds_tcp_handle); Index: epan/dissectors/packet-fcdns.c =================================================================== --- epan/dissectors/packet-fcdns.c (revision 13086) +++ epan/dissectors/packet-fcdns.c (working copy) @@ -1509,11 +1509,11 @@ } if ((opcode != FCCT_MSG_ACC) && (opcode != FCCT_MSG_RJT)) { - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); if (!conversation) { - conversation = conversation_new (&pinfo->src, &pinfo->dst, + conversation = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); } @@ -1545,7 +1545,7 @@ } else { /* Opcode is ACC or RJT */ - conversation = find_conversation (&pinfo->src, &pinfo->dst, + conversation = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, pinfo->oxid, pinfo->rxid, NO_PORT2); isreq = 0; Index: epan/dissectors/packet-ipx.c =================================================================== --- epan/dissectors/packet-ipx.c (revision 13086) +++ epan/dissectors/packet-ipx.c (working copy) @@ -716,7 +716,7 @@ * Not a system packet - check for retransmissions. */ if (!pinfo->fd->flags.visited) { - conversation = find_conversation(&pinfo->src, + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, pinfo->srcport, pinfo->srcport, 0); if (conversation == NULL) { @@ -724,7 +724,7 @@ * It's not part of any conversation - create * a new one. */ - conversation = conversation_new(&pinfo->src, + conversation = conversation_new(pinfo->fd->num, &pinfo->src, &pinfo->dst, PT_NCP, pinfo->srcport, pinfo->srcport, 0); } Index: epan/dissectors/packet-rtp.c =================================================================== --- epan/dissectors/packet-rtp.c (revision 13086) +++ epan/dissectors/packet-rtp.c (working copy) @@ -216,14 +216,14 @@ * Check if the ip address and port combination is not * already registered as a conversation. */ - p_conv = find_conversation( addr, &null_addr, PT_UDP, port, other_port, + p_conv = find_conversation( setup_frame_number, addr, &null_addr, PT_UDP, port, other_port, NO_ADDR_B | (!other_port ? NO_PORT_B : 0)); /* * If not, create a new conversation. */ - if ( ! p_conv ) { - p_conv = conversation_new( addr, &null_addr, PT_UDP, + if ( !p_conv || p_conv->setup_frame != setup_frame_number) { + p_conv = conversation_new( setup_frame_number, addr, &null_addr, PT_UDP, (guint32)port, (guint32)other_port, NO_ADDR2 | (!other_port ? NO_PORT2 : 0)); } @@ -633,7 +633,7 @@ if (!p_conv_data) { /* First time, get info from conversation */ - p_conv = find_conversation(&pinfo->net_dst, &pinfo->net_src, + p_conv = find_conversation(pinfo->fd->num, &pinfo->net_dst, &pinfo->net_src, pinfo->ptype, pinfo->destport, pinfo->srcport, NO_ADDR_B); if (p_conv)
- Follow-Ups:
- Prev by Date: [Ethereal-dev] Patch for packet-bssgp.c - please check in
- Next by Date: Re: [Ethereal-dev] Problems with Relative Sequence Numbers and Window Scaling
- Previous by thread: RE: [Ethereal-dev] Patch for packet-bssgp.c - please check in
- Next by thread: Re: [Ethereal-dev] [patch] conversations demarked by setup frame number
- Index(es):