aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'gtk')
-rw-r--r--gtk/main_packet_list.c58
-rw-r--r--gtk/main_packet_list.h10
-rw-r--r--gtk/main_statusbar.c3
-rw-r--r--gtk/menus.c2
-rw-r--r--gtk/new_packet_list.c33
-rw-r--r--gtk/new_packet_list.h18
-rw-r--r--gtk/prefs_stream.c42
7 files changed, 150 insertions, 16 deletions
diff --git a/gtk/main_packet_list.c b/gtk/main_packet_list.c
index 0ab5f03ec3..b4e0ca3707 100644
--- a/gtk/main_packet_list.c
+++ b/gtk/main_packet_list.c
@@ -499,6 +499,37 @@ set_frame_mark(gboolean set, frame_data *frame, gint row)
}
}
+/* ignore packet */
+static void
+set_frame_ignore(gboolean set, frame_data *frame, gint row)
+{
+ GdkColor fg, bg;
+
+ if (row == -1)
+ return;
+ if (set) {
+ cf_ignore_frame(&cfile, frame);
+ color_t_to_gdkcolor(&fg, &prefs.gui_ignored_fg);
+ color_t_to_gdkcolor(&bg, &prefs.gui_ignored_bg);
+ gtk_clist_set_foreground(GTK_CLIST(packet_list), row, &fg);
+ gtk_clist_set_background(GTK_CLIST(packet_list), row, &bg);
+ } else {
+ const color_filter_t *cfilter = frame->color_filter;
+
+ cf_unignore_frame(&cfile, frame);
+ /* Restore the color from the matching color filter if any */
+ if (cfilter) { /* The packet matches a color filter */
+ color_t_to_gdkcolor(&fg, &cfilter->fg_color);
+ color_t_to_gdkcolor(&bg, &cfilter->bg_color);
+ gtk_clist_set_foreground(GTK_CLIST(packet_list), row, &fg);
+ gtk_clist_set_background(GTK_CLIST(packet_list), row, &bg);
+ } else { /* No color filter match */
+ gtk_clist_set_foreground(GTK_CLIST(packet_list), row, NULL);
+ gtk_clist_set_background(GTK_CLIST(packet_list), row, NULL);
+ }
+ }
+}
+
/* call this after last set_frame_mark is done */
static void mark_frames_ready(void)
{
@@ -554,7 +585,31 @@ void packet_list_unmark_all_frames_cb(GtkWidget *w _U_, gpointer data _U_)
mark_all_frames(FALSE);
}
-#ifndef NEW_PACKET_LIST
+void packet_list_ignore_frame_cb(GtkWidget *w _U_, gpointer data _U_)
+{
+ if (cfile.current_frame) {
+ set_frame_ignore(!cfile.current_frame->flags.ignored,
+ cfile.current_frame, cfile.current_row);
+ redissect_packets();
+ }
+}
+
+void packet_list_update_ignored_frames(void)
+{
+ frame_data *fdata;
+
+ if (cfile.plist_start == NULL) return;
+
+ /* XXX: we might need a progressbar here */
+ for (fdata = cfile.plist_start; fdata != NULL; fdata = fdata->next) {
+ if (fdata->flags.ignored)
+ set_frame_ignore(TRUE, fdata,
+ gtk_clist_find_row_from_data(GTK_CLIST(packet_list),
+ fdata));
+ }
+ mark_frames_ready();
+}
+
gboolean
packet_list_get_event_row_column(GtkWidget *w, GdkEventButton *event_button,
gint *row, gint *column)
@@ -563,7 +618,6 @@ packet_list_get_event_row_column(GtkWidget *w, GdkEventButton *event_button,
(gint) event_button->x, (gint) event_button->y,
row, column);
}
-#endif /* NEW_PACKET_LIST */
static gint
packet_list_button_pressed_cb(GtkWidget *w, GdkEvent *event, gpointer data _U_)
diff --git a/gtk/main_packet_list.h b/gtk/main_packet_list.h
index 0758eca40d..9bb915e06b 100644
--- a/gtk/main_packet_list.h
+++ b/gtk/main_packet_list.h
@@ -96,6 +96,16 @@ extern void packet_list_unmark_all_frames_cb(GtkWidget *widget, gpointer data);
/** Update packet marks. */
extern void packet_list_update_marked_frames(void);
+/** Ignore the currently selected packet.
+ *
+ * @param widget parent widget (unused)
+ * @param data unused
+ */
+extern void packet_list_ignore_frame_cb(GtkWidget *w _U_, gpointer data _U_);
+
+/** Update ignored packages. */
+extern void packet_list_update_ignored_frames(void);
+
/** Gdk button click appeared, get row and column number in packet list from that position.
*
* @param widget the packet list widget from packet_list_new()
diff --git a/gtk/main_statusbar.c b/gtk/main_statusbar.c
index 9d4a97224f..2ed3b1508f 100644
--- a/gtk/main_statusbar.c
+++ b/gtk/main_statusbar.c
@@ -439,6 +439,9 @@ packets_bar_update(void)
if(cfile.drops_known) {
packets_str = g_strdup_printf(" Packets: %u Displayed: %u Marked: %u Dropped: %u",
cfile.count, cfile.displayed_count, cfile.marked_count, cfile.drops);
+ } else if (cfile.ignored_count > 0) {
+ packets_str = g_strdup_printf(" Packets: %u Displayed: %u Marked: %u Ignored: %u",
+ cfile.count, cfile.displayed_count, cfile.marked_count, cfile.ignored_count);
} else {
gulong computed_elapsed = cf_get_computed_elapsed();
diff --git a/gtk/menus.c b/gtk/menus.c
index bd449d5a88..ac839560ff 100644
--- a/gtk/menus.c
+++ b/gtk/menus.c
@@ -811,8 +811,10 @@ static GtkItemFactoryEntry packet_list_menu_items[] =
{
#ifdef NEW_PACKET_LIST
{"/Mark Packet (toggle)", NULL, GTK_MENU_FUNC(new_packet_list_mark_frame_cb), 0, NULL, NULL,},
+ {"/Ignore Packet (toggle)", NULL, GTK_MENU_FUNC(new_packet_list_ignore_frame_cb), 0, NULL, NULL,},
#else
{"/Mark Packet (toggle)", NULL, GTK_MENU_FUNC(packet_list_mark_frame_cb), 0, NULL, NULL,},
+ {"/Ignore Packet (toggle)", NULL, GTK_MENU_FUNC(packet_list_ignore_frame_cb), 0, NULL, NULL,},
#endif /* NEW_PACKET_LIST */
{"/Set Time Reference (toggle)", NULL, GTK_MENU_FUNC(reftime_frame_cb), REFTIME_TOGGLE, "<StockItem>", WIRESHARK_STOCK_TIME,},
diff --git a/gtk/new_packet_list.c b/gtk/new_packet_list.c
index c2b155527d..9167480363 100644
--- a/gtk/new_packet_list.c
+++ b/gtk/new_packet_list.c
@@ -997,11 +997,15 @@ show_cell_data_func(GtkTreeViewColumn *col _U_, GtkCellRenderer *renderer,
g_assert(cell_text);
- if((fdata->color_filter)||(fdata->flags.marked)){
+ if((fdata->color_filter)||(fdata->flags.marked)||(fdata->flags.ignored)){
gboolean color_on = enable_color;
GdkColor fg_gdk;
GdkColor bg_gdk;
- if(fdata->flags.marked){
+ if(fdata->flags.ignored){
+ color_t_to_gdkcolor(&fg_gdk, &prefs.gui_ignored_fg);
+ color_t_to_gdkcolor(&bg_gdk, &prefs.gui_ignored_bg);
+ color_on = TRUE;
+ }else if(fdata->flags.marked){
color_t_to_gdkcolor(&fg_gdk, &prefs.gui_marked_fg);
color_t_to_gdkcolor(&bg_gdk, &prefs.gui_marked_bg);
color_on = TRUE;
@@ -1060,6 +1064,15 @@ set_frame_mark(gboolean set, frame_data *fdata)
cf_unmark_frame(&cfile, fdata);
}
+static void
+set_frame_ignored(gboolean set, frame_data *fdata)
+{
+ if (set)
+ cf_ignore_frame(&cfile, fdata);
+ else
+ cf_unignore_frame(&cfile, fdata);
+}
+
static void mark_all_frames(gboolean set)
{
frame_data *fdata;
@@ -1144,6 +1157,22 @@ void new_packet_list_mark_frame_cb(GtkWidget *w _U_, gpointer data _U_)
mark_frames_ready();
}
+void new_packet_list_ignore_frame_cb(GtkWidget *w _U_, gpointer data _U_)
+{
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ PacketListRecord *record;
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(packetlist->view));
+ /* model is filled with the current model as a convenience. */
+ gtk_tree_selection_get_selected(selection, &model, &iter);
+ record = new_packet_list_get_record(model, &iter);
+
+ set_frame_ignored(!record->fdata->flags.ignored, record->fdata);
+ redissect_packets();
+}
+
static gboolean
get_col_text_from_record( PacketListRecord *record, gint col_num, gchar** cell_text){
diff --git a/gtk/new_packet_list.h b/gtk/new_packet_list.h
index 5b040d64d2..fec021fa59 100644
--- a/gtk/new_packet_list.h
+++ b/gtk/new_packet_list.h
@@ -62,9 +62,27 @@ extern void new_packet_list_set_font(PangoFontDescription *font);
*/
extern void new_packet_list_mark_frame_cb(GtkWidget *widget, gpointer data);
+/** Mark all packets in the list.
+ *
+ * @param widget parent widget (unused)
+ * @param data unused
+ */
void new_packet_list_mark_all_frames_cb(GtkWidget *w _U_, gpointer data _U_);
+
+/** Unmark all packets in the list.
+ *
+ * @param widget parent widget (unused)
+ * @param data unused
+ */
void new_packet_list_unmark_all_frames_cb(GtkWidget *w _U_, gpointer data _U_);
+/** Ignore the currently selected packet.
+ *
+ * @param widget parent widget (unused)
+ * @param data unused
+ */
+extern void new_packet_list_ignore_frame_cb(GtkWidget *widget, gpointer data);
+
/* Different modes of copying summary data */
typedef enum {
CS_TEXT, /* Packet summary data (tab separated) */
diff --git a/gtk/prefs_stream.c b/gtk/prefs_stream.c
index 16a80deba4..71a9119635 100644
--- a/gtk/prefs_stream.c
+++ b/gtk/prefs_stream.c
@@ -41,16 +41,19 @@
#include "gtk/main_packet_list.h"
-#define SAMPLE_MARKED_TEXT "Sample marked packet text\n"
-#define SAMPLE_CLIENT_TEXT "Sample TCP stream client text\n"
-#define SAMPLE_SERVER_TEXT "Sample TCP stream server text\n"
+#define SAMPLE_MARKED_TEXT "Sample marked packet text\n"
+#define SAMPLE_IGNORED_TEXT "Sample ignored packet text\n"
+#define SAMPLE_CLIENT_TEXT "Sample TCP stream client text\n"
+#define SAMPLE_SERVER_TEXT "Sample TCP stream server text\n"
#define MFG_IDX 0
#define MBG_IDX 1
-#define CFG_IDX 2
-#define CBG_IDX 3
-#define SFG_IDX 4
-#define SBG_IDX 5
-#define MAX_IDX 6 /* set this to the number of IDX values */
+#define IFG_IDX 2
+#define IBG_IDX 3
+#define CFG_IDX 4
+#define CBG_IDX 5
+#define SFG_IDX 6
+#define SBG_IDX 7
+#define MAX_IDX 8 /* set this to the number of IDX values */
#define STREAM_SAMPLE_KEY "stream_entry"
#define STREAM_CS_KEY "stream_colorselection"
#define CS_RED 0
@@ -72,10 +75,12 @@ stream_prefs_show()
const gchar *mt[] = {
"Marked packet foreground", /* MFG_IDX 0*/
"Marked packet background", /* MBG_IDX 1*/
- "TCP stream client foreground", /* CFG_IDX 2*/
- "TCP stream client background", /* CBG_IDX 3*/
- "TCP stream server foreground", /* SFG_IDX 4*/
- "TCP stream server background" /* SBG_IDX 5*/
+ "Ignored packet foreground", /* IFG_IDX 2*/
+ "Ignored packet background", /* IBG_IDX 3*/
+ "TCP stream client foreground", /* CFG_IDX 4*/
+ "TCP stream client background", /* CBG_IDX 5*/
+ "TCP stream server foreground", /* SFG_IDX 6*/
+ "TCP stream server background" /* SBG_IDX 7*/
};
int mcount = sizeof(mt) / sizeof (gchar *);
GtkTextBuffer *buf;
@@ -84,6 +89,8 @@ stream_prefs_show()
color_t_to_gdkcolor(&tcolors[MFG_IDX], &prefs.gui_marked_fg);
color_t_to_gdkcolor(&tcolors[MBG_IDX], &prefs.gui_marked_bg);
+ color_t_to_gdkcolor(&tcolors[IFG_IDX], &prefs.gui_ignored_fg);
+ color_t_to_gdkcolor(&tcolors[IBG_IDX], &prefs.gui_ignored_bg);
color_t_to_gdkcolor(&tcolors[CFG_IDX], &prefs.st_client_fg);
color_t_to_gdkcolor(&tcolors[CBG_IDX], &prefs.st_client_bg);
color_t_to_gdkcolor(&tcolors[SFG_IDX], &prefs.st_server_fg);
@@ -130,6 +137,9 @@ stream_prefs_show()
gtk_text_buffer_create_tag(buf, "marked",
"foreground-gdk", &tcolors[MFG_IDX],
"background-gdk", &tcolors[MBG_IDX], NULL);
+ gtk_text_buffer_create_tag(buf, "ignored",
+ "foreground-gdk", &tcolors[IFG_IDX],
+ "background-gdk", &tcolors[IBG_IDX], NULL);
gtk_text_buffer_create_tag(buf, "client",
"foreground-gdk", &tcolors[CFG_IDX],
"background-gdk", &tcolors[CBG_IDX], NULL);
@@ -138,6 +148,8 @@ stream_prefs_show()
"background-gdk", &tcolors[SBG_IDX], NULL);
gtk_text_buffer_insert_with_tags_by_name(buf, &iter, SAMPLE_MARKED_TEXT, -1,
"marked", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(buf, &iter, SAMPLE_IGNORED_TEXT, -1,
+ "ignored", NULL);
gtk_text_buffer_insert_with_tags_by_name(buf, &iter, SAMPLE_CLIENT_TEXT, -1,
"client", NULL);
gtk_text_buffer_insert_with_tags_by_name(buf, &iter, SAMPLE_SERVER_TEXT, -1,
@@ -170,6 +182,9 @@ update_text_color(GtkWidget *w, gpointer data _U_) {
tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(buf), "marked");
g_object_set(tag, "foreground-gdk", &tcolors[MFG_IDX], "background-gdk",
&tcolors[MBG_IDX], NULL);
+ tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(buf), "ignored");
+ g_object_set(tag, "foreground-gdk", &tcolors[IFG_IDX], "background-gdk",
+ &tcolors[IBG_IDX], NULL);
tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(buf), "client");
g_object_set(tag, "foreground-gdk", &tcolors[CFG_IDX], "background-gdk",
&tcolors[CBG_IDX], NULL);
@@ -195,6 +210,8 @@ stream_prefs_fetch(GtkWidget *w _U_)
{
gdkcolor_to_color_t(&prefs.gui_marked_fg, &tcolors[MFG_IDX]);
gdkcolor_to_color_t(&prefs.gui_marked_bg, &tcolors[MBG_IDX]);
+ gdkcolor_to_color_t(&prefs.gui_ignored_fg, &tcolors[IFG_IDX]);
+ gdkcolor_to_color_t(&prefs.gui_ignored_bg, &tcolors[IBG_IDX]);
gdkcolor_to_color_t(&prefs.st_client_fg, &tcolors[CFG_IDX]);
gdkcolor_to_color_t(&prefs.st_client_bg, &tcolors[CBG_IDX]);
gdkcolor_to_color_t(&prefs.st_server_fg, &tcolors[SFG_IDX]);
@@ -208,6 +225,7 @@ stream_prefs_apply(GtkWidget *w _U_)
#ifndef NEW_PACKET_LIST
packet_list_update_marked_frames();
+ packet_list_update_ignored_frames();
#endif
}