aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2012-03-02 13:31:16 +0000
committerAnders Broman <anders.broman@ericsson.com>2012-03-02 13:31:16 +0000
commitff47bdf96c75b9d35eeafc3248c57f3369b1e0a0 (patch)
tree7be0ce5ec822b8714f216a04e43388e55db1852f
parent15a88e695f80dd2cb7c37a4cb62b4a54db069f88 (diff)
Use the expert system to show packet comments.
The packet comment widget should be replaced by a ListView with two columns, packet no and Comment. svn path=/trunk/; revision=41322
-rw-r--r--epan/dissectors/packet-frame.c7
-rw-r--r--epan/expert.c2
-rw-r--r--epan/proto.h4
-rw-r--r--ui/gtk/expert_comp_dlg.c69
-rw-r--r--ui/gtk/expert_comp_table.c5
-rw-r--r--ui/gtk/main_proto_draw.c29
-rw-r--r--ui/gtk/main_proto_draw.h2
7 files changed, 76 insertions, 42 deletions
diff --git a/epan/dissectors/packet-frame.c b/epan/dissectors/packet-frame.c
index db0a157fc8..6c15ebf474 100644
--- a/epan/dissectors/packet-frame.c
+++ b/epan/dissectors/packet-frame.c
@@ -122,7 +122,7 @@ call_frame_end_routine(gpointer routine, gpointer dummy _U_)
static void
dissect_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
{
- proto_item *volatile ti = NULL;
+ proto_item *volatile ti = NULL, *comment_item;
guint cap_len = 0, frame_len = 0;
proto_tree *volatile tree;
proto_tree *comments_tree;
@@ -185,9 +185,12 @@ dissect_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
if(pinfo->fd->opt_comment){
item = proto_tree_add_item(tree, proto_pkt_comment, tvb, 0, -1, ENC_NA);
comments_tree = proto_item_add_subtree(item, ett_comments);
- proto_tree_add_string_format(comments_tree, hf_comments_text, tvb, 0, -1,
+ comment_item = proto_tree_add_string_format(comments_tree, hf_comments_text, tvb, 0, -1,
pinfo->fd->opt_comment, "%s",
pinfo->fd->opt_comment);
+ expert_add_info_format(pinfo, comment_item, PI_COMMENTS_GROUP, PI_COMMENT,
+ "%s", pinfo->fd->opt_comment);
+
}
diff --git a/epan/expert.c b/epan/expert.c
index c549e86f39..67442e567a 100644
--- a/epan/expert.c
+++ b/epan/expert.c
@@ -60,6 +60,7 @@ const value_string expert_group_vals[] = {
{ PI_DEBUG, "Debug" },
{ PI_PROTOCOL, "Protocol" },
{ PI_SECURITY, "Security" },
+ { PI_COMMENTS_GROUP, "Comment" },
{ 0, NULL }
};
@@ -68,6 +69,7 @@ const value_string expert_severity_vals[] = {
{ PI_WARN, "Warn" },
{ PI_NOTE, "Note" },
{ PI_CHAT, "Chat" },
+ { PI_COMMENT, "Comment" },
{ 0, "Ok" },
{ 0, NULL }
};
diff --git a/epan/proto.h b/epan/proto.h
index ddbb3bd88c..7eaf6a374b 100644
--- a/epan/proto.h
+++ b/epan/proto.h
@@ -506,8 +506,10 @@ typedef proto_node proto_item;
#define PI_DEBUG 0x08000000
/** The protocol field violates a protocol specification, usually PI_WARN */
#define PI_PROTOCOL 0x09000000
-/* The protocol field indicates a security probem (e.g. unsecure implementation) */
+/** The protocol field indicates a security probem (e.g. unsecure implementation) */
#define PI_SECURITY 0x0a000000
+/** The protocol field indicates a packet comment */
+#define PI_COMMENTS_GROUP 0x0b000000
/* add more, see http://wiki.wireshark.org/Development/ExpertInfo */
diff --git a/ui/gtk/expert_comp_dlg.c b/ui/gtk/expert_comp_dlg.c
index 5f8c54082f..1036bd1e8c 100644
--- a/ui/gtk/expert_comp_dlg.c
+++ b/ui/gtk/expert_comp_dlg.c
@@ -70,15 +70,18 @@ enum
/* used to keep track of the statistics for an entire program interface */
typedef struct _expert_comp_dlg_t {
GtkWidget *win;
+ GtkWidget *pkt_comments_label;
GtkWidget *chat_label;
GtkWidget *note_label;
GtkWidget *warn_label;
GtkWidget *error_label;
GtkWidget *all_label;
+ error_equiv_table pkt_comments_table;
error_equiv_table chat_table;
error_equiv_table note_table;
error_equiv_table warn_table;
error_equiv_table error_table;
+ guint32 pkt_comments_events;
guint32 disp_events;
guint32 chat_events;
guint32 note_events;
@@ -91,6 +94,7 @@ struct expert_tapdata_s {
GtkWidget *scrolled_window;
GtkTreeView *tree_view;
GtkWidget *label;
+ guint32 pkt_comments_events;
guint32 disp_events;
guint32 chat_events;
guint32 note_events;
@@ -149,6 +153,7 @@ expert_dlg_reset(void *tapdata)
etd->note_events = 0;
etd->warn_events = 0;
etd->error_events = 0;
+ etd->pkt_comments_events = 0;
etd->last = 0;
etd->first = 0;
/* g_string_chunk_clear() is introduced in glib 2.14 */
@@ -172,6 +177,9 @@ expert_dlg_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_
ei->summary = g_string_chunk_insert_const(etd->text, ei->summary);
switch(ei->severity) {
+ case(PI_COMMENT):
+ etd->pkt_comments_events++;
+ break;
case(PI_CHAT):
etd->chat_events++;
break;
@@ -215,6 +223,7 @@ error_reset(void *pss)
ss->note_events = 0;
ss->chat_events = 0;
ss->disp_events = 0;
+ ss->pkt_comments_events = 0;
reset_error_table_data(&ss->error_table);
buf = g_strdup_printf("Errors: %u (0)", ss->error_table.num_procs);
@@ -237,6 +246,11 @@ error_reset(void *pss)
g_free(buf);
gtk_label_set_text( GTK_LABEL(ss->all_label), "Details: 0");
+
+ reset_error_table_data(&ss->pkt_comments_table);
+ buf = g_strdup_printf("Packet Coments: %u (0)", ss->pkt_comments_table.num_procs);
+ gtk_label_set_text( GTK_LABEL(ss->pkt_comments_label), buf);
+ g_free(buf);
error_set_title(ss);
}
@@ -272,6 +286,11 @@ error_packet(void *pss, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const v
ss->chat_events++;
init_error_table_row(&ss->chat_table, error_pkt);
break;
+ case PI_COMMENT:
+ ss->disp_events++; /* Count ? */
+ ss->pkt_comments_events++;
+ init_error_table_row(&ss->pkt_comments_table, error_pkt);
+ break;
default:
return FALSE; /* Don't draw */
}
@@ -305,6 +324,10 @@ expert_comp_draw(void *data)
gtk_label_set_text( GTK_LABEL(ss->all_label), buf);
g_free(buf);
+ buf = g_strdup_printf("Packet Comments: %u (%u)", ss->pkt_comments_table.num_procs, ss->pkt_comments_events);
+ gtk_label_set_text( GTK_LABEL(ss->pkt_comments_label), buf);
+ g_free(buf);
+
}
static void
@@ -325,6 +348,7 @@ win_destroy_cb(GtkWindow *win _U_, gpointer data)
free_error_table_data(&ss->warn_table);
free_error_table_data(&ss->note_table);
free_error_table_data(&ss->chat_table);
+ free_error_table_data(&ss->pkt_comments_table);
g_free(ss);
}
@@ -351,7 +375,7 @@ static expert_tapdata_t * expert_dlg_new_table(void)
etd->ei_array = g_array_sized_new(FALSE, FALSE, sizeof(expert_info_t), 1000);
etd->text = g_string_chunk_new(100);
- etd->severity_report_level = PI_CHAT;
+ etd->severity_report_level = PI_COMMENT;
return etd;
}
@@ -367,13 +391,13 @@ expert_dlg_init_table(expert_tapdata_t * etd, GtkWidget *vbox)
/* Create the store */
store = gtk_list_store_new(N_COLUMNS, /* Total number of columns */
- G_TYPE_UINT, /* No */
- G_TYPE_POINTER, /* Severity */
- G_TYPE_POINTER, /* Group */
- G_TYPE_POINTER, /* Protocol */
- G_TYPE_POINTER, /* Summary */
- G_TYPE_STRING, /* forground */
- G_TYPE_STRING); /* Background */
+ G_TYPE_UINT, /* No */
+ G_TYPE_POINTER, /* Severity */
+ G_TYPE_POINTER, /* Group */
+ G_TYPE_POINTER, /* Protocol */
+ G_TYPE_POINTER, /* Summary */
+ G_TYPE_STRING, /* forground */
+ G_TYPE_STRING); /* Background */
/* Create a view */
tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
@@ -410,7 +434,7 @@ expert_dlg_init_table(expert_tapdata_t * etd, GtkWidget *vbox)
gtk_tree_view_column_set_sort_column_id(column, NO_COLUMN);
gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_min_width(column, 80);
+ gtk_tree_view_column_set_min_width(column, 40);
gtk_tree_view_append_column (etd->tree_view, column);
/* Severity */
@@ -571,6 +595,9 @@ expert_dlg_draw(void *data)
/* set rows background color depending on severity */
switch(ei->severity) {
+ case(PI_COMMENT):
+ color_str = expert_color_comment_str;
+ break;
case(PI_CHAT):
color_str = expert_color_chat_str;
break;
@@ -607,9 +634,9 @@ expert_dlg_draw(void *data)
}
if(etd->label) {
- title = g_strdup_printf("Errors: %u Warnings: %u Notes: %u Chats: %u",
+ title = g_strdup_printf("Errors: %u Warnings: %u Notes: %u Chats: %u, Packet comments",
etd->error_events, etd->warn_events,
- etd->note_events, etd->chat_events);
+ etd->note_events, etd->chat_events, etd->pkt_comments_events);
gtk_label_set_text(GTK_LABEL(etd->label), title);
g_free(title);
}
@@ -627,7 +654,7 @@ expert_comp_init(const char *optarg _U_, void* userdata _U_)
expert_comp_dlg_t *ss;
const char *filter=NULL;
GString *error_string;
- GtkWidget *temp_page;
+ GtkWidget *temp_page, *details_page;
GtkWidget *main_nb;
GtkWidget *vbox;
GtkWidget *hbox;
@@ -639,6 +666,7 @@ expert_comp_init(const char *optarg _U_, void* userdata _U_)
ss=g_malloc(sizeof(expert_comp_dlg_t));
+ ss->pkt_comments_events = 0;
ss->disp_events = 0;
ss->chat_events = 0;
ss->note_events = 0;
@@ -718,16 +746,25 @@ expert_comp_init(const char *optarg _U_, void* userdata _U_)
init_error_table(&ss->chat_table, 0, temp_page);
/* Details */
- temp_page = gtk_vbox_new(FALSE, 6);
+ details_page = gtk_vbox_new(FALSE, 6);
ss->all_label = gtk_label_new("Details: 0");
- gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, ss->all_label);
+ gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), details_page, ss->all_label);
+
+ /* Paket comments */
+ temp_page = gtk_vbox_new(FALSE, 6);
+ ss->pkt_comments_label = gtk_label_new("Packet Comments: 0/y");
+ gtk_widget_show(ss->pkt_comments_label);
+ hbox = gtk_hbox_new(FALSE, 3);
+ gtk_container_add(GTK_CONTAINER(hbox), ss->pkt_comments_label);
+ gtk_notebook_append_page(GTK_NOTEBOOK(main_nb), temp_page, hbox);
+ init_error_table(&ss->pkt_comments_table, 0, temp_page);
- etd = expert_dlg_new_table();
+ etd = expert_dlg_new_table();
etd->label=gtk_label_new("Please wait ...");
gtk_misc_set_alignment(GTK_MISC(etd->label), 0.0f, 0.5f);
etd->win=ss->win;
- expert_dlg_init_table(etd, temp_page);
+ expert_dlg_init_table(etd, details_page);
/* Add tap listener functions for expert details, From expert_dlg.c*/
error_string=register_tap_listener("expert", etd, NULL /* fstring */,
diff --git a/ui/gtk/expert_comp_table.c b/ui/gtk/expert_comp_table.c
index ec96b437e9..1e6bae772f 100644
--- a/ui/gtk/expert_comp_table.c
+++ b/ui/gtk/expert_comp_table.c
@@ -648,7 +648,7 @@ init_error_table(error_equiv_table *err, guint num_procs, GtkWidget *vbox)
sortable = GTK_TREE_SORTABLE(store);
/* Speed up the list display */
- gtk_tree_view_set_fixed_height_mode(err->tree_view, TRUE);
+ gtk_tree_view_set_fixed_height_mode(err->tree_view, TRUE);
gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW (tree), FALSE);
@@ -659,7 +659,8 @@ init_error_table(error_equiv_table *err, guint num_procs, GtkWidget *vbox)
renderer = gtk_cell_renderer_text_new ();
/* Create the first column, associating the "text" attribute of the
- * cell_renderer to the first column of the model */
+ * cell_renderer to the first column of the model
+ */
column = gtk_tree_view_column_new_with_attributes ("Group", renderer, NULL);
gtk_tree_view_column_set_sort_column_id(column, GROUP_COLUMN);
gtk_tree_view_column_set_resizable(column, TRUE);
diff --git a/ui/gtk/main_proto_draw.c b/ui/gtk/main_proto_draw.c
index 86b37bcae5..a7fcb2d9fa 100644
--- a/ui/gtk/main_proto_draw.c
+++ b/ui/gtk/main_proto_draw.c
@@ -795,8 +795,6 @@ add_byte_views(epan_dissect_t *edt, GtkWidget *tree_view,
{
GSList *src_le;
data_source *src;
- int i, count = 0;
- data_source *srccpy, *srcptr;
/*
* Get rid of all the old notebook tabs.
@@ -808,27 +806,9 @@ add_byte_views(epan_dissect_t *edt, GtkWidget *tree_view,
* Add to the specified byte view notebook tabs for hex dumps
* of all the data sources for the specified frame.
*/
- /* Note:
- * The fundamental problem is that the edt->pi.data_src, etc. in the
- * following loop was using the ep memory pool and while in the loop,
- * any update caused by add_byte_tab() would trigger another
- * epan_dissect_run() call which will reset the memory pool and invalidate
- * the content of edt->pi.data_src linked list.
- * As a work-around the data_src linked list may be
- * copied over to a local (stack) storage.
- * The other data structure, such as src->tvb and edt->tree may need be
- * copied as well, but not done in this workaround. */
- for (src_le = edt->pi.data_src; src_le != NULL; src_le = src_le->next) {
- count++;
- }
- srccpy = srcptr = (data_source *) g_malloc(count*sizeof(data_source));
for (src_le = edt->pi.data_src; src_le != NULL; src_le = src_le->next) {
src = src_le->data;
- *srcptr = *src;
- srcptr++;
- }
- for (i = 0; i < count; i++) {
- add_byte_tab(byte_nb_ptr, get_data_source_name(&srccpy[i]), srccpy[i].tvb, edt->tree,
+ add_byte_tab(byte_nb_ptr, get_data_source_name(src), src->tvb, edt->tree,
tree_view);
}
@@ -1875,6 +1855,7 @@ set_ptree_font_all(PangoFontDescription *font)
*/
static gboolean colors_ok = FALSE;
+GdkColor expert_color_comment = {0, 0x0000, 0xffff, 0x0000 }; /* Green */
GdkColor expert_color_chat = { 0, 0x8080, 0xb7b7, 0xf7f7 }; /* light blue */
GdkColor expert_color_note = { 0, 0xa0a0, 0xffff, 0xffff }; /* bright turquoise */
GdkColor expert_color_warn = { 0, 0xf7f7, 0xf2f2, 0x5353 }; /* yellow */
@@ -1882,6 +1863,7 @@ GdkColor expert_color_error = { 0, 0xffff, 0x5c5c, 0x5c5c };
GdkColor expert_color_foreground = { 0, 0x0000, 0x0000, 0x0000 }; /* black */
GdkColor hidden_proto_item = { 0, 0x4444, 0x4444, 0x4444 }; /* gray */
+gchar *expert_color_comment_str;
gchar *expert_color_chat_str;
gchar *expert_color_note_str;
gchar *expert_color_warn_str;
@@ -1901,6 +1883,7 @@ void proto_draw_colors_init(void)
get_color(&expert_color_error);
get_color(&expert_color_foreground);
#endif
+ expert_color_comment_str = gdk_color_to_string(&expert_color_comment);
expert_color_chat_str = gdk_color_to_string(&expert_color_chat);
expert_color_note_str = gdk_color_to_string(&expert_color_note);
expert_color_warn_str = gdk_color_to_string(&expert_color_warn);
@@ -1987,6 +1970,10 @@ tree_cell_renderer(GtkTreeViewColumn *tree_column _U_, GtkCellRenderer *cell,
if(FI_GET_FLAG(fi, PI_SEVERITY_MASK)) {
switch(FI_GET_FLAG(fi, PI_SEVERITY_MASK)) {
+ case(PI_COMMENT):
+ g_object_set (cell, "background-gdk", &expert_color_comment, NULL);
+ g_object_set (cell, "background-set", TRUE, NULL);
+ break;
case(PI_CHAT):
g_object_set (cell, "background-gdk", &expert_color_chat, NULL);
g_object_set (cell, "background-set", TRUE, NULL);
diff --git a/ui/gtk/main_proto_draw.h b/ui/gtk/main_proto_draw.h
index a4699f718c..864afa185a 100644
--- a/ui/gtk/main_proto_draw.h
+++ b/ui/gtk/main_proto_draw.h
@@ -236,6 +236,7 @@ extern void select_bytes_view (GtkWidget *widget, gpointer data, gint view);
extern void proto_draw_colors_init(void);
/** the expert colors */
+extern GdkColor expert_color_comment;
extern GdkColor expert_color_chat;
extern GdkColor expert_color_note;
extern GdkColor expert_color_warn;
@@ -243,6 +244,7 @@ extern GdkColor expert_color_error;
extern GdkColor expert_color_foreground;
/* string representation of expert colors */
+extern gchar *expert_color_comment_str;
extern gchar *expert_color_chat_str;
extern gchar *expert_color_note_str;
extern gchar *expert_color_warn_str;