forked from osmocom/wireshark
From Greg Morris: add support for case-insensitive full-text searches.
svn path=/trunk/; revision=8132
This commit is contained in:
parent
a6e6a7a364
commit
d2e2149ff9
17
file.c
17
file.c
|
@ -1,7 +1,7 @@
|
|||
/* file.c
|
||||
* File I/O routines
|
||||
*
|
||||
* $Id: file.c,v 1.300 2003/07/22 23:08:47 guy Exp $
|
||||
* $Id: file.c,v 1.301 2003/08/05 00:01:26 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -1456,7 +1456,7 @@ get_int_value(char char_val)
|
|||
}
|
||||
|
||||
gboolean
|
||||
find_ascii(capture_file *cf, char *ascii_text, gboolean ascii_search, char *ftype)
|
||||
find_ascii(capture_file *cf, char *ascii_text, gboolean ascii_search, char *ftype, gboolean case_type)
|
||||
{
|
||||
frame_data *start_fd;
|
||||
frame_data *fdata;
|
||||
|
@ -1477,6 +1477,7 @@ find_ascii(capture_file *cf, char *ascii_text, gboolean ascii_search, char *ftyp
|
|||
guint8 hex_val=0;
|
||||
char char_val;
|
||||
guint8 num1, num2;
|
||||
gchar *uppercase;
|
||||
|
||||
start_fd = cf->current_frame;
|
||||
if (start_fd != NULL) {
|
||||
|
@ -1486,6 +1487,10 @@ find_ascii(capture_file *cf, char *ascii_text, gboolean ascii_search, char *ftyp
|
|||
count = 0;
|
||||
fdata = start_fd;
|
||||
|
||||
if (case_type && ascii_search) {
|
||||
g_strup(ascii_text);
|
||||
}
|
||||
|
||||
cf->progbar_nextstep = 0;
|
||||
/* When we reach the value that triggers a progress bar update,
|
||||
bump that value by this amount. */
|
||||
|
@ -1554,7 +1559,13 @@ find_ascii(capture_file *cf, char *ascii_text, gboolean ascii_search, char *ftyp
|
|||
frame_matched = FALSE;
|
||||
buf_len = fdata->pkt_len;
|
||||
for (i=0;i<buf_len;i++) {
|
||||
c_char = cf->pd[i];
|
||||
if (ascii_search && case_type) {
|
||||
uppercase = &cf->pd[i];
|
||||
g_strup(uppercase);
|
||||
c_char = uppercase[0];
|
||||
}
|
||||
else
|
||||
c_char = cf->pd[i];
|
||||
/* Check to see if this is an String or Hex search */
|
||||
if (ascii_search) {
|
||||
/* Now check the String Type */
|
||||
|
|
4
file.h
4
file.h
|
@ -1,7 +1,7 @@
|
|||
/* file.h
|
||||
* Definitions for file structures and routines
|
||||
*
|
||||
* $Id: file.h,v 1.101 2003/07/25 17:57:06 guy Exp $
|
||||
* $Id: file.h,v 1.102 2003/08/05 00:01:27 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -57,7 +57,7 @@ int print_packets(capture_file *cf, print_args_t *print_args);
|
|||
void change_time_formats(capture_file *);
|
||||
gboolean find_packet(capture_file *cf, dfilter_t *sfcode);
|
||||
guint8 get_int_value(char char_val);
|
||||
gboolean find_ascii(capture_file *cf, char *ascii_text, gboolean ascii_search, char *ftype);
|
||||
gboolean find_ascii(capture_file *cf, char *ascii_text, gboolean ascii_search, char *ftype, gboolean case_type);
|
||||
|
||||
gboolean goto_frame(capture_file *cf, guint fnumber);
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* find_dlg.c
|
||||
* Routines for "find frame" window
|
||||
*
|
||||
* $Id: find_dlg.c,v 1.29 2003/07/22 23:08:48 guy Exp $
|
||||
* $Id: find_dlg.c,v 1.30 2003/08/05 00:01:27 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
|
@ -49,6 +49,9 @@
|
|||
#define E_FIND_ASCIIDATA_KEY "find_ascii"
|
||||
#define E_FIND_FILTERDATA_KEY "find_filter"
|
||||
#define E_FIND_STRINGTYPE_KEY "find_string_type"
|
||||
#define E_CASE_SEARCH_KEY "case_insensitive_search"
|
||||
|
||||
static gboolean case_type = TRUE;
|
||||
|
||||
static void
|
||||
find_frame_ok_cb(GtkWidget *ok_bt, gpointer parent_w);
|
||||
|
@ -74,7 +77,7 @@ find_frame_cb(GtkWidget *w _U_, gpointer d _U_)
|
|||
*direction_hb, *forward_rb, *backward_rb,
|
||||
*hex_hb, *hex_rb, *ascii_rb, *filter_rb,
|
||||
*combo_hb, *combo_cb, *combo_lb,
|
||||
*bbox, *ok_bt, *cancel_bt;
|
||||
*bbox, *ok_bt, *cancel_bt, *case_cb;
|
||||
#if GTK_MAJOR_VERSION < 2
|
||||
GtkAccelGroup *accel_group;
|
||||
#endif
|
||||
|
@ -208,7 +211,6 @@ find_frame_cb(GtkWidget *w _U_, gpointer d _U_)
|
|||
gtk_widget_show(combo_lb);
|
||||
/* Create Combo Box */
|
||||
combo_cb = gtk_combo_new();
|
||||
/*gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), "Find String Type:");*/
|
||||
|
||||
glist = g_list_append(glist, "ASCII Unicode & Non-Unicode");
|
||||
glist = g_list_append(glist, "ASCII Non-Unicode");
|
||||
|
@ -219,6 +221,18 @@ find_frame_cb(GtkWidget *w _U_, gpointer d _U_)
|
|||
gtk_container_add(GTK_CONTAINER(main_vb), combo_cb);
|
||||
gtk_widget_show(combo_cb);
|
||||
|
||||
#if GTK_MAJOR_VERSION < 2
|
||||
case_cb = dlg_check_button_new_with_label_with_mnemonic(
|
||||
"Case Insensitive Search", accel_group);
|
||||
#else
|
||||
case_cb = gtk_check_button_new_with_mnemonic(
|
||||
"Case Insensitive Search");
|
||||
#endif
|
||||
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(case_cb),
|
||||
case_type);
|
||||
gtk_container_add(GTK_CONTAINER(main_vb), case_cb);
|
||||
gtk_widget_show(case_cb);
|
||||
|
||||
/* Button row: OK and cancel buttons */
|
||||
bbox = gtk_hbutton_box_new();
|
||||
gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
|
||||
|
@ -254,6 +268,7 @@ find_frame_cb(GtkWidget *w _U_, gpointer d _U_)
|
|||
OBJECT_SET_DATA(find_frame_w, E_FIND_HEXDATA_KEY, hex_rb);
|
||||
OBJECT_SET_DATA(find_frame_w, E_FIND_ASCIIDATA_KEY, ascii_rb);
|
||||
OBJECT_SET_DATA(find_frame_w, E_FIND_STRINGTYPE_KEY, combo_cb);
|
||||
OBJECT_SET_DATA(find_frame_w, E_CASE_SEARCH_KEY, case_cb);
|
||||
|
||||
|
||||
/* Catch the "activate" signal on the filter text entry, so that
|
||||
|
@ -276,7 +291,7 @@ find_frame_cb(GtkWidget *w _U_, gpointer d _U_)
|
|||
static void
|
||||
find_frame_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w)
|
||||
{
|
||||
GtkWidget *filter_te, *backward_rb, *hex_rb, *ascii_rb, *combo_cb;
|
||||
GtkWidget *filter_te, *backward_rb, *hex_rb, *ascii_rb, *combo_cb, *case_cb;
|
||||
gchar *filter_text, *string_type;
|
||||
dfilter_t *sfcode;
|
||||
|
||||
|
@ -285,10 +300,13 @@ find_frame_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w)
|
|||
hex_rb = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_FIND_HEXDATA_KEY);
|
||||
ascii_rb = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_FIND_ASCIIDATA_KEY);
|
||||
combo_cb = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_FIND_STRINGTYPE_KEY);
|
||||
case_cb = (GtkWidget *) OBJECT_GET_DATA(parent_w, E_CASE_SEARCH_KEY);
|
||||
|
||||
filter_text = gtk_entry_get_text(GTK_ENTRY(filter_te));
|
||||
string_type = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo_cb)->entry));
|
||||
|
||||
case_type = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(case_cb));
|
||||
|
||||
/*
|
||||
* Try to compile the filter.
|
||||
*/
|
||||
|
@ -327,7 +345,7 @@ find_frame_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!find_ascii(&cfile, filter_text, cfile.ascii, string_type)) {
|
||||
if (!find_ascii(&cfile, filter_text, cfile.ascii, string_type, case_type)) {
|
||||
/* We didn't find the packet. */
|
||||
simple_dialog(ESD_TYPE_CRIT, NULL, "No packet matched search criteria.");
|
||||
return;
|
||||
|
@ -364,7 +382,7 @@ find_previous_next(GtkWidget *w, gpointer d, gboolean sens)
|
|||
cfile.sbackward = sens;
|
||||
if (cfile.hex || cfile.ascii)
|
||||
{
|
||||
find_ascii(&cfile, cfile.sfilter, cfile.ascii, cfile.ftype);
|
||||
find_ascii(&cfile, cfile.sfilter, cfile.ascii, cfile.ftype, case_type);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue