aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/find_dlg.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2010-08-13 07:39:46 +0000
committerGuy Harris <guy@alum.mit.edu>2010-08-13 07:39:46 +0000
commit2a328da4ef66f37388b841803b2df149b4f68840 (patch)
tree7e0a10dd76d94da164a22f52bcec418f4cd13667 /gtk/find_dlg.c
parent432cfde19c7e1b93ccd4457eb27a501e55525b2b (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.c65
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);
}