diff options
author | Ulf Lamping <ulf.lamping@web.de> | 2004-05-02 17:25:10 +0000 |
---|---|---|
committer | Ulf Lamping <ulf.lamping@web.de> | 2004-05-02 17:25:10 +0000 |
commit | fa9a7f064f650edf1f95d88428b980f290b893a7 (patch) | |
tree | 56e2e99582790da4d72f7ddd2d99c3eb7285212b | |
parent | 07e8972f61d89b6c7bb1fffb8591a65736319044 (diff) |
build a conversation (aka endpoint_talkers) dialog,
which shows all kinds of conversations in a notebook
svn path=/trunk/; revision=10771
-rw-r--r-- | gtk/endpoint_talkers_eth.c | 4 | ||||
-rw-r--r-- | gtk/endpoint_talkers_fc.c | 4 | ||||
-rw-r--r-- | gtk/endpoint_talkers_fddi.c | 4 | ||||
-rw-r--r-- | gtk/endpoint_talkers_ip.c | 4 | ||||
-rw-r--r-- | gtk/endpoint_talkers_ipx.c | 4 | ||||
-rw-r--r-- | gtk/endpoint_talkers_table.c | 244 | ||||
-rw-r--r-- | gtk/endpoint_talkers_table.h | 6 | ||||
-rw-r--r-- | gtk/endpoint_talkers_tcpip.c | 4 | ||||
-rw-r--r-- | gtk/endpoint_talkers_tr.c | 4 | ||||
-rw-r--r-- | gtk/endpoint_talkers_udpip.c | 4 | ||||
-rw-r--r-- | gtk/menu.c | 5 |
11 files changed, 237 insertions, 50 deletions
diff --git a/gtk/endpoint_talkers_eth.c b/gtk/endpoint_talkers_eth.c index bca9b2fa2b..7136d72a96 100644 --- a/gtk/endpoint_talkers_eth.c +++ b/gtk/endpoint_talkers_eth.c @@ -1,7 +1,7 @@ /* endpoint_talkers_eth.c * endpoint_talkers_eth 2003 Ronnie Sahlberg * - * $Id: endpoint_talkers_eth.c,v 1.24 2004/02/23 19:19:35 ulfl Exp $ + * $Id: endpoint_talkers_eth.c,v 1.25 2004/05/02 17:25:09 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -83,5 +83,7 @@ register_tap_listener_eth_talkers(void) register_tap_menu_item("Ethernet", REGISTER_TAP_GROUP_CONVERSATION_LIST, gtk_eth_endpoints_cb, NULL, NULL, NULL); + + register_ett_table(TRUE, "Ethernet", "eth", NULL /*filter*/, (void *)eth_talkers_packet); } diff --git a/gtk/endpoint_talkers_fc.c b/gtk/endpoint_talkers_fc.c index d3cc831c9e..3172771e66 100644 --- a/gtk/endpoint_talkers_fc.c +++ b/gtk/endpoint_talkers_fc.c @@ -1,7 +1,7 @@ /* endpoint_talkers_fc.c * endpoint_talkers_fc 2003 Ronnie Sahlberg * - * $Id: endpoint_talkers_fc.c,v 1.24 2004/02/23 19:19:35 ulfl Exp $ + * $Id: endpoint_talkers_fc.c,v 1.25 2004/05/02 17:25:10 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -83,5 +83,7 @@ register_tap_listener_fc_talkers(void) register_tap_menu_item("Fibre Channel", REGISTER_TAP_GROUP_CONVERSATION_LIST, gtk_fc_endpoints_cb, NULL, NULL, NULL); + + register_ett_table(TRUE, "Fibre Channel", "fc", NULL /*filter*/, (void *)fc_talkers_packet); } diff --git a/gtk/endpoint_talkers_fddi.c b/gtk/endpoint_talkers_fddi.c index aa3df01c27..7e49090777 100644 --- a/gtk/endpoint_talkers_fddi.c +++ b/gtk/endpoint_talkers_fddi.c @@ -1,7 +1,7 @@ /* endpoint_talkers_fddi.c * endpoint_talkers_fddi 2003 Ronnie Sahlberg * - * $Id: endpoint_talkers_fddi.c,v 1.19 2004/02/23 19:19:36 ulfl Exp $ + * $Id: endpoint_talkers_fddi.c,v 1.20 2004/05/02 17:25:10 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -83,5 +83,7 @@ register_tap_listener_fddi_talkers(void) register_tap_menu_item("FDDI", REGISTER_TAP_GROUP_CONVERSATION_LIST, gtk_fddi_endpoints_cb, NULL, NULL, NULL); + + register_ett_table(TRUE, "FDDI", "fddi", NULL /*filter*/, (void *)fddi_talkers_packet); } diff --git a/gtk/endpoint_talkers_ip.c b/gtk/endpoint_talkers_ip.c index f315d4b638..1d3ae17eaf 100644 --- a/gtk/endpoint_talkers_ip.c +++ b/gtk/endpoint_talkers_ip.c @@ -1,7 +1,7 @@ /* endpoint_talkers_ip.c * endpoint_talkers_ip 2003 Ronnie Sahlberg * - * $Id: endpoint_talkers_ip.c,v 1.25 2004/02/23 19:19:36 ulfl Exp $ + * $Id: endpoint_talkers_ip.c,v 1.26 2004/05/02 17:25:10 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -81,5 +81,7 @@ register_tap_listener_ip_talkers(void) register_tap_menu_item("IPv4", REGISTER_TAP_GROUP_CONVERSATION_LIST, gtk_ip_endpoints_cb, NULL, NULL, NULL); + + register_ett_table(TRUE, "IPv4", "ip", NULL /*filter*/, (void *)ip_talkers_packet); } diff --git a/gtk/endpoint_talkers_ipx.c b/gtk/endpoint_talkers_ipx.c index 739444caa8..47de417e3a 100644 --- a/gtk/endpoint_talkers_ipx.c +++ b/gtk/endpoint_talkers_ipx.c @@ -1,7 +1,7 @@ /* endpoint_talkers_ipx.c * endpoint_talkers_ipx 2003 Ronnie Sahlberg * - * $Id: endpoint_talkers_ipx.c,v 1.23 2004/02/23 19:19:36 ulfl Exp $ + * $Id: endpoint_talkers_ipx.c,v 1.24 2004/05/02 17:25:10 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -83,5 +83,7 @@ register_tap_listener_ipx_talkers(void) register_tap_menu_item("IPX", REGISTER_TAP_GROUP_CONVERSATION_LIST, gtk_ipx_endpoints_cb, NULL, NULL, NULL); + + register_ett_table(TRUE, "IPX", "ipx", NULL /*filter*/, (void *)ipx_talkers_packet); } diff --git a/gtk/endpoint_talkers_table.c b/gtk/endpoint_talkers_table.c index aabcf45b73..c7ca9e6079 100644 --- a/gtk/endpoint_talkers_table.c +++ b/gtk/endpoint_talkers_table.c @@ -4,7 +4,7 @@ * endpoint_talkers_table 2003 Ronnie Sahlberg * Helper routines common to all endpoint talkers tap. * - * $Id: endpoint_talkers_table.c,v 1.35 2004/05/01 19:24:44 ulfl Exp $ + * $Id: endpoint_talkers_table.c,v 1.36 2004/05/02 17:25:10 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -213,8 +213,16 @@ reset_ett_table_data(endpoints_table *et) guint32 i; char title[256]; - g_snprintf(title, 255, "%s Conversations: %s", et->name, cf_get_display_name(&cfile)); - gtk_window_set_title(GTK_WINDOW(et->win), title); + if(et->page_lb) { + g_snprintf(title, 255, "Conversations: %s", cf_get_display_name(&cfile)); + gtk_window_set_title(GTK_WINDOW(et->win), title); + g_snprintf(title, 255, "%s", et->name); + gtk_label_set_text(GTK_LABEL(et->page_lb), title); + gtk_widget_set_sensitive(et->page_lb, FALSE); + } else { + g_snprintf(title, 255, "%s Conversations: %s", et->name, cf_get_display_name(&cfile)); + gtk_window_set_title(GTK_WINDOW(et->win), title); + } /* remove all entries from the clist */ for(i=0;i<et->num_endpoints;i++){ @@ -913,6 +921,17 @@ draw_ett_table_data(endpoints_table *et) { guint32 i; int j; + char title[256]; + + if (et->page_lb) { + if(et->num_endpoints) { + g_snprintf(title, 255, "%s: %u", et->name, et->num_endpoints); + } else { + g_snprintf(title, 255, "%s", et->name); + } + gtk_label_set_text(GTK_LABEL(et->page_lb), title); + gtk_widget_set_sensitive(et->page_lb, et->num_endpoints); + } for(i=0;i<et->num_endpoints;i++){ char str[16]; @@ -941,45 +960,23 @@ draw_ett_table_data(endpoints_table *et) } -void -init_ett_table(gboolean hide_ports, char *table_name, char *tap_name, char *filter, void *packet_func) +gboolean +init_ett_table_page(endpoints_table *talkers, GtkWidget *vbox, gboolean hide_ports, char *table_name, char *tap_name, char *filter, void *packet_func) { int i; column_arrows *col_arrows; - GdkBitmap *ascend_bm, *descend_bm; - GdkPixmap *ascend_pm, *descend_pm; GtkStyle *win_style; GtkWidget *column_lb; GString *error_string; - endpoints_table *talkers; - GtkWidget *vbox; GtkWidget *label; - GtkWidget *bbox; - GtkWidget *close_bt; char title[256]; char *default_titles[] = { "EP1 Address", "Port", "EP2 Address", "Port", "Frames", "Bytes", "-> Frames", "-> Bytes", "<- Frames", "<- Bytes" }; - talkers=g_malloc(sizeof(endpoints_table)); - - talkers->name=table_name; - g_snprintf(title, 255, "%s Conversations: %s", table_name, cf_get_display_name(&cfile)); - talkers->win=dlg_window_new(title); - gtk_window_set_default_size(GTK_WINDOW(talkers->win), 750, 400); - - SIGNAL_CONNECT(talkers->win, "destroy", ett_win_destroy_cb, talkers); - - vbox=gtk_vbox_new(FALSE, 3); - gtk_container_add(GTK_CONTAINER(talkers->win), vbox); - gtk_container_set_border_width(GTK_CONTAINER(vbox), 12); - g_snprintf(title, 255, "%s Conversations", table_name); label=gtk_label_new(title); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); - /* We must display TOP LEVEL Widget before calling init_ett_table() */ - gtk_widget_show_all(talkers->win); - talkers->scrolled_window=scrolled_window_new(NULL, NULL); gtk_box_pack_start(GTK_BOX(vbox), talkers->scrolled_window, TRUE, TRUE, 0); @@ -988,14 +985,6 @@ init_ett_table(gboolean hide_ports, char *table_name, char *tap_name, char *filt col_arrows = (column_arrows *) g_malloc(sizeof(column_arrows) * NUM_COLS); win_style = gtk_widget_get_style(talkers->scrolled_window); - ascend_pm = gdk_pixmap_create_from_xpm_d(talkers->scrolled_window->window, - &ascend_bm, - &win_style->bg[GTK_STATE_NORMAL], - (gchar **)clist_ascend_xpm); - descend_pm = gdk_pixmap_create_from_xpm_d(talkers->scrolled_window->window, - &descend_bm, - &win_style->bg[GTK_STATE_NORMAL], - (gchar **)clist_descend_xpm); for (i = 0; i < NUM_COLS; i++) { col_arrows[i].table = gtk_table_new(2, 2, FALSE); gtk_table_set_col_spacings(GTK_TABLE(col_arrows[i].table), 5); @@ -1003,9 +992,9 @@ init_ett_table(gboolean hide_ports, char *table_name, char *tap_name, char *filt gtk_table_attach(GTK_TABLE(col_arrows[i].table), column_lb, 0, 1, 0, 2, GTK_SHRINK, GTK_SHRINK, 0, 0); gtk_widget_show(column_lb); - col_arrows[i].ascend_pm = gtk_pixmap_new(ascend_pm, ascend_bm); + col_arrows[i].ascend_pm = xpm_to_widget((const char **) clist_ascend_xpm); gtk_table_attach(GTK_TABLE(col_arrows[i].table), col_arrows[i].ascend_pm, 1, 2, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0); - col_arrows[i].descend_pm = gtk_pixmap_new(descend_pm, descend_bm); + col_arrows[i].descend_pm = xpm_to_widget((const char **) clist_descend_xpm); gtk_table_attach(GTK_TABLE(col_arrows[i].table), col_arrows[i].descend_pm, 1, 2, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0); /* make total frames be the default sort order */ if (i == 4) { @@ -1059,10 +1048,44 @@ init_ett_table(gboolean hide_ports, char *table_name, char *tap_name, char *filt if(error_string){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, error_string->str); g_string_free(error_string, TRUE); - g_free(talkers); - return; + return FALSE; } + return TRUE; +} + + +void +init_ett_table(gboolean hide_ports, char *table_name, char *tap_name, char *filter, void *packet_func) +{ + endpoints_table *talkers; + char title[256]; + GtkWidget *vbox; + GtkWidget *bbox; + GtkWidget *close_bt; + gboolean ret; + + + talkers=g_malloc(sizeof(endpoints_table)); + + talkers->name=table_name; + g_snprintf(title, 255, "%s Conversations: %s", table_name, cf_get_display_name(&cfile)); + talkers->win=dlg_window_new(title); + talkers->page_lb=NULL; + gtk_window_set_default_size(GTK_WINDOW(talkers->win), 750, 400); + + SIGNAL_CONNECT(talkers->win, "destroy", ett_win_destroy_cb, talkers); + + vbox=gtk_vbox_new(FALSE, 3); + gtk_container_add(GTK_CONTAINER(talkers->win), vbox); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 12); + + ret = init_ett_table_page(talkers, vbox, hide_ports, table_name, tap_name, filter, packet_func); + if(ret == FALSE) { + g_free(talkers); + return; + } + /* Button row. */ bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); @@ -1079,6 +1102,149 @@ init_ett_table(gboolean hide_ports, char *table_name, char *tap_name, char *filt gtk_widget_show_all(talkers->win); retap_packets(&cfile); + /* after retapping, redraw table */ + draw_ett_table_data(talkers); +} + + + +static void +ett_win_destroy_notebook_cb(GtkWindow *win _U_, gpointer data) +{ + void ** pages = data; + int page; + + /* first "page" contains the number of pages */ + for (page=1; page<=GPOINTER_TO_INT(pages[0]); page++) { + ett_win_destroy_cb(NULL, pages[page]); + } +} + + + + +endpoints_table * +init_ett_notebook_page_cb(gboolean hide_ports, char *table_name, char *tap_name, char *filter, void *packet_func) +{ + gboolean ret; + GtkWidget *page_vbox; + endpoints_table *talkers; + + talkers=g_malloc(sizeof(endpoints_table)); + talkers->name=table_name; + + page_vbox=gtk_vbox_new(FALSE, 6); + talkers->win = page_vbox; + gtk_container_set_border_width(GTK_CONTAINER(page_vbox), 6); + + ret = init_ett_table_page(talkers, page_vbox, hide_ports, table_name, tap_name, filter, packet_func); + if(ret == FALSE) { + g_free(talkers); + return NULL; + } + + return talkers; +} + + +typedef struct { + gboolean hide_ports; /* hide TCP / UDP port columns */ + char *table_name; /* GUI output name */ + char *tap_name; /* internal name */ + char *filter; /* display filter string (unused) */ + void *packet_func; /* function to be called for new incoming packets */ +} register_ett_t; + + +GSList *registered_tables = NULL; + +void +register_ett_table(gboolean hide_ports, char *table_name, char *tap_name, char *filter, void *packet_func) +{ + register_ett_t *table; + + table = g_malloc(sizeof(register_ett_t)); + + table->hide_ports = hide_ports; + table->table_name = table_name; + table->tap_name = tap_name; + table->filter = filter; + table->packet_func = packet_func; + + registered_tables = g_slist_append(registered_tables, table); +} + + +void +init_ett_notebook_cb(GtkWidget *w _U_, gpointer d _U_) +{ + endpoints_table *talkers; + char title[256]; + GtkWidget *vbox; + GtkWidget *bbox; + GtkWidget *close_bt; + GtkWidget *win; + int page; + void ** pages; + GtkWidget *nb; + GtkWidget *page_lb; + GSList *current_table; + register_ett_t *registered; + + + pages = g_malloc(sizeof(void *) * (g_slist_length(registered_tables) + 1)); + + g_snprintf(title, 255, "Conversations: %s", cf_get_display_name(&cfile)); + win=dlg_window_new(title); + gtk_window_set_default_size(GTK_WINDOW(win), 750, 400); + + SIGNAL_CONNECT(win, "destroy", ett_win_destroy_notebook_cb, pages); + + vbox=gtk_vbox_new(FALSE, 6); + gtk_container_add(GTK_CONTAINER(win), vbox); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 12); + + nb = gtk_notebook_new(); + gtk_container_add(GTK_CONTAINER(vbox), nb); + + page = 0; + + current_table = registered_tables; + while(current_table) { + registered = current_table->data; + page_lb = gtk_label_new(""); + talkers = init_ett_notebook_page_cb(registered->hide_ports, registered->table_name, registered->tap_name, + registered->filter, registered->packet_func); + gtk_notebook_append_page(GTK_NOTEBOOK(nb), talkers->win, page_lb); + talkers->win = win; + talkers->page_lb = page_lb; + pages[++page] = talkers; + + current_table = g_slist_next(current_table); + } + + pages[0] = GINT_TO_POINTER(page); + + /* Button row. */ + bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL); + gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); + + close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE); + SIGNAL_CONNECT_OBJECT(close_bt, "clicked", gtk_widget_destroy, win); + gtk_widget_grab_default(close_bt); + + /* Catch the "key_press_event" signal in the window, so that we can + catch the ESC key being pressed and act as if the "Close" button had + been selected. */ + dlg_set_cancel(win, close_bt); + + gtk_widget_show_all(win); + retap_packets(&cfile); + + /* after retapping, redraw table */ + for (page=1; page<=GPOINTER_TO_INT(pages[0]); page++) { + draw_ett_table_data(pages[page]); + } } diff --git a/gtk/endpoint_talkers_table.h b/gtk/endpoint_talkers_table.h index 048e895a62..7ae6b0866c 100644 --- a/gtk/endpoint_talkers_table.h +++ b/gtk/endpoint_talkers_table.h @@ -2,7 +2,7 @@ * endpoint_talkers_table 2003 Ronnie Sahlberg * Helper routines common to all endpoint talkers taps. * - * $Id: endpoint_talkers_table.h,v 1.8 2003/09/04 23:11:03 sahlberg Exp $ + * $Id: endpoint_talkers_table.h,v 1.9 2004/05/02 17:25:10 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -40,6 +40,7 @@ typedef struct _endpoint_talker_t { typedef struct _endpoints_table { char *name; GtkWidget *win; + GtkWidget *page_lb; GtkWidget *scrolled_window; GtkCList *table; GtkItemFactory *item_factory; @@ -50,8 +51,9 @@ typedef struct _endpoints_table { } endpoints_table; +extern void register_ett_table(gboolean hide_ports, char *table_name, char *tap_name, char *filter, void *packet_func); -void init_ett_table(gboolean hide_ports, char *table_name, char *tap_name, char *filter, void *packet_func); +extern void init_ett_table(gboolean hide_ports, char *table_name, char *tap_name, char *filter, void *packet_func); #define SAT_NONE 0 diff --git a/gtk/endpoint_talkers_tcpip.c b/gtk/endpoint_talkers_tcpip.c index 3b97c0ee95..cf25358406 100644 --- a/gtk/endpoint_talkers_tcpip.c +++ b/gtk/endpoint_talkers_tcpip.c @@ -1,7 +1,7 @@ /* endpoint_talkers_tcpip.c * endpoint_talkers_tcpip 2003 Ronnie Sahlberg * - * $Id: endpoint_talkers_tcpip.c,v 1.26 2004/02/23 19:19:36 ulfl Exp $ + * $Id: endpoint_talkers_tcpip.c,v 1.27 2004/05/02 17:25:10 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -83,5 +83,7 @@ register_tap_listener_tcpip_talkers(void) register_tap_menu_item("TCP (IPv4 & IPv6)", REGISTER_TAP_GROUP_CONVERSATION_LIST, gtk_tcpip_endpoints_cb, NULL, NULL, NULL); + + register_ett_table(FALSE, "TCP", "tcp", NULL /*filter*/, (void *)tcpip_talkers_packet); } diff --git a/gtk/endpoint_talkers_tr.c b/gtk/endpoint_talkers_tr.c index 884517446a..dc904df3e5 100644 --- a/gtk/endpoint_talkers_tr.c +++ b/gtk/endpoint_talkers_tr.c @@ -1,7 +1,7 @@ /* endpoint_talkers_tr.c * endpoint_talkers_tr 2003 Ronnie Sahlberg * - * $Id: endpoint_talkers_tr.c,v 1.25 2004/02/23 19:19:36 ulfl Exp $ + * $Id: endpoint_talkers_tr.c,v 1.26 2004/05/02 17:25:10 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -83,5 +83,7 @@ register_tap_listener_tr_talkers(void) register_tap_menu_item("Token Ring", REGISTER_TAP_GROUP_CONVERSATION_LIST, gtk_tr_endpoints_cb, NULL, NULL, NULL); + + register_ett_table(TRUE, "Token Ring", "tr", NULL /*filter*/, (void *)tr_talkers_packet); } diff --git a/gtk/endpoint_talkers_udpip.c b/gtk/endpoint_talkers_udpip.c index 3f65a6d0a2..56de56e028 100644 --- a/gtk/endpoint_talkers_udpip.c +++ b/gtk/endpoint_talkers_udpip.c @@ -1,7 +1,7 @@ /* endpoint_talkers_udpip.c * endpoint_talkers_udpip 2003 Ronnie Sahlberg * - * $Id: endpoint_talkers_udpip.c,v 1.26 2004/02/23 19:19:36 ulfl Exp $ + * $Id: endpoint_talkers_udpip.c,v 1.27 2004/05/02 17:25:10 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -83,5 +83,7 @@ register_tap_listener_udpip_talkers(void) register_tap_menu_item("UDP (IPv4 & IPv6)", REGISTER_TAP_GROUP_CONVERSATION_LIST, gtk_udpip_endpoints_cb, NULL, NULL, NULL); + + register_ett_table(FALSE, "UDP", "udp", NULL /*filter*/, (void *)udpip_talkers_packet); } diff --git a/gtk/menu.c b/gtk/menu.c index 086361f0f4..f257dc38fe 100644 --- a/gtk/menu.c +++ b/gtk/menu.c @@ -1,7 +1,7 @@ /* menu.c * Menu routines * - * $Id: menu.c,v 1.184 2004/05/01 17:22:08 obiot Exp $ + * $Id: menu.c,v 1.185 2004/05/02 17:25:10 ulfl Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -73,6 +73,7 @@ GtkWidget *popup_menu_object; extern void savehex_cb(GtkWidget * w, gpointer data _U_); +extern void init_ett_notebook_cb(GtkWidget *w _U_, gpointer d _U_); static void clear_menu_recent_capture_file_cmd_cb(GtkWidget *w, gpointer unused _U_); @@ -313,6 +314,8 @@ static GtkItemFactoryEntry menu_items[] = ITEM_FACTORY_ENTRY("/Statistics/_Summary", NULL, summary_open_cb, 0, NULL, NULL), ITEM_FACTORY_ENTRY("/Statistics/_Protocol Hierarchy", NULL, proto_hier_stats_cb, 0, NULL, NULL), + ITEM_FACTORY_ENTRY("/Statistics/Conversations", NULL, + init_ett_notebook_cb, 0, NULL, NULL), ITEM_FACTORY_ENTRY("/_Help", NULL, NULL, 0, "<Branch>", NULL), ITEM_FACTORY_STOCK_ENTRY("/Help/_Contents", "F1", help_cb, 0, GTK_STOCK_HELP), ITEM_FACTORY_ENTRY("/Help/_Supported Protocols", NULL, supported_cb, 0, NULL, NULL), |