From 4deb97f31f52ca9c88efbbf46cf3e580c85474f3 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Tue, 20 Jun 2017 14:08:39 -0400 Subject: Fix filter for "Next Packet in Conversation" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "Previous/Next Packet in Conversation" actions accidentally overwrites more specific filters (like TCP port matching) by less specific ones (like IP addresses). This resulted in strange behavior where packets from different TCP streams were selected. Change-Id: Ifa93064e1db3777fa3c12e2220bbb0b36b9478fe Reported-by: Christian Landström Reviewed-on: https://code.wireshark.org/review/22274 Reviewed-by: Pascal Quantin Reviewed-by: Peter Wu --- ui/gtk/main_menubar.c | 39 ++------------------------------------- ui/qt/main_window_slots.cpp | 41 ++--------------------------------------- 2 files changed, 4 insertions(+), 76 deletions(-) (limited to 'ui') diff --git a/ui/gtk/main_menubar.c b/ui/gtk/main_menubar.c index a34be9c5ba..1d7b73979b 100644 --- a/ui/gtk/main_menubar.c +++ b/ui/gtk/main_menubar.c @@ -206,29 +206,7 @@ colorize_conversation_cb(conversation_filter_t* color_filter, int action_num) * or through an accelerator key. Try to build a conversation * filter in the order TCP, UDP, IP, Ethernet and apply the * coloring */ - color_filter = find_conversation_filter("tcp"); - if ((color_filter != NULL) && (color_filter->is_filter_valid(pi))) - filter = color_filter->build_filter_string(pi); - if (filter == NULL) { - color_filter = find_conversation_filter("udp"); - if ((color_filter != NULL) && (color_filter->is_filter_valid(pi))) - filter = color_filter->build_filter_string(pi); - } - if (filter == NULL) { - color_filter = find_conversation_filter("ip"); - if ((color_filter != NULL) && (color_filter->is_filter_valid(pi))) - filter = color_filter->build_filter_string(pi); - } - if (filter == NULL) { - color_filter = find_conversation_filter("ipv6"); - if ((color_filter != NULL) && (color_filter->is_filter_valid(pi))) - filter = color_filter->build_filter_string(pi); - } - if (filter == NULL) { - color_filter = find_conversation_filter("eth"); - if ((color_filter != NULL) && (color_filter->is_filter_valid(pi))) - filter = color_filter->build_filter_string(pi); - } + filter = conversation_filter_from_packet(pi); if( filter == NULL ) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Unable to build conversation filter."); return; @@ -260,24 +238,11 @@ goto_conversation_frame(gboolean dir) dfilter_t *dfcode = NULL; gboolean found_packet = FALSE; packet_info *pi = &cfile.edt->pi; - conversation_filter_t* conv_filter; /* Try to build a conversation * filter in the order TCP, UDP, IP, Ethernet and apply the * coloring */ - conv_filter = find_conversation_filter("tcp"); - if ((conv_filter != NULL) && (conv_filter->is_filter_valid(pi))) - filter = conv_filter->build_filter_string(pi); - conv_filter = find_conversation_filter("udp"); - if ((conv_filter != NULL) && (conv_filter->is_filter_valid(pi))) - filter = conv_filter->build_filter_string(pi); - conv_filter = find_conversation_filter("ip"); - if ((conv_filter != NULL) && (conv_filter->is_filter_valid(pi))) - filter = conv_filter->build_filter_string(pi); - conv_filter = find_conversation_filter("ipv6"); - if ((conv_filter != NULL) && (conv_filter->is_filter_valid(pi))) - filter = conv_filter->build_filter_string(pi); - + filter = conversation_filter_from_packet(pi); if( filter == NULL ) { statusbar_push_temporary_msg("Unable to build conversation filter."); g_free(filter); diff --git a/ui/qt/main_window_slots.cpp b/ui/qt/main_window_slots.cpp index b2f849bc9b..51851e6caa 100644 --- a/ui/qt/main_window_slots.cpp +++ b/ui/qt/main_window_slots.cpp @@ -2505,31 +2505,7 @@ void MainWindow::colorizeConversation(bool create_rule) if (capture_file_.capFile() && capture_file_.capFile()->current_frame) { packet_info *pi = capture_file_.packetInfo(); guint8 cc_num = colorize_action->data().toUInt(); - gchar *filter = NULL; - - const conversation_filter_t *color_filter = find_conversation_filter("tcp"); - if ((color_filter != NULL) && (color_filter->is_filter_valid(pi))) - filter = color_filter->build_filter_string(pi); - if (filter == NULL) { - color_filter = find_conversation_filter("udp"); - if ((color_filter != NULL) && (color_filter->is_filter_valid(pi))) - filter = color_filter->build_filter_string(pi); - } - if (filter == NULL) { - color_filter = find_conversation_filter("ip"); - if ((color_filter != NULL) && (color_filter->is_filter_valid(pi))) - filter = color_filter->build_filter_string(pi); - } - if (filter == NULL) { - color_filter = find_conversation_filter("ipv6"); - if ((color_filter != NULL) && (color_filter->is_filter_valid(pi))) - filter = color_filter->build_filter_string(pi); - } - if (filter == NULL) { - color_filter = find_conversation_filter("eth"); - if ((color_filter != NULL) && (color_filter->is_filter_valid(pi))) - filter = color_filter->build_filter_string(pi); - } + gchar *filter = conversation_filter_from_packet(pi); if (filter == NULL) { main_ui_->statusBar->pushTemporaryStatus(tr("Unable to build conversation filter.")); return; @@ -3636,24 +3612,11 @@ void MainWindow::goToConversationFrame(bool go_next) { dfilter_t *dfcode = NULL; gboolean found_packet = FALSE; packet_info *pi = &(capture_file_.capFile()->edt->pi); - conversation_filter_t* conv_filter; /* Try to build a conversation * filter in the order TCP, UDP, IP, Ethernet and apply the * coloring */ - conv_filter = find_conversation_filter("tcp"); - if ((conv_filter != NULL) && (conv_filter->is_filter_valid(pi))) - filter = conv_filter->build_filter_string(pi); - conv_filter = find_conversation_filter("udp"); - if ((conv_filter != NULL) && (conv_filter->is_filter_valid(pi))) - filter = conv_filter->build_filter_string(pi); - conv_filter = find_conversation_filter("ip"); - if ((conv_filter != NULL) && (conv_filter->is_filter_valid(pi))) - filter = conv_filter->build_filter_string(pi); - conv_filter = find_conversation_filter("ipv6"); - if ((conv_filter != NULL) && (conv_filter->is_filter_valid(pi))) - filter = conv_filter->build_filter_string(pi); - + filter = conversation_filter_from_packet(pi); if (filter == NULL) { main_ui_->statusBar->pushTemporaryStatus(tr("Unable to build conversation filter.")); g_free(filter); -- cgit v1.2.1