aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsake <sake@f5534014-38df-0310-8fa8-9805f1628bb7>2011-07-17 11:08:02 +0000
committersake <sake@f5534014-38df-0310-8fa8-9805f1628bb7>2011-07-17 11:08:02 +0000
commit554d464e64c239ec486f7b583fb5941ee3b6bd92 (patch)
tree3284dd032e2fa625a33d9e046b54fd25f1e55d6a
parentf143e2b2c81c8992472e2099f8fc368a81650bd6 (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.c2
-rw-r--r--epan/follow.c33
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(