Revert "Have find_or_create_conversation() use pinfo->conv_endpoint if present."

This reverts commit ba202ef362.

Creating endpoints, and corresponding conversations, for protocols atop which TCP or UDP runs can potentially cause attempts to look up the conversation to find the conversation for that protocol rather than for TCP/UDP, which can confuse protocols running atop TCP or UDP.

Change-Id: I3ca522e54e67cc4f996d0ee841c6bb40ee6a9976
Reviewed-on: https://code.wireshark.org/review/28912
Reviewed-by: Guy Harris <guy@alum.mit.edu>
This commit is contained in:
Guy Harris 2018-08-01 02:55:13 +00:00
parent b28345b8a4
commit 9cf292a30f
4 changed files with 32 additions and 30 deletions

View File

@ -164,7 +164,6 @@ libwireshark.so.0 libwireshark0 #MINVER#
conversation_key_port2@Base 2.5.0
conversation_new@Base 1.9.1
conversation_new_by_id@Base 2.5.0
conversation_new_pinfo@Base 2.6.3
conversation_pt_to_endpoint_type@Base 2.5.0
conversation_set_dissector@Base 1.9.1
conversation_set_dissector_from_frame_number@Base 2.0.0
@ -633,6 +632,7 @@ libwireshark.so.0 libwireshark0 #MINVER#
find_heur_dissector_by_unique_short_name@Base 1.99.8
find_heur_dissector_list@Base 1.99.2
find_or_create_conversation@Base 1.9.1
find_or_create_conversation_by_id@Base 2.6.3
find_protocol_by_id@Base 1.9.1
find_sid_name@Base 1.9.1
find_stream_circ@Base 1.9.1

View File

@ -765,28 +765,6 @@ conversation_t *conversation_new_by_id(const guint32 setup_frame, const endpoint
return conversation_new(setup_frame, NULL, NULL, etype, id, 0, options | NO_ADDR2 | NO_PORT2);
}
conversation_t *
conversation_new_pinfo(packet_info *pinfo)
{
if (pinfo->use_endpoint) {
return conversation_new(pinfo->num,
&pinfo->conv_endpoint->addr1,
&pinfo->conv_endpoint->addr2,
pinfo->conv_endpoint->etype,
pinfo->conv_endpoint->port1,
pinfo->conv_endpoint->port2,
pinfo->conv_endpoint->options);
} else {
return conversation_new(pinfo->num,
&pinfo->src,
&pinfo->dst,
conversation_pt_to_endpoint_type(pinfo->ptype),
pinfo->srcport,
pinfo->destport,
0);
}
}
/*
* Set the port 2 value in a key. Remove the original from table,
* update the options and port values, insert the updated key.
@ -1519,7 +1497,29 @@ find_or_create_conversation(packet_info *pinfo)
DPRINT(("did not find previous conversation for frame #%u",
pinfo->num));
DINDENT();
conv = conversation_new_pinfo(pinfo);
conv = conversation_new(pinfo->num, &pinfo->src,
&pinfo->dst, conversation_pt_to_endpoint_type(pinfo->ptype),
pinfo->srcport, pinfo->destport, 0);
DENDENT();
}
DENDENT();
return conv;
}
conversation_t *
find_or_create_conversation_by_id(packet_info *pinfo, const endpoint_type etype, const guint32 id)
{
conversation_t *conv=NULL;
/* Have we seen this conversation before? */
if ((conv = find_conversation_by_id(pinfo->num, etype, id, 0)) == NULL) {
/* No, this is a new conversation. */
DPRINT(("did not find previous conversation for frame #%u",
pinfo->num));
DINDENT();
conv = conversation_new_by_id(pinfo->num, etype, id, 0);
DENDENT();
}

View File

@ -134,9 +134,6 @@ WS_DLL_PUBLIC conversation_t *conversation_new(const guint32 setup_frame, const
WS_DLL_PUBLIC conversation_t *conversation_new_by_id(const guint32 setup_frame, const endpoint_type etype, const guint32 id, const guint options);
WS_DLL_PUBLIC
conversation_t *conversation_new_pinfo(packet_info *pinfo);
/**
* Given two address/port pairs for a packet, search for a conversation
* containing packets between those address/port pairs. Returns NULL if
@ -191,6 +188,12 @@ WS_DLL_PUBLIC conversation_t *find_conversation_pinfo(packet_info *pinfo, const
*/
WS_DLL_PUBLIC conversation_t *find_or_create_conversation(packet_info *pinfo);
/** A helper function that calls find_conversation_by_id() and, if a
* conversation is not found, calls conversation_new_by_id().
* The frame number is taken from pinfo.
*/
WS_DLL_PUBLIC conversation_t *find_or_create_conversation_by_id(packet_info *pinfo, const endpoint_type etype, const guint32 id);
WS_DLL_PUBLIC void conversation_add_proto_data(conversation_t *conv, const int proto,
void *proto_data);
WS_DLL_PUBLIC void *conversation_get_proto_data(const conversation_t *conv, const int proto);

View File

@ -96,8 +96,6 @@ dissect_isdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
col_set_str(pinfo->cinfo, COL_RES_DL_SRC, "Network");
}
conversation_create_endpoint_by_id(pinfo, ENDPOINT_ISDN, pinfo->pseudo_header->isdn.channel, 0);
if (tree) {
ti = proto_tree_add_item(tree, proto_isdn, tvb, 0, 0, ENC_NA);
isdn_tree = proto_item_add_subtree(ti, ett_isdn);
@ -109,7 +107,8 @@ dissect_isdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
/*
* Set up a circuit for this channel, and assign it a dissector.
*/
conv = find_or_create_conversation(pinfo);
conv = find_or_create_conversation_by_id(pinfo, ENDPOINT_ISDN,
pinfo->pseudo_header->isdn.channel);
if (conversation_get_dissector(conv, 0) == NULL) {
/*