--- a/libpurple/nat-pmp.c Mon Dec 28 01:05:18 2015 -0600
+++ b/libpurple/nat-pmp.c Mon Dec 28 21:20:03 2015 -0600
@@ -24,6 +24,8 @@
@@ -514,7 +516,7 @@
-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_signal_connect(purple_network_get_handle(), "network-configuration-changed",
- purple_pmp_get_handle(), PURPLE_CALLBACK(purple_pmp_network_config_changed_cb),
+ g_signal_connect(g_network_monitor_get_default(), + G_CALLBACK(purple_pmp_network_config_changed_cb), #else /* #ifdef NET_RT_DUMP */
--- a/libpurple/network.c Mon Dec 28 01:05:18 2015 -0600
+++ b/libpurple/network.c Mon Dec 28 21:20:03 2015 -0600
@@ -554,256 +554,13 @@
return ntohs(addr.sin_port);
-wpurple_get_connected_network_count(void)
- memset(&qs, 0, sizeof(WSAQUERYSET));
- qs.dwSize = sizeof(WSAQUERYSET);
- qs.dwNameSpace = NS_NLA;
- retval = WSALookupServiceBegin(&qs, LUP_RETURN_ALL, &h);
- if (retval != ERROR_SUCCESS) {
- 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",
- WSAQUERYSET *res = (LPWSAQUERYSET) buf;
- DWORD size = sizeof(buf);
- while ((retval = WSALookupServiceNext(h, 0, &size, res)) == ERROR_SUCCESS) {
- purple_debug_info("network", "found network '%s'\n",
- res->lpszServiceInstanceName ? res->lpszServiceInstanceName : "(NULL)");
- 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);
- retval = WSALookupServiceEnd(h);
-static gboolean wpurple_network_change_thread_cb(gpointer data)
- PurpleConnectionUiOps *ui_ops = purple_connections_get_ui_ops();
- new_count = wpurple_get_connected_network_count();
- 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;
-static gboolean _print_debug_msg(gpointer data) {
- purple_debug_warning("network", "%s", msg);
-static gpointer wpurple_network_change_thread(gpointer data)
- time_t last_trigger = time(NULL) - 31;
- WSAQUERYSET *res = (LPWSAQUERYSET) buf;
- 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));
- WSACOMPLETION completion;
- WSAOVERLAPPED overlapped;
-#if GLIB_CHECK_VERSION(2, 32, 0)
- g_static_mutex_lock(&mutex);
- if (network_initialized == FALSE) {
- /* purple_network_uninit has been called */
- WSACloseEvent(nla_event);
-#if GLIB_CHECK_VERSION(2, 32, 0)
- g_mutex_unlock(&mutex);
- g_static_mutex_unlock(&mutex);
- 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",
- WSACloseEvent(nla_event);
-#if GLIB_CHECK_VERSION(2, 32, 0)
- g_mutex_unlock(&mutex);
- g_static_mutex_unlock(&mutex);
-#if GLIB_CHECK_VERSION(2, 32, 0)
- g_mutex_unlock(&mutex);
- g_static_mutex_unlock(&mutex);
- 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_static_mutex_lock(&mutex);
- retval = WSALookupServiceEnd(network_change_handle);
- network_change_handle = NULL;
-#if GLIB_CHECK_VERSION(2, 32, 0)
- g_mutex_unlock(&mutex);
- g_static_mutex_unlock(&mutex);
- /* 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",
- /* 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)
- /* 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_static_mutex_lock(&mutex);
- if (network_initialized == FALSE) {
- WSACloseEvent(nla_event);
-#if GLIB_CHECK_VERSION(2, 32, 0)
- g_mutex_unlock(&mutex);
- g_static_mutex_unlock(&mutex);
- 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)"));*/
- WSAResetEvent(nla_event);
-#if GLIB_CHECK_VERSION(2, 32, 0)
- g_mutex_unlock(&mutex);
- g_static_mutex_unlock(&mutex);
- purple_timeout_add(0, wpurple_network_change_thread_cb, NULL);
purple_network_is_available(void)
return g_network_monitor_get_network_available(g_network_monitor_get_default());
@@ -1023,9 +780,6 @@
if(purple_prefs_get_bool("/purple/network/map_ports") || purple_prefs_get_bool("/purple/network/auto_ip"))
purple_upnp_discover(NULL, NULL);
- purple_signal_register(purple_network_get_handle(), "network-configuration-changed",
- purple_marshal_VOID, G_TYPE_NONE, 0);
@@ -1043,9 +797,6 @@
purple_network_uninit(void)
- purple_signal_unregister(purple_network_get_handle(),
- "network-configuration-changed");
g_hash_table_destroy(upnp_port_mappings);
--- a/libpurple/upnp.c Mon Dec 28 01:05:18 2015 -0600
+++ b/libpurple/upnp.c Mon Dec 28 21:20:03 2015 -0600
@@ -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
@@ -1001,7 +1003,7 @@
-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 @@
control_info.lookup_time = 0;
-purple_upnp_get_handle(void)
- purple_signal_connect(purple_network_get_handle(), "network-configuration-changed",
- purple_upnp_get_handle(), PURPLE_CALLBACK(purple_upnp_network_config_changed_cb),
+ g_signal_connect(g_network_monitor_get_default(), + G_CALLBACK(purple_upnp_network_config_changed_cb), --- a/pidgin/win32/gtkwin32dep.c Mon Dec 28 01:05:18 2015 -0600
+++ b/pidgin/win32/gtkwin32dep.c Mon Dec 28 21:20:03 2015 -0600
@@ -187,27 +187,19 @@
#define PIDGIN_WM_PROTOCOL_HANDLE (WM_APP + 14)
-winpidgin_netconfig_changed_cb(void *data)
+winpidgin_netconfig_changed_cb(GNetworkMonitor *monitor, gboolean available, gpointer data) pwm_handles_connections = FALSE;
-winpidgin_get_handle(void)
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), if (pwm_handles_connections == TRUE) {
PurpleConnectionUiOps *ui_ops = pidgin_connections_get_ui_ops();
@@ -246,8 +238,10 @@
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(), + G_CALLBACK(winpidgin_netconfig_changed_cb), } else if (wparam == PBT_APMRESUMESUSPEND) {