Ethereal-dev: [Ethereal-dev] Patch for stopping traces on SIGINT
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Neil Horman <nhorman@xxxxxxxxxxxxx>
Date: Thu, 11 Sep 2003 09:40:12 -0400
Hello all-I've created a patch to allow a user to stop a trace with a SIGINT (#18 on the wish list). Its not implemented to actually use SIGINT since gtk registers a handler for that signal that I didn't really want to override, but instead it registers signal handlers in gtk for keyboard events and listens for ASCII 0x03 to end the tracing, which from a look and feel standpoint, is the same thing, and I think a generally better way to do this. Anywho, the patch is attached, submitted for the maintainers approval :)
Neil
Index: capture.c =================================================================== RCS file: /cvsroot/ethereal/capture.c,v retrieving revision 1.208 diff -u -r1.208 capture.c --- capture.c 23 Jul 2003 05:01:15 -0000 1.208 +++ capture.c 11 Sep 2003 13:35:39 -0000 @@ -247,6 +247,32 @@ int child_process; #endif + +/* + * This needs to be static, so that the SIGUSR1 handler can clear the "go" + * flag. + */ +static loop_data ld; + +/* + *This is the ASCII value of a ctrl-c + */ +#define CTRL_C 0x03 +static void key_press_win(GtkWidget *widget, + GdkEventKey *key, + gpointer callback_data ) +{ + /* + *check to see if the key press event + *is a ctrl-c. If it is, end the capture + */ + if((char)*(key->string) == CTRL_C) + { + ld.go = FALSE; + } +} + + /* Add a string pointer to a NULL-terminated array of string pointers. */ static char ** add_arg(char **args, int *argc, char *arg) @@ -1342,12 +1368,6 @@ } #endif -/* - * This needs to be static, so that the SIGUSR1 handler can clear the "go" - * flag. - */ -static loop_data ld; - /* Do the low-level work of a capture. Returns TRUE if it succeeds, FALSE otherwise. */ int @@ -1696,6 +1716,8 @@ main_vb = gtk_vbox_new(FALSE, 1); gtk_container_border_width(GTK_CONTAINER(main_vb), 5); gtk_container_add(GTK_CONTAINER(cap_w), main_vb); + gtk_signal_connect(GTK_OBJECT(cap_w), "key_press_event", + (GtkSignalFunc) key_press_win, NULL ); gtk_widget_show(main_vb); counts_fr = gtk_frame_new("Captured Frames"); Index: gtk/main.c =================================================================== RCS file: /cvsroot/ethereal/gtk/main.c,v retrieving revision 1.310 diff -u -r1.310 main.c --- gtk/main.c 10 Sep 2003 05:35:26 -0000 1.310 +++ gtk/main.c 11 Sep 2003 13:35:40 -0000 @@ -1483,6 +1483,24 @@ } +/* + *This is the ASCII value of a ctrl-c + */ +#define CTRL_C 0x03 +static void key_press_handler(GtkWidget *widget, + GdkEventKey *key, + gpointer callback_data ) +{ + /* + *check to see if the key press event + *is a ctrl-c. If it is, end the capture + */ + if((char)*(key->string) == CTRL_C) + { + capture_stop(); + } +} + /* And now our feature presentation... [ fade to music ] */ int main(int argc, char *argv[]) @@ -2663,6 +2681,8 @@ /* Main window */ top_level = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_signal_connect(GTK_OBJECT(top_level), "key_press_event", + (GtkSignalFunc) key_press_handler, NULL ); gtk_widget_set_name(top_level, "main window"); SIGNAL_CONNECT(top_level, "delete_event", main_window_delete_event_cb, NULL);
- Follow-Ups:
- Re: [Ethereal-dev] Patch for stopping traces on SIGINT
- From: Guy Harris
- Re: [Ethereal-dev] Patch for stopping traces on SIGINT
- Prev by Date: RE: [Ethereal-dev] Patches to make Ethereal 0.9.15 compile with MVC
- Next by Date: Re: [Ethereal-dev] new release?
- Previous by thread: Re: [Ethereal-dev] Decoding problem for GTPv1
- Next by thread: Re: [Ethereal-dev] Patch for stopping traces on SIGINT
- Index(es):
- Get Wireshark
- Download
- Code of Conduct