diff options
author | Nardi Ivan <nardi.ivan@gmail.com> | 2021-06-28 13:58:36 +0200 |
---|---|---|
committer | AndersBroman <a.broman58@gmail.com> | 2021-09-13 15:13:10 +0000 |
commit | 3cb302f05b0b8e16b97d4ada5c3027641d9b4a3c (patch) | |
tree | 37e75b796fb41917362ef4d4752ffdde0c897fbb /ui | |
parent | a7a7849259cff96fc3d585e3067079cea856bfc7 (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.c | 2 | ||||
-rw-r--r-- | ui/qt/follow_stream_dialog.cpp | 3 |
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(), |