diff options
-rw-r--r-- | colors.c | 23 | ||||
-rw-r--r-- | dfilter-grammar.y | 24 | ||||
-rw-r--r-- | dfilter-int.h | 3 | ||||
-rw-r--r-- | dfilter.c | 137 | ||||
-rw-r--r-- | dfilter.h | 10 | ||||
-rw-r--r-- | file.c | 54 | ||||
-rw-r--r-- | file.h | 8 | ||||
-rw-r--r-- | gtk/file_dlg.c | 7 | ||||
-rw-r--r-- | gtk/main.c | 36 | ||||
-rw-r--r-- | summary.c | 6 |
10 files changed, 118 insertions, 190 deletions
@@ -1,7 +1,7 @@ /* colors.c * Definitions for color structures and routines * - * $Id: colors.c,v 1.12 1999/10/07 22:50:44 guy Exp $ + * $Id: colors.c,v 1.13 1999/10/11 06:39:02 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -116,9 +116,8 @@ colors_init(capture_file *cf) new_color_filter(cf->colors, default_colors[i].proto, default_colors[i].proto); color_filter(cf,i)->bg_color = color; - color_filter(cf,i)->c_colorfilter = dfilter_new(); - if(dfilter_compile((color_filter(cf,i)->c_colorfilter), - default_colors[i].proto) != 0){ + color_filter(cf,i)->c_colorfilter = dfilter_compile(default_colors[i].proto); + if(color_filter(cf,i)->c_colorfilter == NULL){ simple_dialog(ESD_TYPE_WARN, NULL, "Cannot compile default filter %s.\n%s", default_colors[i].proto, dfilter_error_msg); @@ -244,14 +243,11 @@ read_filters(capture_file *cf) name, filter, &bg_r, &bg_g, &bg_b, &fg_r, &fg_g, &fg_b) == 8){ /* we got a filter */ - /* test the dfilter before putting it into the list of color dfilters */ - /*if(dfilter_compile((color_filter(cf,i)->c_colorfilter),filter) != 0){*/ - temp_dfilter = dfilter_new(); - if(dfilter_compile(temp_dfilter, filter) != 0){ + temp_dfilter = dfilter_compile(filter); + if(temp_dfilter == NULL){ simple_dialog(ESD_TYPE_WARN, NULL, "Could not compile filter %s from saved filters because\n%s", name, dfilter_error_msg); - dfilter_destroy(temp_dfilter); continue; } new_color_filter(cf->colors, name, filter); @@ -493,7 +489,7 @@ color_ok_cb (GtkButton *button, /* colorize list */ - filter_packets(&cf); + colorize_packets(&cf); gtk_container_remove(GTK_CONTAINER(GTK_WIDGET(cf.colors->color_filters)->parent), cf.colors->color_filters); gtk_widget_destroy(dialog); @@ -507,7 +503,7 @@ color_apply_cb (GtkButton *button, { capture_file *cf; cf = (capture_file *)user_data; - filter_packets(cf); + colorize_packets(cf); } /* Exit dialog and do not process list */ @@ -593,12 +589,11 @@ colorize_ok_cb (GtkButton *button, - compiled_filter = dfilter_new(); + compiled_filter = dfilter_compile(filter_text); - if( dfilter_compile( compiled_filter, filter_text) != 0 ){ + if(compiled_filter == NULL ){ simple_dialog(ESD_TYPE_WARN, NULL, "Filter \"%s\" did not compile correctly.\n" " Please try again. Filter unchanged.\n%s\n", filter_name,dfilter_error_msg); - dfilter_destroy(compiled_filter); } else { if( color_filter(&cf, cf.colors->row_selected)->c_colorfilter != NULL) diff --git a/dfilter-grammar.y b/dfilter-grammar.y index 0677cb5e13..0f298bd2a0 100644 --- a/dfilter-grammar.y +++ b/dfilter-grammar.y @@ -3,7 +3,7 @@ /* dfilter-grammar.y * Parser for display filters * - * $Id: dfilter-grammar.y,v 1.21 1999/10/11 03:03:10 guy Exp $ + * $Id: dfilter-grammar.y,v 1.22 1999/10/11 06:39:04 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -94,14 +94,7 @@ static int ether_str_to_guint8_array(const char *s, guint8 *mac); /* This is the dfilter we're currently processing. It's how * dfilter_compile communicates with us. */ -dfilter *global_df = NULL;; - -/* list of GNodes allocated during parsing. If the parsing fails, we'll - * use this list to free all the GNodes. If the parsing succeeds, we'll - * just clear this list since dfilter_clear_filter() will take care of - * freeing the GNodes when they're no longer needed. - */ -GSList *gnode_slist = NULL; +dfilter *global_df = NULL; %} @@ -369,7 +362,6 @@ dfilter_mknode_join(GNode *n1, enum node_type ntype, int operand, GNode *n2) g_node_append(gnode_root, n1); g_node_append(gnode_root, n2); - gnode_slist = g_slist_append(gnode_slist, gnode_root); return gnode_root; } @@ -389,7 +381,6 @@ dfilter_mknode_unary(int operand, GNode *n2) gnode_root = g_node_new(node_root); g_node_append(gnode_root, n2); - gnode_slist = g_slist_append(gnode_slist, gnode_root); return gnode_root; } @@ -408,7 +399,6 @@ dfilter_mknode_numeric_variable(gint id) node->value.variable = id; gnode = g_node_new(node); - gnode_slist = g_slist_append(gnode_slist, gnode); return gnode; } @@ -426,7 +416,6 @@ dfilter_mknode_ether_variable(gint id) node->value.variable = id; gnode = g_node_new(node); - gnode_slist = g_slist_append(gnode_slist, gnode); return gnode; } @@ -444,7 +433,6 @@ dfilter_mknode_ipxnet_variable(gint id) node->value.variable = id; gnode = g_node_new(node); - gnode_slist = g_slist_append(gnode_slist, gnode); return gnode; } @@ -462,7 +450,6 @@ dfilter_mknode_ipv4_variable(gint id) node->value.variable = id; gnode = g_node_new(node); - gnode_slist = g_slist_append(gnode_slist, gnode); return gnode; } @@ -482,7 +469,6 @@ dfilter_mknode_bytes_variable(gint id, gint offset, guint length) node->length = length; gnode = g_node_new(node); - gnode_slist = g_slist_append(gnode_slist, gnode); return gnode; } @@ -500,7 +486,6 @@ dfilter_mknode_numeric_value(guint32 val) node->value.numeric = val; gnode = g_node_new(node); - gnode_slist = g_slist_append(gnode_slist, gnode); return gnode; } @@ -528,7 +513,6 @@ dfilter_mknode_ether_value(gchar *byte_string) } gnode = g_node_new(node); - gnode_slist = g_slist_append(gnode_slist, gnode); return gnode; } @@ -546,7 +530,6 @@ dfilter_mknode_ipxnet_value(guint32 ipx_net_val) node->value.numeric = ipx_net_val; gnode = g_node_new(node); - gnode_slist = g_slist_append(gnode_slist, gnode); return gnode; } @@ -570,7 +553,6 @@ dfilter_mknode_ipv4_value(char *host) node->value.numeric = htonl(node->value.numeric); gnode = g_node_new(node); - gnode_slist = g_slist_append(gnode_slist, gnode); return gnode; } @@ -590,7 +572,6 @@ dfilter_mknode_bytes_value(GByteArray *barray) node->length = barray->len; gnode = g_node_new(node); - gnode_slist = g_slist_append(gnode_slist, gnode); return gnode; } @@ -620,7 +601,6 @@ dfilter_mknode_existence(gint id) node->value.variable = id; gnode = g_node_new(node); - gnode_slist = g_slist_append(gnode_slist, gnode); return gnode; } diff --git a/dfilter-int.h b/dfilter-int.h index 213d9ccba6..e447701d2e 100644 --- a/dfilter-int.h +++ b/dfilter-int.h @@ -2,7 +2,7 @@ * Definitions for routines common to multiple modules in the display * filter code, but not used outside that code. * - * $Id: dfilter-int.h,v 1.7 1999/10/11 03:03:11 guy Exp $ + * $Id: dfilter-int.h,v 1.8 1999/10/11 06:39:04 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -34,7 +34,6 @@ void dfilter_scanner_cleanup(void); /* in dfilter-grammar.y */ extern dfilter *global_df; -extern GSList *gnode_slist; /* Here we provide interfaces to make our scanner act and look like lex */ int dfilter_lex(void); @@ -1,7 +1,7 @@ /* dfilter.c * Routines for display filters * - * $Id: dfilter.c,v 1.25 1999/10/11 03:03:10 guy Exp $ + * $Id: dfilter.c,v 1.26 1999/10/11 06:39:05 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -94,8 +94,6 @@ static GArray* get_values_from_ptree(dfilter_node *dnode, proto_tree *ptree, con static GArray* get_values_from_dfilter(dfilter_node *dnode, GNode *gnode); static gboolean check_existence_in_ptree(dfilter_node *dnode, proto_tree *ptree); static void clear_byte_array(gpointer data, gpointer user_data); -static void unlink_gnode_children(gpointer gnode_ptr, gpointer user_data); -static void destroy_gnode(gpointer gnode_ptr, gpointer user_data); /* this is not so pretty. I need my own g_array "function" (macro) to * retreive the pointer to the data stored in an array cell. I need this @@ -135,28 +133,28 @@ dfilter_cleanup(void) * display filter each time, without having to clear any memory used, since * dfilter_compile will take care of that automatically. * - * Returns 0 on success, non-zero on failure. + * Returns a pointer to a newly-allocated dfilter strucutre on success, + * NULL on failure. * If a failure, dfilter_error_msg points to an appropriate error message. * This error message is a global string, so another invocation of * dfilter_compile will clear it. If the caller needs is stored, he * needs to g_strdup it himself. */ -int -dfilter_compile(dfilter *df, gchar *dfilter_text) +dfilter* +dfilter_compile(gchar *dfilter_text) { + dfilter *df; int retval; g_assert(dfilter_text != NULL); - dfilter_clear_filter(df); - df->dftext = g_strdup(dfilter_text); + df = dfilter_new(); - /* tell the scanner to use this string as input */ - dfilter_scanner_text(df->dftext); + /* tell the scanner to use the filter string as input */ + dfilter_scanner_text(dfilter_text); /* Assign global variable so dfilter_parse knows which dfilter we're - * talking about. Reset the global error message. We don't have to set - * gnode_slist since it will always be NULL by the time we get here. + * talking about. Reset the global error message. */ global_df = df; dfilter_error_msg = NULL; @@ -183,42 +181,15 @@ dfilter_compile(dfilter *df, gchar *dfilter_text) } } - /* Clear the list of allocated nodes */ - if (gnode_slist) { - g_slist_free(gnode_slist); - gnode_slist = NULL; - } - - return retval; -} - -/* clear the current filter, w/o clearing memchunk area which is where we'll - * put new nodes in a future filter */ -void -dfilter_clear_filter(dfilter *df) -{ - if (!df) - return; - - if (df->dftext) - g_free(df->dftext); - - if (df->dftree != NULL) - g_node_destroy(df->dftree); - - /* clear the memory that the tree was using for nodes */ - if (df->node_memchunk) - g_mem_chunk_reset(df->node_memchunk); + /* Set global_df to NULL just to be tidy. */ + global_df = NULL; - /* clear the memory that the tree was using for byte arrays */ - if (df->list_of_byte_arrays) { - g_slist_foreach(df->list_of_byte_arrays, clear_byte_array, NULL); - g_slist_free(df->list_of_byte_arrays); + if (retval == 0) + return df; + else { + dfilter_destroy(df); + return NULL; } - - df->dftext = NULL; - df->dftree = NULL; - df->list_of_byte_arrays = NULL; } /* Allocates new dfilter, initializes values, and returns pointer to dfilter */ @@ -229,7 +200,6 @@ dfilter_new(void) df = g_malloc(sizeof(dfilter)); - df->dftext = NULL; df->dftree = NULL; df->node_memchunk = g_mem_chunk_new("df->node_memchunk", sizeof(dfilter_node), 20 * sizeof(dfilter_node), G_ALLOC_ONLY); @@ -245,7 +215,21 @@ dfilter_destroy(dfilter *df) if (!df) return; - dfilter_clear_filter(df); + if (df->dftree != NULL) + g_node_destroy(df->dftree); + + /* clear the memory that the tree was using for nodes */ + if (df->node_memchunk) + g_mem_chunk_reset(df->node_memchunk); + + /* clear the memory that the tree was using for byte arrays */ + if (df->list_of_byte_arrays) { + g_slist_foreach(df->list_of_byte_arrays, clear_byte_array, NULL); + g_slist_free(df->list_of_byte_arrays); + } + + df->dftree = NULL; + df->list_of_byte_arrays = NULL; /* Git rid of memchunk */ if (df->node_memchunk) @@ -267,64 +251,25 @@ clear_byte_array(gpointer data, gpointer user_data) void dfilter_error(char *s) { - /* The only data we have to worry about freeing is the - * data used by any GNodes that were allocated during - * parsing. The data in those Gnodes will be cleared - * later via df->node_memchunk. Use gnode_slist to - * clear the GNodes, and set global_df to NULL just - * to be tidy. - */ - global_df = NULL; - - /* I don't want to call g_node_destroy on each GNode ptr, - * since that function frees any children. That could - * mess me up later in the list if I try to free a GNode - * that has already been freed. So, I'll unlink the - * children firs,t then call g_node_destroy on each GNode ptr. - */ - if (!gnode_slist) - return; - - g_slist_foreach(gnode_slist, unlink_gnode_children, NULL); - g_slist_foreach(gnode_slist, destroy_gnode, NULL); - - /* notice we don't clear gnode_slist itself. dfilter_compile() - * will take care of that. - */ } /* Called when an error other than a parsing error occurs. */ void dfilter_fail(char *format, ...) { - va_list ap; + va_list ap; - /* If we've already reported one error, don't overwrite it with this - * one. */ - if (dfilter_error_msg != NULL) - return; - - va_start(ap, format); - vsnprintf(dfilter_error_msg_buf, sizeof dfilter_error_msg_buf, format, ap); - dfilter_error_msg = dfilter_error_msg_buf; - va_end(ap); -} - -static void -unlink_gnode_children(gpointer gnode_ptr, gpointer user_data) -{ - if (gnode_ptr) - g_node_unlink((GNode*) gnode_ptr); -} + /* If we've already reported one error, don't overwrite it with this + * one. */ + if (dfilter_error_msg != NULL) + return; -static void -destroy_gnode(gpointer gnode_ptr, gpointer user_data) -{ - if (gnode_ptr) - g_node_destroy((GNode*) gnode_ptr); + va_start(ap, format); + vsnprintf(dfilter_error_msg_buf, sizeof dfilter_error_msg_buf, format, ap); + dfilter_error_msg = dfilter_error_msg_buf; + va_end(ap); } - /* lookup an abbreviation in our token tree, returing the ID # * If the abbreviation doesn't exit, returns -1 */ int dfilter_lookup_token(char *abbrev) @@ -1,7 +1,7 @@ /* dfilter.h * Definitions for display filters * - * $Id: dfilter.h,v 1.10 1999/08/26 06:20:49 gram Exp $ + * $Id: dfilter.h,v 1.11 1999/10/11 06:39:04 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -26,7 +26,7 @@ #ifndef __DFILTER_H__ #define __DFILTER_H__ -#define DFILTER_CONTAINS_FILTER(x) ((x)->dftree) +#define DFILTER_CONTAINS_FILTER(x) ((x) != NULL && (x)->dftree) /* dfilter_error_msg is NULL if there was no error during dfilter_compile, * otherwise it points to a displayable error message. */ @@ -36,7 +36,6 @@ extern gchar dfilter_error_msg_buf[1024]; typedef struct { GNode *dftree; - gchar *dftext; /* space for dfilter_nodes */ GMemChunk *node_memchunk; @@ -59,12 +58,9 @@ dfilter* dfilter_new(void); void dfilter_destroy(dfilter *df); /* Compile display filter text */ -int dfilter_compile(dfilter* df, gchar* dfilter_text); +dfilter* dfilter_compile(gchar* dfilter_text); /* Apply compiled dfilter to a proto_tree */ gboolean dfilter_apply(dfilter *df, proto_tree *ptree, const guint8* pd); -/* Clears the current filter int the dfilter */ -void dfilter_clear_filter(dfilter *df); - #endif /* ! __DFILTER_H__ */ @@ -1,7 +1,7 @@ /* file.c * File I/O routines * - * $Id: file.c,v 1.104 1999/10/10 11:50:38 sharpe Exp $ + * $Id: file.c,v 1.105 1999/10/11 06:39:06 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -771,25 +771,57 @@ wtap_dispatch_cb(u_char *user, const struct wtap_pkthdr *phdr, int offset, } void -filter_packets(capture_file *cf) +filter_packets(capture_file *cf, gchar *dftext) { - frame_data *fd; - guint32 progbar_quantum; - guint32 progbar_nextstep; + dfilter *dfcode; - if (cf->dfilter == NULL) { - dfilter_clear_filter(cf->dfcode); - } - else { + if (dftext == NULL) { + /* The new filter is an empty filter (i.e., display all packets). */ + dfcode = NULL; + } else { /* - * Compile the filter. + * We have a filter; try to compile it. */ - if (dfilter_compile(cf->dfcode, cf->dfilter) != 0) { + dfcode = dfilter_compile(dftext); + if (dfcode == NULL) { simple_dialog(ESD_TYPE_WARN, NULL, dfilter_error_msg); return; } + + /* Was it empty? */ + if (dfcode->dftree == NULL) { + /* Yes - free the filter text and filter code, and set them to + NULL. */ + g_free(dftext); + dftext = NULL; + dfilter_destroy(dfcode); + dfcode = NULL; + } } + /* We have a valid filter. Replace the current filter. */ + if (cf->dfilter != NULL) + g_free(cf->dfilter); + cf->dfilter = dftext; + if (cf->dfcode != NULL) + dfilter_destroy(cf->dfcode); + cf->dfcode = dfcode; + + /* Now go through the list of packets we've read from the capture file, + applying the current display filter, and, if the packet passes the + display filter, add it to the summary display, appropriately + colored. (That's how we colorize the display - it's like filtering + the display, only we don't install a new filter.) */ + colorize_packets(cf); +} + +void +colorize_packets(capture_file *cf) +{ + frame_data *fd; + guint32 progbar_quantum; + guint32 progbar_nextstep; + gtk_progress_set_activity_mode(GTK_PROGRESS(prog_bar), FALSE); /* Freeze the packet list while we redo it, so we don't get any @@ -1,7 +1,7 @@ /* file.h * Definitions for file structures and routines * - * $Id: file.h,v 1.48 1999/10/02 20:23:53 guy Exp $ + * $Id: file.h,v 1.49 1999/10/11 06:39:03 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -104,9 +104,6 @@ typedef struct _capture_file { wtap *wth; /* Wiretap session */ dfilter *rfcode; /* Compiled read filter program */ gchar *dfilter; /* Display filter string */ -#if 0 - GNode *dfcode; /* Compiled display filter program */ -#endif colfilter *colors; /* Colors for colorizing packet window */ dfilter *dfcode; /* Compiled display filter program */ #ifdef HAVE_LIBPCAP @@ -130,8 +127,9 @@ int read_cap_file(capture_file *); int tail_cap_file(char *, capture_file *); /* size_t read_frame_header(capture_file *); */ +void filter_packets(capture_file *cf, gchar *dfilter); +void colorize_packets(capture_file *); int print_packets(capture_file *cf, print_args_t *print_args); -void filter_packets(capture_file *); void change_time_formats(capture_file *); void select_packet(capture_file *, int); void unselect_packet(capture_file *); diff --git a/gtk/file_dlg.c b/gtk/file_dlg.c index f7e8c7c3d4..571dd1c47f 100644 --- a/gtk/file_dlg.c +++ b/gtk/file_dlg.c @@ -1,7 +1,7 @@ /* file_dlg.c * Dialog boxes for handling files * - * $Id: file_dlg.c,v 1.8 1999/10/08 07:31:10 guy Exp $ + * $Id: file_dlg.c,v 1.9 1999/10/11 06:39:25 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -122,10 +122,9 @@ file_open_ok_cb(GtkWidget *w, GtkFileSelection *fs) { filter_te = gtk_object_get_data(GTK_OBJECT(w), E_RFILTER_TE_KEY); rfilter = gtk_entry_get_text(GTK_ENTRY(filter_te)); if (rfilter[0] != '\0') { - rfcode = dfilter_new(); - if (dfilter_compile(rfcode, rfilter) != 0) { + rfcode = dfilter_compile(rfilter); + if (rfcode != NULL) { simple_dialog(ESD_TYPE_WARN, NULL, dfilter_error_msg); - dfilter_destroy(rfcode); return; } } diff --git a/gtk/main.c b/gtk/main.c index 59a0a26f0f..14c219fdf4 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1,6 +1,6 @@ /* main.c * - * $Id: main.c,v 1.18 1999/10/09 14:05:04 deniel Exp $ + * $Id: main.c,v 1.19 1999/10/11 06:39:26 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -162,6 +162,7 @@ follow_stream_cb( GtkWidget *w, gpointer data ) { char filename1[128+1]; GtkWidget *streamwindow, *box, *text, *vscrollbar, *table; int tmp_fd; + gchar *follow_filter; if( pi.ipproto == 6 ) { /* we got tcp so we can follow */ @@ -191,10 +192,10 @@ follow_stream_cb( GtkWidget *w, gpointer data ) { /* 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 ); + follow_filter = build_follow_filter( &pi ); /* Run the display filter so it goes in effect. */ - filter_packets(&cf); + filter_packets(&cf, follow_filter); /* the data_out_file should now be full of the streams information */ fclose( data_out_file ); @@ -317,17 +318,12 @@ match_selected_cb(GtkWidget *w, gpointer data) } } - if( cf.dfilter != NULL ) { - /* get rid of this one */ - g_free( cf.dfilter ); - } /* create a new one and set the display filter entry accordingly */ - cf.dfilter = buf; if (filter_te) { - gtk_entry_set_text(GTK_ENTRY(filter_te), cf.dfilter); + gtk_entry_set_text(GTK_ENTRY(filter_te), buf); } /* Run the display filter so it goes in effect. */ - filter_packets(&cf); + filter_packets(&cf, buf); } /* Run the current display filter on the current packet set, and @@ -337,18 +333,7 @@ filter_activate_cb(GtkWidget *w, gpointer data) { char *s = gtk_entry_get_text(GTK_ENTRY(w)); - if (cf.dfilter) - g_free(cf.dfilter); - - /* simple check for empty string. XXX - need to modify to search for /^\s+$/ */ - if (s[0] == '\0' ) { - cf.dfilter = NULL; - } - else { - cf.dfilter = g_strdup(s); - } - - filter_packets(&cf); + filter_packets(&cf, g_strdup(s)); } /* What to do when a list item is selected/unselected */ @@ -522,7 +507,7 @@ main(int argc, char *argv[]) cf.fh = NULL; cf.rfcode = NULL; cf.dfilter = NULL; - cf.dfcode = dfilter_new(); + cf.dfcode = NULL; #ifdef HAVE_LIBPCAP cf.cfilter = NULL; #endif @@ -876,10 +861,9 @@ main(int argc, char *argv[]) up on top of us. */ if (cf_name) { if (rfilter != NULL) { - rfcode = dfilter_new(); - if (dfilter_compile(rfcode, rfilter) != 0) { + rfcode = dfilter_compile(rfilter); + if (rfcode == NULL) { simple_dialog(ESD_TYPE_WARN, NULL, dfilter_error_msg); - dfilter_destroy(rfcode); rfilter_parse_failed = TRUE; } } @@ -1,7 +1,7 @@ /* summary.c * Routines for capture file summary window * - * $Id: summary.c,v 1.12 1999/09/09 02:42:26 gram Exp $ + * $Id: summary.c,v 1.13 1999/10/11 06:39:01 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -249,8 +249,8 @@ traffic_bytes/seconds); add_string_to_box(string_buff, capture_box); /* Display filter */ - if (DFILTER_CONTAINS_FILTER(cf.dfcode)) { - snprintf(string_buff, SUM_STR_MAX, "Display filter: %s", cf.dfcode->dftext); + if (cf.dfilter) { + snprintf(string_buff, SUM_STR_MAX, "Display filter: %s", cf.dfilter); } else { sprintf(string_buff, "Display filter: none"); } |