aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>1999-10-02 07:13:20 +0000
committerGuy Harris <guy@alum.mit.edu>1999-10-02 07:13:20 +0000
commitefe95352f9f459eccdb5320a3147159259956b42 (patch)
tree0b90b6c15b3a294cb1d7d22e99a4f85272a6041a /gtk
parent3d2cc0cb069e6f2987f0cff8a36eb15acd875af3 (diff)
Add a file name field to the "Capture/Start" dialog box; if it's blank,
the capture will be done to a temporary file, otherwise it'll be done to the specified file. svn path=/trunk/; revision=749
Diffstat (limited to 'gtk')
-rw-r--r--gtk/capture_dlg.c113
1 files changed, 92 insertions, 21 deletions
diff --git a/gtk/capture_dlg.c b/gtk/capture_dlg.c
index 28658f352b..0509c6bd28 100644
--- a/gtk/capture_dlg.c
+++ b/gtk/capture_dlg.c
@@ -1,7 +1,7 @@
/* capture_dlg.c
* Routines for packet capture windows
*
- * $Id: capture_dlg.c,v 1.6 1999/10/02 06:26:53 guy Exp $
+ * $Id: capture_dlg.c,v 1.7 1999/10/02 07:13:20 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -76,13 +76,13 @@
#include "util.h"
/* Capture callback data keys */
-#define E_CAP_IFACE_KEY "cap_iface"
-#define E_CAP_FILT_KEY "cap_filter"
-#define E_CAP_COUNT_KEY "cap_count"
-#define E_CAP_OPEN_KEY "cap_open"
-#define E_CAP_SNAP_KEY "cap_snap"
-#define E_CAP_SYNC_KEY "cap_sync"
-#define E_CAP_RESOLVE_KEY "cap_resolve"
+#define E_CAP_IFACE_KEY "cap_iface"
+#define E_CAP_FILT_KEY "cap_filter_te"
+#define E_CAP_FILE_TE_KEY "cap_file_te"
+#define E_CAP_COUNT_KEY "cap_count"
+#define E_CAP_SNAP_KEY "cap_snap"
+#define E_CAP_SYNC_KEY "cap_sync"
+#define E_CAP_RESOLVE_KEY "cap_resolve"
/* Capture filter key */
#define E_CAP_FILT_TE_KEY "cap_filt_te"
@@ -91,6 +91,15 @@ static GList*
get_interface_list();
static void
+capture_prep_file_cb(GtkWidget *w, gpointer te);
+
+static void
+cap_prep_fs_ok_cb(GtkWidget *w, gpointer data);
+
+static void
+cap_prep_fs_cancel_cb(GtkWidget *w, gpointer data);
+
+static void
capture_prep_ok_cb(GtkWidget *ok_bt, gpointer parent_w);
static void
@@ -103,10 +112,13 @@ static void
free_if_cb(gpointer data, gpointer user_data);
void
-capture_prep_cb(GtkWidget *w, gpointer d) {
+capture_prep_cb(GtkWidget *w, gpointer d)
+{
GtkWidget *cap_open_w, *if_cb, *if_lb,
*count_lb, *count_cb, *main_vb, *if_hb, *count_hb,
- *filter_hb, *filter_bt, *filter_te, *caplen_hb,
+ *filter_hb, *filter_bt, *filter_te,
+ *file_hb, *file_bt, *file_te,
+ *caplen_hb,
*bbox, *ok_bt, *cancel_bt, *snap_lb,
*snap_sb, *sync_cb, *resolv_cb;
GtkAdjustment *adj;
@@ -188,6 +200,22 @@ capture_prep_cb(GtkWidget *w, gpointer d) {
gtk_object_set_data(GTK_OBJECT(filter_bt), E_FILT_TE_PTR_KEY, filter_te);
gtk_box_pack_start(GTK_BOX(filter_hb), filter_te, TRUE, TRUE, 0);
gtk_widget_show(filter_te);
+
+ /* File row */
+ file_hb = gtk_hbox_new(FALSE, 1);
+ gtk_container_add(GTK_CONTAINER(main_vb), file_hb);
+ gtk_widget_show(file_hb);
+
+ file_bt = gtk_button_new_with_label("File:");
+ gtk_box_pack_start(GTK_BOX(file_hb), file_bt, FALSE, FALSE, 3);
+ gtk_widget_show(file_bt);
+
+ file_te = gtk_entry_new();
+ gtk_box_pack_start(GTK_BOX(file_hb), file_te, TRUE, TRUE, 3);
+ gtk_widget_show(file_te);
+
+ gtk_signal_connect(GTK_OBJECT(file_bt), "clicked",
+ GTK_SIGNAL_FUNC(capture_prep_file_cb), GTK_OBJECT(file_te));
/* Misc row: Capture file checkbox and snap spinbutton */
caplen_hb = gtk_hbox_new(FALSE, 3);
@@ -242,6 +270,7 @@ capture_prep_cb(GtkWidget *w, gpointer d) {
/* Attach pointers to needed widgets to the capture prefs window/object */
gtk_object_set_data(GTK_OBJECT(cap_open_w), E_CAP_IFACE_KEY, if_cb);
gtk_object_set_data(GTK_OBJECT(cap_open_w), E_CAP_FILT_KEY, filter_te);
+ gtk_object_set_data(GTK_OBJECT(cap_open_w), E_CAP_FILE_TE_KEY, file_te);
gtk_object_set_data(GTK_OBJECT(cap_open_w), E_CAP_COUNT_KEY, count_cb);
gtk_object_set_data(GTK_OBJECT(cap_open_w), E_CAP_SNAP_KEY, snap_sb);
gtk_object_set_data(GTK_OBJECT(cap_open_w), E_CAP_SYNC_KEY, sync_cb);
@@ -251,12 +280,49 @@ capture_prep_cb(GtkWidget *w, gpointer d) {
}
static void
+capture_prep_file_cb(GtkWidget *w, gpointer file_te)
+{
+ GtkWidget *fs;
+
+ fs = gtk_file_selection_new ("Ethereal: Capture File");
+
+ gtk_object_set_data(GTK_OBJECT(fs), E_CAP_FILE_TE_KEY, file_te);
+
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(fs)->ok_button),
+ "clicked", (GtkSignalFunc) cap_prep_fs_ok_cb, fs);
+
+ /* Connect the cancel_button to destroy the widget */
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(fs)->cancel_button),
+ "clicked", (GtkSignalFunc) cap_prep_fs_cancel_cb, fs);
+
+ gtk_widget_show(fs);
+}
+
+static void
+cap_prep_fs_ok_cb(GtkWidget *w, gpointer data)
+{
+ gtk_entry_set_text(GTK_ENTRY(gtk_object_get_data(GTK_OBJECT(data),
+ E_CAP_FILE_TE_KEY)),
+ gtk_file_selection_get_filename (GTK_FILE_SELECTION(data)));
+ gtk_widget_destroy(GTK_WIDGET(data));
+}
+
+static void
+cap_prep_fs_cancel_cb(GtkWidget *w, gpointer data)
+{
+ gtk_widget_destroy(GTK_WIDGET(data));
+}
+
+static void
capture_prep_ok_cb(GtkWidget *ok_bt, gpointer parent_w) {
- GtkWidget *if_cb, *filter_te, *count_cb, *snap_sb, *sync_cb, *resolv_cb;
+ GtkWidget *if_cb, *filter_te, *file_te, *count_cb, *snap_sb, *sync_cb,
+ *resolv_cb;
gchar *filter_text;
+ gchar *save_file;
if_cb = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(parent_w), E_CAP_IFACE_KEY);
filter_te = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(parent_w), E_CAP_FILT_KEY);
+ file_te = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(parent_w), E_CAP_FILE_TE_KEY);
count_cb = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(parent_w), E_CAP_COUNT_KEY);
snap_sb = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(parent_w), E_CAP_SNAP_KEY);
sync_cb = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(parent_w), E_CAP_SYNC_KEY);
@@ -274,26 +340,31 @@ capture_prep_ok_cb(GtkWidget *ok_bt, gpointer parent_w) {
if (filter_text && filter_text[0]) {
cf.cfilter = g_strdup(filter_text);
}
+
+ save_file = gtk_entry_get_text(GTK_ENTRY(file_te));
+ if (save_file && save_file[0]) {
+ /* User specified a file to which the capture should be written. */
+ save_file = g_strdup(save_file);
+ } else {
+ /* User didn't specify a file; save to a temporary file. */
+ save_file = NULL;
+ }
+
cf.count = atoi(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(count_cb)->entry)));
+
cf.snap = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(snap_sb));
if (cf.snap < 1)
cf.snap = WTAP_MAX_PACKET_SIZE;
else if (cf.snap < MIN_PACKET_SIZE)
cf.snap = MIN_PACKET_SIZE;
- if (GTK_TOGGLE_BUTTON (sync_cb)->active) {
- /* They requested that the summary window be updated as packets are
- captured. */
- sync_mode = TRUE;
- } else {
- /* They requested that the summary window not be updated as packets are
- captured. */
- sync_mode = FALSE;
- }
+
+ sync_mode = GTK_TOGGLE_BUTTON (sync_cb)->active;
+
g_resolving_actif = GTK_TOGGLE_BUTTON (resolv_cb)->active;
gtk_widget_destroy(GTK_WIDGET(parent_w));
- do_capture(NULL);
+ do_capture(save_file);
}
static void