diff options
author | Guy Harris <guy@alum.mit.edu> | 2010-08-13 07:39:46 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2010-08-13 07:39:46 +0000 |
commit | 2a328da4ef66f37388b841803b2df149b4f68840 (patch) | |
tree | 7e0a10dd76d94da164a22f52bcec418f4cd13667 /gtk/find_dlg.c | |
parent | 432cfde19c7e1b93ccd4457eb27a501e55525b2b (diff) |
Instead of using a Boolean for the search direction, use an enum, so
that you can tell from examination whether the search is forward or
backward.
Make the cf_find_packet routines take the direction as an explicit
argument, rather than, in the cases where you don't want to permanently
set the direction, saving the direction in the capture_file structure,
changing it, doing the search, and restoring the saved direction. Give
more information in the Doxygen comments for those routines.
Add a cf_find_packet_dfilter_string() routine, which takes a filter
string rather than a compiled filter as an argument. Replace
find_previous_next_frame_with_filter() with it.
Have cf_read_frame_r() and cf_read_frame() pop up the error dialog if
the read fails, rather than leaving that up to its caller. That lets us
eliminate cf_read_error_message(), by swallowing its code into
cf_read_frame_r(). Add Doxygen comments for cf_read_frame_r() and
cf_read_frame().
Don't have find_packet() read the packet before calling the callback
routine; leave that up to the callback routine.
Add cf_find_packet_marked(), to find the next or previous marked packet,
and cf_find_packet_time_reference(), to find the next or previous time
reference packet. Those routines do *not* need to read the packet data
to see if it matches; that lets them run much faster.
Clean up indentation.
svn path=/trunk/; revision=33791
Diffstat (limited to 'gtk/find_dlg.c')
-rw-r--r-- | gtk/find_dlg.c | 65 |
1 files changed, 18 insertions, 47 deletions
diff --git a/gtk/find_dlg.c b/gtk/find_dlg.c index c28e204bb2..39b6e110ab 100644 --- a/gtk/find_dlg.c +++ b/gtk/find_dlg.c @@ -310,12 +310,12 @@ find_frame_cb(GtkWidget *w _U_, gpointer d _U_) gtk_widget_show(direction_vb); up_rb = gtk_radio_button_new_with_mnemonic_from_widget(NULL, "_Up"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(up_rb), cfile.sbackward); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(up_rb), cfile.dir == SD_BACKWARD); gtk_box_pack_start(GTK_BOX(direction_vb), up_rb, FALSE, FALSE, 0); gtk_widget_show(up_rb); down_rb = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(up_rb), "_Down"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(down_rb), !cfile.sbackward); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(down_rb), cfile.dir == SD_FORWARD); gtk_box_pack_start(GTK_BOX(direction_vb), down_rb, FALSE, FALSE, 0); gtk_widget_show(down_rb); @@ -640,7 +640,7 @@ find_frame_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w) */ g_free(cfile.sfilter); cfile.sfilter = g_strdup(filter_text); - cfile.sbackward = GTK_TOGGLE_BUTTON (up_rb)->active; + cfile.dir = GTK_TOGGLE_BUTTON (up_rb)->active ? SD_BACKWARD : SD_FORWARD; cfile.hex = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (hex_rb)); cfile.string = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (string_rb)); cfile.scs_type = scs_type; @@ -649,7 +649,7 @@ find_frame_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w) cfile.summary_data = summary_data; if (cfile.hex) { - found_packet = cf_find_packet_data(&cfile, bytes, nbytes); + found_packet = cf_find_packet_data(&cfile, bytes, nbytes, cfile.dir); g_free(bytes); if (!found_packet) { /* We didn't find a packet */ @@ -661,7 +661,7 @@ find_frame_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w) if (cfile.decode_data) { /* The text in the protocol tree */ if(string){ - found_packet = cf_find_packet_protocol_tree(&cfile, string); + found_packet = cf_find_packet_protocol_tree(&cfile, string, cfile.dir); g_free(string); } if (!found_packet) { @@ -672,7 +672,7 @@ find_frame_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w) } else if (cfile.summary_data) { /* The text in the summary line */ if(string){ - found_packet = cf_find_packet_summary_line(&cfile, string); + found_packet = cf_find_packet_summary_line(&cfile, string, cfile.dir); g_free(string); } if (!found_packet) { @@ -686,7 +686,8 @@ find_frame_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w) } else { /* The raw packet data */ if(string){ - found_packet = cf_find_packet_data(&cfile, string, strlen(string)); + found_packet = cf_find_packet_data(&cfile, string, strlen(string), + cfile.dir); g_free(string); } if (!found_packet) { @@ -696,7 +697,7 @@ find_frame_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w) } } } else { - found_packet = cf_find_packet_dfilter(&cfile, sfcode); + found_packet = cf_find_packet_dfilter(&cfile, sfcode, cfile.dir); dfilter_free(sfcode); if (!found_packet) { /* We didn't find a packet */ @@ -723,7 +724,7 @@ find_frame_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_) } static void -find_previous_next(GtkWidget *w, gpointer d, gboolean sens) +find_previous_next(GtkWidget *w, gpointer d, search_direction dir) { guint8 *bytes; size_t nbytes; @@ -731,7 +732,7 @@ find_previous_next(GtkWidget *w, gpointer d, gboolean sens) dfilter_t *sfcode; if (cfile.sfilter) { - cfile.sbackward = sens; + cfile.dir = dir; if (cfile.hex) { bytes = convert_string_to_hex(cfile.sfilter, &nbytes); if (bytes == NULL) { @@ -741,20 +742,20 @@ find_previous_next(GtkWidget *w, gpointer d, gboolean sens) */ return; } - cf_find_packet_data(&cfile, bytes, nbytes); + cf_find_packet_data(&cfile, bytes, nbytes, dir); g_free(bytes); } else if (cfile.string) { string = convert_string_case(cfile.sfilter, cfile.case_type); /* OK, what are we searching? */ if (cfile.decode_data) { /* The text in the protocol tree */ - cf_find_packet_protocol_tree(&cfile, string); + cf_find_packet_protocol_tree(&cfile, string, dir); } else if (cfile.summary_data) { /* The text in the summary line */ - cf_find_packet_summary_line(&cfile, string); + cf_find_packet_summary_line(&cfile, string, dir); } else { /* The raw packet data */ - cf_find_packet_data(&cfile, string, strlen(string)); + cf_find_packet_data(&cfile, string, strlen(string), dir); } g_free(string); } else { @@ -772,7 +773,7 @@ find_previous_next(GtkWidget *w, gpointer d, gboolean sens) */ return; } - cf_find_packet_dfilter(&cfile, sfcode); + cf_find_packet_dfilter(&cfile, sfcode, dir); dfilter_free(sfcode); } } else @@ -782,41 +783,11 @@ find_previous_next(GtkWidget *w, gpointer d, gboolean sens) void find_next_cb(GtkWidget *w , gpointer d) { - find_previous_next(w, d, FALSE); + find_previous_next(w, d, SD_FORWARD); } void find_previous_cb(GtkWidget *w , gpointer d) { - find_previous_next(w, d, TRUE); -} - -/* this function jumps to the next packet matching the filter */ -void -find_previous_next_frame_with_filter(const char *filter, gboolean backwards) -{ - dfilter_t *sfcode; - gboolean sbackwards_saved; - - /* temporarily set the direction we want to search */ - sbackwards_saved=cfile.sbackward; - cfile.sbackward = backwards; - - if (!dfilter_compile(filter, &sfcode)) { - /* - * XXX - this shouldn't happen, as the filter string is machine - * generated - */ - return; - } - if (sfcode == NULL) { - /* - * XXX - this shouldn't happen, as the filter string is machine - * generated. - */ - return; - } - cf_find_packet_dfilter(&cfile, sfcode); - dfilter_free(sfcode); - cfile.sbackward=sbackwards_saved; + find_previous_next(w, d, SD_BACKWARD); } |