2004-02-20 09:09:12 +00:00
/* hostlist_table.c 2004 Ian Schorr
* modified from endpoint_talkers_table . c 2003 Ronnie Sahlberg
* Helper routines common to all host list taps .
*
2006-05-21 05:12:17 +00:00
* Wireshark - Network traffic analyzer
* By Gerald Combs < gerald @ wireshark . org >
2004-02-20 09:09:12 +00:00
* Copyright 1998 Gerald Combs
2004-06-03 21:46:27 +00:00
*
2004-02-20 09:09:12 +00:00
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
2004-06-03 21:46:27 +00:00
*
2004-02-20 09:09:12 +00:00
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
2004-06-03 21:46:27 +00:00
*
2004-02-20 09:09:12 +00:00
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
2012-06-28 22:56:06 +00:00
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
2004-02-20 09:09:12 +00:00
*/
2012-09-20 01:48:30 +00:00
# include "config.h"
2004-02-20 09:09:12 +00:00
# include <string.h>
# include <stdlib.h>
# include <math.h>
2009-10-09 09:01:04 +00:00
# include <locale.h>
2005-01-01 12:49:54 +00:00
2004-02-20 09:09:12 +00:00
# include <gtk/gtk.h>
2005-01-01 12:49:54 +00:00
# include <epan/addr_resolv.h>
2008-10-27 04:50:57 +00:00
# ifdef HAVE_GEOIP
2012-07-18 02:47:56 +00:00
# include <GeoIP.h>
2014-09-05 18:17:17 +00:00
# include "epan/geoip_db.h"
# include "wsutil/pint.h"
2008-10-27 04:50:57 +00:00
# endif
2005-01-01 12:49:54 +00:00
2012-01-16 01:07:52 +00:00
# include "ui/simple_dialog.h"
# include "ui/alert_box.h"
2012-08-01 19:18:49 +00:00
# include "ui/utf8_entities.h"
2008-04-13 03:32:24 +00:00
2012-01-15 21:59:11 +00:00
# include "ui/gtk/hostlist_table.h"
# include "ui/gtk/filter_utils.h"
# include "ui/gtk/gtkglobals.h"
2008-05-17 23:03:17 +00:00
2012-01-15 21:59:11 +00:00
# include "ui/gtk/gui_utils.h"
# include "ui/gtk/dlg_utils.h"
# include "ui/gtk/help_dlg.h"
# include "ui/gtk/main.h"
2009-02-11 20:25:17 +00:00
# ifdef HAVE_GEOIP
2012-01-15 21:59:11 +00:00
# include "ui/gtk/webbrowser.h"
# include "ui/gtk/stock_icons.h"
2009-02-11 20:25:17 +00:00
# endif
2008-04-13 03:32:24 +00:00
2012-01-15 21:59:11 +00:00
# include "ui/gtk/old-gtk-compat.h"
2011-07-21 17:44:02 +00:00
2007-11-30 14:36:18 +00:00
# define HOST_PTR_KEY "hostlist-pointer"
# define NB_PAGES_KEY "notebook-pages"
2013-03-21 18:39:16 +00:00
# define HL_DLG_HEIGHT 550
2004-02-20 09:09:12 +00:00
2010-01-29 14:24:18 +00:00
# define CMP_INT(i1, i2) \
if ( ( i1 ) > ( i2 ) ) \
return 1 ; \
else if ( ( i1 ) < ( i2 ) ) \
return - 1 ; \
else \
return 0 ;
2009-10-09 09:01:04 +00:00
2008-10-27 21:38:40 +00:00
# define COL_STR_LEN 32
2004-02-20 09:09:12 +00:00
static void
2014-07-25 15:34:51 +00:00
reset_host_table_data ( hostlist_table * hosts )
2004-02-20 09:09:12 +00:00
{
2012-06-03 22:03:05 +00:00
char * display_name ;
2004-06-03 21:46:27 +00:00
char title [ 256 ] ;
2008-02-17 00:35:55 +00:00
GString * error_string ;
const char * filter ;
2009-10-09 09:01:04 +00:00
GtkListStore * store ;
2008-02-17 00:35:55 +00:00
if ( hosts - > use_dfilter ) {
filter = gtk_entry_get_text ( GTK_ENTRY ( main_display_filter_widget ) ) ;
} else {
filter = hosts - > filter ;
}
2014-12-31 15:47:28 +00:00
error_string = set_tap_dfilter ( & hosts - > hash , filter ) ;
2008-02-17 00:35:55 +00:00
if ( error_string ) {
2008-10-31 09:53:56 +00:00
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " %s " , error_string - > str ) ;
2008-02-17 00:35:55 +00:00
g_string_free ( error_string , TRUE ) ;
return ;
}
2008-08-05 17:33:14 +00:00
2004-02-20 09:09:12 +00:00
2004-05-02 21:16:09 +00:00
if ( hosts - > page_lb ) {
2012-06-03 22:03:05 +00:00
display_name = cf_get_display_name ( & cfile ) ;
g_snprintf ( title , sizeof ( title ) , " Endpoints: %s " , display_name ) ;
g_free ( display_name ) ;
2004-06-03 21:46:27 +00:00
gtk_window_set_title ( GTK_WINDOW ( hosts - > win ) , title ) ;
2009-03-18 14:44:15 +00:00
g_snprintf ( title , sizeof ( title ) , " %s " , hosts - > name ) ;
2004-06-03 21:46:27 +00:00
gtk_label_set_text ( GTK_LABEL ( hosts - > page_lb ) , title ) ;
2004-05-02 21:16:09 +00:00
gtk_widget_set_sensitive ( hosts - > page_lb , FALSE ) ;
2008-02-17 00:35:55 +00:00
if ( hosts - > use_dfilter ) {
if ( filter & & strlen ( filter ) ) {
2009-03-18 14:44:15 +00:00
g_snprintf ( title , sizeof ( title ) , " %s Endpoints - Filter: %s " , hosts - > name , filter ) ;
2008-02-17 00:35:55 +00:00
} else {
2009-03-18 14:44:15 +00:00
g_snprintf ( title , sizeof ( title ) , " %s Endpoints - No Filter " , hosts - > name ) ;
2008-02-17 00:35:55 +00:00
}
} else {
2009-03-18 14:44:15 +00:00
g_snprintf ( title , sizeof ( title ) , " %s Endpoints " , hosts - > name ) ;
2008-02-17 00:35:55 +00:00
}
gtk_label_set_text ( GTK_LABEL ( hosts - > name_lb ) , title ) ;
2004-05-02 21:16:09 +00:00
} else {
2012-06-03 22:03:05 +00:00
display_name = cf_get_display_name ( & cfile ) ;
g_snprintf ( title , sizeof ( title ) , " %s Endpoints: %s " , hosts - > name , display_name ) ;
g_free ( display_name ) ;
2004-06-03 21:46:27 +00:00
gtk_window_set_title ( GTK_WINDOW ( hosts - > win ) , title ) ;
2004-05-02 21:16:09 +00:00
}
2004-02-20 09:09:12 +00:00
2009-10-09 09:01:04 +00:00
/* remove all entries from the list */
store = GTK_LIST_STORE ( gtk_tree_view_get_model ( GTK_TREE_VIEW ( hosts - > table ) ) ) ;
gtk_list_store_clear ( store ) ;
2004-02-20 09:09:12 +00:00
2004-06-03 21:46:27 +00:00
/* delete all hosts */
2014-07-25 15:34:51 +00:00
reset_hostlist_table_data ( & hosts - > hash ) ;
2004-02-20 09:09:12 +00:00
}
2005-01-01 12:49:54 +00:00
static void
reset_hostlist_table_data_cb ( void * arg )
{
2014-07-25 15:34:51 +00:00
conv_hash_t * hash = ( conv_hash_t * ) arg ;
reset_host_table_data ( ( hostlist_table * ) hash - > user_data ) ;
2005-01-01 12:49:54 +00:00
}
2004-02-20 09:09:12 +00:00
static void
hostlist_win_destroy_cb ( GtkWindow * win _U_ , gpointer data )
{
2009-03-18 14:44:15 +00:00
hostlist_table * hosts = ( hostlist_table * ) data ;
2004-02-20 09:09:12 +00:00
2014-07-25 15:34:51 +00:00
remove_tap_listener ( & hosts - > hash ) ;
2004-02-20 09:09:12 +00:00
2014-07-25 15:34:51 +00:00
reset_host_table_data ( hosts ) ;
2009-03-18 14:44:15 +00:00
g_free ( hosts ) ;
2004-02-20 09:09:12 +00:00
}
2009-10-09 09:01:04 +00:00
static gint
hostlist_sort_column ( GtkTreeModel * model ,
2010-01-29 14:24:18 +00:00
GtkTreeIter * a ,
GtkTreeIter * b ,
gpointer user_data )
2004-02-20 09:09:12 +00:00
{
2010-01-29 14:24:18 +00:00
guint32 idx1 , idx2 ;
2009-10-09 09:01:04 +00:00
gint data_column = GPOINTER_TO_INT ( user_data ) ;
2013-03-11 06:47:34 +00:00
hostlist_table * hl = ( hostlist_table * ) g_object_get_data ( G_OBJECT ( model ) , HOST_PTR_KEY ) ;
2010-01-29 14:24:18 +00:00
hostlist_talker_t * host1 = NULL ;
2009-10-09 09:01:04 +00:00
hostlist_talker_t * host2 = NULL ;
2014-08-06 17:07:42 +00:00
gtk_tree_model_get ( model , a , ENDP_INDEX_COLUMN , & idx1 , - 1 ) ;
gtk_tree_model_get ( model , b , ENDP_INDEX_COLUMN , & idx2 , - 1 ) ;
2009-10-09 09:01:04 +00:00
2014-07-25 15:34:51 +00:00
if ( ! hl | | idx1 > = hl - > hash . conv_array - > len | | idx2 > = hl - > hash . conv_array - > len )
2010-01-29 14:24:18 +00:00
return 0 ;
2009-10-09 09:01:04 +00:00
2014-07-25 15:34:51 +00:00
host1 = & g_array_index ( hl - > hash . conv_array , hostlist_talker_t , idx1 ) ;
host2 = & g_array_index ( hl - > hash . conv_array , hostlist_talker_t , idx2 ) ;
2009-10-09 09:01:04 +00:00
2010-01-29 14:24:18 +00:00
switch ( data_column ) {
2014-08-06 17:07:42 +00:00
case ENDP_COLUMN_ADDR : /* Address */
2013-03-21 02:29:09 +00:00
return ( CMP_ADDRESS ( & host1 - > myaddress , & host2 - > myaddress ) ) ;
2014-08-06 17:07:42 +00:00
case ENDP_COLUMN_PORT : /* (Port) */
2010-01-29 14:24:18 +00:00
CMP_INT ( host1 - > port , host2 - > port ) ;
2010-02-28 20:56:21 +00:00
# ifdef HAVE_GEOIP
default :
{
gchar * text1 , * text2 ;
double loc1 = 0 , loc2 = 0 ;
2010-08-30 16:10:01 +00:00
2010-02-28 20:56:21 +00:00
gtk_tree_model_get ( model , a , data_column , & text1 , - 1 ) ;
gtk_tree_model_get ( model , b , data_column , & text2 , - 1 ) ;
2010-08-30 16:10:01 +00:00
2010-02-28 20:56:21 +00:00
if ( text1 ) {
loc1 = atof ( text1 ) ;
g_free ( text1 ) ;
}
if ( text2 ) {
loc2 = atof ( text2 ) ;
g_free ( text2 ) ;
}
CMP_INT ( loc1 , loc2 ) ;
}
break ;
# endif
2010-01-29 14:24:18 +00:00
}
g_assert_not_reached ( ) ;
2011-04-22 07:15:45 +00:00
return 0 ;
2004-02-20 09:09:12 +00:00
}
static void
hostlist_select_filter_cb ( GtkWidget * widget _U_ , gpointer callback_data , guint callback_action )
{
2009-10-09 09:01:04 +00:00
guint idx ;
2009-03-18 14:44:15 +00:00
hostlist_table * hl = ( hostlist_table * ) callback_data ;
2014-07-25 15:34:51 +00:00
char * str ;
2009-10-09 09:01:04 +00:00
GtkTreeIter iter ;
GtkTreeModel * model ;
GtkTreeSelection * sel ;
2014-07-25 15:34:51 +00:00
hostlist_talker_t * host ;
2009-10-09 09:01:04 +00:00
sel = gtk_tree_view_get_selection ( GTK_TREE_VIEW ( hl - > table ) ) ;
if ( ! gtk_tree_selection_get_selected ( sel , & model , & iter ) )
return ;
2009-03-18 14:44:15 +00:00
2010-08-30 16:10:01 +00:00
gtk_tree_model_get ( model , & iter ,
2014-08-06 17:07:42 +00:00
ENDP_INDEX_COLUMN , & idx ,
2009-10-09 09:01:04 +00:00
- 1 ) ;
2014-07-25 15:34:51 +00:00
if ( idx > = hl - > hash . conv_array - > len ) {
2009-03-18 14:44:15 +00:00
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " No hostlist selected " ) ;
return ;
}
2014-07-25 15:34:51 +00:00
host = & g_array_index ( hl - > hash . conv_array , hostlist_talker_t , idx ) ;
2009-03-18 14:44:15 +00:00
2014-07-25 15:34:51 +00:00
str = ( char * ) get_hostlist_filter ( host ) ;
2009-03-18 14:44:15 +00:00
apply_selected_filter ( callback_action , str ) ;
g_free ( str ) ;
2004-02-20 09:09:12 +00:00
}
2010-07-30 12:41:56 +00:00
static gboolean
2004-02-20 09:09:12 +00:00
hostlist_show_popup_menu_cb ( void * widg _U_ , GdkEvent * event , hostlist_table * et )
{
2004-06-01 23:00:24 +00:00
GdkEventButton * bevent = ( GdkEventButton * ) event ;
2004-02-20 09:09:12 +00:00
2004-06-01 23:00:24 +00:00
if ( event - > type = = GDK_BUTTON_PRESS & & bevent - > button = = 3 ) {
2004-06-03 21:46:27 +00:00
gtk_menu_popup ( GTK_MENU ( et - > menu ) , NULL , NULL , NULL , NULL ,
2009-03-18 14:44:15 +00:00
bevent - > button , bevent - > time ) ;
2004-06-01 23:00:24 +00:00
}
2004-02-20 09:09:12 +00:00
2004-06-01 23:00:24 +00:00
return FALSE ;
2004-02-20 09:09:12 +00:00
}
2010-09-03 08:41:04 +00:00
/* Action callbacks */
2010-08-30 14:23:25 +00:00
static void
apply_as_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_MATCH ( ACTYPE_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
apply_as_not_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_MATCH ( ACTYPE_NOT_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
apply_as_and_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_MATCH ( ACTYPE_AND_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
apply_as_or_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_MATCH ( ACTYPE_OR_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
apply_as_and_not_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_MATCH ( ACTYPE_AND_NOT_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
apply_as_or_not_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_MATCH ( ACTYPE_OR_NOT_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
prep_as_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_PREPARE ( ACTYPE_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
prep_as_not_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_PREPARE ( ACTYPE_NOT_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
prep_as_and_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_PREPARE ( ACTYPE_AND_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
prep_as_or_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_PREPARE ( ACTYPE_OR_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
prep_as_and_not_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_PREPARE ( ACTYPE_AND_NOT_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
prep_as_or_not_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_PREPARE ( ACTYPE_OR_NOT_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
find_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_FIND_FRAME ( ACTYPE_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
find_not_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_FIND_FRAME ( ACTYPE_NOT_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
find_prev_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_FIND_PREVIOUS ( ACTYPE_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
find_prev_not_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_FIND_PREVIOUS ( ACTYPE_NOT_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
find_next_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_FIND_NEXT ( ACTYPE_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
find_next_not_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_FIND_NEXT ( ACTYPE_NOT_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static void
color_selected_cb ( GtkWidget * widget , gpointer user_data )
{
2011-09-21 18:55:03 +00:00
hostlist_select_filter_cb ( widget , user_data , CALLBACK_COLORIZE ( ACTYPE_SELECTED , 0 ) ) ;
2010-08-30 14:23:25 +00:00
}
static const char * ui_desc_hostlist_table_popup =
" <ui> \n "
" <popup name='HostlistTableFilterPopup'> \n "
" <menu action='/Apply as Filter'> \n "
" <menuitem action='/Apply as Filter/Selected'/> \n "
2010-10-03 15:26:03 +00:00
" <menuitem action='/Apply as Filter/Not Selected'/> \n "
2010-10-03 16:09:25 +00:00
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected'/> \n "
" <menuitem action='/Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected'/> \n "
2010-08-30 14:23:25 +00:00
" </menu> \n "
" <menu action='/Prepare a Filter'> \n "
" <menuitem action='/Prepare a Filter/Selected'/> \n "
2010-10-03 15:26:03 +00:00
" <menuitem action='/Prepare a Filter/Not Selected'/> \n "
2010-10-03 16:09:25 +00:00
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected'/> \n "
" <menuitem action='/Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected'/> \n "
2010-08-30 14:23:25 +00:00
" </menu> \n "
" <menu action='/Find Frame'> \n "
" <menu action='/Find Frame/Find Frame'> \n "
" <menuitem action='/Find Frame/Selected'/> \n "
" <menuitem action='/Find Frame/Not Selected'/> \n "
" </menu> \n "
" <menu action='/Find Frame/Find Next'> \n "
" <menuitem action='/Find Next/Selected'/> \n "
" <menuitem action='/Find Next/Not Selected'/> \n "
" </menu> \n "
" <menu action='/Find Frame/Find Previous'> \n "
" <menuitem action='/Find Previous/Selected'/> \n "
" <menuitem action='/Find Previous/Not Selected'/> \n "
" </menu> \n "
" </menu> \n "
" <menu action='/Colorize Procedure'> \n "
" <menuitem action='/Colorize Procedure/Colorize Host Traffic'/> \n "
" </menu> \n "
" </popup> \n "
" </ui> \n " ;
2011-07-11 18:35:36 +00:00
/*
2010-08-30 14:23:25 +00:00
* GtkActionEntry
* typedef struct {
* const gchar * name ;
* const gchar * stock_id ;
* const gchar * label ;
* const gchar * accelerator ;
* const gchar * tooltip ;
* GCallback callback ;
* } GtkActionEntry ;
2011-09-21 18:55:03 +00:00
* const gchar * name ; The name of the action .
* const gchar * stock_id ; The stock id for the action , or the name of an icon from the icon theme .
* const gchar * label ; The label for the action . This field should typically be marked for translation ,
2011-07-11 18:35:36 +00:00
* see gtk_action_group_set_translation_domain ( ) .
2011-09-21 18:55:03 +00:00
* If label is NULL , the label of the stock item with id stock_id is used .
* const gchar * accelerator ; The accelerator for the action , in the format understood by gtk_accelerator_parse ( ) .
* const gchar * tooltip ; The tooltip for the action . This field should typically be marked for translation ,
* see gtk_action_group_set_translation_domain ( ) .
* GCallback callback ; The function to call when the action is activated .
2010-08-30 14:23:25 +00:00
*
*/
2013-03-11 06:47:34 +00:00
static const GtkActionEntry service_resp_t_popup_entries [ ] = {
2011-09-21 18:55:03 +00:00
{ " /Apply as Filter " , NULL , " Apply as Filter " , NULL , NULL , NULL } ,
{ " /Prepare a Filter " , NULL , " Prepare a Filter " , NULL , NULL , NULL } ,
{ " /Find Frame " , NULL , " Find Frame " , NULL , NULL , NULL } ,
{ " /Find Frame/Find Frame " , NULL , " Find Frame " , NULL , NULL , NULL } ,
{ " /Find Frame/Find Next " , NULL , " Find Next " , NULL , NULL , NULL } ,
{ " /Find Frame/Find Previous " , NULL , " Find Previous " , NULL , NULL , NULL } ,
{ " /Colorize Procedure " , NULL , " Colorize Procedure " , NULL , NULL , NULL } ,
{ " /Apply as Filter/Selected " , NULL , " Selected " , NULL , " Selected " , G_CALLBACK ( apply_as_selected_cb ) } ,
{ " /Apply as Filter/Not Selected " , NULL , " Not Selected " , NULL , " Not Selected " , G_CALLBACK ( apply_as_not_selected_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " and Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " and Selected " , G_CALLBACK ( apply_as_and_selected_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " or Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " or Selected " , G_CALLBACK ( apply_as_or_selected_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " and not Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " and not Selected " , G_CALLBACK ( apply_as_and_not_selected_cb ) } ,
{ " /Apply as Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " or not Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " or not Selected " , G_CALLBACK ( apply_as_or_not_selected_cb ) } ,
{ " /Prepare a Filter/Selected " , NULL , " Selected " , NULL , " selcted " , G_CALLBACK ( prep_as_selected_cb ) } ,
{ " /Prepare a Filter/Not Selected " , NULL , " Not Selected " , NULL , " Not Selected " , G_CALLBACK ( prep_as_not_selected_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " and Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " and Selected " , G_CALLBACK ( prep_as_and_selected_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " or Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " or Selected " , G_CALLBACK ( prep_as_or_selected_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " and not Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " and not Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " and not Selected " , G_CALLBACK ( prep_as_and_not_selected_cb ) } ,
{ " /Prepare a Filter/ " UTF8_HORIZONTAL_ELLIPSIS " or not Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " or not Selected " , NULL , UTF8_HORIZONTAL_ELLIPSIS " or not Selected " , G_CALLBACK ( prep_as_or_not_selected_cb ) } ,
{ " /Find Frame/Selected " , NULL , " Selected " , NULL , " Selected " , G_CALLBACK ( find_selected_cb ) } ,
{ " /Find Frame/Not Selected " , NULL , " Not Selected " , NULL , " Not Selected " , G_CALLBACK ( find_not_selected_cb ) } ,
{ " /Find Previous/Selected " , NULL , " Selected " , NULL , " Selected " , G_CALLBACK ( find_prev_selected_cb ) } ,
{ " /Find Previous/Not Selected " , NULL , " Not Selected " , NULL , " Not Selected " , G_CALLBACK ( find_prev_not_selected_cb ) } ,
{ " /Find Next/Selected " , NULL , " Selected " , NULL , " Selected " , G_CALLBACK ( find_next_selected_cb ) } ,
{ " /Find Next/Not Selected " , NULL , " Not Selected " , NULL , " Not Selected " , G_CALLBACK ( find_next_not_selected_cb ) } ,
{ " /Colorize Procedure/Colorize Host Traffic " , NULL , " Colorize Host Traffic " , NULL , " Colorize Host Traffic " , G_CALLBACK ( color_selected_cb ) } ,
2010-08-30 14:23:25 +00:00
} ;
2004-02-20 09:09:12 +00:00
static void
hostlist_create_popup_menu ( hostlist_table * hl )
{
2011-09-21 18:55:03 +00:00
GtkUIManager * ui_manager ;
GtkActionGroup * action_group ;
GError * error = NULL ;
action_group = gtk_action_group_new ( " HostlistTablePopupActionGroup " ) ;
gtk_action_group_add_actions ( action_group , /* the action group */
2013-03-11 06:47:34 +00:00
service_resp_t_popup_entries , /* an array of action descriptions */
G_N_ELEMENTS ( service_resp_t_popup_entries ) , /* the number of entries */
2011-09-21 18:55:03 +00:00
hl ) ; /* data to pass to the action callbacks */
ui_manager = gtk_ui_manager_new ( ) ;
gtk_ui_manager_insert_action_group ( ui_manager ,
action_group ,
0 ) ; /* the position at which the group will be inserted */
gtk_ui_manager_add_ui_from_string ( ui_manager , ui_desc_hostlist_table_popup , - 1 , & error ) ;
if ( error ! = NULL )
2011-07-11 18:35:36 +00:00
{
fprintf ( stderr , " Warning: building hostlist table filter popup failed: %s \n " ,
error - > message ) ;
g_error_free ( error ) ;
error = NULL ;
}
2011-09-21 18:55:03 +00:00
hl - > menu = gtk_ui_manager_get_widget ( ui_manager , " /HostlistTableFilterPopup " ) ;
g_signal_connect ( hl - > table , " button_press_event " , G_CALLBACK ( hostlist_show_popup_menu_cb ) , hl ) ;
2004-02-20 09:09:12 +00:00
}
2004-07-27 18:34:02 +00:00
/* Refresh the address fields of all entries in the list */
2004-06-03 21:46:27 +00:00
static void
2004-05-03 22:15:22 +00:00
draw_hostlist_table_addresses ( hostlist_table * hl )
{
2014-07-25 15:34:51 +00:00
guint idx ;
2009-10-09 09:01:04 +00:00
GtkListStore * store ;
2014-07-25 15:34:51 +00:00
GtkTreeIter iter ;
gboolean iter_valid ;
2009-10-09 09:01:04 +00:00
2010-08-30 16:10:01 +00:00
store = GTK_LIST_STORE ( gtk_tree_view_get_model ( hl - > table ) ) ;
2009-10-09 09:01:04 +00:00
g_object_ref ( store ) ;
gtk_tree_view_set_model ( GTK_TREE_VIEW ( hl - > table ) , NULL ) ;
2014-07-25 15:34:51 +00:00
iter_valid = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL ( store ) , & iter ) ;
while ( iter_valid ) {
hostlist_talker_t * host ;
2015-01-07 21:24:17 +00:00
char * addr_str , * port_str ;
2014-07-25 15:34:51 +00:00
2014-08-06 17:07:42 +00:00
gtk_tree_model_get ( GTK_TREE_MODEL ( store ) , & iter , ENDP_INDEX_COLUMN , & idx , - 1 ) ;
2014-07-25 15:34:51 +00:00
host = & g_array_index ( hl - > hash . conv_array , hostlist_talker_t , idx ) ;
2004-05-03 22:15:22 +00:00
2015-01-05 02:40:05 +00:00
addr_str = ( char * ) get_conversation_address ( NULL , & host - > myaddress , hl - > resolve_names ) ;
2015-01-07 21:24:17 +00:00
port_str = ( char * ) get_conversation_port ( NULL , host - > port , host - > ptype , hl - > resolve_names ) ;
2014-07-25 15:34:51 +00:00
gtk_list_store_set ( store , & iter ,
2015-01-05 02:40:05 +00:00
ENDP_COLUMN_ADDR , addr_str ,
2015-01-07 21:24:17 +00:00
ENDP_COLUMN_PORT , port_str ,
2009-10-09 09:01:04 +00:00
- 1 ) ;
2014-07-25 15:34:51 +00:00
iter_valid = gtk_tree_model_iter_next ( GTK_TREE_MODEL ( store ) , & iter ) ;
2015-01-05 02:40:05 +00:00
wmem_free ( NULL , addr_str ) ;
2015-01-07 21:24:17 +00:00
wmem_free ( NULL , port_str ) ;
2004-06-01 23:00:24 +00:00
}
2009-10-09 09:01:04 +00:00
gtk_tree_view_set_model ( GTK_TREE_VIEW ( hl - > table ) , GTK_TREE_MODEL ( store ) ) ;
g_object_unref ( store ) ;
2004-05-03 22:15:22 +00:00
}
2004-02-20 09:09:12 +00:00
2004-06-03 21:46:27 +00:00
static void
2004-02-20 09:09:12 +00:00
draw_hostlist_table_data ( hostlist_table * hl )
{
2014-07-25 15:34:51 +00:00
guint idx , new_idx ;
2004-06-01 23:00:24 +00:00
char title [ 256 ] ;
2009-10-09 09:01:04 +00:00
GtkListStore * store ;
2014-07-25 15:34:51 +00:00
GtkTreeIter iter ;
gboolean iter_valid ;
2009-10-09 09:01:04 +00:00
gboolean first = TRUE ;
2004-05-02 21:16:09 +00:00
if ( hl - > page_lb ) {
2014-07-25 15:34:51 +00:00
if ( hl - > hash . conv_array & & hl - > hash . conv_array - > len ) {
g_snprintf ( title , sizeof ( title ) , " %s: %u " , hl - > name , hl - > hash . conv_array - > len ) ;
2004-05-02 21:16:09 +00:00
} else {
2009-03-18 14:44:15 +00:00
g_snprintf ( title , sizeof ( title ) , " %s " , hl - > name ) ;
2004-05-02 21:16:09 +00:00
}
2004-06-01 23:00:24 +00:00
gtk_label_set_text ( GTK_LABEL ( hl - > page_lb ) , title ) ;
2014-07-25 15:34:51 +00:00
gtk_widget_set_sensitive ( hl - > page_lb , hl - > hash . conv_array & & hl - > hash . conv_array - > len ) ;
2008-02-17 00:35:55 +00:00
} else {
2014-07-25 15:34:51 +00:00
if ( hl - > hash . conv_array & & hl - > hash . conv_array - > len ) {
g_snprintf ( title , sizeof ( title ) , " %s Endpoints: %u " , hl - > name , hl - > hash . conv_array - > len ) ;
2008-02-17 00:35:55 +00:00
} else {
2009-03-18 14:44:15 +00:00
g_snprintf ( title , sizeof ( title ) , " %s Endpoints " , hl - > name ) ;
2008-02-17 00:35:55 +00:00
}
gtk_label_set_text ( GTK_LABEL ( hl - > name_lb ) , title ) ;
2004-05-02 21:16:09 +00:00
}
2004-02-20 09:09:12 +00:00
2010-08-30 16:10:01 +00:00
store = GTK_LIST_STORE ( gtk_tree_view_get_model ( hl - > table ) ) ;
2014-07-25 15:34:51 +00:00
iter_valid = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL ( store ) , & iter ) ;
new_idx = gtk_tree_model_iter_n_children ( GTK_TREE_MODEL ( store ) , NULL ) ;
while ( iter_valid | | ( hl - > hash . conv_array & & new_idx < hl - > hash . conv_array - > len ) ) {
hostlist_talker_t * host ;
if ( iter_valid ) {
2014-08-06 17:07:42 +00:00
gtk_tree_model_get ( GTK_TREE_MODEL ( store ) , & iter , ENDP_INDEX_COLUMN , & idx , - 1 ) ;
2014-07-25 15:34:51 +00:00
} else {
idx = new_idx ;
new_idx + + ;
}
2014-11-19 20:34:20 +00:00
if ( ! hl - > hash . conv_array ) { /* Already check on while loop but for avoid Clang Analyzer warnings */
continue ;
}
2014-07-25 15:34:51 +00:00
host = & g_array_index ( hl - > hash . conv_array , hostlist_talker_t , idx ) ;
2010-08-30 16:10:01 +00:00
2014-07-25 15:34:51 +00:00
if ( ! host - > modified ) {
iter_valid = gtk_tree_model_iter_next ( GTK_TREE_MODEL ( store ) , & iter ) ;
2009-10-09 09:01:04 +00:00
continue ;
2014-07-25 15:34:51 +00:00
}
2004-02-20 09:09:12 +00:00
2009-10-09 09:01:04 +00:00
if ( first ) {
g_object_ref ( store ) ;
gtk_tree_view_set_model ( GTK_TREE_VIEW ( hl - > table ) , NULL ) ;
2004-02-20 09:09:12 +00:00
2009-10-09 09:01:04 +00:00
first = FALSE ;
}
host - > modified = FALSE ;
2014-07-25 15:34:51 +00:00
if ( ! iter_valid ) {
2015-01-07 21:24:17 +00:00
char * addr_str , * port_str ;
2009-10-09 09:01:04 +00:00
# ifdef HAVE_GEOIP
2014-08-06 17:07:42 +00:00
char * geoip [ ENDP_NUM_GEOIP_COLUMNS ] ;
2009-10-09 09:01:04 +00:00
guint j ;
2013-03-21 02:29:09 +00:00
if ( ( host - > myaddress . type = = AT_IPv4 | | host - > myaddress . type = = AT_IPv6 ) & & ! hl - > geoip_visible ) {
2010-01-29 14:24:18 +00:00
GList * columns , * list ;
2009-10-09 09:01:04 +00:00
GtkTreeViewColumn * column ;
columns = gtk_tree_view_get_columns ( GTK_TREE_VIEW ( hl - > table ) ) ;
2009-10-09 09:06:22 +00:00
list = columns ;
2009-10-09 09:01:04 +00:00
while ( columns ) {
2010-01-29 14:24:18 +00:00
const gchar * title_p ;
2009-10-09 09:01:04 +00:00
gint id ;
2013-03-11 06:47:34 +00:00
column = ( GtkTreeViewColumn * ) columns - > data ;
2010-01-29 14:24:18 +00:00
title_p = gtk_tree_view_column_get_title ( column ) ;
2009-10-09 09:01:04 +00:00
id = gtk_tree_view_column_get_sort_column_id ( column ) ;
2014-08-06 17:07:42 +00:00
if ( title_p [ 0 ] ! = 0 & & id > = ENDP_COLUMN_GEOIP1 ) {
2009-10-09 09:01:04 +00:00
gtk_tree_view_column_set_visible ( column , TRUE ) ;
}
columns = g_list_next ( columns ) ;
}
2009-10-09 09:06:22 +00:00
g_list_free ( list ) ;
2009-10-09 09:01:04 +00:00
hl - > geoip_visible = TRUE ;
}
2004-02-20 09:09:12 +00:00
2009-10-09 09:01:04 +00:00
/* Filled in from the GeoIP config, if any */
2014-08-06 17:07:42 +00:00
for ( j = 0 ; j < ENDP_NUM_GEOIP_COLUMNS ; j + + ) {
2013-03-21 02:29:09 +00:00
if ( host - > myaddress . type = = AT_IPv4 & & j < geoip_db_num_dbs ( ) ) {
2013-11-29 18:59:06 +00:00
const guchar * name = geoip_db_lookup_ipv4 ( j , pntoh32 ( host - > myaddress . data ) , " - " ) ;
2012-05-30 06:44:37 +00:00
geoip [ j ] = g_strdup ( name ) ;
2013-03-21 02:29:09 +00:00
} else if ( host - > myaddress . type = = AT_IPv6 & & j < geoip_db_num_dbs ( ) ) {
2011-10-05 22:27:51 +00:00
const guchar * name ;
2013-03-21 02:29:09 +00:00
const struct e_in6_addr * addr = ( const struct e_in6_addr * ) host - > myaddress . data ;
2011-10-05 22:27:51 +00:00
name = geoip_db_lookup_ipv6 ( j , * addr , " - " ) ;
2012-05-30 06:44:37 +00:00
geoip [ j ] = g_strdup ( name ) ;
2009-10-09 09:01:04 +00:00
} else {
2012-05-30 06:44:37 +00:00
geoip [ j ] = NULL ;
2010-01-29 14:24:18 +00:00
}
2009-10-09 09:01:04 +00:00
}
# endif /* HAVE_GEOIP */
2004-02-20 09:09:12 +00:00
2015-01-05 02:40:05 +00:00
addr_str = ( char * ) get_conversation_address ( NULL , & host - > myaddress , hl - > resolve_names ) ;
2015-01-07 21:24:17 +00:00
port_str = ( char * ) get_conversation_port ( NULL , host - > port , host - > ptype , hl - > resolve_names ) ;
2014-07-25 15:34:51 +00:00
gtk_list_store_insert_with_values ( store , & iter , G_MAXINT ,
2015-01-05 02:40:05 +00:00
ENDP_COLUMN_ADDR , addr_str ,
2015-01-07 21:24:17 +00:00
ENDP_COLUMN_PORT , port_str ,
2014-08-06 17:07:42 +00:00
ENDP_COLUMN_PACKETS , host - > tx_frames + host - > rx_frames ,
ENDP_COLUMN_BYTES , host - > tx_bytes + host - > rx_bytes ,
ENDP_COLUMN_PKT_AB , host - > tx_frames ,
ENDP_COLUMN_BYTES_AB , host - > tx_bytes ,
ENDP_COLUMN_PKT_BA , host - > rx_frames ,
ENDP_COLUMN_BYTES_BA , host - > rx_bytes ,
2009-10-09 09:01:04 +00:00
# ifdef HAVE_GEOIP
2014-08-06 17:07:42 +00:00
ENDP_COLUMN_GEOIP1 , geoip [ 0 ] ,
ENDP_COLUMN_GEOIP2 , geoip [ 1 ] ,
ENDP_COLUMN_GEOIP3 , geoip [ 2 ] ,
ENDP_COLUMN_GEOIP4 , geoip [ 3 ] ,
ENDP_COLUMN_GEOIP5 , geoip [ 4 ] ,
ENDP_COLUMN_GEOIP6 , geoip [ 5 ] ,
ENDP_COLUMN_GEOIP7 , geoip [ 6 ] ,
ENDP_COLUMN_GEOIP8 , geoip [ 7 ] ,
ENDP_COLUMN_GEOIP9 , geoip [ 8 ] ,
ENDP_COLUMN_GEOIP10 , geoip [ 9 ] ,
ENDP_COLUMN_GEOIP11 , geoip [ 10 ] ,
ENDP_COLUMN_GEOIP12 , geoip [ 11 ] ,
ENDP_COLUMN_GEOIP13 , geoip [ 12 ] ,
2009-10-09 09:01:04 +00:00
# endif
2014-08-06 17:07:42 +00:00
ENDP_INDEX_COLUMN , idx ,
2009-10-09 09:01:04 +00:00
- 1 ) ;
2015-01-05 02:40:05 +00:00
wmem_free ( NULL , addr_str ) ;
2015-01-07 21:24:17 +00:00
wmem_free ( NULL , port_str ) ;
2012-05-30 06:44:37 +00:00
# ifdef HAVE_GEOIP
2014-08-06 17:07:42 +00:00
for ( j = 0 ; j < ENDP_NUM_GEOIP_COLUMNS ; j + + )
2012-05-30 06:44:37 +00:00
g_free ( geoip [ j ] ) ;
# endif /* HAVE_GEOIP */
2009-10-09 09:01:04 +00:00
}
else {
2014-07-25 15:34:51 +00:00
gtk_list_store_set ( store , & iter ,
2014-08-06 17:07:42 +00:00
ENDP_COLUMN_PACKETS , host - > tx_frames + host - > rx_frames ,
ENDP_COLUMN_BYTES , host - > tx_bytes + host - > rx_bytes ,
ENDP_COLUMN_PKT_AB , host - > tx_frames ,
ENDP_COLUMN_BYTES_AB , host - > tx_bytes ,
ENDP_COLUMN_PKT_BA , host - > rx_frames ,
ENDP_COLUMN_BYTES_BA , host - > rx_bytes ,
2009-10-09 09:01:04 +00:00
- 1 ) ;
}
2014-07-25 15:34:51 +00:00
iter_valid = gtk_tree_model_iter_next ( GTK_TREE_MODEL ( store ) , & iter ) ;
2004-06-01 23:00:24 +00:00
}
2009-10-09 09:01:04 +00:00
if ( ! first ) {
2014-07-25 15:34:51 +00:00
if ( ! hl - > fixed_col & & hl - > hash . conv_array & & hl - > hash . conv_array - > len > = 1000 ) {
2009-10-09 09:01:04 +00:00
/* finding the right size for a column isn't easy
* let it run in autosize a little ( 1000 is arbitrary )
* and then switch to fixed width .
*/
hl - > fixed_col = TRUE ;
switch_to_fixed_col ( hl - > table ) ;
}
2008-08-05 17:33:14 +00:00
2009-10-09 09:01:04 +00:00
gtk_tree_view_set_model ( GTK_TREE_VIEW ( hl - > table ) , GTK_TREE_MODEL ( store ) ) ;
g_object_unref ( store ) ;
}
2005-01-01 12:49:54 +00:00
}
static void
draw_hostlist_table_data_cb ( void * arg )
{
2014-07-25 15:34:51 +00:00
conv_hash_t * hash = ( conv_hash_t * ) arg ;
draw_hostlist_table_data ( ( hostlist_table * ) hash - > user_data ) ;
2004-02-20 09:09:12 +00:00
}
2009-10-09 09:01:04 +00:00
typedef struct {
2010-01-29 14:24:18 +00:00
int nb_cols ;
2014-08-06 17:07:42 +00:00
gint columns_order [ ENDP_NUM_COLUMNS + ENDP_NUM_GEOIP_COLUMNS ] ;
2010-01-29 14:24:18 +00:00
GString * CSV_str ;
2009-10-09 09:01:04 +00:00
hostlist_table * talkers ;
} csv_t ;
/* output in C locale */
static gboolean
csv_handle ( GtkTreeModel * model , GtkTreePath * path _U_ , GtkTreeIter * iter ,
gpointer data )
{
2010-01-29 14:24:18 +00:00
csv_t * csv = ( csv_t * ) data ;
gchar * table_text ;
int i ;
2013-01-04 05:22:43 +00:00
guint idx ;
2009-10-09 09:01:04 +00:00
guint64 value ;
2014-08-06 17:07:42 +00:00
gtk_tree_model_get ( model , iter , ENDP_INDEX_COLUMN , & idx , - 1 ) ;
2009-10-09 09:01:04 +00:00
2010-01-29 14:24:18 +00:00
for ( i = 0 ; i < csv - > nb_cols ; i + + ) {
if ( i )
g_string_append ( csv - > CSV_str , " , " ) ;
2009-10-09 09:01:04 +00:00
2010-01-29 14:24:18 +00:00
switch ( csv - > columns_order [ i ] ) {
2014-08-06 17:07:42 +00:00
case ENDP_COLUMN_ADDR :
case ENDP_COLUMN_PORT :
2010-01-29 14:24:18 +00:00
gtk_tree_model_get ( model , iter , csv - > columns_order [ i ] , & table_text , - 1 ) ;
if ( table_text ) {
2010-11-17 03:29:12 +00:00
g_string_append_printf ( csv - > CSV_str , " \" %s \" " , table_text ) ;
2010-01-29 14:24:18 +00:00
g_free ( table_text ) ;
2009-10-09 09:01:04 +00:00
}
2010-01-29 14:24:18 +00:00
break ;
2014-08-06 17:07:42 +00:00
case ENDP_COLUMN_PACKETS :
case ENDP_COLUMN_BYTES :
case ENDP_COLUMN_PKT_AB :
case ENDP_COLUMN_BYTES_AB :
case ENDP_COLUMN_PKT_BA :
case ENDP_COLUMN_BYTES_BA :
2010-01-29 14:24:18 +00:00
gtk_tree_model_get ( model , iter , csv - > columns_order [ i ] , & value , - 1 ) ;
2010-11-17 03:29:12 +00:00
g_string_append_printf ( csv - > CSV_str , " \" % " G_GINT64_MODIFIER " u \" " , value ) ;
2010-01-29 14:24:18 +00:00
break ;
default :
gtk_tree_model_get ( model , iter , csv - > columns_order [ i ] , & table_text , - 1 ) ;
if ( table_text ) {
2010-11-17 03:29:12 +00:00
g_string_append_printf ( csv - > CSV_str , " \" %s \" " , table_text ) ;
2010-01-29 14:24:18 +00:00
g_free ( table_text ) ;
}
break ;
}
}
g_string_append ( csv - > CSV_str , " \n " ) ;
2009-10-09 09:01:04 +00:00
2010-01-29 14:24:18 +00:00
return FALSE ;
2009-10-09 09:01:04 +00:00
}
2010-01-29 14:24:18 +00:00
2004-07-20 23:48:50 +00:00
static void
2007-11-30 14:36:18 +00:00
copy_as_csv_cb ( GtkWindow * copy_bt , gpointer data _U_ )
2004-07-20 23:48:50 +00:00
{
2010-01-29 14:24:18 +00:00
GtkClipboard * cb ;
char * savelocale ;
GList * columns , * list ;
2009-10-09 09:01:04 +00:00
GtkTreeViewColumn * column ;
2010-01-29 14:24:18 +00:00
GtkListStore * store ;
csv_t csv ;
2009-10-09 09:01:04 +00:00
2013-03-11 06:47:34 +00:00
csv . talkers = ( hostlist_table * ) g_object_get_data ( G_OBJECT ( copy_bt ) , HOST_PTR_KEY ) ;
2009-10-09 09:01:04 +00:00
if ( ! csv . talkers )
2009-03-18 14:44:15 +00:00
return ;
2014-07-28 22:04:00 +00:00
savelocale = g_strdup ( setlocale ( LC_NUMERIC , NULL ) ) ;
2009-10-09 09:01:04 +00:00
setlocale ( LC_NUMERIC , " C " ) ;
csv . CSV_str = g_string_new ( " " ) ;
columns = gtk_tree_view_get_columns ( GTK_TREE_VIEW ( csv . talkers - > table ) ) ;
2009-10-09 09:06:22 +00:00
list = columns ;
2009-10-09 09:01:04 +00:00
csv . nb_cols = 0 ;
while ( columns ) {
2013-03-11 06:47:34 +00:00
column = ( GtkTreeViewColumn * ) columns - > data ;
2009-10-09 09:01:04 +00:00
if ( gtk_tree_view_column_get_visible ( column ) ) {
csv . columns_order [ csv . nb_cols ] = gtk_tree_view_column_get_sort_column_id ( column ) ;
if ( csv . nb_cols )
g_string_append ( csv . CSV_str , " , " ) ;
2010-11-17 03:29:12 +00:00
g_string_append_printf ( csv . CSV_str , " \" %s \" " , gtk_tree_view_column_get_title ( column ) ) ;
2009-10-09 09:01:04 +00:00
csv . nb_cols + + ;
2009-03-18 14:44:15 +00:00
}
2009-10-09 09:01:04 +00:00
columns = g_list_next ( columns ) ;
2008-08-05 17:33:14 +00:00
}
2009-10-09 09:06:22 +00:00
g_list_free ( list ) ;
2009-10-09 09:01:04 +00:00
g_string_append ( csv . CSV_str , " \n " ) ;
store = GTK_LIST_STORE ( gtk_tree_view_get_model ( GTK_TREE_VIEW ( csv . talkers - > table ) ) ) ;
gtk_tree_model_foreach ( GTK_TREE_MODEL ( store ) , csv_handle , & csv ) ;
2004-07-20 23:48:50 +00:00
2009-03-18 14:44:15 +00:00
/* Now that we have the CSV data, copy it into the default clipboard */
2009-10-09 09:01:04 +00:00
cb = gtk_clipboard_get ( GDK_SELECTION_CLIPBOARD ) ; /* Get the default clipboard */
gtk_clipboard_set_text ( cb , csv . CSV_str - > str , - 1 ) ; /* Copy the CSV data into the clipboard */
setlocale ( LC_NUMERIC , savelocale ) ;
2014-07-28 22:04:00 +00:00
g_free ( savelocale ) ;
2009-10-09 09:01:04 +00:00
g_string_free ( csv . CSV_str , TRUE ) ; /* Free the memory */
2008-08-05 17:33:14 +00:00
}
2004-07-20 23:48:50 +00:00
2009-02-11 20:25:17 +00:00
# ifdef HAVE_GEOIP
2009-10-09 09:01:04 +00:00
2009-02-11 20:25:17 +00:00
static void
open_as_map_cb ( GtkWindow * copy_bt , gpointer data _U_ )
{
2014-09-05 18:17:17 +00:00
gchar * err_str ;
gchar * file_uri ;
gboolean uri_open ;
hostlist_table * talkers ;
gchar * map_filename ;
2009-03-18 14:44:15 +00:00
2012-04-05 22:10:53 +00:00
2014-09-05 18:17:17 +00:00
talkers = ( hostlist_table * ) g_object_get_data ( G_OBJECT ( copy_bt ) , HOST_PTR_KEY ) ;
if ( ! talkers ) {
2009-03-18 14:44:15 +00:00
return ;
2009-02-11 20:25:17 +00:00
}
2009-03-18 14:44:15 +00:00
2014-09-05 18:17:17 +00:00
map_filename = create_endpoint_geoip_map ( talkers - > hash . conv_array , & err_str ) ;
2009-03-18 14:44:15 +00:00
2014-09-05 18:17:17 +00:00
if ( ! map_filename ) {
simple_error_message_box ( " %s " , err_str ) ;
g_free ( err_str ) ;
2009-06-14 22:19:08 +00:00
return ;
}
2009-03-18 14:44:15 +00:00
/* open the webbrowser */
2012-09-18 21:51:22 +00:00
file_uri = g_filename_to_uri ( map_filename , NULL , NULL ) ;
2012-04-05 22:10:53 +00:00
g_free ( map_filename ) ;
2009-03-18 14:44:15 +00:00
uri_open = browser_open_url ( file_uri ) ;
if ( ! uri_open ) {
2009-07-02 17:20:27 +00:00
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " Couldn't open the file: \" %s \" in your web browser " , file_uri ) ;
2009-03-18 14:44:15 +00:00
g_free ( file_uri ) ;
return ;
2009-02-12 01:44:17 +00:00
}
2009-02-11 20:25:17 +00:00
g_free ( file_uri ) ;
}
# endif /* HAVE_GEOIP */
2014-08-06 17:07:42 +00:00
static gint default_col_size [ ENDP_NUM_COLUMNS + ENDP_NUM_GEOIP_COLUMNS ] ;
2009-10-09 09:01:04 +00:00
static void
init_default_col_size ( GtkWidget * view )
{
2014-08-06 17:07:42 +00:00
default_col_size [ ENDP_COLUMN_ADDR ] = get_default_col_size ( view , " 00000000.000000000000 " ) ;
default_col_size [ ENDP_COLUMN_PORT ] = get_default_col_size ( view , " 000000 " ) ;
default_col_size [ ENDP_COLUMN_PACKETS ] = get_default_col_size ( view , " 00 000 000 " ) ;
default_col_size [ ENDP_COLUMN_BYTES ] = get_default_col_size ( view , " 0 000 000 000 " ) ;
default_col_size [ ENDP_COLUMN_PKT_AB ] = default_col_size [ ENDP_COLUMN_PACKETS ] ;
default_col_size [ ENDP_COLUMN_PKT_BA ] = default_col_size [ ENDP_COLUMN_PACKETS ] ;
default_col_size [ ENDP_COLUMN_BYTES_AB ] = default_col_size [ ENDP_COLUMN_BYTES ] ;
default_col_size [ ENDP_COLUMN_BYTES_BA ] = default_col_size [ ENDP_COLUMN_BYTES ] ;
2009-10-09 09:01:04 +00:00
# ifdef HAVE_GEOIP
2014-08-06 17:07:42 +00:00
default_col_size [ ENDP_COLUMN_GEOIP1 ] = default_col_size [ ENDP_COLUMN_ADDR ] ;
default_col_size [ ENDP_COLUMN_GEOIP2 ] = default_col_size [ ENDP_COLUMN_GEOIP1 ] ;
default_col_size [ ENDP_COLUMN_GEOIP3 ] = default_col_size [ ENDP_COLUMN_GEOIP1 ] ;
default_col_size [ ENDP_COLUMN_GEOIP4 ] = default_col_size [ ENDP_COLUMN_GEOIP1 ] ;
default_col_size [ ENDP_COLUMN_GEOIP5 ] = default_col_size [ ENDP_COLUMN_GEOIP1 ] ;
default_col_size [ ENDP_COLUMN_GEOIP6 ] = default_col_size [ ENDP_COLUMN_GEOIP1 ] ;
default_col_size [ ENDP_COLUMN_GEOIP7 ] = default_col_size [ ENDP_COLUMN_GEOIP1 ] ;
default_col_size [ ENDP_COLUMN_GEOIP8 ] = default_col_size [ ENDP_COLUMN_GEOIP1 ] ;
default_col_size [ ENDP_COLUMN_GEOIP9 ] = default_col_size [ ENDP_COLUMN_GEOIP1 ] ;
default_col_size [ ENDP_COLUMN_GEOIP10 ] = default_col_size [ ENDP_COLUMN_GEOIP1 ] ;
default_col_size [ ENDP_COLUMN_GEOIP11 ] = default_col_size [ ENDP_COLUMN_GEOIP1 ] ;
default_col_size [ ENDP_COLUMN_GEOIP12 ] = default_col_size [ ENDP_COLUMN_GEOIP1 ] ;
default_col_size [ ENDP_COLUMN_GEOIP13 ] = default_col_size [ ENDP_COLUMN_GEOIP1 ] ;
2009-10-09 09:01:04 +00:00
# endif
}
2004-07-20 23:48:50 +00:00
2004-06-03 21:46:27 +00:00
static gboolean
2010-08-30 16:10:01 +00:00
init_hostlist_table_page ( hostlist_table * hosttable , GtkWidget * vbox , gboolean hide_ports , const char * table_name , const char * tap_name ,
2009-10-09 09:01:04 +00:00
const char * filter , tap_packet_cb packet_func )
2004-02-20 09:09:12 +00:00
{
2008-10-27 04:50:57 +00:00
guint i ;
2004-06-01 23:00:24 +00:00
GString * error_string ;
char title [ 256 ] ;
2009-10-09 09:01:04 +00:00
GtkListStore * store ;
GtkWidget * tree ;
GtkTreeViewColumn * column ;
GtkCellRenderer * renderer ;
GtkTreeSortable * sortable ;
GtkTreeSelection * sel ;
static gboolean col_size = FALSE ;
2004-07-20 23:48:50 +00:00
2008-10-27 04:50:57 +00:00
hosttable - > default_titles [ 0 ] = " Address " ;
hosttable - > default_titles [ 1 ] = " Port " ;
hosttable - > default_titles [ 2 ] = " Packets " ;
hosttable - > default_titles [ 3 ] = " Bytes " ;
hosttable - > default_titles [ 4 ] = " Tx Packets " ;
hosttable - > default_titles [ 5 ] = " Tx Bytes " ;
hosttable - > default_titles [ 6 ] = " Rx Packets " ;
hosttable - > default_titles [ 7 ] = " Rx Bytes " ;
# ifdef HAVE_GEOIP
2014-08-06 17:07:42 +00:00
for ( i = 0 ; i < ENDP_NUM_GEOIP_COLUMNS ; i + + ) {
2008-12-23 18:56:31 +00:00
if ( i < geoip_db_num_dbs ( ) ) {
2014-08-06 17:07:42 +00:00
hosttable - > default_titles [ ENDP_NUM_COLUMNS + i ] = geoip_db_name ( i ) ;
2008-10-27 04:50:57 +00:00
} else {
2014-08-06 17:07:42 +00:00
hosttable - > default_titles [ ENDP_NUM_COLUMNS + i ] = " " ;
2008-10-27 04:50:57 +00:00
}
}
# endif /* HAVE_GEOIP */
2008-04-25 19:42:27 +00:00
if ( strcmp ( table_name , " NCP " ) = = 0 ) {
2014-08-06 17:07:42 +00:00
hosttable - > default_titles [ 1 ] = endp_conn_title ;
2008-04-25 19:42:27 +00:00
}
2004-07-20 23:48:50 +00:00
hosttable - > has_ports = ! hide_ports ;
hosttable - > resolve_names = TRUE ;
2008-02-17 00:35:55 +00:00
hosttable - > page_lb = NULL ;
2009-10-09 09:01:04 +00:00
hosttable - > fixed_col = FALSE ;
hosttable - > geoip_visible = FALSE ;
2004-06-01 23:00:24 +00:00
2009-03-18 14:44:15 +00:00
g_snprintf ( title , sizeof ( title ) , " %s Endpoints " , table_name ) ;
2008-08-05 17:33:14 +00:00
hosttable - > name_lb = gtk_label_new ( title ) ;
2008-02-17 00:35:55 +00:00
gtk_box_pack_start ( GTK_BOX ( vbox ) , hosttable - > name_lb , FALSE , FALSE , 0 ) ;
2004-06-01 23:00:24 +00:00
2009-10-09 09:01:04 +00:00
/* Create the store */
2014-08-06 17:07:42 +00:00
store = gtk_list_store_new ( ENDP_INDEX_COLUMN + 1 , /* Total number of columns */
2009-10-09 09:01:04 +00:00
G_TYPE_STRING , /* Address */
G_TYPE_STRING , /* Port */
G_TYPE_UINT64 , /* Packets */
G_TYPE_UINT64 , /* Bytes */
G_TYPE_UINT64 , /* Packets A->B */
G_TYPE_UINT64 , /* Bytes A->B */
G_TYPE_UINT64 , /* Packets A<-B */
G_TYPE_UINT64 , /* Bytes A<-B */
# ifdef HAVE_GEOIP
G_TYPE_STRING ,
G_TYPE_STRING ,
G_TYPE_STRING ,
G_TYPE_STRING ,
G_TYPE_STRING ,
G_TYPE_STRING ,
G_TYPE_STRING ,
G_TYPE_STRING ,
G_TYPE_STRING ,
G_TYPE_STRING ,
G_TYPE_STRING ,
G_TYPE_STRING ,
G_TYPE_STRING ,
# endif
G_TYPE_UINT ) ; /* Index */
2004-06-01 23:00:24 +00:00
hosttable - > scrolled_window = scrolled_window_new ( NULL , NULL ) ;
gtk_box_pack_start ( GTK_BOX ( vbox ) , hosttable - > scrolled_window , TRUE , TRUE , 0 ) ;
2014-07-25 15:34:51 +00:00
2009-10-09 09:01:04 +00:00
tree = gtk_tree_view_new_with_model ( GTK_TREE_MODEL ( store ) ) ;
hosttable - > table = GTK_TREE_VIEW ( tree ) ;
sortable = GTK_TREE_SORTABLE ( store ) ;
g_object_unref ( G_OBJECT ( store ) ) ;
if ( ! col_size ) {
col_size = TRUE ;
init_default_col_size ( GTK_WIDGET ( hosttable - > table ) ) ;
2004-06-01 23:00:24 +00:00
}
2010-08-30 16:10:01 +00:00
2009-10-09 09:01:04 +00:00
g_object_set_data ( G_OBJECT ( store ) , HOST_PTR_KEY , hosttable ) ;
g_object_set_data ( G_OBJECT ( hosttable - > table ) , HOST_PTR_KEY , hosttable ) ;
2014-08-06 17:07:42 +00:00
for ( i = 0 ; i < ENDP_NUM_COLUMNS + ENDP_NUM_GEOIP_COLUMNS ; i + + ) {
2009-10-09 09:01:04 +00:00
renderer = gtk_cell_renderer_text_new ( ) ;
g_object_set ( renderer , " ypad " , 0 , NULL ) ;
switch ( i ) {
2014-08-06 17:07:42 +00:00
case ENDP_COLUMN_ADDR : /* address and port */
case ENDP_COLUMN_PORT :
2010-08-30 16:10:01 +00:00
column = gtk_tree_view_column_new_with_attributes ( hosttable - > default_titles [ i ] , renderer , " text " ,
2010-01-29 14:24:18 +00:00
i , NULL ) ;
2014-08-06 17:07:42 +00:00
if ( hide_ports & & i = = ENDP_COLUMN_PORT ) {
2010-01-29 14:24:18 +00:00
/* hide srcport and dstport if we don't use ports */
gtk_tree_view_column_set_visible ( column , FALSE ) ;
2009-10-09 09:01:04 +00:00
}
gtk_tree_sortable_set_sort_func ( sortable , i , hostlist_sort_column , GINT_TO_POINTER ( i ) , NULL ) ;
break ;
2014-08-06 17:07:42 +00:00
case ENDP_COLUMN_PACKETS : /* counts */
case ENDP_COLUMN_BYTES :
case ENDP_COLUMN_PKT_AB :
case ENDP_COLUMN_BYTES_AB :
case ENDP_COLUMN_PKT_BA :
case ENDP_COLUMN_BYTES_BA : /* right align numbers */
2009-10-09 09:01:04 +00:00
g_object_set ( G_OBJECT ( renderer ) , " xalign " , 1.0 , NULL ) ;
column = gtk_tree_view_column_new_with_attributes ( hosttable - > default_titles [ i ] , renderer , NULL ) ;
gtk_tree_view_column_set_cell_data_func ( column , renderer , u64_data_func , GINT_TO_POINTER ( i ) , NULL ) ;
break ;
default : /* GEOIP */
2010-08-30 16:10:01 +00:00
column = gtk_tree_view_column_new_with_attributes ( hosttable - > default_titles [ i ] , renderer , " text " ,
2010-01-29 14:24:18 +00:00
i , NULL ) ;
gtk_tree_view_column_set_visible ( column , FALSE ) ;
2010-02-28 20:56:21 +00:00
# ifdef HAVE_GEOIP
2014-08-06 17:07:42 +00:00
if ( i > = ENDP_NUM_COLUMNS & & i - ENDP_NUM_COLUMNS < geoip_db_num_dbs ( ) ) {
int goip_type = geoip_db_type ( i - ENDP_NUM_COLUMNS ) ;
2010-02-28 20:56:21 +00:00
if ( goip_type = = WS_LON_FAKE_EDITION | | goip_type = = WS_LAT_FAKE_EDITION ) {
g_object_set ( G_OBJECT ( renderer ) , " xalign " , 1.0 , NULL ) ;
gtk_tree_sortable_set_sort_func ( sortable , i , hostlist_sort_column , GINT_TO_POINTER ( i ) , NULL ) ;
}
}
# endif
2009-10-09 09:01:04 +00:00
break ;
}
gtk_tree_view_column_set_sort_column_id ( column , i ) ;
gtk_tree_view_column_set_resizable ( column , TRUE ) ;
gtk_tree_view_column_set_reorderable ( column , TRUE ) ;
gtk_tree_view_column_set_min_width ( column , 40 ) ;
gtk_tree_view_column_set_fixed_width ( column , default_col_size [ i ] ) ;
gtk_tree_view_append_column ( hosttable - > table , column ) ;
#if 0
/* make total frames be the default sort order, too slow */
if ( i = = PACKETS_COLUMN ) {
gtk_tree_view_column_clicked ( column ) ;
}
2010-08-30 16:10:01 +00:00
# endif
2007-11-30 14:36:18 +00:00
}
2004-05-03 22:15:22 +00:00
2004-06-01 23:00:24 +00:00
gtk_container_add ( GTK_CONTAINER ( hosttable - > scrolled_window ) , ( GtkWidget * ) hosttable - > table ) ;
2009-10-09 09:01:04 +00:00
gtk_tree_view_set_rules_hint ( hosttable - > table , TRUE ) ;
gtk_tree_view_set_headers_clickable ( hosttable - > table , TRUE ) ;
gtk_tree_view_set_reorderable ( hosttable - > table , TRUE ) ;
2004-02-20 09:09:12 +00:00
2014-07-25 15:34:51 +00:00
hosttable - > hash . conv_array = NULL ;
hosttable - > hash . hashtable = NULL ;
hosttable - > hash . user_data = hosttable ;
2009-10-09 09:01:04 +00:00
sel = gtk_tree_view_get_selection ( GTK_TREE_VIEW ( hosttable - > table ) ) ;
gtk_tree_selection_set_mode ( sel , GTK_SELECTION_SINGLE ) ;
2008-10-27 04:50:57 +00:00
2004-06-01 23:00:24 +00:00
/* create popup menu for this table */
hostlist_create_popup_menu ( hosttable ) ;
2004-02-20 09:09:12 +00:00
2004-06-01 23:00:24 +00:00
/* register the tap and rerun the taps on the packet list */
2014-07-25 15:34:51 +00:00
error_string = register_tap_listener ( tap_name , & hosttable - > hash , filter , 0 , reset_hostlist_table_data_cb , packet_func , draw_hostlist_table_data_cb ) ;
2004-06-01 23:00:24 +00:00
if ( error_string ) {
2008-10-31 09:53:56 +00:00
simple_dialog ( ESD_TYPE_ERROR , ESD_BTN_OK , " %s " , error_string - > str ) ;
2004-06-01 23:00:24 +00:00
g_string_free ( error_string , TRUE ) ;
g_free ( hosttable ) ;
return FALSE ;
}
2004-05-02 21:16:09 +00:00
return TRUE ;
}
void
2014-07-25 15:34:51 +00:00
init_hostlist_table ( struct register_ct * ct , const char * filter )
2004-05-02 21:16:09 +00:00
{
2004-06-01 23:00:24 +00:00
hostlist_table * hosttable ;
2012-06-03 22:03:05 +00:00
char * display_name ;
2004-06-01 23:00:24 +00:00
char title [ 256 ] ;
2004-05-02 21:16:09 +00:00
GtkWidget * vbox ;
GtkWidget * bbox ;
2005-01-20 23:17:23 +00:00
GtkWidget * close_bt , * help_bt ;
2004-05-02 21:16:09 +00:00
gboolean ret ;
2007-11-30 14:36:18 +00:00
GtkWidget * copy_bt ;
2009-02-11 20:25:17 +00:00
# ifdef HAVE_GEOIP
GtkWidget * map_bt ;
# endif
2013-03-21 18:39:16 +00:00
window_geometry_t tl_geom ;
2004-06-03 21:46:27 +00:00
2014-07-25 15:34:51 +00:00
hosttable = g_new0 ( hostlist_table , 1 ) ;
2004-05-02 21:16:09 +00:00
2014-07-25 15:34:51 +00:00
hosttable - > name = proto_get_protocol_short_name ( find_protocol_by_id ( get_conversation_proto_id ( ct ) ) ) ;
2008-02-17 00:35:55 +00:00
hosttable - > filter = filter ;
hosttable - > use_dfilter = FALSE ;
2012-06-03 22:03:05 +00:00
display_name = cf_get_display_name ( & cfile ) ;
2014-07-25 15:34:51 +00:00
g_snprintf ( title , sizeof ( title ) , " %s Endpoints: %s " , hosttable - > name , display_name ) ;
2012-06-03 22:03:05 +00:00
g_free ( display_name ) ;
2010-01-29 14:24:18 +00:00
hosttable - > win = dlg_window_new ( title ) ; /* transient_for top_level */
gtk_window_set_destroy_with_parent ( GTK_WINDOW ( hosttable - > win ) , TRUE ) ;
2008-08-05 17:33:14 +00:00
2013-03-21 18:39:16 +00:00
window_get_geometry ( top_level , & tl_geom ) ;
gtk_window_set_default_size ( GTK_WINDOW ( hosttable - > win ) , tl_geom . width * 8 / 10 , HL_DLG_HEIGHT ) ;
2004-05-02 21:16:09 +00:00
2013-03-21 18:39:16 +00:00
vbox = ws_gtk_box_new ( GTK_ORIENTATION_VERTICAL , DLG_LABEL_SPACING , FALSE ) ;
2004-06-01 23:00:24 +00:00
gtk_container_add ( GTK_CONTAINER ( hosttable - > win ) , vbox ) ;
2013-03-21 18:39:16 +00:00
gtk_container_set_border_width ( GTK_CONTAINER ( vbox ) , DLG_OUTER_MARGIN ) ;
2004-05-02 21:16:09 +00:00
2014-07-25 15:34:51 +00:00
ret = init_hostlist_table_page ( hosttable , vbox , get_conversation_hide_ports ( ct ) , hosttable - > name ,
proto_get_protocol_filter_name ( get_conversation_proto_id ( ct ) ) , filter , get_hostlist_packet_func ( ct ) ) ;
2004-05-02 21:16:09 +00:00
if ( ret = = FALSE ) {
2004-06-01 23:00:24 +00:00
g_free ( hosttable ) ;
2004-05-02 21:16:09 +00:00
return ;
}
2004-06-01 23:00:24 +00:00
/* Button row. */
2007-11-30 14:36:18 +00:00
/* XXX - maybe we want to have a "Copy as CSV" stock button here? */
/*copy_bt = gtk_button_new_with_label ("Copy content to clipboard as CSV");*/
2009-02-11 20:25:17 +00:00
# ifdef HAVE_GEOIP
2014-07-25 15:34:51 +00:00
if ( strstr ( hosttable - > name , " IPv4 " ) | | strstr ( hosttable - > name , " IPv6 " ) ) {
2009-02-12 01:44:17 +00:00
bbox = dlg_button_row_new ( GTK_STOCK_CLOSE , GTK_STOCK_COPY , WIRESHARK_STOCK_MAP , GTK_STOCK_HELP , NULL ) ;
} else {
bbox = dlg_button_row_new ( GTK_STOCK_CLOSE , GTK_STOCK_COPY , GTK_STOCK_HELP , NULL ) ;
}
2009-09-06 14:25:47 +00:00
# else
2008-06-21 13:36:31 +00:00
bbox = dlg_button_row_new ( GTK_STOCK_CLOSE , GTK_STOCK_COPY , GTK_STOCK_HELP , NULL ) ;
2009-02-11 20:25:17 +00:00
# endif
2008-04-07 03:46:01 +00:00
2004-06-01 23:00:24 +00:00
gtk_box_pack_end ( GTK_BOX ( vbox ) , bbox , FALSE , FALSE , 0 ) ;
2004-04-12 07:10:11 +00:00
2013-03-11 06:47:34 +00:00
close_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , GTK_STOCK_CLOSE ) ;
2004-05-23 23:24:07 +00:00
window_set_cancel_button ( hosttable - > win , close_bt , window_cancel_button_cb ) ;
2004-04-12 07:10:11 +00:00
2013-03-11 06:47:34 +00:00
copy_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , GTK_STOCK_COPY ) ;
2011-09-21 18:55:03 +00:00
gtk_widget_set_tooltip_text ( copy_bt , " Copy all statistical values of this page to the clipboard in CSV (Comma Separated Values) format. " ) ;
2008-04-11 16:26:32 +00:00
g_object_set_data ( G_OBJECT ( copy_bt ) , HOST_PTR_KEY , hosttable ) ;
2008-04-11 23:16:06 +00:00
g_signal_connect ( copy_bt , " clicked " , G_CALLBACK ( copy_as_csv_cb ) , NULL ) ;
2007-11-30 14:36:18 +00:00
2009-02-11 20:25:17 +00:00
# ifdef HAVE_GEOIP
2013-03-11 06:47:34 +00:00
map_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , WIRESHARK_STOCK_MAP ) ;
2009-02-12 01:44:17 +00:00
if ( map_bt ! = NULL ) {
2011-07-12 06:15:24 +00:00
gtk_widget_set_tooltip_text ( map_bt , " Show a map of the IP addresses (internet connection required). " ) ;
2009-02-12 01:44:17 +00:00
g_object_set_data ( G_OBJECT ( map_bt ) , HOST_PTR_KEY , hosttable ) ;
g_signal_connect ( map_bt , " clicked " , G_CALLBACK ( open_as_map_cb ) , NULL ) ;
}
2009-02-11 20:25:17 +00:00
# endif /* HAVE_GEOIP */
2009-09-06 14:25:47 +00:00
2013-03-11 06:47:34 +00:00
help_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , GTK_STOCK_HELP ) ;
2008-06-21 13:36:31 +00:00
g_signal_connect ( help_bt , " clicked " , G_CALLBACK ( topic_cb ) , ( gpointer ) HELP_STATS_ENDPOINTS_DIALOG ) ;
2005-01-20 23:17:23 +00:00
2008-04-11 23:16:06 +00:00
g_signal_connect ( hosttable - > win , " delete_event " , G_CALLBACK ( window_delete_event_cb ) , NULL ) ;
g_signal_connect ( hosttable - > win , " destroy " , G_CALLBACK ( hostlist_win_destroy_cb ) , hosttable ) ;
2004-04-12 07:10:11 +00:00
2004-06-01 23:00:24 +00:00
gtk_widget_show_all ( hosttable - > win ) ;
2004-05-23 23:24:07 +00:00
window_present ( hosttable - > win ) ;
2009-06-05 22:42:47 +00:00
cf_retap_packets ( & cfile ) ;
2011-02-07 18:41:38 +00:00
gdk_window_raise ( gtk_widget_get_window ( hosttable - > win ) ) ;
2004-02-20 09:09:12 +00:00
}
2004-05-02 21:16:09 +00:00
2007-11-30 14:36:18 +00:00
static void
2011-07-13 22:32:05 +00:00
ct_nb_switch_page_cb ( GtkNotebook * nb , gpointer * pg _U_ , guint page , gpointer data )
2007-11-30 14:36:18 +00:00
{
GtkWidget * copy_bt = ( GtkWidget * ) data ;
2013-03-11 06:47:34 +00:00
void * * pages = ( void * * ) g_object_get_data ( G_OBJECT ( nb ) , NB_PAGES_KEY ) ;
2007-11-30 14:36:18 +00:00
page + + ;
if ( pages & & page > 0 & & ( int ) page < = GPOINTER_TO_INT ( pages [ 0 ] ) & & copy_bt ) {
2008-04-11 16:26:32 +00:00
g_object_set_data ( G_OBJECT ( copy_bt ) , HOST_PTR_KEY , pages [ page ] ) ;
2007-11-30 14:36:18 +00:00
}
}
2009-02-11 20:25:17 +00:00
# ifdef HAVE_GEOIP
static void
2011-07-13 22:32:05 +00:00
ct_nb_map_switch_page_cb ( GtkNotebook * nb , gpointer * pg _U_ , guint page , gpointer data )
2009-02-11 20:25:17 +00:00
{
2010-10-11 08:29:25 +00:00
GtkWidget * map_bt = ( GtkWidget * ) data ;
2013-03-11 06:47:34 +00:00
void * * pages = ( void * * ) g_object_get_data ( G_OBJECT ( nb ) , NB_PAGES_KEY ) ;
2009-02-11 20:25:17 +00:00
page + + ;
2010-10-11 08:29:25 +00:00
if ( pages & & page > 0 & & ( int ) page < = GPOINTER_TO_INT ( pages [ 0 ] ) & & map_bt ) {
g_object_set_data ( G_OBJECT ( map_bt ) , HOST_PTR_KEY , pages [ page ] ) ;
2012-09-26 15:45:08 +00:00
if ( strstr ( ( ( hostlist_table * ) pages [ page ] ) - > name , " IPv4 " ) | |
strstr ( ( ( hostlist_table * ) pages [ page ] ) - > name , " IPv6 " ) ) {
2010-10-11 08:29:25 +00:00
gtk_widget_set_sensitive ( map_bt , TRUE ) ;
2009-02-12 01:44:17 +00:00
} else {
2010-10-11 08:29:25 +00:00
gtk_widget_set_sensitive ( map_bt , FALSE ) ;
2009-02-12 01:44:17 +00:00
}
2009-02-11 20:25:17 +00:00
}
}
# endif /* HAVE_GEOIP */
2007-11-30 14:36:18 +00:00
2004-05-02 21:16:09 +00:00
static void
hostlist_win_destroy_notebook_cb ( GtkWindow * win _U_ , gpointer data )
{
2013-03-11 06:47:34 +00:00
void * * pages = ( void * * ) data ;
2004-05-02 21:16:09 +00:00
int page ;
/* first "page" contains the number of pages */
for ( page = 1 ; page < = GPOINTER_TO_INT ( pages [ 0 ] ) ; page + + ) {
hostlist_win_destroy_cb ( NULL , pages [ page ] ) ;
}
2007-11-30 14:36:18 +00:00
g_free ( pages ) ;
2004-05-02 21:16:09 +00:00
}
2004-06-03 21:46:27 +00:00
static hostlist_table *
2014-07-25 15:34:51 +00:00
init_hostlist_notebook_page_cb ( register_ct_t * table , const char * filter )
2004-05-02 21:16:09 +00:00
{
gboolean ret ;
GtkWidget * page_vbox ;
2004-06-01 23:00:24 +00:00
hostlist_table * hosttable ;
2004-05-02 21:16:09 +00:00
2014-07-25 15:34:51 +00:00
hosttable = g_new0 ( hostlist_table , 1 ) ;
hosttable - > name = proto_get_protocol_short_name ( find_protocol_by_id ( get_conversation_proto_id ( table ) ) ) ;
2008-02-17 00:35:55 +00:00
hosttable - > filter = filter ;
hosttable - > use_dfilter = FALSE ;
2004-05-02 21:16:09 +00:00
2012-04-21 16:40:14 +00:00
page_vbox = ws_gtk_box_new ( GTK_ORIENTATION_VERTICAL , 6 , FALSE ) ;
2004-05-02 21:16:09 +00:00
hosttable - > win = page_vbox ;
2004-06-01 23:00:24 +00:00
gtk_container_set_border_width ( GTK_CONTAINER ( page_vbox ) , 6 ) ;
2004-05-02 21:16:09 +00:00
2014-07-25 15:34:51 +00:00
ret = init_hostlist_table_page ( hosttable , page_vbox , get_conversation_hide_ports ( table ) , hosttable - > name ,
proto_get_protocol_filter_name ( get_conversation_proto_id ( table ) ) , filter , get_hostlist_packet_func ( table ) ) ;
2004-05-02 21:16:09 +00:00
if ( ret = = FALSE ) {
2004-06-01 23:00:24 +00:00
g_free ( hosttable ) ;
2004-05-02 21:16:09 +00:00
return NULL ;
}
return hosttable ;
}
2004-05-03 22:15:22 +00:00
static void
hostlist_resolve_toggle_dest ( GtkWidget * widget , gpointer data )
{
int page ;
2013-03-11 06:47:34 +00:00
void * * pages = ( void * * ) data ;
2004-05-03 22:15:22 +00:00
gboolean resolve_names ;
2004-06-01 23:00:24 +00:00
hostlist_table * hosttable ;
2004-05-03 22:15:22 +00:00
resolve_names = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( widget ) ) ;
for ( page = 1 ; page < = GPOINTER_TO_INT ( pages [ 0 ] ) ; page + + ) {
2013-03-11 06:47:34 +00:00
hosttable = ( hostlist_table * ) pages [ page ] ;
2004-05-03 22:15:22 +00:00
hosttable - > resolve_names = resolve_names ;
draw_hostlist_table_addresses ( hosttable ) ;
}
}
2008-02-17 00:35:55 +00:00
static void
hostlist_filter_toggle_dest ( GtkWidget * widget , gpointer data )
{
int page ;
2013-03-11 06:47:34 +00:00
void * * pages = ( void * * ) data ;
2008-02-17 00:35:55 +00:00
gboolean use_filter ;
2008-10-13 18:16:35 +00:00
hostlist_table * hosttable = NULL ;
2008-02-17 00:35:55 +00:00
use_filter = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( widget ) ) ;
for ( page = 1 ; page < = GPOINTER_TO_INT ( pages [ 0 ] ) ; page + + ) {
2013-03-11 06:47:34 +00:00
hosttable = ( hostlist_table * ) pages [ page ] ;
2009-02-12 01:44:17 +00:00
hosttable - > use_dfilter = use_filter ;
2014-07-25 15:34:51 +00:00
reset_host_table_data ( hosttable ) ;
2008-02-17 00:35:55 +00:00
}
2009-06-05 22:42:47 +00:00
cf_retap_packets ( & cfile ) ;
2008-10-13 18:16:35 +00:00
if ( hosttable ) {
2011-02-07 18:41:38 +00:00
gdk_window_raise ( gtk_widget_get_window ( hosttable - > win ) ) ;
2008-10-13 18:16:35 +00:00
}
2008-02-17 00:35:55 +00:00
}
2014-07-25 15:34:51 +00:00
typedef struct _init_host_page_data {
int page ;
void * * pages ;
GtkWidget * nb ;
GtkWidget * win ;
} init_host_page_data ;
static void
init_host_page ( gpointer data , gpointer user_data )
{
register_ct_t * table = ( register_ct_t * ) data ;
init_host_page_data * host_page_data = ( init_host_page_data * ) user_data ;
hostlist_table * hosttable ;
GtkWidget * page_lb ;
hosttable = init_hostlist_notebook_page_cb ( table , NULL /*filter*/ ) ;
if ( hosttable ) {
g_object_set_data ( G_OBJECT ( hosttable - > win ) , HOST_PTR_KEY , hosttable ) ;
page_lb = gtk_label_new ( " " ) ;
gtk_notebook_append_page ( GTK_NOTEBOOK ( host_page_data - > nb ) , hosttable - > win , page_lb ) ;
hosttable - > win = host_page_data - > win ;
hosttable - > page_lb = page_lb ;
host_page_data - > pages [ + + host_page_data - > page ] = hosttable ;
}
}
2008-02-17 00:35:55 +00:00
2004-05-02 21:16:09 +00:00
void
init_hostlist_notebook_cb ( GtkWidget * w _U_ , gpointer d _U_ )
{
2012-06-03 22:03:05 +00:00
char * display_name ;
2004-06-01 23:00:24 +00:00
char title [ 256 ] ;
2004-05-02 21:16:09 +00:00
GtkWidget * vbox ;
2004-05-03 22:15:22 +00:00
GtkWidget * hbox ;
2004-05-02 21:16:09 +00:00
GtkWidget * bbox ;
2005-01-20 23:17:23 +00:00
GtkWidget * close_bt , * help_bt ;
2004-05-02 21:16:09 +00:00
GtkWidget * win ;
2004-05-03 22:15:22 +00:00
GtkWidget * resolv_cb ;
2008-02-17 00:35:55 +00:00
GtkWidget * filter_cb ;
2004-05-02 21:16:09 +00:00
void * * pages ;
GtkWidget * nb ;
2007-11-30 14:36:18 +00:00
GtkWidget * copy_bt ;
2009-02-11 20:25:17 +00:00
# ifdef HAVE_GEOIP
GtkWidget * map_bt ;
# endif
2013-03-21 18:39:16 +00:00
window_geometry_t tl_geom ;
2014-07-25 15:34:51 +00:00
init_host_page_data host_page_iter_data ;
2004-05-02 21:16:09 +00:00
2014-07-25 15:34:51 +00:00
pages = ( void * * ) g_malloc ( sizeof ( void * ) * ( conversation_table_get_num ( ) + 1 ) ) ;
2004-05-02 21:16:09 +00:00
2010-01-29 14:24:18 +00:00
win = dlg_window_new ( " hostlist " ) ; /* transient_for top_level */
gtk_window_set_destroy_with_parent ( GTK_WINDOW ( win ) , TRUE ) ;
2009-06-22 15:22:37 +00:00
2012-06-03 22:03:05 +00:00
display_name = cf_get_display_name ( & cfile ) ;
g_snprintf ( title , sizeof ( title ) , " Endpoints: %s " , display_name ) ;
g_free ( display_name ) ;
2004-05-23 23:24:07 +00:00
gtk_window_set_title ( GTK_WINDOW ( win ) , title ) ;
2004-05-02 21:16:09 +00:00
2013-03-21 18:39:16 +00:00
window_get_geometry ( top_level , & tl_geom ) ;
gtk_window_set_default_size ( GTK_WINDOW ( win ) , tl_geom . width * 8 / 10 , HL_DLG_HEIGHT ) ;
vbox = ws_gtk_box_new ( GTK_ORIENTATION_VERTICAL , DLG_LABEL_SPACING , FALSE ) ;
2004-06-01 23:00:24 +00:00
gtk_container_add ( GTK_CONTAINER ( win ) , vbox ) ;
2013-03-21 18:39:16 +00:00
gtk_container_set_border_width ( GTK_CONTAINER ( vbox ) , DLG_OUTER_MARGIN ) ;
2004-05-02 21:16:09 +00:00
nb = gtk_notebook_new ( ) ;
2012-07-19 11:47:00 +00:00
gtk_box_pack_start ( GTK_BOX ( vbox ) , nb , TRUE , TRUE , 0 ) ;
2008-04-11 16:26:32 +00:00
g_object_set_data ( G_OBJECT ( nb ) , NB_PAGES_KEY , pages ) ;
2004-05-02 21:16:09 +00:00
2014-07-25 15:34:51 +00:00
host_page_iter_data . page = 0 ;
host_page_iter_data . pages = pages ;
host_page_iter_data . nb = nb ;
host_page_iter_data . win = win ;
2004-05-02 21:16:09 +00:00
2014-07-25 15:34:51 +00:00
conversation_table_iterate_tables ( init_host_page , & host_page_iter_data ) ;
2004-05-02 21:16:09 +00:00
2014-07-25 15:34:51 +00:00
pages [ 0 ] = GINT_TO_POINTER ( host_page_iter_data . page ) ;
2013-03-21 18:39:16 +00:00
hbox = ws_gtk_box_new ( GTK_ORIENTATION_HORIZONTAL , DLG_UNRELATED_SPACING , FALSE ) ;
2004-06-01 23:00:24 +00:00
gtk_box_pack_start ( GTK_BOX ( vbox ) , hbox , FALSE , FALSE , 0 ) ;
2004-05-03 22:15:22 +00:00
2008-04-11 19:04:34 +00:00
resolv_cb = gtk_check_button_new_with_mnemonic ( " Name resolution " ) ;
2013-03-20 22:41:51 +00:00
gtk_box_pack_start ( GTK_BOX ( hbox ) , resolv_cb , FALSE , FALSE , 0 ) ;
2008-06-29 15:51:43 +00:00
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( resolv_cb ) , TRUE ) ;
2011-09-21 18:55:03 +00:00
gtk_widget_set_tooltip_text ( resolv_cb ,
" Show results of name resolutions rather than the \" raw \" values. Please note: The corresponding name resolution must be enabled. " ) ;
2004-05-03 22:15:22 +00:00
2008-04-11 23:16:06 +00:00
g_signal_connect ( resolv_cb , " toggled " , G_CALLBACK ( hostlist_resolve_toggle_dest ) , pages ) ;
2004-05-03 22:15:22 +00:00
2008-04-11 19:04:34 +00:00
filter_cb = gtk_check_button_new_with_mnemonic ( " Limit to display filter " ) ;
2013-03-21 18:39:16 +00:00
gtk_box_pack_start ( GTK_BOX ( hbox ) , filter_cb , FALSE , FALSE , 0 ) ;
2008-06-29 15:51:43 +00:00
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( filter_cb ) , FALSE ) ;
2011-09-21 18:55:03 +00:00
gtk_widget_set_tooltip_text ( filter_cb , " Limit the list to endpoints matching the current display filter. " ) ;
2008-02-17 00:35:55 +00:00
2008-04-11 23:16:06 +00:00
g_signal_connect ( filter_cb , " toggled " , G_CALLBACK ( hostlist_filter_toggle_dest ) , pages ) ;
2008-02-17 00:35:55 +00:00
2004-06-01 23:00:24 +00:00
/* Button row. */
2009-02-11 20:25:17 +00:00
# ifdef HAVE_GEOIP
bbox = dlg_button_row_new ( GTK_STOCK_CLOSE , GTK_STOCK_COPY , WIRESHARK_STOCK_MAP , GTK_STOCK_HELP , NULL ) ;
2009-09-06 14:25:47 +00:00
# else
2008-06-21 13:36:31 +00:00
bbox = dlg_button_row_new ( GTK_STOCK_CLOSE , GTK_STOCK_COPY , GTK_STOCK_HELP , NULL ) ;
2009-02-11 20:25:17 +00:00
# endif
2004-06-01 23:00:24 +00:00
gtk_box_pack_end ( GTK_BOX ( vbox ) , bbox , FALSE , FALSE , 0 ) ;
2004-05-02 21:16:09 +00:00
2014-07-25 15:34:51 +00:00
/* Close */
2013-03-11 06:47:34 +00:00
close_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , GTK_STOCK_CLOSE ) ;
2004-05-23 23:24:07 +00:00
window_set_cancel_button ( win , close_bt , window_cancel_button_cb ) ;
2004-05-02 21:16:09 +00:00
2014-07-25 15:34:51 +00:00
/* Copy */
2013-03-11 06:47:34 +00:00
copy_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , GTK_STOCK_COPY ) ;
2011-07-12 06:15:24 +00:00
gtk_widget_set_tooltip_text ( copy_bt , " Copy all statistical values of this page to the clipboard in CSV (Comma Separated Values) format. " ) ;
2008-04-11 23:16:06 +00:00
g_signal_connect ( copy_bt , " clicked " , G_CALLBACK ( copy_as_csv_cb ) , NULL ) ;
2014-07-25 15:34:51 +00:00
g_object_set_data ( G_OBJECT ( copy_bt ) , HOST_PTR_KEY , pages [ host_page_iter_data . page ] ) ;
2007-11-30 14:36:18 +00:00
2009-02-11 20:25:17 +00:00
# ifdef HAVE_GEOIP
2013-03-11 06:47:34 +00:00
map_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , WIRESHARK_STOCK_MAP ) ;
2011-07-12 06:15:24 +00:00
gtk_widget_set_tooltip_text ( map_bt , " Show a map of the IP addresses (internet connection required). " ) ;
2014-07-25 15:34:51 +00:00
g_object_set_data ( G_OBJECT ( map_bt ) , HOST_PTR_KEY , pages [ host_page_iter_data . page ] ) ;
2009-02-11 20:25:17 +00:00
g_signal_connect ( map_bt , " clicked " , G_CALLBACK ( open_as_map_cb ) , NULL ) ;
g_signal_connect ( nb , " switch-page " , G_CALLBACK ( ct_nb_map_switch_page_cb ) , map_bt ) ;
2009-02-12 01:44:17 +00:00
gtk_widget_set_sensitive ( map_bt , FALSE ) ;
2009-02-11 20:25:17 +00:00
# endif /* HAVE_GEOIP */
2009-09-06 14:25:47 +00:00
2008-04-11 23:16:06 +00:00
g_signal_connect ( nb , " switch-page " , G_CALLBACK ( ct_nb_switch_page_cb ) , copy_bt ) ;
2007-11-30 14:36:18 +00:00
2013-03-11 06:47:34 +00:00
help_bt = ( GtkWidget * ) g_object_get_data ( G_OBJECT ( bbox ) , GTK_STOCK_HELP ) ;
2008-06-21 13:36:31 +00:00
g_signal_connect ( help_bt , " clicked " , G_CALLBACK ( topic_cb ) , ( gpointer ) HELP_STATS_ENDPOINTS_DIALOG ) ;
2005-01-20 23:17:23 +00:00
2008-04-11 23:16:06 +00:00
g_signal_connect ( win , " delete_event " , G_CALLBACK ( window_delete_event_cb ) , NULL ) ;
g_signal_connect ( win , " destroy " , G_CALLBACK ( hostlist_win_destroy_notebook_cb ) , pages ) ;
2004-05-02 21:16:09 +00:00
2004-06-01 23:00:24 +00:00
gtk_widget_show_all ( win ) ;
2004-05-23 23:24:07 +00:00
window_present ( win ) ;
2009-06-05 22:42:47 +00:00
cf_retap_packets ( & cfile ) ;
2011-02-07 18:41:38 +00:00
gdk_window_raise ( gtk_widget_get_window ( win ) ) ;
2004-05-02 21:16:09 +00:00
}
2014-07-25 15:34:51 +00:00
void hostlist_endpoint_cb ( register_ct_t * table )
2009-10-09 09:01:04 +00:00
{
2014-07-25 15:34:51 +00:00
char cmd_str [ 50 ] ;
2009-10-09 09:01:04 +00:00
2014-12-31 04:26:19 +00:00
g_snprintf ( cmd_str , 50 , " %s,%s " , HOSTLIST_TAP_PREFIX , proto_get_protocol_filter_name ( get_conversation_proto_id ( table ) ) ) ;
2010-01-29 14:24:18 +00:00
2014-07-25 15:34:51 +00:00
dissector_hostlist_init ( cmd_str , table ) ;
2004-02-20 09:09:12 +00:00
}
2008-02-17 00:35:55 +00:00
/*
* Editor modelines
*
* Local Variables :
* c - basic - offset : 4
* tab - width : 8
* indent - tabs - mode : nil
* End :
*
2011-09-21 17:49:11 +00:00
* ex : set shiftwidth = 4 tabstop = 8 expandtab :
2008-02-17 00:35:55 +00:00
* : indentSize = 4 : tabSize = 8 : noTabs = true :
*/