diff options
author | Gary Kramlich <grim@reaperworld.com> | 2015-12-30 19:55:07 -0600 |
---|---|---|
committer | Gary Kramlich <grim@reaperworld.com> | 2015-12-30 19:55:07 -0600 |
commit | b1c9aace19bc19e7a171030589487a77386c259b (patch) | |
tree | 6e4cf4c6d498c7688414b1dec1805e4bef6e4a8c | |
parent | 115f6c027a13005467c09eb74817d1d91a41de04 (diff) | |
parent | a5948315cc9cf2505090747cff08ecb30633c6b6 (diff) | |
download | pidgin-b1c9aace19bc19e7a171030589487a77386c259b.tar.gz |
Merged in rw_grim/pidgin/replace-nm-with-gio (pull request #4)
Replace nm with gio
-rw-r--r-- | ChangeLog.API | 1 | ||||
-rw-r--r-- | configure.ac | 24 | ||||
-rw-r--r-- | libpurple/nat-pmp.c | 11 | ||||
-rw-r--r-- | libpurple/network.c | 513 | ||||
-rw-r--r-- | libpurple/upnp.c | 19 | ||||
-rw-r--r-- | pidgin/gtkdialogs.c | 8 | ||||
-rw-r--r-- | pidgin/win32/gtkwin32dep.c | 22 |
7 files changed, 26 insertions, 572 deletions
diff --git a/ChangeLog.API b/ChangeLog.API index d11238d981..3032f1e56e 100644 --- a/ChangeLog.API +++ b/ChangeLog.API @@ -412,6 +412,7 @@ version 3.0.0 (??/??/????): * _PurpleSoundEventID * _XMLNodeType * account-authorization-requested-with-message signal + * network-configuration-changed signal * purple_account_add_buddies_with_invite * purple_account_add_buddy_with_invite * purple_account_set_current_error diff --git a/configure.ac b/configure.ac index dcb0a9e877..424bb56cc0 100644 --- a/configure.ac +++ b/configure.ac @@ -1513,9 +1513,6 @@ dnl ####################################################################### AC_ARG_ENABLE(dbus, [AS_HELP_STRING([--disable-dbus], [disable D-Bus support])], , enable_dbus="$is_not_win32") -AC_ARG_ENABLE(nm, - [AS_HELP_STRING([--disable-nm], [disable NetworkManager support (requires D-Bus)])], - enable_nm=$enableval, enable_nm="$is_not_win32") if test "x$enable_dbus" = "xyes" ; then AC_CHECK_PROG(enable_dbus, dbus-binding-tool, yes, no) @@ -1536,26 +1533,6 @@ Use --disable-dbus if you do not need D-Bus support. fi]) fi -dnl Check for NetworkManager.h; if we don't have it, oh well -if test "x$enable_dbus" = "xyes" ; then - if test "x$enable_nm" = "xyes" ; then - PKG_CHECK_MODULES(NETWORKMANAGER, [NetworkManager >= 0.5.0], [ - AC_SUBST(NETWORKMANAGER_CFLAGS) - AC_SUBST(NETWORKMANAGER_LIBS) - AC_DEFINE(HAVE_NETWORKMANAGER, 1, [Define if we have NetworkManager.]) - ], [ - enable_nm=no - if test "x$force_deps" = "xyes" ; then - AC_MSG_ERROR([ -NetworkManager development headers not found. -Use --disable-nm if you do not need NetworkManager support. -]) - fi]) - fi -else - enable_nm=no -fi - dnl ####################################################################### dnl # Check for Unity and Messaging Menu dnl ####################################################################### @@ -2336,7 +2313,6 @@ if test "x$enable_dbus" = "xyes" ; then eval eval echo D-Bus services directory...... : $DBUS_SERVICES_DIR fi echo Build with GNU Libidn......... : $enable_idn -echo Build with NetworkManager..... : $enable_nm echo SSL Library/Libraries......... : $msg_ssl if test "x$SSL_CERTIFICATES_DIR" != "x" ; then eval eval echo SSL CA certificates directory. : $SSL_CERTIFICATES_DIR diff --git a/libpurple/nat-pmp.c b/libpurple/nat-pmp.c index 780021a768..a61a51f69c 100644 --- a/libpurple/nat-pmp.c +++ b/libpurple/nat-pmp.c @@ -24,6 +24,8 @@ * OF SUCH DAMAGE. */ +#include <gio/gio.h> + #include "internal.h" #include "nat-pmp.h" #include "debug.h" @@ -514,7 +516,7 @@ purple_pmp_destroy_map(PurplePmpType type, unsigned short privateport) } static void -purple_pmp_network_config_changed_cb(void *data) +purple_pmp_network_config_changed_cb(GNetworkMonitor *monitor, gboolean avialable, gpointer data) { pmp_info.status = PURPLE_PMP_STATUS_UNDISCOVERED; g_free(pmp_info.publicip); @@ -532,9 +534,10 @@ purple_pmp_get_handle(void) void purple_pmp_init() { - purple_signal_connect(purple_network_get_handle(), "network-configuration-changed", - purple_pmp_get_handle(), PURPLE_CALLBACK(purple_pmp_network_config_changed_cb), - GINT_TO_POINTER(0)); + g_signal_connect(g_network_monitor_get_default(), + "network-changed", + G_CALLBACK(purple_pmp_network_config_changed_cb), + NULL); } #else /* #ifdef NET_RT_DUMP */ char * diff --git a/libpurple/network.c b/libpurple/network.c index 8588c48c56..9f57a27b9a 100644 --- a/libpurple/network.c +++ b/libpurple/network.c @@ -63,38 +63,6 @@ # define HX_SIZE_OF_IFREQ(a) sizeof(a) #endif -#ifdef HAVE_NETWORKMANAGER -#include <dbus/dbus-glib.h> -#include <NetworkManager.h> - -#if !defined(NM_CHECK_VERSION) -#define NM_CHECK_VERSION(x,y,z) 0 -#endif - -static DBusGConnection *nm_conn = NULL; -static DBusGProxy *nm_proxy = NULL; -static DBusGProxy *dbus_proxy = NULL; -static NMState nm_state = NM_STATE_UNKNOWN; -static gboolean have_nm_state = FALSE; - -#elif defined _WIN32 -static int current_network_count; - -/* Mutex for the other global vars */ -#if GLIB_CHECK_VERSION(2, 32, 0) -static GMutex mutex; -#else -static GStaticMutex mutex = G_STATIC_MUTEX_INIT; -#endif - -static gboolean network_initialized = FALSE; -static HANDLE network_change_handle = NULL; -static int (WSAAPI *MyWSANSPIoctl) ( - HANDLE hLookup, DWORD dwControlCode, LPVOID lpvInBuffer, - DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, - LPDWORD lpcbBytesReturned, LPWSACOMPLETION lpCompletion) = NULL; -#endif - struct _PurpleNetworkListenData { int listenfd; int socket_type; @@ -106,13 +74,7 @@ struct _PurpleNetworkListenData { int timer; }; -#ifdef HAVE_NETWORKMANAGER -static NMState nm_get_network_state(void); -#endif - -#if defined(HAVE_NETWORKMANAGER) || defined(_WIN32) -static gboolean force_online; -#endif +static gboolean force_online = FALSE; /* Cached IP addresses for STUN and TURN servers (set globally in prefs) */ static gchar *stun_ip = NULL; @@ -592,391 +554,22 @@ purple_network_get_port_from_fd(int fd) return ntohs(addr.sin_port); } -#ifdef _WIN32 -#ifndef NS_NLA -#define NS_NLA 15 -#endif -static gint -wpurple_get_connected_network_count(void) -{ - gint net_cnt = 0; - - WSAQUERYSET qs; - HANDLE h; - gint retval; - int errorid; - - memset(&qs, 0, sizeof(WSAQUERYSET)); - qs.dwSize = sizeof(WSAQUERYSET); - qs.dwNameSpace = NS_NLA; - - retval = WSALookupServiceBegin(&qs, LUP_RETURN_ALL, &h); - if (retval != ERROR_SUCCESS) { - gchar *msg; - errorid = WSAGetLastError(); - msg = g_win32_error_message(errorid); - purple_debug_warning("network", "Couldn't retrieve NLA SP lookup handle. " - "NLA service is probably not running. Message: %s (%d).\n", - msg, errorid); - g_free(msg); - - return -1; - } else { - char buf[4096]; - WSAQUERYSET *res = (LPWSAQUERYSET) buf; - DWORD size = sizeof(buf); - while ((retval = WSALookupServiceNext(h, 0, &size, res)) == ERROR_SUCCESS) { - net_cnt++; - purple_debug_info("network", "found network '%s'\n", - res->lpszServiceInstanceName ? res->lpszServiceInstanceName : "(NULL)"); - size = sizeof(buf); - } - - errorid = WSAGetLastError(); - if (!(errorid == WSA_E_NO_MORE || errorid == WSAENOMORE)) { - gchar *msg = g_win32_error_message(errorid); - purple_debug_error("network", "got unexpected NLA response %s (%d)\n", msg, errorid); - g_free(msg); - - net_cnt = -1; - } - - retval = WSALookupServiceEnd(h); - } - - return net_cnt; - -} - -static gboolean wpurple_network_change_thread_cb(gpointer data) -{ - gint new_count; - PurpleConnectionUiOps *ui_ops = purple_connections_get_ui_ops(); - - new_count = wpurple_get_connected_network_count(); - - if (new_count < 0) - return FALSE; - - purple_debug_info("network", "Received Network Change Notification. Current network count is %d, previous count was %d.\n", new_count, current_network_count); - - purple_signal_emit(purple_network_get_handle(), "network-configuration-changed", NULL); - - if (new_count > 0 && ui_ops != NULL && ui_ops->network_connected != NULL) { - ui_ops->network_connected(); - } else if (new_count == 0 && current_network_count > 0 && - ui_ops != NULL && ui_ops->network_disconnected != NULL) { - ui_ops->network_disconnected(); - } - - current_network_count = new_count; - - return FALSE; -} - -static gboolean _print_debug_msg(gpointer data) { - gchar *msg = data; - purple_debug_warning("network", "%s", msg); - g_free(msg); - return FALSE; -} - -static gpointer wpurple_network_change_thread(gpointer data) -{ - WSAQUERYSET qs; - WSAEVENT *nla_event; - time_t last_trigger = time(NULL) - 31; - char buf[4096]; - WSAQUERYSET *res = (LPWSAQUERYSET) buf; - DWORD size; - - if ((nla_event = WSACreateEvent()) == WSA_INVALID_EVENT) { - int errorid = WSAGetLastError(); - gchar *msg = g_win32_error_message(errorid); - purple_timeout_add(0, _print_debug_msg, - g_strdup_printf("Couldn't create WSA event. " - "Message: %s (%d).\n", msg, errorid)); - g_free(msg); - g_thread_exit(NULL); - return NULL; - } - - while (TRUE) { - int retval; - DWORD retLen = 0; - WSACOMPLETION completion; - WSAOVERLAPPED overlapped; - -#if GLIB_CHECK_VERSION(2, 32, 0) - g_mutex_lock(&mutex); -#else - g_static_mutex_lock(&mutex); -#endif - if (network_initialized == FALSE) { - /* purple_network_uninit has been called */ - WSACloseEvent(nla_event); -#if GLIB_CHECK_VERSION(2, 32, 0) - g_mutex_unlock(&mutex); -#else - g_static_mutex_unlock(&mutex); -#endif - g_thread_exit(NULL); - return NULL; - } - - if (network_change_handle == NULL) { - memset(&qs, 0, sizeof(WSAQUERYSET)); - qs.dwSize = sizeof(WSAQUERYSET); - qs.dwNameSpace = NS_NLA; - if (WSALookupServiceBegin(&qs, 0, &network_change_handle) == SOCKET_ERROR) { - int errorid = WSAGetLastError(); - gchar *msg = g_win32_error_message(errorid); - purple_timeout_add(0, _print_debug_msg, - g_strdup_printf("Couldn't retrieve NLA SP lookup handle. " - "NLA service is probably not running. Message: %s (%d).\n", - msg, errorid)); - g_free(msg); - WSACloseEvent(nla_event); -#if GLIB_CHECK_VERSION(2, 32, 0) - g_mutex_unlock(&mutex); -#else - g_static_mutex_unlock(&mutex); -#endif - g_thread_exit(NULL); - return NULL; - } - } -#if GLIB_CHECK_VERSION(2, 32, 0) - g_mutex_unlock(&mutex); -#else - g_static_mutex_unlock(&mutex); -#endif - - memset(&completion, 0, sizeof(WSACOMPLETION)); - completion.Type = NSP_NOTIFY_EVENT; - overlapped.hEvent = nla_event; - completion.Parameters.Event.lpOverlapped = &overlapped; - - if (MyWSANSPIoctl(network_change_handle, SIO_NSP_NOTIFY_CHANGE, NULL, 0, NULL, 0, &retLen, &completion) == SOCKET_ERROR) { - int errorid = WSAGetLastError(); - if (errorid == WSA_INVALID_HANDLE) { - purple_timeout_add(0, _print_debug_msg, - g_strdup("Invalid NLA handle; resetting.\n")); -#if GLIB_CHECK_VERSION(2, 32, 0) - g_mutex_lock(&mutex); -#else - g_static_mutex_lock(&mutex); -#endif - retval = WSALookupServiceEnd(network_change_handle); - network_change_handle = NULL; -#if GLIB_CHECK_VERSION(2, 32, 0) - g_mutex_unlock(&mutex); -#else - g_static_mutex_unlock(&mutex); -#endif - continue; - /* WSA_IO_PENDING indicates successful async notification will happen */ - } else if (errorid != WSA_IO_PENDING) { - gchar *msg = g_win32_error_message(errorid); - purple_timeout_add(0, _print_debug_msg, - g_strdup_printf("Unable to wait for changes. Message: %s (%d).\n", - msg, errorid)); - g_free(msg); - } - } - - /* Make sure at least 30 seconds have elapsed since the last - * notification so we don't peg the cpu if this keeps changing. */ - if ((time(NULL) - last_trigger) < 30) - Sleep(30000); - - /* This will block until NLA notifies us */ - retval = WaitForSingleObjectEx(nla_event, WSA_INFINITE, TRUE); - - last_trigger = time(NULL); - -#if GLIB_CHECK_VERSION(2, 32, 0) - g_mutex_lock(&mutex); -#else - g_static_mutex_lock(&mutex); -#endif - if (network_initialized == FALSE) { - /* Time to die */ - WSACloseEvent(nla_event); -#if GLIB_CHECK_VERSION(2, 32, 0) - g_mutex_unlock(&mutex); -#else - g_static_mutex_unlock(&mutex); -#endif - g_thread_exit(NULL); - return NULL; - } - - size = sizeof(buf); - while ((retval = WSALookupServiceNext(network_change_handle, 0, &size, res)) == ERROR_SUCCESS) { - /*purple_timeout_add(0, _print_debug_msg, - g_strdup_printf("thread found network '%s'\n", - res->lpszServiceInstanceName ? res->lpszServiceInstanceName : "(NULL)"));*/ - size = sizeof(buf); - } - - WSAResetEvent(nla_event); -#if GLIB_CHECK_VERSION(2, 32, 0) - g_mutex_unlock(&mutex); -#else - g_static_mutex_unlock(&mutex); -#endif - - purple_timeout_add(0, wpurple_network_change_thread_cb, NULL); - } - - g_thread_exit(NULL); - return NULL; -} -#endif - gboolean purple_network_is_available(void) { -#ifdef HAVE_NETWORKMANAGER - if (force_online) + if(force_online) { return TRUE; - - if (!have_nm_state) - { - have_nm_state = TRUE; - nm_state = nm_get_network_state(); - if (nm_state == NM_STATE_UNKNOWN) - purple_debug_warning("network", "NetworkManager not active. Assuming connection exists.\n"); - } - - switch (nm_state) - { - case NM_STATE_UNKNOWN: -#if NM_CHECK_VERSION(0,8,992) - case NM_STATE_CONNECTED_LOCAL: - case NM_STATE_CONNECTED_SITE: - case NM_STATE_CONNECTED_GLOBAL: -#else - case NM_STATE_CONNECTED: -#endif - return TRUE; - default: - break; } - return FALSE; - -#elif defined _WIN32 - return (current_network_count > 0 || force_online); -#else - return TRUE; -#endif + return g_network_monitor_get_network_available(g_network_monitor_get_default()); } void purple_network_force_online() { -#if defined(HAVE_NETWORKMANAGER) || defined(_WIN32) force_online = TRUE; -#endif -} - -#ifdef HAVE_NETWORKMANAGER -static void -nm_update_state(NMState state) -{ - NMState prev = nm_state; - PurpleConnectionUiOps *ui_ops = purple_connections_get_ui_ops(); - - have_nm_state = TRUE; - nm_state = state; - - purple_signal_emit(purple_network_get_handle(), "network-configuration-changed", NULL); - - switch(state) - { -#if NM_CHECK_VERSION(0,8,992) - case NM_STATE_CONNECTED_LOCAL: - case NM_STATE_CONNECTED_SITE: - case NM_STATE_CONNECTED_GLOBAL: -#else - case NM_STATE_CONNECTED: -#endif - /* Call res_init in case DNS servers have changed */ - res_init(); - /* update STUN IP in case we it changed (theoretically we could - have gone from IPv4 to IPv6, f.ex. or we were previously - offline */ - purple_network_set_stun_server( - purple_prefs_get_string("/purple/network/stun_server")); - purple_network_set_turn_server( - purple_prefs_get_string("/purple/network/turn_server")); - - if (ui_ops != NULL && ui_ops->network_connected != NULL) - ui_ops->network_connected(); - break; - case NM_STATE_ASLEEP: - case NM_STATE_CONNECTING: - case NM_STATE_DISCONNECTED: -#if NM_CHECK_VERSION(0,8,992) - case NM_STATE_DISCONNECTING: -#endif - if (prev != NM_STATE_CONNECTED && prev != NM_STATE_UNKNOWN) - break; - if (ui_ops != NULL && ui_ops->network_disconnected != NULL) - ui_ops->network_disconnected(); - break; - case NM_STATE_UNKNOWN: - default: - break; - } -} - -static void -nm_state_change_cb(DBusGProxy *proxy, NMState state, gpointer user_data) -{ - purple_debug_info("network", "Got StateChange from NetworkManager: %d.\n", state); - nm_update_state(state); -} - -static NMState -nm_get_network_state(void) -{ - GError *err = NULL; - NMState state = NM_STATE_UNKNOWN; - - if (!nm_proxy) - return NM_STATE_UNKNOWN; - - if (!dbus_g_proxy_call(nm_proxy, "state", &err, G_TYPE_INVALID, G_TYPE_UINT, &state, G_TYPE_INVALID)) { - g_error_free(err); - return NM_STATE_UNKNOWN; - } - - return state; -} - -static void -nm_dbus_name_owner_changed_cb(DBusGProxy *proxy, char *service, char *old_owner, char *new_owner, gpointer user_data) -{ - if (g_str_equal(service, NM_DBUS_SERVICE)) { - gboolean old_owner_good = old_owner && (old_owner[0] != '\0'); - gboolean new_owner_good = new_owner && (new_owner[0] != '\0'); - - purple_debug_info("network", "Got NameOwnerChanged signal, service = '%s', old_owner = '%s', new_owner = '%s'\n", service, old_owner, new_owner); - if (!old_owner_good && new_owner_good) { /* Equivalent to old ServiceCreated signal */ - purple_debug_info("network", "NetworkManager has started.\n"); - nm_update_state(nm_get_network_state()); - } else if (old_owner_good && !new_owner_good) { /* Equivalent to old ServiceDeleted signal */ - purple_debug_info("network", "NetworkManager has gone away.\n"); - nm_update_state(NM_STATE_UNKNOWN); - } - } } -#endif - static void purple_network_ip_lookup_cb(GObject *sender, GAsyncResult *result, gpointer data) { GError *error = NULL; @@ -1170,29 +763,6 @@ _purple_network_set_common_socket_flags(int fd) void purple_network_init(void) { -#ifdef HAVE_NETWORKMANAGER - GError *error = NULL; -#endif -#ifdef _WIN32 - GError *err = NULL; - gint cnt = wpurple_get_connected_network_count(); - - network_initialized = TRUE; - if (cnt < 0) /* Assume there is a network */ - current_network_count = 1; - /* Don't listen for network changes if we can't tell anyway */ - else { - current_network_count = cnt; - if ((MyWSANSPIoctl = (void*) wpurple_find_and_loadproc("ws2_32.dll", "WSANSPIoctl"))) { - GThread *thread = g_thread_try_new("Network Monitor thread", wpurple_network_change_thread, NULL, &err); - if (thread) - g_thread_unref(thread); - else - purple_debug_error("network", "Couldn't create Network Monitor thread: %s\n", err ? err->message : ""); - } - } -#endif - purple_prefs_add_none ("/purple/network"); purple_prefs_add_string("/purple/network/stun_server", ""); purple_prefs_add_string("/purple/network/turn_server", ""); @@ -1210,37 +780,6 @@ purple_network_init(void) if(purple_prefs_get_bool("/purple/network/map_ports") || purple_prefs_get_bool("/purple/network/auto_ip")) purple_upnp_discover(NULL, NULL); -#ifdef HAVE_NETWORKMANAGER - nm_conn = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error); - if (!nm_conn) { - purple_debug_warning("network", "Error connecting to DBus System service: %s.\n", error->message); - } else { - nm_proxy = dbus_g_proxy_new_for_name(nm_conn, - NM_DBUS_SERVICE, - NM_DBUS_PATH, - NM_DBUS_INTERFACE); - /* NM 0.6 signal */ - dbus_g_proxy_add_signal(nm_proxy, "StateChange", G_TYPE_UINT, G_TYPE_INVALID); - dbus_g_proxy_connect_signal(nm_proxy, "StateChange", - G_CALLBACK(nm_state_change_cb), NULL, NULL); - /* NM 0.7 and later signal */ - dbus_g_proxy_add_signal(nm_proxy, "StateChanged", G_TYPE_UINT, G_TYPE_INVALID); - dbus_g_proxy_connect_signal(nm_proxy, "StateChanged", - G_CALLBACK(nm_state_change_cb), NULL, NULL); - - dbus_proxy = dbus_g_proxy_new_for_name(nm_conn, - DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, - DBUS_INTERFACE_DBUS); - dbus_g_proxy_add_signal(dbus_proxy, "NameOwnerChanged", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID); - dbus_g_proxy_connect_signal(dbus_proxy, "NameOwnerChanged", - G_CALLBACK(nm_dbus_name_owner_changed_cb), NULL, NULL); - } -#endif - - purple_signal_register(purple_network_get_handle(), "network-configuration-changed", - purple_marshal_VOID, G_TYPE_NONE, 0); - purple_pmp_init(); purple_upnp_init(); @@ -1258,52 +797,6 @@ purple_network_init(void) void purple_network_uninit(void) { -#ifdef HAVE_NETWORKMANAGER - if (nm_proxy) { - dbus_g_proxy_disconnect_signal(nm_proxy, "StateChange", G_CALLBACK(nm_state_change_cb), NULL); - dbus_g_proxy_disconnect_signal(nm_proxy, "StateChanged", G_CALLBACK(nm_state_change_cb), NULL); - g_object_unref(G_OBJECT(nm_proxy)); - } - if (dbus_proxy) { - dbus_g_proxy_disconnect_signal(dbus_proxy, "NameOwnerChanged", G_CALLBACK(nm_dbus_name_owner_changed_cb), NULL); - g_object_unref(G_OBJECT(dbus_proxy)); - } - if (nm_conn) - dbus_g_connection_unref(nm_conn); -#endif - -#ifdef _WIN32 -#if GLIB_CHECK_VERSION(2, 32, 0) - g_mutex_lock(&mutex); -#else - g_static_mutex_lock(&mutex); -#endif - network_initialized = FALSE; - if (network_change_handle != NULL) { - int retval; - /* Trigger the NLA thread to stop waiting for network changes. Not - * doing this can cause hangs on WSACleanup. */ - purple_debug_warning("network", "Terminating the NLA thread\n"); - if ((retval = WSALookupServiceEnd(network_change_handle)) == SOCKET_ERROR) { - int errorid = WSAGetLastError(); - gchar *msg = g_win32_error_message(errorid); - purple_debug_warning("network", "Unable to kill NLA thread. Message: %s (%d).\n", - msg, errorid); - g_free(msg); - } - network_change_handle = NULL; - - } -#if GLIB_CHECK_VERSION(2, 32, 0) - g_mutex_unlock(&mutex); -#else - g_static_mutex_unlock(&mutex); -#endif - -#endif - purple_signal_unregister(purple_network_get_handle(), - "network-configuration-changed"); - g_free(stun_ip); g_hash_table_destroy(upnp_port_mappings); diff --git a/libpurple/upnp.c b/libpurple/upnp.c index f86e53c1ed..b78cadc269 100644 --- a/libpurple/upnp.c +++ b/libpurple/upnp.c @@ -18,6 +18,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ +#include <gio/gio.h> + #include "internal.h" #include "upnp.h" @@ -1001,7 +1003,7 @@ purple_upnp_remove_port_mapping(unsigned short portmap, const char* protocol, } static void -purple_upnp_network_config_changed_cb(void *data) +purple_upnp_network_config_changed_cb(GNetworkMonitor *monitor, gboolean available, gpointer data) { /* Reset the control_info to default values */ control_info.status = PURPLE_UPNP_STATUS_UNDISCOVERED; @@ -1013,18 +1015,11 @@ purple_upnp_network_config_changed_cb(void *data) control_info.lookup_time = 0; } -static void* -purple_upnp_get_handle(void) -{ - static int handle; - - return &handle; -} - void purple_upnp_init() { - purple_signal_connect(purple_network_get_handle(), "network-configuration-changed", - purple_upnp_get_handle(), PURPLE_CALLBACK(purple_upnp_network_config_changed_cb), - NULL); + g_signal_connect(g_network_monitor_get_default(), + "network-changed", + G_CALLBACK(purple_upnp_network_config_changed_cb), + NULL); } diff --git a/pidgin/gtkdialogs.c b/pidgin/gtkdialogs.c index 168d62dce7..dada04476f 100644 --- a/pidgin/gtkdialogs.c +++ b/pidgin/gtkdialogs.c @@ -676,14 +676,6 @@ void pidgin_dialogs_buildinfo(void) #endif #endif -#ifndef _WIN32 -#ifdef HAVE_NETWORKMANAGER - g_string_append(str, "<dt>NetworkManager:</dt><dd>Enabled</dd>"); -#else - g_string_append(str, "<dt>NetworkManager:</dt><dd>Disabled</dd>"); -#endif -#endif - #ifdef HAVE_NSS g_string_append(str, "<dt>Network Security Services (NSS):</dt><dd>Enabled</dd>"); #else diff --git a/pidgin/win32/gtkwin32dep.c b/pidgin/win32/gtkwin32dep.c index 90dc20d756..f83cb06a62 100644 --- a/pidgin/win32/gtkwin32dep.c +++ b/pidgin/win32/gtkwin32dep.c @@ -187,27 +187,19 @@ void winpidgin_notify_uri(const char *uri) { #define PIDGIN_WM_PROTOCOL_HANDLE (WM_APP + 14) static void* -winpidgin_netconfig_changed_cb(void *data) +winpidgin_netconfig_changed_cb(GNetworkMonitor *monitor, gboolean available, gpointer data) { pwm_handles_connections = FALSE; return NULL; } -static void* -winpidgin_get_handle(void) -{ - static int handle; - - return &handle; -} - static gboolean winpidgin_pwm_reconnect() { - purple_signal_disconnect(purple_network_get_handle(), "network-configuration-changed", - winpidgin_get_handle(), PURPLE_CALLBACK(winpidgin_netconfig_changed_cb)); - + g_signal_handlers_disconnect_by_func(g_network_monitor_get_default, + G_CALLBACK(winpidgin_netconfig_changed_cb), + NULL); if (pwm_handles_connections == TRUE) { PurpleConnectionUiOps *ui_ops = pidgin_connections_get_ui_ops(); @@ -246,8 +238,10 @@ static LRESULT CALLBACK message_window_handler(HWND hwnd, UINT msg, WPARAM wpara if (ui_ops != NULL && ui_ops->network_disconnected != NULL) ui_ops->network_disconnected(); - purple_signal_connect(purple_network_get_handle(), "network-configuration-changed", winpidgin_get_handle(), - PURPLE_CALLBACK(winpidgin_netconfig_changed_cb), NULL); + g_signal_connect(g_network_monitor_get_default(), + "network-changed", + G_CALLBACK(winpidgin_netconfig_changed_cb), + NULL); return TRUE; } else if (wparam == PBT_APMRESUMESUSPEND) { |