aboutsummaryrefslogtreecommitdiffstats
path: root/ethereal.c
diff options
context:
space:
mode:
authorGilbert Ramirez <gram@alumni.rice.edu>1999-08-20 19:43:10 +0000
committerGilbert Ramirez <gram@alumni.rice.edu>1999-08-20 19:43:10 +0000
commitfa65ee1d1ed6894954c2782f76402b9a37c7d44e (patch)
tree088dc4bdcc3a2ba9ce4479a0447cb6bfe0dbb155 /ethereal.c
parentb66b74efe71e80d10ecce675ee5a055529f1b5de (diff)
Cleaned up the two routines besides the main display filter mechanism
that use display filters, TCP follow and Match Selected. In Match Selected, I made it put the display filter that it creates in the text entry widget. The code was already there, but it didn't work because code was missing in the GUI initialization routine that runs when Ethereal starts. The text entry widget pointer was not being passed to the Match Selected menu item. In TCP follow, I made it _not_ put the display filter that it creates in the text entry widget. I find it annoying that a really long display filter is left in the widget, and others have voiced their opinion on this too. In addition, after applying the display filter and retreiving the TCP data, the display filter (if any) that the user had in place _before_ running TCP follow is put back and the packet list is set back to the way it was before TCP follow is run. I think this is more expected. The drawback is that display filtering is run twice, once to retreive the TCP data and once to reset the display. svn path=/trunk/; revision=529
Diffstat (limited to 'ethereal.c')
-rw-r--r--ethereal.c63
1 files changed, 24 insertions, 39 deletions
diff --git a/ethereal.c b/ethereal.c
index 6f409b710d..ce380d8ce9 100644
--- a/ethereal.c
+++ b/ethereal.c
@@ -1,6 +1,6 @@
/* ethereal.c
*
- * $Id: ethereal.c,v 1.97 1999/08/20 04:41:31 guy Exp $
+ * $Id: ethereal.c,v 1.98 1999/08/20 19:43:10 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -193,11 +193,8 @@ void
follow_stream_cb( GtkWidget *w, gpointer data ) {
char filename1[128+1];
GtkWidget *streamwindow, *box, *text, *vscrollbar, *table;
- GtkWidget *filter_te = NULL;
int tmp_fd;
-
- if (w)
- filter_te = gtk_object_get_data(GTK_OBJECT(w), E_DFILTER_TE_KEY);
+ gchar *old_dfilter;
if( pi.ipproto == 6 ) {
/* we got tcp so we can follow */
@@ -224,23 +221,20 @@ follow_stream_cb( GtkWidget *w, gpointer data ) {
return;
}
- /* Delete any display filter we currently have. */
- if( cf.dfilter != NULL ) {
- /* get rid of this one */
- g_free( cf.dfilter );
- cf.dfilter = NULL;
- }
+ /* Save any display filter we currently have. */
+ old_dfilter = cf.dfilter;
/* Create a new filter that matches all packets in the TCP stream,
and set the display filter entry accordingly */
reset_tcp_reassembly();
cf.dfilter = build_follow_filter( &pi );
- if (filter_te)
- gtk_entry_set_text(GTK_ENTRY(filter_te), cf.dfilter);
+
/* Run the display filter so it goes in effect. */
filter_packets(&cf);
+
/* the data_out_file should now be full of the streams information */
fclose( data_out_file );
+
/* the filename1 file now has all the text that was in the session */
streamwindow = gtk_window_new( GTK_WINDOW_TOPLEVEL);
gtk_widget_set_name( streamwindow, "TCP stream window" );
@@ -257,15 +251,18 @@ follow_stream_cb( GtkWidget *w, gpointer data ) {
}
gtk_widget_set_usize( GTK_WIDGET(streamwindow), DEF_WIDTH, DEF_HEIGHT );
gtk_container_border_width( GTK_CONTAINER(streamwindow), 2 );
+
/* setup the container */
box = gtk_vbox_new( FALSE, 0 );
gtk_container_add( GTK_CONTAINER(streamwindow), box );
gtk_widget_show( box );
+
/* set up the table we attach to */
table = gtk_table_new( 1, 2, FALSE );
gtk_table_set_col_spacing( GTK_TABLE(table), 0, 2);
gtk_box_pack_start( GTK_BOX(box), table, TRUE, TRUE, 0 );
gtk_widget_show( table );
+
/* create a text box */
text = gtk_text_new( NULL, NULL );
gtk_text_set_editable( GTK_TEXT(text), FALSE);
@@ -273,12 +270,14 @@ follow_stream_cb( GtkWidget *w, gpointer data ) {
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0 );
gtk_widget_show(text);
+
/* create the scrollbar */
vscrollbar = gtk_vscrollbar_new( GTK_TEXT(text)->vadj );
gtk_table_attach( GTK_TABLE(table), vscrollbar, 1, 2, 0, 1,
GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0 );
gtk_widget_show( vscrollbar );
gtk_widget_realize( text );
+
/* stop the updates while we fill the text box */
gtk_text_freeze( GTK_TEXT(text) );
data_out_file = fopen( filename1, "r" );
@@ -307,8 +306,9 @@ follow_stream_cb( GtkWidget *w, gpointer data ) {
gtk_widget_show( streamwindow );
if( cf.dfilter != NULL ) {
g_free( cf.dfilter );
- cf.dfilter = NULL;
}
+ cf.dfilter = old_dfilter;
+ filter_packets(&cf);
} else {
simple_dialog(ESD_TYPE_WARN, NULL,
"Error following stream. Please make\n"
@@ -326,7 +326,6 @@ match_selected_cb(GtkWidget *w, gpointer data)
int i;
guint8 *c;
- if (w)
filter_te = gtk_object_get_data(GTK_OBJECT(w), E_DFILTER_TE_KEY);
if (tree_selected_start<0) {
@@ -337,26 +336,12 @@ match_selected_cb(GtkWidget *w, gpointer data)
return;
}
-/* sprintf(buf, "("); ptr = buf+strlen(buf);
- for (i=0, c=cf.pd+tree_selected_start; i+4<tree_selected_len; i+=4, c+=4) {
- sprintf(ptr, "(frame[%d : 4]=0x%02X%02X%02X%02X) and ",
- tree_selected_start+i,
- *c,
- *(c+1),
- *(c+2),
- *(c+3));
- ptr = buf+strlen(buf);
- }*/
-
- i = 0;
c = cf.pd + tree_selected_start;
ptr = buf;
- sprintf(ptr, "frame[%d : %d] == ",
- tree_selected_start+i,
- tree_selected_len - i);
+ sprintf(ptr, "frame[%d : %d] == ", tree_selected_start, tree_selected_len);
ptr = buf+strlen(buf);
- /*for (;i<tree_selected_len; i++) {*/
+
if (tree_selected_len == 1) {
sprintf(ptr, "0x%02x", *c++);
}
@@ -372,22 +357,18 @@ match_selected_cb(GtkWidget *w, gpointer data)
}
}
- /*sprintf(ptr, "))");*/
if( cf.dfilter != NULL ) {
/* get rid of this one */
g_free( cf.dfilter );
- cf.dfilter = NULL;
}
/* create a new one and set the display filter entry accordingly */
cf.dfilter = buf;
- if (filter_te)
+ if (filter_te) {
gtk_entry_set_text(GTK_ENTRY(filter_te), cf.dfilter);
+ printf("set text to %s\n", cf.dfilter);
+ }
/* Run the display filter so it goes in effect. */
filter_packets(&cf);
- if( cf.dfilter != NULL ) {
- g_free( cf.dfilter );
- cf.dfilter = NULL;
- }
}
/* Open a file */
@@ -1436,10 +1417,14 @@ main(int argc, char *argv[])
GTK_SIGNAL_FUNC(filter_activate_cb), (gpointer) NULL);
gtk_widget_show(filter_te);
+ /* Sets the text entry widget pointer as the E_DILTER_TE_KEY data
+ * of any widget that ends up calling a callback which needs
+ * that text entry pointer */
set_menu_object_data("/File/Open...", E_DFILTER_TE_KEY, filter_te);
set_menu_object_data("/File/Reload", E_DFILTER_TE_KEY, filter_te);
- set_menu_object_data("/Tools/Follow TCP Stream", E_DFILTER_TE_KEY,
+ set_menu_object_data("/Display/Match Selected", E_DFILTER_TE_KEY,
filter_te);
+
info_bar = gtk_statusbar_new();
main_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(info_bar), "main");
file_ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(info_bar), "file");