aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--capture.c78
-rw-r--r--capture.h20
-rw-r--r--file.c4
-rw-r--r--file.h13
-rw-r--r--gtk/Makefile.common1
-rw-r--r--gtk/main.c97
-rw-r--r--gtk/main_statusbar.c103
-rw-r--r--gtk/main_statusbar.h12
-rw-r--r--gtk/main_statusbar_private.h42
9 files changed, 253 insertions, 117 deletions
diff --git a/capture.c b/capture.c
index 7905add32b..ae121a5d37 100644
--- a/capture.c
+++ b/capture.c
@@ -104,6 +104,62 @@ struct if_stat_cache_s {
GList *cache_list; /* List of if_stat_chache_entry_t */
};
+/* this callback mechanism should possibly be replaced by the g_signal_...() stuff (if I only would know how :-) */
+typedef struct {
+ capture_callback_t cb_fct;
+ gpointer user_data;
+} capture_callback_data_t;
+
+static GList *capture_callbacks = NULL;
+
+static void
+capture_callback_invoke(int event, capture_options *capture_opts)
+{
+ capture_callback_data_t *cb;
+ GList *cb_item = capture_callbacks;
+
+ /* there should be at least one interested */
+ g_assert(cb_item != NULL);
+
+ while(cb_item != NULL) {
+ cb = cb_item->data;
+ cb->cb_fct(event, capture_opts, cb->user_data);
+ cb_item = g_list_next(cb_item);
+ }
+}
+
+
+void
+capture_callback_add(capture_callback_t func, gpointer user_data)
+{
+ capture_callback_data_t *cb;
+
+ cb = g_malloc(sizeof(capture_callback_data_t));
+ cb->cb_fct = func;
+ cb->user_data = user_data;
+
+ capture_callbacks = g_list_append(capture_callbacks, cb);
+}
+
+void
+capture_callback_remove(capture_callback_t func)
+{
+ capture_callback_data_t *cb;
+ GList *cb_item = capture_callbacks;
+
+ while(cb_item != NULL) {
+ cb = cb_item->data;
+ if(cb->cb_fct == func) {
+ capture_callbacks = g_list_remove(capture_callbacks, cb);
+ g_free(cb);
+ return;
+ }
+ cb_item = g_list_next(cb_item);
+ }
+
+ g_assert_not_reached();
+}
+
/**
* Start a capture.
*
@@ -139,7 +195,7 @@ capture_start(capture_options *capture_opts)
/* to prevent problems, bring the main GUI into "capture mode" right after successfully */
/* spawn/exec the capture child, without waiting for any response from it */
- cf_callback_invoke(cf_cb_live_capture_prepared, capture_opts);
+ capture_callback_invoke(capture_cb_capture_prepared, capture_opts);
if(capture_opts->show_info)
capture_info_open(capture_opts);
@@ -154,7 +210,7 @@ capture_stop(capture_options *capture_opts)
{
g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, "Capture Stop ...");
- cf_callback_invoke(cf_cb_live_capture_stopping, capture_opts);
+ capture_callback_invoke(capture_cb_capture_stopping, capture_opts);
/* stop the capture child gracefully */
sync_pipe_stop(capture_opts);
@@ -295,7 +351,7 @@ capture_input_new_file(capture_options *capture_opts, gchar *new_file)
/* we start a new capture file, close the old one (if we had one before) */
/* (we can only have an open capture file in real_time_mode!) */
if( ((capture_file *) capture_opts->cf)->state != FILE_CLOSED) {
- cf_callback_invoke(cf_cb_live_capture_update_finished, capture_opts->cf);
+ capture_callback_invoke(capture_cb_capture_update_finished, capture_opts);
cf_finish_tail(capture_opts->cf, &err);
cf_close(capture_opts->cf);
}
@@ -332,9 +388,9 @@ capture_input_new_file(capture_options *capture_opts, gchar *new_file)
}
if(capture_opts->real_time_mode) {
- cf_callback_invoke(cf_cb_live_capture_update_started, capture_opts);
+ capture_callback_invoke(capture_cb_capture_update_started, capture_opts);
} else {
- cf_callback_invoke(cf_cb_live_capture_fixed_started, capture_opts);
+ capture_callback_invoke(capture_cb_capture_fixed_started, capture_opts);
}
capture_opts->state = CAPTURE_RUNNING;
@@ -362,7 +418,7 @@ capture_input_new_packets(capture_options *capture_opts, int to_read)
file.
XXX - abort on a read error? */
- cf_callback_invoke(cf_cb_live_capture_update_continue, capture_opts->cf);
+ capture_callback_invoke(capture_cb_capture_update_continue, capture_opts);
break;
case CF_READ_ABORTED:
@@ -376,7 +432,7 @@ capture_input_new_packets(capture_options *capture_opts, int to_read)
cf_set_packet_count(capture_opts->cf,
cf_get_packet_count(capture_opts->cf) + to_read);
- cf_callback_invoke(cf_cb_live_capture_fixed_continue, capture_opts->cf);
+ capture_callback_invoke(capture_cb_capture_fixed_continue, capture_opts);
}
/* update the main window, so we get events (e.g. from the stop toolbar button) */
@@ -498,9 +554,9 @@ capture_input_closed(capture_options *capture_opts)
/* (happens if we got an error message - we won't get a filename then) */
if(capture_opts->state == CAPTURE_PREPARING) {
if(capture_opts->real_time_mode) {
- cf_callback_invoke(cf_cb_live_capture_update_started, capture_opts);
+ capture_callback_invoke(capture_cb_capture_update_started, capture_opts);
} else {
- cf_callback_invoke(cf_cb_live_capture_fixed_started, capture_opts);
+ capture_callback_invoke(capture_cb_capture_fixed_started, capture_opts);
}
}
@@ -515,7 +571,7 @@ capture_input_closed(capture_options *capture_opts)
/* Tell the GUI, we are not doing a capture any more.
Must be done after the cf_finish_tail(), so file lengths are displayed
correct. */
- cf_callback_invoke(cf_cb_live_capture_update_finished, capture_opts->cf);
+ capture_callback_invoke(capture_cb_capture_update_finished, capture_opts);
/* Finish the capture. */
switch (status) {
@@ -556,7 +612,7 @@ capture_input_closed(capture_options *capture_opts)
} else {
/* first of all, we are not doing a capture any more */
- cf_callback_invoke(cf_cb_live_capture_fixed_finished, capture_opts->cf);
+ capture_callback_invoke(capture_cb_capture_fixed_finished, capture_opts);
/* this is a normal mode capture and if no error happened, read in the capture file data */
if(capture_opts->save_file != NULL) {
diff --git a/capture.h b/capture.h
index 79084bd833..955e2a5194 100644
--- a/capture.h
+++ b/capture.h
@@ -33,6 +33,26 @@
#include "capture_opts.h"
+typedef enum {
+ capture_cb_capture_prepared,
+ capture_cb_capture_update_started,
+ capture_cb_capture_update_continue,
+ capture_cb_capture_update_finished,
+ capture_cb_capture_fixed_started,
+ capture_cb_capture_fixed_continue,
+ capture_cb_capture_fixed_finished,
+ capture_cb_capture_stopping
+} capture_cbs;
+
+typedef void (*capture_callback_t) (gint event, capture_options *capture_opts,
+ gpointer user_data);
+
+extern void
+capture_callback_add(capture_callback_t func, gpointer user_data);
+
+extern void
+capture_callback_remove(capture_callback_t func);
+
/**
* Start a capture session.
*
diff --git a/file.c b/file.c
index 8c0affb019..cf2524b969 100644
--- a/file.c
+++ b/file.c
@@ -135,9 +135,9 @@ typedef struct {
gpointer user_data;
} cf_callback_data_t;
-GList *cf_callbacks = NULL;
+static GList *cf_callbacks = NULL;
-void
+static void
cf_callback_invoke(int event, gpointer data)
{
cf_callback_data_t *cb;
diff --git a/file.h b/file.h
index 1979b3875a..c40854b7e3 100644
--- a/file.h
+++ b/file.h
@@ -60,16 +60,6 @@ typedef enum {
cf_cb_file_closed,
cf_cb_file_read_start,
cf_cb_file_read_finished,
-#ifdef HAVE_LIBPCAP
- cf_cb_live_capture_prepared,
- cf_cb_live_capture_update_started,
- cf_cb_live_capture_update_continue,
- cf_cb_live_capture_update_finished,
- cf_cb_live_capture_fixed_started,
- cf_cb_live_capture_fixed_continue,
- cf_cb_live_capture_fixed_finished,
- cf_cb_live_capture_stopping,
-#endif
cf_cb_packet_selected,
cf_cb_packet_unselected,
cf_cb_field_unselected,
@@ -82,9 +72,6 @@ typedef enum {
typedef void (*cf_callback_t) (gint event, gpointer data, gpointer user_data);
extern void
-cf_callback_invoke(int event, gpointer data);
-
-extern void
cf_callback_add(cf_callback_t func, gpointer user_data);
extern void
diff --git a/gtk/Makefile.common b/gtk/Makefile.common
index c9048d0ceb..99b3d00fc1 100644
--- a/gtk/Makefile.common
+++ b/gtk/Makefile.common
@@ -250,6 +250,7 @@ noinst_HEADERS = \
main_packet_list.h \
main_proto_draw.h \
main_statusbar.h \
+ main_statusbar_private.h \
main_toolbar.h \
main_welcome.h \
mcast_stream.h \
diff --git a/gtk/main.c b/gtk/main.c
index bc07ac7bf5..fcd5938948 100644
--- a/gtk/main.c
+++ b/gtk/main.c
@@ -131,6 +131,7 @@
#include "gtk/main_menu.h"
#include "gtk/main_packet_list.h"
#include "gtk/main_statusbar.h"
+#include "gtk/main_statusbar_private.h"
#include "gtk/main_toolbar.h"
#include "gtk/main_welcome.h"
#include "gtk/drag_and_drop.h"
@@ -1285,7 +1286,7 @@ GList *icon_list_create(
#ifdef HAVE_LIBPCAP
static void
-main_cf_cb_live_capture_prepared(capture_options *capture_opts)
+main_capture_cb_capture_prepared(capture_options *capture_opts)
{
gchar *title;
static GList *icon_list = NULL;
@@ -1315,7 +1316,7 @@ main_cf_cb_live_capture_prepared(capture_options *capture_opts)
}
static void
-main_cf_cb_live_capture_update_started(capture_options *capture_opts)
+main_capture_cb_capture_update_started(capture_options *capture_opts)
{
gchar *title;
@@ -1342,8 +1343,9 @@ main_cf_cb_live_capture_update_started(capture_options *capture_opts)
}
static void
-main_cf_cb_live_capture_update_finished(capture_file *cf)
+main_capture_cb_capture_update_finished(capture_options *capture_opts)
{
+ capture_file *cf = capture_opts->cf;
static GList *icon_list = NULL;
set_display_filename(cf);
@@ -1373,15 +1375,18 @@ main_cf_cb_live_capture_update_finished(capture_file *cf)
}
static void
-main_cf_cb_live_capture_fixed_started(capture_options *capture_opts _U_)
+main_capture_cb_capture_fixed_started(capture_options *capture_opts _U_)
{
/* Don't set up main window for a capture file. */
main_set_for_capture_file(FALSE);
}
static void
-main_cf_cb_live_capture_fixed_finished(capture_file *cf _U_)
+main_capture_cb_capture_fixed_finished(capture_options *capture_opts _U_)
{
+#if 0
+ capture_file *cf = capture_opts->cf;
+#endif
static GList *icon_list = NULL;
/*set_display_filename(cf);*/
@@ -1477,39 +1482,6 @@ main_cf_callback(gint event, gpointer data, gpointer user_data _U_)
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: Read finished");
main_cf_cb_file_read_finished(data);
break;
-#ifdef HAVE_LIBPCAP
- case(cf_cb_live_capture_prepared):
- g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture prepared");
- main_cf_cb_live_capture_prepared(data);
- break;
- case(cf_cb_live_capture_update_started):
- g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update started");
- main_cf_cb_live_capture_update_started(data);
- break;
- case(cf_cb_live_capture_update_continue):
- /*g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update continue");*/
- break;
- case(cf_cb_live_capture_update_finished):
- g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update finished");
- main_cf_cb_live_capture_update_finished(data);
- break;
- case(cf_cb_live_capture_fixed_started):
- g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed started");
- main_cf_cb_live_capture_fixed_started(data);
- break;
- case(cf_cb_live_capture_fixed_continue):
- g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed continue");
- break;
- case(cf_cb_live_capture_fixed_finished):
- g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed finished");
- main_cf_cb_live_capture_fixed_finished(data);
- break;
- case(cf_cb_live_capture_stopping):
- g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture stopping");
- /* Beware: this state won't be called, if the capture child
- * closes the capturing on it's own! */
- break;
-#endif
case(cf_cb_packet_selected):
main_cf_cb_packet_selected(data);
break;
@@ -1538,6 +1510,49 @@ main_cf_callback(gint event, gpointer data, gpointer user_data _U_)
}
}
+#ifdef HAVE_LIBPCAP
+static void
+main_capture_callback(gint event, capture_options *capture_opts, gpointer user_data _U_)
+{
+ switch(event) {
+ case(capture_cb_capture_prepared):
+ g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture prepared");
+ main_capture_cb_capture_prepared(capture_opts);
+ break;
+ case(capture_cb_capture_update_started):
+ g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update started");
+ main_capture_cb_capture_update_started(capture_opts);
+ break;
+ case(capture_cb_capture_update_continue):
+ /*g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update continue");*/
+ break;
+ case(capture_cb_capture_update_finished):
+ g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture update finished");
+ main_capture_cb_capture_update_finished(capture_opts);
+ break;
+ case(capture_cb_capture_fixed_started):
+ g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed started");
+ main_capture_cb_capture_fixed_started(capture_opts);
+ break;
+ case(capture_cb_capture_fixed_continue):
+ g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed continue");
+ break;
+ case(capture_cb_capture_fixed_finished):
+ g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture fixed finished");
+ main_capture_cb_capture_fixed_finished(capture_opts);
+ break;
+ case(capture_cb_capture_stopping):
+ g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_DEBUG, "Callback: capture stopping");
+ /* Beware: this state won't be called, if the capture child
+ * closes the capturing on it's own! */
+ break;
+ default:
+ g_warning("main_capture_callback: event %u unknown", event);
+ g_assert_not_reached();
+ }
+}
+#endif
+
static void
get_gui_compiled_info(GString *str)
{
@@ -1928,7 +1943,13 @@ main(int argc, char *argv[])
gtk_init (&argc, &argv);
cf_callback_add(main_cf_callback, NULL);
+#ifdef HAVE_LIBPCAP
+ capture_callback_add(main_capture_callback, NULL);
+#endif
cf_callback_add(statusbar_cf_callback, NULL);
+#ifdef HAVE_LIBPCAP
+ capture_callback_add(statusbar_capture_callback, NULL);
+#endif
/* Arrange that if we have no console window, and a GLib message logging
routine is called to log a message, we pop up a console window.
diff --git a/gtk/main_statusbar.c b/gtk/main_statusbar.c
index da1e2eddb8..1779e3c6d0 100644
--- a/gtk/main_statusbar.c
+++ b/gtk/main_statusbar.c
@@ -42,13 +42,16 @@
#include "../file.h"
#include "../capture_opts.h"
#include "../capture_ui_utils.h"
+#ifdef HAVE_LIBPCAP
+#include "../capture.h"
+#endif
#include "gtk/recent.h"
#include "gtk/main.h"
#include "gtk/main_statusbar.h"
+#include "gtk/main_statusbar_private.h"
#include "gtk/gui_utils.h"
#include "gtk/gtkglobals.h"
-#include "gtk/capture_globals.h"
#include "gtk/expert_comp_dlg.h"
#include "gtk/profile_dlg.h"
@@ -566,13 +569,13 @@ statusbar_cf_file_read_finished_cb(capture_file *cf)
#ifdef HAVE_LIBPCAP
static void
-statusbar_cf_live_capture_prepared_cb(capture_options *capture_opts _U_)
+statusbar_capture_prepared_cb(capture_options *capture_opts _U_)
{
statusbar_push_file_msg(" Waiting for capture input data ...");
}
static void
-statusbar_cf_live_capture_update_started_cb(capture_options *capture_opts)
+statusbar_capture_update_started_cb(capture_options *capture_opts)
{
gchar *capture_msg;
@@ -594,8 +597,9 @@ statusbar_cf_live_capture_update_started_cb(capture_options *capture_opts)
}
static void
-statusbar_cf_live_capture_update_continue_cb(capture_file *cf)
+statusbar_capture_update_continue_cb(capture_options *capture_opts)
{
+ capture_file *cf = capture_opts->cf;
gchar *capture_msg;
@@ -605,18 +609,18 @@ statusbar_cf_live_capture_update_continue_cb(capture_file *cf)
if (cf->f_datalen/1024/1024 > 10) {
capture_msg = g_strdup_printf(" %s: <live capture in progress> File: %s %" G_GINT64_MODIFIER "d MB",
- get_iface_description(&global_capture_opts),
- global_capture_opts.save_file,
+ get_iface_description(capture_opts),
+ capture_opts->save_file,
cf->f_datalen/1024/1024);
} else if (cf->f_datalen/1024 > 10) {
capture_msg = g_strdup_printf(" %s: <live capture in progress> File: %s %" G_GINT64_MODIFIER "d KB",
- get_iface_description(&global_capture_opts),
- global_capture_opts.save_file,
+ get_iface_description(capture_opts),
+ capture_opts->save_file,
cf->f_datalen/1024);
} else {
capture_msg = g_strdup_printf(" %s: <live capture in progress> File: %s %" G_GINT64_MODIFIER "d Bytes",
- get_iface_description(&global_capture_opts),
- global_capture_opts.save_file,
+ get_iface_description(capture_opts),
+ capture_opts->save_file,
cf->f_datalen);
}
@@ -624,15 +628,17 @@ statusbar_cf_live_capture_update_continue_cb(capture_file *cf)
}
static void
-statusbar_cf_live_capture_update_finished_cb(capture_file *cf)
+statusbar_capture_update_finished_cb(capture_options *capture_opts)
{
+ capture_file *cf = capture_opts->cf;
+
/* Pop the "<live capture in progress>" message off the status bar. */
statusbar_pop_file_msg();
statusbar_set_filename(cf->filename, cf->f_datalen, &(cf->elapsed_time));
}
static void
-statusbar_cf_live_capture_fixed_started_cb(capture_options *capture_opts)
+statusbar_capture_fixed_started_cb(capture_options *capture_opts)
{
gchar *capture_msg;
@@ -650,8 +656,9 @@ statusbar_cf_live_capture_fixed_started_cb(capture_options *capture_opts)
}
static void
-statusbar_cf_live_capture_fixed_continue_cb(capture_file *cf)
+statusbar_capture_fixed_continue_cb(capture_options *capture_opts)
{
+ capture_file *cf = capture_opts->cf;
gchar *capture_msg;
@@ -663,8 +670,12 @@ statusbar_cf_live_capture_fixed_continue_cb(capture_file *cf)
static void
-statusbar_cf_live_capture_fixed_finished_cb(capture_file *cf _U_)
+statusbar_capture_fixed_finished_cb(capture_options *capture_opts _U_)
{
+#if 0
+ capture_file *cf = capture_opts->cf;
+#endif
+
/* Pop the "<live capture in progress>" message off the status bar. */
statusbar_pop_file_msg();
@@ -723,33 +734,6 @@ statusbar_cf_callback(gint event, gpointer data, gpointer user_data _U_)
case(cf_cb_file_read_finished):
statusbar_cf_file_read_finished_cb(data);
break;
-#ifdef HAVE_LIBPCAP
- case(cf_cb_live_capture_prepared):
- statusbar_cf_live_capture_prepared_cb(data);
- break;
- case(cf_cb_live_capture_update_started):
- statusbar_cf_live_capture_update_started_cb(data);
- break;
- case(cf_cb_live_capture_update_continue):
- statusbar_cf_live_capture_update_continue_cb(data);
- break;
- case(cf_cb_live_capture_update_finished):
- statusbar_cf_live_capture_update_finished_cb(data);
- break;
- case(cf_cb_live_capture_fixed_started):
- statusbar_cf_live_capture_fixed_started_cb(data);
- break;
- case(cf_cb_live_capture_fixed_continue):
- statusbar_cf_live_capture_fixed_continue_cb(data);
- break;
- case(cf_cb_live_capture_fixed_finished):
- statusbar_cf_live_capture_fixed_finished_cb(data);
- break;
- case(cf_cb_live_capture_stopping):
- /* Beware: this state won't be called, if the capture child
- * closes the capturing on it's own! */
- break;
-#endif
case(cf_cb_packet_selected):
break;
case(cf_cb_packet_unselected):
@@ -774,3 +758,40 @@ statusbar_cf_callback(gint event, gpointer data, gpointer user_data _U_)
}
}
+#ifdef HAVE_LIBPCAP
+void
+statusbar_capture_callback(gint event, capture_options *capture_opts,
+ gpointer user_data _U_)
+{
+ switch(event) {
+ case(capture_cb_capture_prepared):
+ statusbar_capture_prepared_cb(capture_opts);
+ break;
+ case(capture_cb_capture_update_started):
+ statusbar_capture_update_started_cb(capture_opts);
+ break;
+ case(capture_cb_capture_update_continue):
+ statusbar_capture_update_continue_cb(capture_opts);
+ break;
+ case(capture_cb_capture_update_finished):
+ statusbar_capture_update_finished_cb(capture_opts);
+ break;
+ case(capture_cb_capture_fixed_started):
+ statusbar_capture_fixed_started_cb(capture_opts);
+ break;
+ case(capture_cb_capture_fixed_continue):
+ statusbar_capture_fixed_continue_cb(capture_opts);
+ break;
+ case(capture_cb_capture_fixed_finished):
+ statusbar_capture_fixed_finished_cb(capture_opts);
+ break;
+ case(capture_cb_capture_stopping):
+ /* Beware: this state won't be called, if the capture child
+ * closes the capturing on it's own! */
+ break;
+ default:
+ g_warning("statusbar_capture_callback: event %u unknown", event);
+ g_assert_not_reached();
+ }
+}
+#endif
diff --git a/gtk/main_statusbar.h b/gtk/main_statusbar.h
index ac028c6e6d..d057248ac9 100644
--- a/gtk/main_statusbar.h
+++ b/gtk/main_statusbar.h
@@ -49,16 +49,4 @@ void statusbar_push_filter_msg(const gchar *msg);
*/
void statusbar_pop_filter_msg(void);
-
-
-/*** PRIVATE INTERFACE BETWEEN main.c AND main_statusbar.c DON'T USE OR TOUCH :-)*/
-
-GtkWidget *statusbar_new(void);
-void statusbar_load_window_geometry(void);
-void statusbar_save_window_geometry(void);
-void statusbar_widgets_emptying(GtkWidget *statusbar);
-void statusbar_widgets_pack(GtkWidget *statusbar);
-void statusbar_widgets_show_or_hide(GtkWidget *statusbar);
-void statusbar_cf_callback(gint event, gpointer data, gpointer user_data);
-
#endif /* __MAIN_STATUSBAR_H__ */
diff --git a/gtk/main_statusbar_private.h b/gtk/main_statusbar_private.h
new file mode 100644
index 0000000000..5467aac73c
--- /dev/null
+++ b/gtk/main_statusbar_private.h
@@ -0,0 +1,42 @@
+/* main_statusbar_private.h
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MAIN_STATUSBAR_PRIVATE_H__
+#define __MAIN_STATUSBAR_PRIVATE_H__
+
+/*** PRIVATE INTERFACE BETWEEN main.c AND main_statusbar.c DON'T USE OR TOUCH :-)*/
+
+GtkWidget *statusbar_new(void);
+void statusbar_load_window_geometry(void);
+void statusbar_save_window_geometry(void);
+void statusbar_widgets_emptying(GtkWidget *statusbar);
+void statusbar_widgets_pack(GtkWidget *statusbar);
+void statusbar_widgets_show_or_hide(GtkWidget *statusbar);
+void statusbar_cf_callback(gint event, gpointer data, gpointer user_data);
+#ifdef HAVE_LIBPCAP
+void statusbar_capture_callback(gint event, capture_options *capture_opts,
+ gpointer user_data);
+#endif
+
+#endif /* __MAIN_STATUSBAR_PRIVATE_H__ */
+