forked from osmocom/wireshark
Santeri Paavolainen's patch to add a "Capture->Stop" menu item to let
you stop an "Update list of packets in real time" capture from the main window as well as from the capture statistics dialog. svn path=/trunk/; revision=2487
This commit is contained in:
parent
788a6283ff
commit
54ecbe2d4e
4
AUTHORS
4
AUTHORS
|
@ -401,6 +401,10 @@ Brian Wellington <bwelling@xbill.org> {
|
||||||
Partial support for DNS-over-TCP
|
Partial support for DNS-over-TCP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Santeri Paavolainen <santtu@ssh.com> {
|
||||||
|
"Capture->Stop" menu bar item
|
||||||
|
}
|
||||||
|
|
||||||
Alain Magloire <alainm@rcsm.ece.mcgill.ca> was kind enough to
|
Alain Magloire <alainm@rcsm.ece.mcgill.ca> was kind enough to
|
||||||
give his permission to use his version of snprintf.c.
|
give his permission to use his version of snprintf.c.
|
||||||
|
|
||||||
|
|
36
capture.c
36
capture.c
|
@ -1,7 +1,7 @@
|
||||||
/* capture.c
|
/* capture.c
|
||||||
* Routines for packet capture windows
|
* Routines for packet capture windows
|
||||||
*
|
*
|
||||||
* $Id: capture.c,v 1.128 2000/10/08 17:16:29 gerald Exp $
|
* $Id: capture.c,v 1.129 2000/10/11 06:01:14 guy Exp $
|
||||||
*
|
*
|
||||||
* Ethereal - Network traffic analyzer
|
* Ethereal - Network traffic analyzer
|
||||||
* By Gerald Combs <gerald@zing.org>
|
* By Gerald Combs <gerald@zing.org>
|
||||||
|
@ -126,6 +126,7 @@ static void capture_pcap_cb(u_char *, const struct pcap_pkthdr *,
|
||||||
const u_char *);
|
const u_char *);
|
||||||
static void send_errmsg_to_parent(const char *);
|
static void send_errmsg_to_parent(const char *);
|
||||||
static float pct(gint, gint);
|
static float pct(gint, gint);
|
||||||
|
static void stop_capture(int signo);
|
||||||
|
|
||||||
typedef struct _loop_data {
|
typedef struct _loop_data {
|
||||||
gint go;
|
gint go;
|
||||||
|
@ -1012,6 +1013,12 @@ pipe_dispatch(int fd, loop_data *ld, struct pcap_hdr *hdr)
|
||||||
}
|
}
|
||||||
#endif
|
#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.
|
/* Do the low-level work of a capture.
|
||||||
Returns TRUE if it succeeds, FALSE otherwise. */
|
Returns TRUE if it succeeds, FALSE otherwise. */
|
||||||
int
|
int
|
||||||
|
@ -1023,7 +1030,6 @@ capture(void)
|
||||||
int pcap_encap;
|
int pcap_encap;
|
||||||
int snaplen;
|
int snaplen;
|
||||||
gchar err_str[PCAP_ERRBUF_SIZE], label_str[64];
|
gchar err_str[PCAP_ERRBUF_SIZE], label_str[64];
|
||||||
loop_data ld;
|
|
||||||
bpf_u_int32 netnum, netmask;
|
bpf_u_int32 netnum, netmask;
|
||||||
time_t upd_time, cur_time;
|
time_t upd_time, cur_time;
|
||||||
int err, inpkts;
|
int err, inpkts;
|
||||||
|
@ -1316,6 +1322,14 @@ capture(void)
|
||||||
#ifdef linux
|
#ifdef linux
|
||||||
if (!ld.from_pipe) pcap_fd = pcap_fileno(pch);
|
if (!ld.from_pipe) pcap_fd = pcap_fileno(pch);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
/*
|
||||||
|
* Catch SIGUSR1, so that we exit cleanly if the parent process
|
||||||
|
* kills us with it due to the user selecting "Capture->Stop".
|
||||||
|
*/
|
||||||
|
signal(SIGUSR1, stop_capture);
|
||||||
|
#endif
|
||||||
while (ld.go) {
|
while (ld.go) {
|
||||||
while (gtk_events_pending()) gtk_main_iteration();
|
while (gtk_events_pending()) gtk_main_iteration();
|
||||||
|
|
||||||
|
@ -1526,6 +1540,12 @@ pct(gint num, gint denom) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
stop_capture(int signo)
|
||||||
|
{
|
||||||
|
ld.go = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
capture_delete_cb(GtkWidget *w, GdkEvent *event, gpointer data) {
|
capture_delete_cb(GtkWidget *w, GdkEvent *event, gpointer data) {
|
||||||
capture_stop_cb(NULL, data);
|
capture_stop_cb(NULL, data);
|
||||||
|
@ -1538,6 +1558,18 @@ capture_stop_cb(GtkWidget *w, gpointer data) {
|
||||||
ld->go = FALSE;
|
ld->go = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
capture_stop(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* XXX - find some way of signaling the child in Win32.
|
||||||
|
*/
|
||||||
|
#ifndef _WIN32
|
||||||
|
if (fork_child != -1)
|
||||||
|
kill(fork_child, SIGUSR1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
capture_pcap_cb(u_char *user, const struct pcap_pkthdr *phdr,
|
capture_pcap_cb(u_char *user, const struct pcap_pkthdr *phdr,
|
||||||
const u_char *pd) {
|
const u_char *pd) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* capture.h
|
/* capture.h
|
||||||
* Definitions for packet capture windows
|
* Definitions for packet capture windows
|
||||||
*
|
*
|
||||||
* $Id: capture.h,v 1.23 2000/09/15 05:32:19 guy Exp $
|
* $Id: capture.h,v 1.24 2000/10/11 06:01:14 guy Exp $
|
||||||
*
|
*
|
||||||
* Ethereal - Network traffic analyzer
|
* Ethereal - Network traffic analyzer
|
||||||
* By Gerald Combs <gerald@zing.org>
|
* By Gerald Combs <gerald@zing.org>
|
||||||
|
@ -44,6 +44,9 @@ void do_capture(char *capfile_name);
|
||||||
/* Do the low-level work of a capture. */
|
/* Do the low-level work of a capture. */
|
||||||
int capture(void);
|
int capture(void);
|
||||||
|
|
||||||
|
/* Stop a capture from a menu item. */
|
||||||
|
void capture_stop(void);
|
||||||
|
|
||||||
#endif /* HAVE_LIBPCAP */
|
#endif /* HAVE_LIBPCAP */
|
||||||
|
|
||||||
#define EMPTY_FILTER ""
|
#define EMPTY_FILTER ""
|
||||||
|
|
|
@ -281,6 +281,12 @@ file can be chosen by setting your TMPDIR environment variable before
|
||||||
starting B<Ethereal>. Otherwise, the default TMPDIR location is
|
starting B<Ethereal>. Otherwise, the default TMPDIR location is
|
||||||
system-dependent, but is likely either F</var/tmp> or F</tmp>.
|
system-dependent, but is likely either F</var/tmp> or F</tmp>.
|
||||||
|
|
||||||
|
=item Capture:Stop
|
||||||
|
|
||||||
|
In a capture that updates the packet display as packets arrive (so that
|
||||||
|
Ethereal responds to user input other than pressing the "Stop" button in
|
||||||
|
the capture packet statistics dialog box), stops the capture.
|
||||||
|
|
||||||
=item Display:Options
|
=item Display:Options
|
||||||
|
|
||||||
Allows you to sets the format of the packet timestamp displayed in the
|
Allows you to sets the format of the packet timestamp displayed in the
|
||||||
|
@ -988,6 +994,7 @@ B<http://www.ethereal.com>.
|
||||||
Per Flock <per.flock@axis.com>
|
Per Flock <per.flock@axis.com>
|
||||||
Jack Keane <jkeane@OpenReach.com>
|
Jack Keane <jkeane@OpenReach.com>
|
||||||
Brian Wellington <bwelling@xbill.org>
|
Brian Wellington <bwelling@xbill.org>
|
||||||
|
Santeri Paavolainen <santtu@ssh.com>
|
||||||
|
|
||||||
Alain Magloire <alainm@rcsm.ece.mcgill.ca> was kind enough to give his
|
Alain Magloire <alainm@rcsm.ece.mcgill.ca> was kind enough to give his
|
||||||
permission to use his version of snprintf.c.
|
permission to use his version of snprintf.c.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* capture_dlg.c
|
/* capture_dlg.c
|
||||||
* Routines for packet capture windows
|
* Routines for packet capture windows
|
||||||
*
|
*
|
||||||
* $Id: capture_dlg.c,v 1.33 2000/09/15 05:32:48 guy Exp $
|
* $Id: capture_dlg.c,v 1.34 2000/10/11 06:01:16 guy Exp $
|
||||||
*
|
*
|
||||||
* Ethereal - Network traffic analyzer
|
* Ethereal - Network traffic analyzer
|
||||||
* By Gerald Combs <gerald@zing.org>
|
* By Gerald Combs <gerald@zing.org>
|
||||||
|
@ -90,6 +90,12 @@ capture_prep_close_cb(GtkWidget *close_bt, gpointer parent_w);
|
||||||
static void
|
static void
|
||||||
capture_prep_destroy_cb(GtkWidget *win, gpointer user_data);
|
capture_prep_destroy_cb(GtkWidget *win, gpointer user_data);
|
||||||
|
|
||||||
|
void
|
||||||
|
capture_stop_cb(GtkWidget *w, gpointer d)
|
||||||
|
{
|
||||||
|
capture_stop();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Keep a static pointer to the current "Capture Preferences" window, if
|
* Keep a static pointer to the current "Capture Preferences" window, if
|
||||||
* any, so that if somebody tries to do "Capture:Start" while there's
|
* any, so that if somebody tries to do "Capture:Start" while there's
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* capture_dlg.h
|
/* capture_dlg.h
|
||||||
* Definitions for packet capture windows
|
* Definitions for packet capture windows
|
||||||
*
|
*
|
||||||
* $Id: capture_dlg.h,v 1.1 1999/09/09 03:32:01 gram Exp $
|
* $Id: capture_dlg.h,v 1.2 2000/10/11 06:01:16 guy Exp $
|
||||||
*
|
*
|
||||||
* Ethereal - Network traffic analyzer
|
* Ethereal - Network traffic analyzer
|
||||||
* By Gerald Combs <gerald@zing.org>
|
* By Gerald Combs <gerald@zing.org>
|
||||||
|
@ -27,5 +27,6 @@
|
||||||
#define __CAPTURE_DLG_H__
|
#define __CAPTURE_DLG_H__
|
||||||
|
|
||||||
void capture_prep_cb(GtkWidget *, gpointer);
|
void capture_prep_cb(GtkWidget *, gpointer);
|
||||||
|
void capture_stop_cb(GtkWidget *, gpointer);
|
||||||
|
|
||||||
#endif /* capture.h */
|
#endif /* capture.h */
|
||||||
|
|
16
gtk/menu.c
16
gtk/menu.c
|
@ -1,7 +1,7 @@
|
||||||
/* menu.c
|
/* menu.c
|
||||||
* Menu routines
|
* Menu routines
|
||||||
*
|
*
|
||||||
* $Id: menu.c,v 1.44 2000/09/09 08:17:51 guy Exp $
|
* $Id: menu.c,v 1.45 2000/10/11 06:01:16 guy Exp $
|
||||||
*
|
*
|
||||||
* Ethereal - Network traffic analyzer
|
* Ethereal - Network traffic analyzer
|
||||||
* By Gerald Combs <gerald@zing.org>
|
* By Gerald Combs <gerald@zing.org>
|
||||||
|
@ -124,7 +124,13 @@ static GtkItemFactoryEntry menu_items[] =
|
||||||
#ifdef HAVE_LIBPCAP
|
#ifdef HAVE_LIBPCAP
|
||||||
{"/_Capture", NULL, NULL, 0, "<Branch>" },
|
{"/_Capture", NULL, NULL, 0, "<Branch>" },
|
||||||
{"/Capture/_Start...", "<control>K", GTK_MENU_FUNC(capture_prep_cb), 0, NULL},
|
{"/Capture/_Start...", "<control>K", GTK_MENU_FUNC(capture_prep_cb), 0, NULL},
|
||||||
#endif
|
/*
|
||||||
|
* XXX - this doesn't yet work in Win32.
|
||||||
|
*/
|
||||||
|
#ifndef _WIN32
|
||||||
|
{"/Capture/S_top", "<control>E", GTK_MENU_FUNC(capture_stop_cb), 0, NULL},
|
||||||
|
#endif /* _WIN32 */
|
||||||
|
#endif /* HAVE_LIBPCAP */
|
||||||
{"/_Display", NULL, NULL, 0, "<Branch>" },
|
{"/_Display", NULL, NULL, 0, "<Branch>" },
|
||||||
{"/Display/_Options...", NULL, GTK_MENU_FUNC(display_opt_cb), 0, NULL},
|
{"/Display/_Options...", NULL, GTK_MENU_FUNC(display_opt_cb), 0, NULL},
|
||||||
{"/Display/_Match Selected", NULL, GTK_MENU_FUNC(match_selected_cb), 0, NULL},
|
{"/Display/_Match Selected", NULL, GTK_MENU_FUNC(match_selected_cb), 0, NULL},
|
||||||
|
@ -346,6 +352,12 @@ set_menus_for_capture_in_progress(gboolean capture_in_progress)
|
||||||
{
|
{
|
||||||
set_menu_sensitivity("/File/Open...", !capture_in_progress);
|
set_menu_sensitivity("/File/Open...", !capture_in_progress);
|
||||||
set_menu_sensitivity("/Capture/Start...", !capture_in_progress);
|
set_menu_sensitivity("/Capture/Start...", !capture_in_progress);
|
||||||
|
/*
|
||||||
|
* XXX - this doesn't yet work in Win32.
|
||||||
|
*/
|
||||||
|
#ifndef _WIN32
|
||||||
|
set_menu_sensitivity("/Capture/Stop", capture_in_progress);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable or disable menu items based on whether you have some captured
|
/* Enable or disable menu items based on whether you have some captured
|
||||||
|
|
Loading…
Reference in New Issue