aboutsummaryrefslogtreecommitdiffstats
path: root/ui/gtk/flow_graph.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2017-09-16 16:52:23 +0200
committerMichael Mann <mmann78@netscape.net>2017-09-18 21:24:16 +0000
commitc41bab1f667cfe51b09b80869497a2db68abecce (patch)
treef61fbf402e9cfe58b9a694eabf4dd389bed94796 /ui/gtk/flow_graph.c
parenta593fce94cb7fd0fa3f5eef7fae9c0128cb6f7e3 (diff)
Move most of sequence analysis code from ui/ to epan/
Create registration system to allow creation of analysis items to be localized to the dissector. For now only frame (all) and TCP are supported. VOIP functionality will be covered in a separate patch. Change-Id: I5b05ef6d5afff8d0b162b03a0f451ab810602e81 Reviewed-on: https://code.wireshark.org/review/23571 Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'ui/gtk/flow_graph.c')
-rw-r--r--ui/gtk/flow_graph.c88
1 files changed, 43 insertions, 45 deletions
diff --git a/ui/gtk/flow_graph.c b/ui/gtk/flow_graph.c
index 75680c0009..5475be457b 100644
--- a/ui/gtk/flow_graph.c
+++ b/ui/gtk/flow_graph.c
@@ -47,17 +47,16 @@ static GtkWidget *flow_graph_dlg = NULL;
static GtkWidget *select_all_rb;
static GtkWidget *select_displayed_rb;
-static GtkWidget *select_general_rb;
-static GtkWidget *select_tcp_rb;
static GtkWidget *src_dst_rb;
static GtkWidget *net_src_dst_rb;
+static GtkWidget *select_analysis_combo;
/****************************************************************************/
static void
flow_graph_data_init(void) {
graph_analysis = sequence_analysis_info_new();
- graph_analysis->type = SEQ_ANALYSIS_ANY;
+ graph_analysis->name = "any";
graph_analysis->all_packets = TRUE;
}
@@ -82,44 +81,47 @@ flow_graph_on_destroy(GObject *object _U_, gpointer user_data _U_)
flow_graph_dlg = NULL;
}
-
-/****************************************************************************/
-static void
-toggle_select_all(GtkWidget *widget _U_, gpointer user_data _U_)
+static gboolean
+find_seq_name(const void *key, void *value, void *userdata)
{
- /* is the button now active? */
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(select_all_rb))) {
- graph_analysis->all_packets = TRUE;
+ const char* name = (const char*)key;
+ register_analysis_t* analysis = (register_analysis_t*)value;
+ const char* ui_name = (const char*)userdata;
+
+ if (strcmp(ui_name, sequence_analysis_get_ui_name(analysis)) == 0)
+ {
+ graph_analysis->name = name;
+ return TRUE;
}
+
+ return FALSE;
}
-/****************************************************************************/
static void
-toggle_select_displayed(GtkWidget *widget _U_, gpointer user_data _U_)
+sequence_combo_box_changed_cb(GtkComboBox *combo_box, 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;
- }
+ gchar* ui_name = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo_box));
+
+ sequence_analysis_table_iterate_tables(find_seq_name, ui_name);
}
/****************************************************************************/
static void
-toggle_select_general(GtkWidget *widget _U_, gpointer user_data _U_)
+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_general_rb))) {
- graph_analysis->type = SEQ_ANALYSIS_ANY;
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(select_all_rb))) {
+ graph_analysis->all_packets = TRUE;
}
}
/****************************************************************************/
static void
-toggle_select_tcp(GtkWidget *widget _U_, gpointer user_data _U_)
+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_tcp_rb))) {
- graph_analysis->type = SEQ_ANALYSIS_TCP;
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(select_displayed_rb))) {
+ graph_analysis->all_packets = FALSE;
}
}
@@ -184,6 +186,16 @@ flow_graph_on_delete(GtkButton *button _U_,
/****************************************************************************/
/* INTERFACE */
/****************************************************************************/
+static gboolean
+add_flow_sequence_item(const void *key _U_, void *value, void *userdata)
+{
+ register_analysis_t* analysis = (register_analysis_t*)value;
+ GtkWidget* combo_box = (GtkWidget*)userdata;
+
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), sequence_analysis_get_ui_name(analysis));
+ return FALSE;
+}
+
static void
flow_graph_dlg_create(void)
@@ -230,7 +242,7 @@ flow_graph_dlg_create(void)
if (graph_analysis->all_packets) {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(select_all_rb),TRUE);
}
- gtk_widget_show(select_all_rb);
+ gtk_widget_show(select_all_rb);
/* Process displayed packets */
select_displayed_rb = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(select_all_rb),
@@ -255,28 +267,14 @@ flow_graph_dlg_create(void)
gtk_container_set_border_width(GTK_CONTAINER(flow_type_grid), 5);
gtk_container_add(GTK_CONTAINER(flow_type_fr), flow_type_grid);
- /* General information */
- select_general_rb = gtk_radio_button_new_with_mnemonic_from_widget(NULL, "_General flow");
- gtk_widget_set_tooltip_text (select_general_rb, ("Show all packets, with general information"));
- g_signal_connect(select_general_rb, "toggled", G_CALLBACK(toggle_select_general), NULL);
- ws_gtk_grid_attach_extended(GTK_GRID(flow_type_grid), select_general_rb, 0, 0, 1, 1,
- (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0);
- if (graph_analysis->type == SEQ_ANALYSIS_ANY) {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(select_general_rb),TRUE);
- }
- gtk_widget_show(select_general_rb);
-
- /* TCP specific information */
- select_tcp_rb = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(select_general_rb),
- "_TCP flow");
- gtk_widget_set_tooltip_text (select_tcp_rb, ("Show only TCP packets, with TCP specific information"));
- g_signal_connect(select_tcp_rb, "toggled", G_CALLBACK(toggle_select_tcp), NULL);
- ws_gtk_grid_attach_extended(GTK_GRID(flow_type_grid), select_tcp_rb, 0, 1, 1, 1,
- (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0);
- if (graph_analysis->type == SEQ_ANALYSIS_TCP) {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(select_tcp_rb),TRUE);
- }
- gtk_widget_show(select_tcp_rb);
+ select_analysis_combo = gtk_combo_box_text_new();
+ g_signal_connect(select_analysis_combo, "changed", G_CALLBACK(sequence_combo_box_changed_cb), NULL);
+ sequence_analysis_table_iterate_tables(add_flow_sequence_item, select_analysis_combo);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(select_analysis_combo), 0);
+
+ ws_gtk_grid_attach_extended(GTK_GRID(flow_type_grid), select_analysis_combo, 0, 0, 1, 1,
+ (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0);
+ gtk_widget_show(select_analysis_combo);
gtk_widget_show(flow_type_grid);
gtk_widget_show(flow_type_fr);