From b093b6a9928d296f6d7a610ddd22650b4043b6c6 Mon Sep 17 00:00:00 2001 From: John Thacker Date: Sun, 24 Jul 2022 23:35:20 -0400 Subject: [PATCH] epan: Make find_or_create_conversation create what it finds and vice versa The endpoint elements pinfo->conv_endpoint and pinfo->conv_elements cause find_or_create_conversation (via find_conversation_pinfo) to look for conversations based on those endpoints. It should also make it create conversations based on those endpoints, so that subsequent calls find the same conversation it just created instead of repeatedly creating new ones. --- epan/conversation.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/epan/conversation.c b/epan/conversation.c index 8e0bfeb966..9f0eab4216 100644 --- a/epan/conversation.c +++ b/epan/conversation.c @@ -1745,9 +1745,17 @@ find_or_create_conversation(packet_info *pinfo) DPRINT(("did not find previous conversation for frame #%u", pinfo->num)); DINDENT(); - conv = conversation_new(pinfo->num, &pinfo->src, - &pinfo->dst, conversation_pt_to_endpoint_type(pinfo->ptype), - pinfo->srcport, pinfo->destport, 0); + if (pinfo->use_endpoint) { + conv = conversation_new(pinfo->num, &pinfo->conv_endpoint->addr1, &pinfo->conv_endpoint->addr2, + pinfo->conv_endpoint->etype, pinfo->conv_endpoint->port1, + pinfo->conv_endpoint->port2, 0); + } else if (pinfo->conv_elements) { + conv = conversation_new_full(pinfo->num, pinfo->conv_elements); + } else { + conv = conversation_new(pinfo->num, &pinfo->src, + &pinfo->dst, conversation_pt_to_endpoint_type(pinfo->ptype), + pinfo->srcport, pinfo->destport, 0); + } DENDENT(); }