diff options
author | sake <sake@f5534014-38df-0310-8fa8-9805f1628bb7> | 2011-07-17 11:08:02 +0000 |
---|---|---|
committer | sake <sake@f5534014-38df-0310-8fa8-9805f1628bb7> | 2011-07-17 11:08:02 +0000 |
commit | 554d464e64c239ec486f7b583fb5941ee3b6bd92 (patch) | |
tree | 3284dd032e2fa625a33d9e046b54fd25f1e55d6a | |
parent | f143e2b2c81c8992472e2099f8fc368a81650bd6 (diff) |
Repair "Follow TCP Stream" which got broken by my change in SVN 38056
Mental note: Try to not do half work ;-)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@38065 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r-- | epan/dissectors/packet-tcp.c | 2 | ||||
-rw-r--r-- | epan/follow.c | 33 |
2 files changed, 19 insertions, 16 deletions
diff --git a/epan/dissectors/packet-tcp.c b/epan/dissectors/packet-tcp.c index 88ebee4e8d..02eebcd154 100644 --- a/epan/dissectors/packet-tcp.c +++ b/epan/dissectors/packet-tcp.c @@ -4201,7 +4201,7 @@ dissect_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (tcph->th_have_seglen) { if( data_out_file ) { - reassemble_tcp( conv->index, /* conversation index */ + reassemble_tcp( tcpd->stream, /* tcp stream index */ tcph->th_seq, /* sequence number */ tcph->th_ack, /* acknowledgement number */ tcph->th_seglen, /* data length */ diff --git a/epan/follow.c b/epan/follow.c index 83f2c4b4e1..05b0fdc89f 100644 --- a/epan/follow.c +++ b/epan/follow.c @@ -38,6 +38,7 @@ #include <glib.h> #include <epan/packet.h> #include <epan/ipproto.h> +#include <epan/dissectors/packet-tcp.h> #include "follow.h" #include <epan/conversation.h> @@ -87,16 +88,28 @@ build_follow_filter( packet_info *pi ) { char* buf; int len; conversation_t *conv=NULL; + struct tcp_analysis *tcpd; - if( pi->net_src.type == AT_IPv4 && pi->net_dst.type == AT_IPv4 + if( ((pi->net_src.type == AT_IPv4 && pi->net_dst.type == AT_IPv4) || + (pi->net_src.type == AT_IPv6 && pi->net_dst.type == AT_IPv6)) && pi->ipproto == IP_PROTO_TCP && (conv=find_conversation(pi->fd->num, &pi->src, &pi->dst, pi->ptype, pi->srcport, pi->destport, 0)) != NULL ) { /* TCP over IPv4 */ - buf = g_strdup_printf("tcp.stream eq %d", conv->index); - len = 4; - is_ipv6 = FALSE; - tcp_stream_to_follow = conv->index; + tcpd=get_tcp_conversation_data(conv, pi); + if (tcpd) { + buf = g_strdup_printf("tcp.stream eq %d", tcpd->stream); + tcp_stream_to_follow = tcpd->stream; + if (pi->net_src.type == AT_IPv4) { + len = 4; + is_ipv6 = FALSE; + } else { + len = 16; + is_ipv6 = TRUE; + } + } else { + return NULL; + } } else if( pi->net_src.type == AT_IPv4 && pi->net_dst.type == AT_IPv4 && pi->ipproto == IP_PROTO_UDP ) { @@ -110,16 +123,6 @@ build_follow_filter( packet_info *pi ) { is_ipv6 = FALSE; } else if( pi->net_src.type == AT_IPv6 && pi->net_dst.type == AT_IPv6 - && pi->ipproto == IP_PROTO_TCP - && (conv=find_conversation(pi->fd->num, &pi->src, &pi->dst, pi->ptype, - pi->srcport, pi->destport, 0)) != NULL ) { - /* TCP over IPv6 */ - buf = g_strdup_printf("tcp.stream eq %d", conv->index); - len = 16; - is_ipv6 = TRUE; - tcp_stream_to_follow = conv->index; - } - else if( pi->net_src.type == AT_IPv6 && pi->net_dst.type == AT_IPv6 && pi->ipproto == IP_PROTO_UDP ) { /* UDP over IPv6 */ buf = g_strdup_printf( |