From 0bdc0efc46ec66a298306aae253225c702ed6bea Mon Sep 17 00:00:00 2001 From: Luis Ontanon Date: Thu, 27 Jun 2013 17:10:50 +0000 Subject: [PATCH] get main_window_update out of the way... pass an update_cb to the capture_sync stuff ... as per the XXX comment removed from tshark.c this was a mess to keep the linker happy... I couldn't! I did this without even understanding whether calling main_window_update was realy necessary in most cases. I guess nothing or more specific update cbs would be best. svn path=/trunk/; revision=50188 --- capture.c | 8 ++++---- capture.h | 2 +- capture_ifinfo.c | 8 ++++---- capture_ifinfo.h | 4 ++-- capture_sync.c | 34 +++++++++++++++++----------------- capture_sync.h | 10 +++++----- capture_ui_utils.c | 2 +- dumpcap.c | 29 ++++++++++++++++++----------- tshark.c | 13 +++---------- ui/gtk/capture_dlg.c | 6 +++--- ui/gtk/main.c | 8 ++++---- ui/gtk/main_80211_toolbar.c | 3 ++- ui/gtk/main_welcome.c | 5 +++-- ui/gtk/prefs_capture.c | 15 ++++++++------- ui/gtk/voip_calls.c | 9 ++++++++- ui/iface_lists.c | 10 +++++----- ui/iface_lists.h | 4 ++-- 17 files changed, 90 insertions(+), 80 deletions(-) diff --git a/capture.c b/capture.c index ae940a2d69..5868923fb4 100644 --- a/capture.c +++ b/capture.c @@ -130,7 +130,7 @@ capture_callback_remove(capture_callback_t func) * @return TRUE if the capture starts successfully, FALSE otherwise. */ gboolean -capture_start(capture_options *capture_opts, capture_session *cap_session) +capture_start(capture_options *capture_opts, capture_session *cap_session, void(*update_cb)(void)) { gboolean ret; guint i; @@ -168,7 +168,7 @@ capture_start(capture_options *capture_opts, capture_session *cap_session) cf_set_tempfile_source((capture_file *)cap_session->cf, source->str); g_string_free(source, TRUE); /* try to start the capture child process */ - ret = sync_pipe_start(capture_opts, cap_session); + ret = sync_pipe_start(capture_opts, cap_session, update_cb); if(!ret) { if(capture_opts->save_file != NULL) { g_free(capture_opts->save_file); @@ -660,7 +660,7 @@ capture_input_closed(capture_session *cap_session, gchar *msg) /* close the currently loaded capture file */ cf_close((capture_file *)cap_session->cf); - capture_start(capture_opts, cap_session); + capture_start(capture_opts, cap_session,NULL); /*XXX is this NULL ok or we need an update_cb???*/ } else { /* We're not doing a capture any more, so we don't have a save file. */ g_free(capture_opts->save_file); @@ -696,7 +696,7 @@ capture_stat_start(capture_options *capture_opts) { * mechanism, so opening all the devices and presenting packet * counts might not always be a good idea. */ - if (sync_interface_stats_open(&stat_fd, &fork_child, &msg) == 0) { + if (sync_interface_stats_open(&stat_fd, &fork_child, &msg, NULL) == 0) { sc = (if_stat_cache_t *)g_malloc(sizeof(if_stat_cache_t)); sc->stat_fd = stat_fd; sc->fork_child = fork_child; diff --git a/capture.h b/capture.h index dd638870dc..f6f205d307 100644 --- a/capture.h +++ b/capture.h @@ -66,7 +66,7 @@ capture_callback_remove(capture_callback_t func); * @return TRUE if the capture starts successfully, FALSE otherwise. */ extern gboolean -capture_start(capture_options *capture_opts, capture_session *cap_session); +capture_start(capture_options *capture_opts, capture_session *cap_session, void(*update_cb)(void)); /** Stop a capture session (usually from a menu item). */ extern void diff --git a/capture_ifinfo.c b/capture_ifinfo.c index 8b6faaea6e..a0a5dea2fd 100644 --- a/capture_ifinfo.c +++ b/capture_ifinfo.c @@ -105,7 +105,7 @@ static void append_remote_list(GList *iflist) /* XXX - We parse simple text output to get our interface list. Should * we use "real" data serialization instead, e.g. via XML? */ GList * -capture_interface_list(int *err, char **err_str) +capture_interface_list(int *err, char **err_str, void (*update_cb)(void)) { int ret; GList *if_list = NULL; @@ -119,7 +119,7 @@ capture_interface_list(int *err, char **err_str) g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, "Capture Interface List ..."); /* Try to get our interface list */ - ret = sync_interface_list_open(&data, &primary_msg, &secondary_msg); + ret = sync_interface_list_open(&data, &primary_msg, &secondary_msg, update_cb); if (ret != 0) { g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, "Capture Interface List failed!"); if (err_str) { @@ -206,7 +206,7 @@ capture_interface_list(int *err, char **err_str) * we use "real" data serialization instead, e.g. via XML? */ if_capabilities_t * capture_get_if_capabilities(const gchar *ifname, gboolean monitor_mode, - char **err_str) + char **err_str, void (*update_cb)(void)) { if_capabilities_t *caps; GList *linktype_list = NULL; @@ -219,7 +219,7 @@ capture_get_if_capabilities(const gchar *ifname, gboolean monitor_mode, /* Try to get our interface list */ err = sync_if_capabilities_open(ifname, monitor_mode, &data, - &primary_msg, &secondary_msg); + &primary_msg, &secondary_msg, update_cb); if (err != 0) { g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, "Capture Interface Capabilities failed!"); if (err_str) { diff --git a/capture_ifinfo.h b/capture_ifinfo.h index 097d9e10ba..b19454f899 100644 --- a/capture_ifinfo.h +++ b/capture_ifinfo.h @@ -77,7 +77,7 @@ typedef struct { /** * Fetch the interface list from a child process. */ -extern GList *capture_interface_list(int *err, char **err_str); +extern GList *capture_interface_list(int *err, char **err_str, void (*update_cb)(void)); /* Error values from "get_interface_list()/capture_interface_list()". */ #define CANT_GET_INTERFACE_LIST 1 /* error getting list */ @@ -110,7 +110,7 @@ typedef struct { */ extern if_capabilities_t * capture_get_if_capabilities(const char *devname, gboolean monitor_mode, - char **err_str); + char **err_str, void (*update_cb)(void)); void free_if_capabilities(if_capabilities_t *caps); diff --git a/capture_sync.c b/capture_sync.c index 5914977c6c..9a2136814a 100644 --- a/capture_sync.c +++ b/capture_sync.c @@ -334,7 +334,7 @@ init_pipe_args(int *argc) { #define ARGV_NUMBER_LEN 24 /* a new capture run: start a new dumpcap task and hand over parameters through command line */ gboolean -sync_pipe_start(capture_options *capture_opts, capture_session *cap_session) +sync_pipe_start(capture_options *capture_opts, capture_session *cap_session, void (*update_cb)(void)) { char ssnap[ARGV_NUMBER_LEN]; char scount[ARGV_NUMBER_LEN]; @@ -687,7 +687,7 @@ sync_pipe_start(capture_options *capture_opts, capture_session *cap_session) cap_session->capture_opts = capture_opts; /* we might wait for a moment till child is ready, so update screen now */ - main_window_update(); + if (update_cb) update_cb(); /* We were able to set up to read the capture file; arrange that our callback be called whenever it's possible @@ -718,7 +718,7 @@ sync_pipe_start(capture_options *capture_opts, capture_session *cap_session) #define PIPE_BUF_SIZE 5120 static int sync_pipe_open_command(char** argv, int *data_read_fd, - int *message_read_fd, int *fork_child, gchar **msg) + int *message_read_fd, int *fork_child, gchar **msg, void(*update_cb)(void)) { enum PIPES { PIPE_READ, PIPE_WRITE }; /* Constants 0 and 1 for PIPE_READ and PIPE_WRITE */ #ifdef _WIN32 @@ -912,7 +912,7 @@ sync_pipe_open_command(char** argv, int *data_read_fd, } /* we might wait for a moment till child is ready, so update screen now */ - main_window_update(); + if (update_cb) update_cb(); return 0; } @@ -957,7 +957,7 @@ sync_pipe_close_command(int *data_read_fd, int *message_read_fd, #define PIPE_BUF_SIZE 5120 static int sync_pipe_run_command_actual(char** argv, gchar **data, gchar **primary_msg, - gchar **secondary_msg) + gchar **secondary_msg, void(*update_cb)(void)) { gchar *msg; int data_pipe_read_fd, sync_pipe_read_fd, fork_child, ret; @@ -974,7 +974,7 @@ sync_pipe_run_command_actual(char** argv, gchar **data, gchar **primary_msg, ssize_t count; ret = sync_pipe_open_command(argv, &data_pipe_read_fd, &sync_pipe_read_fd, - &fork_child, &msg); + &fork_child, &msg, update_cb); if (ret == -1) { *primary_msg = msg; *secondary_msg = NULL; @@ -1133,7 +1133,7 @@ sync_pipe_run_command_actual(char** argv, gchar **data, gchar **primary_msg, */ static int sync_pipe_run_command(char** argv, gchar **data, gchar **primary_msg, - gchar **secondary_msg) + gchar **secondary_msg, void (*update_cb)(void)) { int ret, i; GTimeVal start_time; @@ -1151,7 +1151,7 @@ sync_pipe_run_command(char** argv, gchar **data, gchar **primary_msg, } } /* do the actual sync pipe run command */ - ret=sync_pipe_run_command_actual(argv, data, primary_msg, secondary_msg); + ret=sync_pipe_run_command_actual(argv, data, primary_msg, secondary_msg, update_cb); if(logging_enabled){ g_get_current_time(&end_time); @@ -1168,7 +1168,7 @@ sync_pipe_run_command(char** argv, gchar **data, gchar **primary_msg, int sync_interface_set_80211_chan(const gchar *iface, const char *freq, const gchar *type, gchar **data, gchar **primary_msg, - gchar **secondary_msg) + gchar **secondary_msg, void (*update_cb)(void)) { int argc, ret; char **argv; @@ -1207,7 +1207,7 @@ sync_interface_set_80211_chan(const gchar *iface, const char *freq, const gchar argv = sync_pipe_add_arg(argv, &argc, SIGNAL_PIPE_CTRL_ID_NONE); #endif - ret = sync_pipe_run_command(argv, data, primary_msg, secondary_msg); + ret = sync_pipe_run_command(argv, data, primary_msg, secondary_msg, update_cb); g_free(opt); return ret; } @@ -1226,7 +1226,7 @@ sync_interface_set_80211_chan(const gchar *iface, const char *freq, const gchar */ int sync_interface_list_open(gchar **data, gchar **primary_msg, - gchar **secondary_msg) + gchar **secondary_msg, void (*update_cb)(void)) { int argc; char **argv; @@ -1236,7 +1236,7 @@ sync_interface_list_open(gchar **data, gchar **primary_msg, argv = init_pipe_args(&argc); if (!argv) { - *primary_msg = g_strdup("We don't know where to find dumpcap."); + *primary_msg = g_strdup("We don't know where to find dumpcap.."); *secondary_msg = NULL; *data = NULL; return -1; @@ -1250,7 +1250,7 @@ sync_interface_list_open(gchar **data, gchar **primary_msg, argv = sync_pipe_add_arg(argv, &argc, "-Z"); argv = sync_pipe_add_arg(argv, &argc, SIGNAL_PIPE_CTRL_ID_NONE); #endif - return sync_pipe_run_command(argv, data, primary_msg, secondary_msg); + return sync_pipe_run_command(argv, data, primary_msg, secondary_msg, update_cb); } /* @@ -1268,7 +1268,7 @@ sync_interface_list_open(gchar **data, gchar **primary_msg, int sync_if_capabilities_open(const gchar *ifname, gboolean monitor_mode, gchar **data, gchar **primary_msg, - gchar **secondary_msg) + gchar **secondary_msg, void (*update_cb)(void)) { int argc; char **argv; @@ -1296,7 +1296,7 @@ sync_if_capabilities_open(const gchar *ifname, gboolean monitor_mode, argv = sync_pipe_add_arg(argv, &argc, "-Z"); argv = sync_pipe_add_arg(argv, &argc, SIGNAL_PIPE_CTRL_ID_NONE); #endif - return sync_pipe_run_command(argv, data, primary_msg, secondary_msg); + return sync_pipe_run_command(argv, data, primary_msg, secondary_msg, update_cb); } /* @@ -1306,7 +1306,7 @@ sync_if_capabilities_open(const gchar *ifname, gboolean monitor_mode, * that must be g_free()d, and -1 will be returned. */ int -sync_interface_stats_open(int *data_read_fd, int *fork_child, gchar **msg) +sync_interface_stats_open(int *data_read_fd, int *fork_child, gchar **msg, void (*update_cb)(void)) { int argc; char **argv; @@ -1338,7 +1338,7 @@ sync_interface_stats_open(int *data_read_fd, int *fork_child, gchar **msg) argv = sync_pipe_add_arg(argv, &argc, SIGNAL_PIPE_CTRL_ID_NONE); #endif ret = sync_pipe_open_command(argv, data_read_fd, &message_read_fd, - fork_child, msg); + fork_child, msg, update_cb); if (ret == -1) return -1; diff --git a/capture_sync.h b/capture_sync.h index 337abc5819..8da65956fe 100644 --- a/capture_sync.h +++ b/capture_sync.h @@ -47,7 +47,7 @@ * @return TRUE if a capture could be started, FALSE if not */ extern gboolean -sync_pipe_start(capture_options *capture_opts, capture_session *cap_session); +sync_pipe_start(capture_options *capture_opts, capture_session *cap_session, void(*update_cb)(void)); /** User wants to stop capturing, gracefully close the capture child */ extern void @@ -61,22 +61,22 @@ sync_pipe_kill(int fork_child); extern int sync_interface_set_80211_chan(const gchar *iface, const char *freq, const gchar *type, gchar **data, gchar **primary_msg, - gchar **secondary_msg); + gchar **secondary_msg, void (*update_cb)(void)); /** Get an interface list using dumpcap */ extern int sync_interface_list_open(gchar **data, gchar **primary_msg, - gchar **secondary_msg); + gchar **secondary_msg, void (*update_cb)(void)); /** Get interface capabilities using dumpcap */ extern int sync_if_capabilities_open(const gchar *ifname, gboolean monitor_mode, gchar **data, gchar **primary_msg, - gchar **secondary_msg); + gchar **secondary_msg, void (*update_cb)(void)); /** Start getting interface statistics using dumpcap. */ extern int -sync_interface_stats_open(int *read_fd, int *fork_child, gchar **msg); +sync_interface_stats_open(int *read_fd, int *fork_child, gchar **msg, void (*update_cb)(void)); /** Stop gathering statistics. */ extern int diff --git a/capture_ui_utils.c b/capture_ui_utils.c index d2bcc5218a..b0dd741382 100644 --- a/capture_ui_utils.c +++ b/capture_ui_utils.c @@ -290,7 +290,7 @@ get_interface_descriptive_name(const char *if_name) /* No, we don't have a user-supplied description; did we get one from the OS or libpcap? */ descr = NULL; - if_list = capture_interface_list(&err, NULL); + if_list = capture_interface_list(&err, NULL, NULL); if (if_list != NULL) { if_entry = if_list; do { diff --git a/dumpcap.c b/dumpcap.c index cda32a6ebd..875d15b63a 100644 --- a/dumpcap.c +++ b/dumpcap.c @@ -232,12 +232,14 @@ typedef enum { STATE_EXPECT_DATA, STATE_READ_DATA } cap_pipe_state_t; + typedef enum { PIPOK, PIPEOF, PIPERR, PIPNEXIST } cap_pipe_err_t; + typedef struct _pcap_options { guint32 received; guint32 dropped; @@ -309,6 +311,7 @@ typedef struct _pcap_queue_element { */ static const char please_report[] = "Please report this to the Wireshark developers.\n" + "http://bugs.wireshark.org/\n" "(This is not a crash; please do not report it as such.)"; /* @@ -929,7 +932,7 @@ show_filter_code(capture_options *capture_opts) #endif if (capture_child) { /* Let our parent know we succeeded. */ - pipe_write_block(2, SP_SUCCESS, NULL); + pipe_write_block(2, SP_SUCCESS, NULL); /// } return TRUE; } @@ -949,7 +952,7 @@ show_filter_code(capture_options *capture_opts) * just call get_interface_list(). */ GList * -capture_interface_list(int *err, char **err_str) +capture_interface_list(int *err, char **err_str, void(*update_cb)(void) _U_) { return get_interface_list(err, err_str); } @@ -1288,7 +1291,7 @@ print_machine_readable_interfaces(GList *if_list) if (capture_child) { /* Let our parent know we succeeded. */ - pipe_write_block(2, SP_SUCCESS, NULL); + pipe_write_block(2, SP_SUCCESS, NULL); /// } i = 1; /* Interface id number */ @@ -1366,7 +1369,7 @@ print_machine_readable_if_capabilities(if_capabilities_t *caps) if (capture_child) { /* Let our parent know we succeeded. */ - pipe_write_block(2, SP_SUCCESS, NULL); + pipe_write_block(2, SP_SUCCESS, NULL); /// } if (caps->can_set_rfmon) @@ -1442,7 +1445,7 @@ print_statistics_loop(gboolean machine_readable) if (capture_child) { /* Let our parent know we succeeded. */ - pipe_write_block(2, SP_SUCCESS, NULL); + pipe_write_block(2, SP_SUCCESS, NULL); /// } if (!machine_readable) { @@ -4104,7 +4107,7 @@ set_80211_channel(const char *iface, const char *opt) } if (capture_child) - pipe_write_block(2, SP_SUCCESS, NULL); + pipe_write_block(2, SP_SUCCESS, NULL); /// ret = 0; out: @@ -4661,7 +4664,7 @@ main(int argc, char *argv[]) int err; gchar *err_str; - if_list = capture_interface_list(&err, &err_str); + if_list = capture_interface_list(&err, &err_str,NULL); if (if_list == NULL) { switch (err) { case CANT_GET_INTERFACE_LIST: @@ -4928,7 +4931,7 @@ report_packet_count(unsigned int packet_count) if (capture_child) { g_snprintf(tmp, sizeof(tmp), "%u", packet_count); g_log(LOG_DOMAIN_CAPTURE_CHILD, G_LOG_LEVEL_DEBUG, "Packets: %s", tmp); - pipe_write_block(2, SP_PACKET_COUNT, tmp); + pipe_write_block(2, SP_PACKET_COUNT, tmp); /// } else { count += packet_count; fprintf(stderr, "\rPackets: %u ", count); @@ -4942,7 +4945,7 @@ report_new_capture_file(const char *filename) { if (capture_child) { g_log(LOG_DOMAIN_CAPTURE_CHILD, G_LOG_LEVEL_DEBUG, "File: %s", filename); - pipe_write_block(2, SP_FILE, filename); + pipe_write_block(2, SP_FILE, filename); /// } else { #ifdef SIGINFO /* @@ -4981,7 +4984,7 @@ report_cfilter_error(capture_options *capture_opts, guint i, const char *errmsg) if (capture_child) { g_snprintf(tmp, sizeof(tmp), "%u:%s", i, errmsg); g_log(LOG_DOMAIN_CAPTURE_CHILD, G_LOG_LEVEL_DEBUG, "Capture filter error: %s", errmsg); - pipe_write_block(2, SP_BAD_FILTER, tmp); + pipe_write_block(2, SP_BAD_FILTER, tmp); /// } else { /* * clopts_step_invalid_capfilter in test/suite-clopts.sh MUST match @@ -5027,7 +5030,7 @@ report_packet_drops(guint32 received, guint32 pcap_drops, guint32 drops, guint32 "Packets received/dropped on interface %s: %u/%u (pcap:%u/dumpcap:%u/flushed:%u)", name, received, total_drops, pcap_drops, drops, flushed); /* XXX: Need to provide interface id, changes to consumers required. */ - pipe_write_block(2, SP_DROPS, tmp); + pipe_write_block(2, SP_DROPS, tmp); /// } else { fprintf(stderr, "Packets received/dropped on interface '%s': %u/%u (pcap:%u/dumpcap:%u/flushed:%u) (%.1f%%)\n", @@ -5087,6 +5090,10 @@ signal_pipe_check_running(void) } #endif + + + + /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * diff --git a/tshark.c b/tshark.c index c2f376fc0d..3c1413b4f7 100644 --- a/tshark.c +++ b/tshark.c @@ -1245,7 +1245,7 @@ main(int argc, char *argv[]) #endif case 'D': /* Print a list of capture devices and exit */ #ifdef HAVE_LIBPCAP - if_list = capture_interface_list(&err, &err_str); + if_list = capture_interface_list(&err, &err_str,NULL); if (if_list == NULL) { switch (err) { case CANT_GET_INTERFACE_LIST: @@ -1959,7 +1959,7 @@ main(int argc, char *argv[]) if_capabilities_t *caps; interface_opts = g_array_index(global_capture_opts.ifaces, interface_options, i); - caps = capture_get_if_capabilities(interface_opts.name, interface_opts.monitor_mode, &err_str); + caps = capture_get_if_capabilities(interface_opts.name, interface_opts.monitor_mode, &err_str, NULL); if (caps == NULL) { cmdarg_err("%s", err_str); g_free(err_str); @@ -2274,7 +2274,7 @@ capture(void) fflush(stderr); g_string_free(str, TRUE); - ret = sync_pipe_start(&global_capture_opts, &global_capture_session); + ret = sync_pipe_start(&global_capture_opts, &global_capture_session, NULL); if (!ret) return FALSE; @@ -2341,13 +2341,6 @@ capture(void) return TRUE; } - -/* XXX - move the call to main_window_update() out of capture_sync.c */ -/* dummy for capture_sync.c to make linker happy */ -void main_window_update(void) -{ -} - /* capture child detected an error */ void capture_input_error_message(capture_session *cap_session _U_, char *error_msg, char *secondary_error_msg) diff --git a/ui/gtk/capture_dlg.c b/ui/gtk/capture_dlg.c index 5b1c467cc8..1ac27b3ead 100644 --- a/ui/gtk/capture_dlg.c +++ b/ui/gtk/capture_dlg.c @@ -5298,7 +5298,7 @@ capture_start_cb(GtkWidget *w _U_, gpointer d _U_) this capture. */ collect_ifaces(&global_capture_opts); - if (capture_start(&global_capture_opts, &global_capture_session)) { + if (capture_start(&global_capture_opts, &global_capture_session, main_window_update)) { /* The capture succeeded, which means the capture filter syntax is valid; add this capture filter to the recent capture filter list. */ for (i = 0; i < global_capture_opts.ifaces->len; i++) { @@ -5796,7 +5796,7 @@ capture_prep_monitor_changed_cb(GtkWidget *monitor, gpointer argp _U_) if_string = g_strdup(device.name); monitor_mode = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(monitor)); - caps = capture_get_if_capabilities(if_string, monitor_mode, NULL); + caps = capture_get_if_capabilities(if_string, monitor_mode, NULL, main_window_update); if (caps != NULL) { g_signal_handlers_disconnect_by_func(linktype_combo_box, G_CALLBACK(select_link_type_cb), NULL ); @@ -6020,7 +6020,7 @@ void refresh_local_interface_lists(void) { /* Reload the local interface list. */ - scan_local_interfaces(); + scan_local_interfaces(main_window_update); /* If there's an interfaces dialog up, refresh it. */ if (interfaces_dialog_window_present()) diff --git a/ui/gtk/main.c b/ui/gtk/main.c index 981a316be8..49d7c0db87 100644 --- a/ui/gtk/main.c +++ b/ui/gtk/main.c @@ -2293,7 +2293,7 @@ main(int argc, char *argv[]) break; case 'D': /* Print a list of capture devices and exit */ #ifdef HAVE_LIBPCAP - if_list = capture_interface_list(&err, &err_str); + if_list = capture_interface_list(&err, &err_str,main_window_update); if (if_list == NULL) { switch (err) { case CANT_GET_INTERFACE_LIST: @@ -2800,7 +2800,7 @@ main(int argc, char *argv[]) } #ifdef HAVE_LIBPCAP - fill_in_local_interfaces(); + fill_in_local_interfaces(main_window_update); if (start_capture && list_link_layer_types) { /* Specifying *both* is bogus. */ cmdarg_err("You can't specify both -L and a live capture."); @@ -2870,7 +2870,7 @@ main(int argc, char *argv[]) device = g_array_index(global_capture_opts.all_ifaces, interface_t, i); if (device.selected) { #if defined(HAVE_PCAP_CREATE) - caps = capture_get_if_capabilities(device.name, device.monitor_mode_supported, &err_str); + caps = capture_get_if_capabilities(device.name, device.monitor_mode_supported, &err_str, main_window_update); #else caps = capture_get_if_capabilities(device.name, FALSE, &err_str); #endif @@ -3133,7 +3133,7 @@ main(int argc, char *argv[]) to use for this capture. */ if (global_capture_opts.ifaces->len == 0) collect_ifaces(&global_capture_opts); - if (capture_start(&global_capture_opts, &global_capture_session)) { + if (capture_start(&global_capture_opts, &global_capture_session,main_window_update)) { /* The capture started. Open stat windows; we do so after creating the main window, to avoid GTK warnings, and after successfully opening the capture file, so we know we have something to compute diff --git a/ui/gtk/main_80211_toolbar.c b/ui/gtk/main_80211_toolbar.c index 6b08d4cd16..0d244bc9a0 100644 --- a/ui/gtk/main_80211_toolbar.c +++ b/ui/gtk/main_80211_toolbar.c @@ -43,6 +43,7 @@ #include "ui/recent.h" #include "ui/gtk/old-gtk-compat.h" +#include "ui/ui_util.h" #include "ui/gtk/main_80211_toolbar.h" #include @@ -175,7 +176,7 @@ tb80211_do_set_channel(char *iface, int freq, int type) freq_s = g_strdup_printf("%d", freq); type_s = ws80211_chan_type_to_str(type); ret = sync_interface_set_80211_chan(iface, freq_s, type_s, - &data, &primary_msg, &secondary_msg); + &data, &primary_msg, &secondary_msg, main_window_update); /* Parse the error msg */ if (ret && primary_msg) { diff --git a/ui/gtk/main_welcome.c b/ui/gtk/main_welcome.c index 215c6fa20c..fd39bbedb9 100644 --- a/ui/gtk/main_welcome.c +++ b/ui/gtk/main_welcome.c @@ -47,6 +47,7 @@ #include "ui/recent.h" #include "ui/simple_dialog.h" #include "ui/utf8_entities.h" +#include "ui/ui_util.h" #include "ui/gtk/gui_utils.h" #include "ui/gtk/color_utils.h" @@ -1068,7 +1069,7 @@ static void fill_capture_box(void) /* run capture_interface_list(), not to get the interfaces, but to detect * any errors, if there is an error, display an appropriate message in the gui */ - capture_interface_list(&error, &err_str); + capture_interface_list(&error, &err_str,main_window_update); switch (error) { case CANT_GET_INTERFACE_LIST: @@ -1297,7 +1298,7 @@ welcome_new(void) g_object_set_data(G_OBJECT(welcome_hb), CAPTURE_VIEW, topic_capture_to_fill); #ifdef HAVE_LIBPCAP - fill_in_local_interfaces(); + fill_in_local_interfaces(main_window_update); fill_capture_box(); /* capture help topic */ diff --git a/ui/gtk/prefs_capture.c b/ui/gtk/prefs_capture.c index df54c62f90..010984c6e6 100644 --- a/ui/gtk/prefs_capture.c +++ b/ui/gtk/prefs_capture.c @@ -37,6 +37,7 @@ #include "ui/capture_globals.h" #include "ui/iface_lists.h" #include "ui/simple_dialog.h" +#include "ui/ui_util.h" #include "ui/gtk/prefs_capture.h" #include "ui/gtk/prefs_dlg.h" @@ -160,7 +161,7 @@ capture_prefs_show(void) /* * XXX - what if we can't get the list? */ - if_list = capture_interface_list(&err, NULL); + if_list = capture_interface_list(&err, NULL, main_window_update); combo_list = build_capture_combo_list(if_list, FALSE); free_interface_list(if_list); if (combo_list != NULL) { @@ -1076,7 +1077,7 @@ ifopts_description_to_val (const char *if_name, gboolean monitor_mode, const cha if_capabilities_t *caps; int dlt = -1; - caps = capture_get_if_capabilities(if_name, monitor_mode, NULL); + caps = capture_get_if_capabilities(if_name, monitor_mode, NULL, main_window_update); if (caps != NULL) { if (caps->data_link_types != NULL) { GList *lt_entry; @@ -1186,9 +1187,9 @@ ifopts_edit_ifsel_cb(GtkTreeSelection *selection _U_, * to the interface capabilities of the selected interface */ #ifdef HAVE_PCAP_CREATE - caps = capture_get_if_capabilities(if_name, monitor_mode, NULL); + caps = capture_get_if_capabilities(if_name, monitor_mode, NULL, main_window_update); #else - caps = capture_get_if_capabilities(if_name, FALSE, NULL); + caps = capture_get_if_capabilities(if_name, FALSE, NULL, main_window_update); #endif if (caps != NULL) { #ifdef HAVE_PCAP_CREATE @@ -1304,7 +1305,7 @@ ifopts_edit_monitor_changed_cb(GtkToggleButton *tbt, gpointer udata) gtk_list_store_set (list_store, &list_iter, DEF_MONITOR_MODE_COLUMN, monitor_mode, -1); - caps = capture_get_if_capabilities(if_name, monitor_mode, NULL); + caps = capture_get_if_capabilities(if_name, monitor_mode, NULL, main_window_update); #else /* no monitor-mode support */ caps = capture_get_if_capabilities(if_name, FALSE, NULL); @@ -1620,7 +1621,7 @@ ifopts_options_add(GtkListStore *list_store, if_info_t *if_info) #ifdef HAVE_PCAP_CREATE /* get default monitor mode setting */ monitor_mode = prefs_capture_device_monitor_mode(if_info->name); - caps = capture_get_if_capabilities(if_info->name, monitor_mode, NULL); + caps = capture_get_if_capabilities(if_info->name, monitor_mode, NULL, main_window_update); #else /* no monitor-mode support */ caps = capture_get_if_capabilities(if_info->name, FALSE, NULL); @@ -1774,7 +1775,7 @@ ifopts_if_liststore_add(void) int err; gchar *err_str; - if_list = capture_interface_list(&err, &err_str); /* if_list = ptr to first element of list (or NULL) */ + if_list = capture_interface_list(&err, &err_str, main_window_update); /* if_list = ptr to first element of list (or NULL) */ if (if_list == NULL) { if (err != NO_INTERFACES_FOUND) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str); diff --git a/ui/gtk/voip_calls.c b/ui/gtk/voip_calls.c index 0798cb1b7b..d3599f7883 100644 --- a/ui/gtk/voip_calls.c +++ b/ui/gtk/voip_calls.c @@ -74,6 +74,9 @@ #endif /* HAVE_LIBPORTAUDIO */ +#define DUMP_PTR1(p) printf("#=> %p\n",p) +#define DUMP_PTR2(p) printf("==> %p\n",p) + const char *voip_call_state_name[8]={ "", "CALL SETUP", @@ -1526,7 +1529,8 @@ q931_calls_packet(void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, co /* remove this LRQ/LCF call entry because we have found the Setup that match them */ g_free(tmp_listinfo->from_identity); g_free(tmp_listinfo->to_identity); - g_free(tmp2_h323info->guid); + DUMP_PTR2(tmp2_h323info->guid); + g_free(tmp2_h323info->guid); list2 = g_list_first(tmp2_h323info->h245_list); while (list2) @@ -1745,6 +1749,7 @@ static void add_h245_Address(h323_calls_info_t *h323info, h245_address_t *h245_ static void free_h225_info(gpointer p) { h323_calls_info_t *tmp_h323info = (h323_calls_info_t *)p; + DUMP_PTR2(tmp_h323info->guid); g_free(tmp_h323info->guid); if (tmp_h323info->h245_list) { @@ -1843,6 +1848,8 @@ H225calls_packet(void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, con tmp_h323info = (h323_calls_info_t *)callsinfo->prot_info; g_assert(tmp_h323info != NULL); tmp_h323info->guid = (e_guid_t *)g_memdup(&pi->guid, sizeof pi->guid); + DUMP_PTR1(tmp_h323info->guid); + tmp_h323info->h225SetupAddr.type = AT_NONE; tmp_h323info->h225SetupAddr.len = 0; tmp_h323info->h245_list = NULL; diff --git a/ui/iface_lists.c b/ui/iface_lists.c index 4741424859..0ec6efcad0 100644 --- a/ui/iface_lists.c +++ b/ui/iface_lists.c @@ -63,7 +63,7 @@ if_list_comparator_alph(const void *first_arg, const void *second_arg) * those interfaces. */ void -scan_local_interfaces(void) +scan_local_interfaces(void (*update_cb)(void)) { GList *if_entry, *lt_entry, *if_list; if_info_t *if_info, *temp; @@ -94,7 +94,7 @@ scan_local_interfaces(void) } /* Scan through the list and build a list of strings to display. */ - if_list = capture_interface_list(&err, NULL); + if_list = capture_interface_list(&err, NULL, update_cb); count = 0; for (if_entry = if_list; if_entry != NULL; if_entry = g_list_next(if_entry)) { if_info = (if_info_t *)if_entry->data; @@ -160,7 +160,7 @@ scan_local_interfaces(void) } device.type = if_info->type; monitor_mode = prefs_capture_device_monitor_mode(if_info->name); - caps = capture_get_if_capabilities(if_info->name, monitor_mode, NULL); + caps = capture_get_if_capabilities(if_info->name, monitor_mode, NULL, update_cb); for (; (curr_addr = g_slist_nth(if_info->addrs, ips)) != NULL; ips++) { temp_addr = (if_addr_t *)g_malloc0(sizeof(if_addr_t)); if (ips != 0) { @@ -347,7 +347,7 @@ scan_local_interfaces(void) * record how long it takes in the info log. */ void -fill_in_local_interfaces(void) +fill_in_local_interfaces(void(*update_cb)(void)) { GTimeVal start_time; GTimeVal end_time; @@ -360,7 +360,7 @@ fill_in_local_interfaces(void) if (!initialized) { /* do the actual work */ - scan_local_interfaces(); + scan_local_interfaces(update_cb); initialized = TRUE; } /* log how long it took */ diff --git a/ui/iface_lists.h b/ui/iface_lists.h index 8cc4888783..7930ab6c37 100644 --- a/ui/iface_lists.h +++ b/ui/iface_lists.h @@ -41,12 +41,12 @@ extern gint if_list_comparator_alph(const void *first_arg, const void *second_ar * Get the global interface list. Generate it if we haven't * done so already. */ -extern void fill_in_local_interfaces(void); +extern void fill_in_local_interfaces(void(*update_cb)(void)); /* * Update the global interface list. */ -extern void scan_local_interfaces(void); +extern void scan_local_interfaces(void (*update_cb)(void)); extern void hide_interface(gchar* new_hide); #endif /* HAVE_LIBPCAP */