forked from osmocom/wireshark
Have sequence analysis properly use filters from taps.
Sequence analysis has its own "filtering" system that required its tap functions to look for some "filter flags". register_tap_listener() already comes with a filter argument, so use that to simplify logic of tap functions in dissectors. Also have Qt GUI for Flow Graph look like other dialogs that have a "Limit to display filter" checkbox. Change-Id: I91d9d9599309786892f5b50c98692e52651e7174 Reviewed-on: https://code.wireshark.org/review/23659 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
This commit is contained in:
parent
3c8750dfb3
commit
e7cc0279ab
|
@ -168,10 +168,8 @@ static gboolean
|
|||
frame_seq_analysis_packet( void *ptr, packet_info *pinfo, epan_dissect_t *edt _U_, const void *dummy _U_)
|
||||
{
|
||||
seq_analysis_info_t *sainfo = (seq_analysis_info_t *) ptr;
|
||||
|
||||
if ((sainfo->all_packets) || (pinfo->fd->flags.passed_dfilter == 1)) {
|
||||
|
||||
seq_analysis_item_t *sai = sequence_analysis_create_sai_with_addresses(pinfo, sainfo);
|
||||
|
||||
if (!sai)
|
||||
return FALSE;
|
||||
|
||||
|
@ -189,7 +187,6 @@ frame_seq_analysis_packet( void *ptr, packet_info *pinfo, epan_dissect_t *edt _U
|
|||
sai->display = TRUE;
|
||||
|
||||
g_queue_push_tail(sainfo->items, sai);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -380,10 +380,8 @@ static gboolean
|
|||
icmp_seq_analysis_packet( void *ptr, packet_info *pinfo, epan_dissect_t *edt _U_, const void *dummy _U_)
|
||||
{
|
||||
seq_analysis_info_t *sainfo = (seq_analysis_info_t *) ptr;
|
||||
|
||||
if ((sainfo->all_packets) || (pinfo->fd->flags.passed_dfilter == 1)) {
|
||||
|
||||
seq_analysis_item_t *sai = sequence_analysis_create_sai_with_addresses(pinfo, sainfo);
|
||||
|
||||
if (!sai)
|
||||
return FALSE;
|
||||
|
||||
|
@ -410,7 +408,6 @@ icmp_seq_analysis_packet( void *ptr, packet_info *pinfo, epan_dissect_t *edt _U_
|
|||
sai->display = TRUE;
|
||||
|
||||
g_queue_push_tail(sainfo->items, sai);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -1309,10 +1309,8 @@ static gboolean
|
|||
icmpv6_seq_analysis_packet( void *ptr, packet_info *pinfo, epan_dissect_t *edt _U_, const void *dummy _U_)
|
||||
{
|
||||
seq_analysis_info_t *sainfo = (seq_analysis_info_t *) ptr;
|
||||
|
||||
if ((sainfo->all_packets) || (pinfo->fd->flags.passed_dfilter == 1)) {
|
||||
|
||||
seq_analysis_item_t *sai = sequence_analysis_create_sai_with_addresses(pinfo, sainfo);
|
||||
|
||||
if (!sai)
|
||||
return FALSE;
|
||||
|
||||
|
@ -1339,7 +1337,6 @@ icmpv6_seq_analysis_packet( void *ptr, packet_info *pinfo, epan_dissect_t *edt _
|
|||
sai->display = TRUE;
|
||||
|
||||
g_queue_push_tail(sainfo->items, sai);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -6088,11 +6088,9 @@ lbm_uim_seq_analysis_packet(void *ptr, packet_info *pinfo, epan_dissect_t *edt _
|
|||
char time_str[COL_MAX_LEN];
|
||||
int rc;
|
||||
|
||||
if ((sainfo->all_packets)||(pinfo->fd->flags.passed_dfilter==1))
|
||||
{
|
||||
if (stream_info->endpoint_a.type != stream_info->endpoint_b.type)
|
||||
{
|
||||
return (1);
|
||||
return TRUE;
|
||||
}
|
||||
if (stream_info->endpoint_a.type == lbm_uim_instance_stream)
|
||||
{
|
||||
|
@ -6200,7 +6198,6 @@ lbm_uim_seq_analysis_packet(void *ptr, packet_info *pinfo, epan_dissect_t *edt _
|
|||
sai->line_style = 1;
|
||||
|
||||
g_queue_push_tail(sainfo->items, sai);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -869,8 +869,6 @@ tcp_seq_analysis_packet( void *ptr, packet_info *pinfo, epan_dissect_t *edt _U_,
|
|||
{
|
||||
seq_analysis_info_t *sainfo = (seq_analysis_info_t *) ptr;
|
||||
const struct tcpheader *tcph = (const struct tcpheader *)tcp_info;
|
||||
|
||||
if ((sainfo->all_packets)||(pinfo->fd->flags.passed_dfilter==1)){
|
||||
const char* flags;
|
||||
seq_analysis_item_t *sai = sequence_analysis_create_sai_with_addresses(pinfo, sainfo);
|
||||
|
||||
|
@ -903,7 +901,6 @@ tcp_seq_analysis_packet( void *ptr, packet_info *pinfo, epan_dissect_t *edt _U_,
|
|||
sai->display = TRUE;
|
||||
|
||||
g_queue_push_tail(sainfo->items, sai);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -69,7 +69,6 @@ typedef struct _seq_analysis_item {
|
|||
/** defines the graph analysis structure */
|
||||
typedef struct _seq_analysis_info {
|
||||
const char* name; /**< Name of sequence analysis */
|
||||
gboolean all_packets; /**< all packets vs only displayed */
|
||||
gboolean any_addr; /**< any addr (DL+net) vs net-only */
|
||||
int nconv; /**< number of conversations in the list */
|
||||
GQueue* items; /**< list of seq_analysis_info_t */
|
||||
|
|
|
@ -2173,7 +2173,6 @@ sharkd_session_process_tap(char *buf, const jsmntok_t *tokens, int count)
|
|||
|
||||
graph_analysis = sequence_analysis_info_new();
|
||||
graph_analysis->name = tok_tap + 5;
|
||||
graph_analysis->all_packets = TRUE;
|
||||
/* TODO, make configurable */
|
||||
graph_analysis->any_addr = FALSE;
|
||||
|
||||
|
|
|
@ -103,8 +103,6 @@ flow_init(const char *opt_argp, void *userdata)
|
|||
filter = opt_argp + 1;
|
||||
}
|
||||
|
||||
flow_info->all_packets = TRUE;
|
||||
|
||||
sequence_analysis_list_free(flow_info);
|
||||
|
||||
errp = register_tap_listener(sequence_analysis_get_tap_listener_name(analysis), flow_info, filter, sequence_analysis_get_tap_flags(analysis),
|
||||
|
|
|
@ -37,11 +37,13 @@
|
|||
#include "ui/gtk/main.h"
|
||||
#include "ui/gtk/gui_stat_menu.h"
|
||||
#include "ui/gtk/old-gtk-compat.h"
|
||||
#include "ui/gtk/gtkglobals.h"
|
||||
|
||||
void register_tap_listener_flow_graph(void);
|
||||
|
||||
static seq_analysis_info_t *graph_analysis = NULL;
|
||||
static graph_analysis_data_t *graph_analysis_data = NULL;
|
||||
static const char* display_filter = NULL;
|
||||
|
||||
static GtkWidget *flow_graph_dlg = NULL;
|
||||
|
||||
|
@ -57,7 +59,7 @@ static void
|
|||
flow_graph_data_init(void) {
|
||||
graph_analysis = sequence_analysis_info_new();
|
||||
graph_analysis->name = "any";
|
||||
graph_analysis->all_packets = TRUE;
|
||||
display_filter = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -111,7 +113,7 @@ toggle_select_all(GtkWidget *widget _U_, gpointer user_data _U_)
|
|||
{
|
||||
/* is the button now active? */
|
||||
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(select_all_rb))) {
|
||||
graph_analysis->all_packets = TRUE;
|
||||
display_filter = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -121,7 +123,7 @@ toggle_select_displayed(GtkWidget *widget _U_, gpointer user_data _U_)
|
|||
{
|
||||
/* is the button now active? */
|
||||
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(select_displayed_rb))) {
|
||||
graph_analysis->all_packets = FALSE;
|
||||
display_filter = gtk_entry_get_text(GTK_ENTRY(main_display_filter_widget));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -156,7 +158,7 @@ flow_graph_on_ok(GtkButton *button _U_, gpointer user_data)
|
|||
|
||||
if (analysis != NULL)
|
||||
{
|
||||
register_tap_listener(sequence_analysis_get_tap_listener_name(analysis), graph_analysis, NULL, sequence_analysis_get_tap_flags(analysis),
|
||||
register_tap_listener(sequence_analysis_get_tap_listener_name(analysis), graph_analysis, display_filter, sequence_analysis_get_tap_flags(analysis),
|
||||
NULL, sequence_analysis_get_packet_func(analysis), NULL);
|
||||
|
||||
cf_retap_packets(&cfile);
|
||||
|
@ -248,7 +250,7 @@ flow_graph_dlg_create(void)
|
|||
g_signal_connect(select_all_rb, "toggled", G_CALLBACK(toggle_select_all), NULL);
|
||||
ws_gtk_grid_attach_extended(GTK_GRID(range_grid), select_all_rb, 0, 0, 1, 1,
|
||||
(GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0);
|
||||
if (graph_analysis->all_packets) {
|
||||
if (display_filter == NULL) {
|
||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(select_all_rb),TRUE);
|
||||
}
|
||||
gtk_widget_show(select_all_rb);
|
||||
|
@ -260,7 +262,7 @@ flow_graph_dlg_create(void)
|
|||
g_signal_connect(select_displayed_rb, "toggled", G_CALLBACK(toggle_select_displayed), NULL);
|
||||
ws_gtk_grid_attach_extended(GTK_GRID(range_grid), select_displayed_rb, 0, 1, 1, 1,
|
||||
(GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0);
|
||||
if (!graph_analysis->all_packets) {
|
||||
if (display_filter != NULL) {
|
||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(select_displayed_rb),TRUE);
|
||||
}
|
||||
gtk_widget_show(select_displayed_rb);
|
||||
|
|
|
@ -90,7 +90,6 @@ SequenceDialog::SequenceDialog(QWidget &parent, CaptureFile &cf, SequenceInfo *i
|
|||
if (!info_) {
|
||||
info_ = new SequenceInfo(sequence_analysis_info_new());
|
||||
info_->sainfo()->name = "any";
|
||||
info_->sainfo()->all_packets = TRUE;
|
||||
} else {
|
||||
info_->ref();
|
||||
sequence_analysis_free_nodes(info_->sainfo());
|
||||
|
@ -159,7 +158,6 @@ SequenceDialog::SequenceDialog(QWidget &parent, CaptureFile &cf, SequenceInfo *i
|
|||
ctx_menu_.addAction(ui->actionGoToNextPacket);
|
||||
ctx_menu_.addAction(ui->actionGoToPreviousPacket);
|
||||
|
||||
ui->showComboBox->setCurrentIndex(0);
|
||||
ui->addressComboBox->setCurrentIndex(0);
|
||||
|
||||
sequence_items_t item_data;
|
||||
|
@ -434,7 +432,11 @@ void SequenceDialog::fillDiagram()
|
|||
register_analysis_t* analysis = sequence_analysis_find_by_name(info_->sainfo()->name);
|
||||
if (analysis != NULL)
|
||||
{
|
||||
register_tap_listener(sequence_analysis_get_tap_listener_name(analysis), info_->sainfo(), NULL, sequence_analysis_get_tap_flags(analysis),
|
||||
const char *filter = NULL;
|
||||
if (ui->displayFilterCheckBox->checkState() == Qt::Checked)
|
||||
filter = cap_file_.capFile()->dfilter;
|
||||
|
||||
register_tap_listener(sequence_analysis_get_tap_listener_name(analysis), info_->sainfo(), filter, sequence_analysis_get_tap_flags(analysis),
|
||||
NULL, sequence_analysis_get_packet_func(analysis), NULL);
|
||||
|
||||
cf_retap_packets(cap_file_.capFile());
|
||||
|
@ -603,15 +605,8 @@ void SequenceDialog::goToAdjacentPacket(bool next)
|
|||
}
|
||||
}
|
||||
|
||||
void SequenceDialog::on_showComboBox_activated(int index)
|
||||
void SequenceDialog::on_displayFilterCheckBox_toggled(bool)
|
||||
{
|
||||
if (!info_->sainfo()) return;
|
||||
|
||||
if (index == 0) {
|
||||
info_->sainfo()->all_packets = TRUE;
|
||||
} else {
|
||||
info_->sainfo()->all_packets = FALSE;
|
||||
}
|
||||
fillDiagram();
|
||||
}
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ private slots:
|
|||
void on_actionGoToPacket_triggered();
|
||||
void on_actionGoToNextPacket_triggered() { goToAdjacentPacket(true); }
|
||||
void on_actionGoToPreviousPacket_triggered() { goToAdjacentPacket(false); }
|
||||
void on_showComboBox_activated(int index);
|
||||
void on_displayFilterCheckBox_toggled(bool checked);
|
||||
void on_flowComboBox_activated(int index);
|
||||
void on_addressComboBox_activated(int index);
|
||||
void on_actionReset_triggered();
|
||||
|
|
|
@ -102,24 +102,13 @@
|
|||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Show:</string>
|
||||
<widget class="QCheckBox" name="displayFilterCheckBox">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Only show flows matching the current display filter</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="showComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>All packets</string>
|
||||
<string>Limit to display filter</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Displayed packets</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
|
Loading…
Reference in New Issue