aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorNardi Ivan <nardi.ivan@gmail.com>2021-06-28 13:58:36 +0200
committerAndersBroman <a.broman58@gmail.com>2021-09-13 15:13:10 +0000
commit3cb302f05b0b8e16b97d4ada5c3027641d9b4a3c (patch)
tree37e75b796fb41917362ef4d4752ffdde0c897fbb /ui
parenta7a7849259cff96fc3d585e3067079cea856bfc7 (diff)
HTTP2, QUIC: fix "Follow Stream"
"Follow Stream" functionality assumes that all data in a single packet belongs to the same stream. That is not true for HTTP2 and QUIC, where we end up having data from unrelated streams. Filter out the unwanted data directly in the protocol dissector code with a custom `tap_handler` (as TCP already does). Close #16093
Diffstat (limited to 'ui')
-rw-r--r--ui/cli/tap-follow.c2
-rw-r--r--ui/qt/follow_stream_dialog.cpp3
2 files changed, 5 insertions, 0 deletions
diff --git a/ui/cli/tap-follow.c b/ui/cli/tap-follow.c
index beec32bb8a..9203781800 100644
--- a/ui/cli/tap-follow.c
+++ b/ui/cli/tap-follow.c
@@ -403,6 +403,7 @@ follow_arg_filter(const char **opt_argp, follow_info_t *follow_info)
((*opt_argp)[len] == 0 || (*opt_argp)[len] == ','))
{
*opt_argp += len;
+ follow_info->substream_id = cli_follow_info->sub_stream_index;
}
}
else
@@ -521,6 +522,7 @@ static void follow_stream(const char *opt_argp, void *userdata)
}
follow_info = g_new0(follow_info_t, 1);
follow_info->gui_data = cli_follow_info;
+ follow_info->substream_id = SUBSTREAM_UNUSED;
cli_follow_info->follower = follower;
follow_arg_mode(&opt_argp, follow_info);
diff --git a/ui/qt/follow_stream_dialog.cpp b/ui/qt/follow_stream_dialog.cpp
index cdd598d256..d52571b9f6 100644
--- a/ui/qt/follow_stream_dialog.cpp
+++ b/ui/qt/follow_stream_dialog.cpp
@@ -117,6 +117,7 @@ FollowStreamDialog::FollowStreamDialog(QWidget &parent, CaptureFile &cf, follow_
memset(&follow_info_, 0, sizeof(follow_info_));
follow_info_.show_stream = BOTH_HOSTS;
+ follow_info_.substream_id = SUBSTREAM_UNUSED;
ui->teStreamContent->installEventFilter(this);
@@ -984,6 +985,8 @@ bool FollowStreamDialog::follow(QString previous_filter, bool use_stream_index,
filter_out_filter_ = QString("!(%1)").arg(follow_filter);
}
+ follow_info_.substream_id = sub_stream_num;
+
/* data will be passed via tap callback*/
if (!registerTapListener(get_follow_tap_string(follower_), &follow_info_,
follow_filter.toUtf8().constData(),