annotate libpurple/network.c @ 26765:998f471bb801

merge of '04463c4228e4760066ef026178e08886db366915' and '277dbfa504b60a873008deb330ed734a384e33f5'
author Paul Aurich <paul@darkrain42.org>
date Fri, 01 May 2009 16:09:50 +0000
parents 5d1140b0b10a
children 8290e36a5a73
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /**
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
2 * @file network.c Network Implementation
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 * @ingroup core
20074
6bf32c9e15a7 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents: 19681
diff changeset
4 */
6bf32c9e15a7 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents: 19681
diff changeset
5
6bf32c9e15a7 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents: 19681
diff changeset
6 /* purple
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
8 * Purple is the legal property of its developers, whose names are too numerous
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 * to list here. Please refer to the COPYRIGHT file distributed with this
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 * source distribution.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 * This program is free software; you can redistribute it and/or modify
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * it under the terms of the GNU General Public License as published by
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 * the Free Software Foundation; either version 2 of the License, or
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 * (at your option) any later version.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 * This program is distributed in the hope that it will be useful,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 * GNU General Public License for more details.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
22 * You should have received a copy of the GNU General Public License
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 * along with this program; if not, write to the Free Software
19681
44b4e8bd759b The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19654
diff changeset
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
25 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
26
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
27 #include "internal.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
28
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29 #ifndef _WIN32
23201
313b87adb730 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 23043
diff changeset
30 #include <arpa/nameser.h>
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
31 #include <resolv.h>
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
32 #include <netinet/in.h>
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
33 #include <net/if.h>
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34 #include <sys/ioctl.h>
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
35 #else
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
36 #include <nspapi.h>
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
37 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
38
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
39 /* Solaris */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
40 #if defined (__SVR4) && defined (__sun)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
41 #include <sys/sockio.h>
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
42 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
43
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
44 #include "debug.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
45 #include "account.h"
15974
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
46 #include "nat-pmp.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
47 #include "network.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
48 #include "prefs.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
49 #include "stun.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
50 #include "upnp.h"
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
51 #include "dnsquery.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
52
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
53 /*
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
54 * Calling sizeof(struct ifreq) isn't always correct on
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
55 * Mac OS X (and maybe others).
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
56 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
57 #ifdef _SIZEOF_ADDR_IFREQ
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
58 # define HX_SIZE_OF_IFREQ(a) _SIZEOF_ADDR_IFREQ(a)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
59 #else
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
60 # define HX_SIZE_OF_IFREQ(a) sizeof(a)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
61 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
62
22895
0bd86dae2734 Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@wiktel.com>
parents: 22889
diff changeset
63 #ifdef HAVE_NETWORKMANAGER
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
64 #include <dbus/dbus-glib.h>
22895
0bd86dae2734 Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@wiktel.com>
parents: 22889
diff changeset
65 #include <NetworkManager.h>
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
66
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
67 static DBusGConnection *nm_conn = NULL;
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
68 static DBusGProxy *nm_proxy = NULL;
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
69 static DBusGProxy *dbus_proxy = NULL;
24301
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
70 static NMState nm_state = NM_STATE_UNKNOWN;
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
71 static gboolean have_nm_state = FALSE;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
72
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
73 #elif defined _WIN32
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
74 static int current_network_count;
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
75
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
76 /* Mutex for the other global vars */
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
77 static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
78 static gboolean network_initialized = FALSE;
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
79 static HANDLE network_change_handle = NULL;
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
80 static int (WSAAPI *MyWSANSPIoctl) (
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
81 HANDLE hLookup, DWORD dwControlCode, LPVOID lpvInBuffer,
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
82 DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer,
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
83 LPDWORD lpcbBytesReturned, LPWSACOMPLETION lpCompletion) = NULL;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
84 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
85
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
86 struct _PurpleNetworkListenData {
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
87 int listenfd;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
88 int socket_type;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
89 gboolean retry;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
90 gboolean adding;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
91 PurpleNetworkListenCallback cb;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
92 gpointer cb_data;
15440
56a2a0bb290a Fix a crash when a network_listen_range process is canceled before its UPnP port mapping completes, which occurs regularly on certain routers when file transfers are initiated and then quickly finished. Much thanks to Elliott Harris and Eric Richie for their hard work with me hunting this down and fixing it.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15373
diff changeset
93 UPnPMappingAddRemove *mapping_data;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
94 };
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
95
22895
0bd86dae2734 Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@wiktel.com>
parents: 22889
diff changeset
96 #ifdef HAVE_NETWORKMANAGER
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
97 static NMState nm_get_network_state(void);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
98 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
99
25852
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
100 #if defined(HAVE_NETWORKMANAGER) || defined(_WIN32)
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
101 static gboolean force_online;
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
102 #endif
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
103
26055
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
104 /* Cached IP addresses for STUN and TURN servers (set globally in prefs) */
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
105 static gchar *stun_ip = NULL;
26055
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
106 static gchar *turn_ip = NULL;
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
107
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
108 const unsigned char *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
109 purple_network_ip_atoi(const char *ip)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
110 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
111 static unsigned char ret[4];
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
112 gchar *delimiter = ".";
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
113 gchar **split;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
114 int i;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
115
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
116 g_return_val_if_fail(ip != NULL, NULL);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
117
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
118 split = g_strsplit(ip, delimiter, 4);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
119 for (i = 0; split[i] != NULL; i++)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
120 ret[i] = atoi(split[i]);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
121 g_strfreev(split);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
122
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
123 /* i should always be 4 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
124 if (i != 4)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
125 return NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
126
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
127 return ret;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
128 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
129
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
130 void
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
131 purple_network_set_public_ip(const char *ip)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
132 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
133 g_return_if_fail(ip != NULL);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
134
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
135 /* XXX - Ensure the IP address is valid */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
136
16424
4999bbc52881 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents: 15974
diff changeset
137 purple_prefs_set_string("/purple/network/public_ip", ip);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
138 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
139
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
140 const char *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
141 purple_network_get_public_ip(void)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
142 {
16424
4999bbc52881 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents: 15974
diff changeset
143 return purple_prefs_get_string("/purple/network/public_ip");
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
144 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
145
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
146 const char *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
147 purple_network_get_local_system_ip(int fd)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
148 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
149 char buffer[1024];
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
150 static char ip[16];
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
151 char *tmp;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
152 struct ifconf ifc;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
153 struct ifreq *ifr;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
154 struct sockaddr_in *sinptr;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
155 guint32 lhost = htonl(127 * 256 * 256 * 256 + 1);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
156 long unsigned int add;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
157 int source = fd;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
158
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
159 if (fd < 0)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
160 source = socket(PF_INET,SOCK_STREAM, 0);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
161
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
162 ifc.ifc_len = sizeof(buffer);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
163 ifc.ifc_req = (struct ifreq *)buffer;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
164 ioctl(source, SIOCGIFCONF, &ifc);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
165
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
166 if (fd < 0)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
167 close(source);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
168
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
169 tmp = buffer;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
170 while (tmp < buffer + ifc.ifc_len)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
171 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
172 ifr = (struct ifreq *)tmp;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
173 tmp += HX_SIZE_OF_IFREQ(*ifr);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
174
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
175 if (ifr->ifr_addr.sa_family == AF_INET)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
176 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
177 sinptr = (struct sockaddr_in *)&ifr->ifr_addr;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
178 if (sinptr->sin_addr.s_addr != lhost)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
179 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
180 add = ntohl(sinptr->sin_addr.s_addr);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
181 g_snprintf(ip, 16, "%lu.%lu.%lu.%lu",
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
182 ((add >> 24) & 255),
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
183 ((add >> 16) & 255),
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
184 ((add >> 8) & 255),
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
185 add & 255);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
186
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
187 return ip;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
188 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
189 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
190 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
191
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
192 return "0.0.0.0";
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
193 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
194
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
195 const char *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
196 purple_network_get_my_ip(int fd)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
197 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
198 const char *ip = NULL;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
199 PurpleStunNatDiscovery *stun;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
200
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
201 /* Check if the user specified an IP manually */
16424
4999bbc52881 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents: 15974
diff changeset
202 if (!purple_prefs_get_bool("/purple/network/auto_ip")) {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
203 ip = purple_network_get_public_ip();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
204 /* Make sure the IP address entered by the user is valid */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
205 if ((ip != NULL) && (purple_network_ip_atoi(ip) != NULL))
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
206 return ip;
21697
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
207 } else {
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
208 /* Check if STUN discovery was already done */
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
209 stun = purple_stun_discover(NULL);
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
210 if ((stun != NULL) && (stun->status == PURPLE_STUN_STATUS_DISCOVERED))
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
211 return stun->publicip;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
212
21697
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
213 /* Attempt to get the IP from a NAT device using UPnP */
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
214 ip = purple_upnp_get_public_ip();
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
215 if (ip != NULL)
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
216 return ip;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
217
21697
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
218 /* Attempt to get the IP from a NAT device using NAT-PMP */
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
219 ip = purple_pmp_get_public_ip();
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
220 if (ip != NULL)
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
221 return ip;
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
222 }
15646
552be3958d6a Added nat-pmp implementation and #ifdef'd out changes to network.c which would utilize it.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15440
diff changeset
223
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
224 /* Just fetch the IP of the local system */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
225 return purple_network_get_local_system_ip(fd);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
226 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
227
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
228
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
229 static void
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
230 purple_network_set_upnp_port_mapping_cb(gboolean success, gpointer data)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
231 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
232 PurpleNetworkListenData *listen_data;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
233
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
234 listen_data = data;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
235 /* TODO: Once we're keeping track of upnp requests... */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
236 /* listen_data->pnp_data = NULL; */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
237
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
238 if (!success) {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
239 purple_debug_info("network", "Couldn't create UPnP mapping\n");
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
240 if (listen_data->retry) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
241 listen_data->retry = FALSE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
242 listen_data->adding = FALSE;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
243 listen_data->mapping_data = purple_upnp_remove_port_mapping(
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
244 purple_network_get_port_from_fd(listen_data->listenfd),
15440
56a2a0bb290a Fix a crash when a network_listen_range process is canceled before its UPnP port mapping completes, which occurs regularly on certain routers when file transfers are initiated and then quickly finished. Much thanks to Elliott Harris and Eric Richie for their hard work with me hunting this down and fixing it.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15373
diff changeset
245 (listen_data->socket_type == SOCK_STREAM) ? "TCP" : "UDP",
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
246 purple_network_set_upnp_port_mapping_cb, listen_data);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
247 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
248 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
249 } else if (!listen_data->adding) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
250 /* We've tried successfully to remove the port mapping.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
251 * Try to add it again */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
252 listen_data->adding = TRUE;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
253 listen_data->mapping_data = purple_upnp_set_port_mapping(
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
254 purple_network_get_port_from_fd(listen_data->listenfd),
15440
56a2a0bb290a Fix a crash when a network_listen_range process is canceled before its UPnP port mapping completes, which occurs regularly on certain routers when file transfers are initiated and then quickly finished. Much thanks to Elliott Harris and Eric Richie for their hard work with me hunting this down and fixing it.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15373
diff changeset
255 (listen_data->socket_type == SOCK_STREAM) ? "TCP" : "UDP",
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
256 purple_network_set_upnp_port_mapping_cb, listen_data);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
257 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
258 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
259
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
260 if (listen_data->cb)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
261 listen_data->cb(listen_data->listenfd, listen_data->cb_data);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
262
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
263 /* Clear the UPnP mapping data, since it's complete and purple_netweork_listen_cancel() will try to cancel
15440
56a2a0bb290a Fix a crash when a network_listen_range process is canceled before its UPnP port mapping completes, which occurs regularly on certain routers when file transfers are initiated and then quickly finished. Much thanks to Elliott Harris and Eric Richie for their hard work with me hunting this down and fixing it.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15373
diff changeset
264 * it otherwise. */
56a2a0bb290a Fix a crash when a network_listen_range process is canceled before its UPnP port mapping completes, which occurs regularly on certain routers when file transfers are initiated and then quickly finished. Much thanks to Elliott Harris and Eric Richie for their hard work with me hunting this down and fixing it.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15373
diff changeset
265 listen_data->mapping_data = NULL;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
266 purple_network_listen_cancel(listen_data);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
267 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
268
15855
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
269 static gboolean
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
270 purple_network_finish_pmp_map_cb(gpointer data)
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
271 {
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
272 PurpleNetworkListenData *listen_data;
15900
3a45be1c3281 Whitespace and make sure stuff is #defined to an actual value.
Mark Doliner <mark@kingant.net>
parents: 15893
diff changeset
273
15855
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
274 listen_data = data;
15900
3a45be1c3281 Whitespace and make sure stuff is #defined to an actual value.
Mark Doliner <mark@kingant.net>
parents: 15893
diff changeset
275
15855
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
276 if (listen_data->cb)
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
277 listen_data->cb(listen_data->listenfd, listen_data->cb_data);
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
278
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
279 purple_network_listen_cancel(listen_data);
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
280
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
281 return FALSE;
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
282 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
283
21466
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
284 static gboolean listen_map_external = TRUE;
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
285 void purple_network_listen_map_external(gboolean map_external)
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
286 {
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
287 listen_map_external = map_external;
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
288 }
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
289
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
290 static PurpleNetworkListenData *
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
291 purple_network_do_listen(unsigned short port, int socket_type, PurpleNetworkListenCallback cb, gpointer cb_data)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
292 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
293 int listenfd = -1;
20347
04fe5601fedb applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20074
diff changeset
294 int flags;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
295 const int on = 1;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
296 PurpleNetworkListenData *listen_data;
15646
552be3958d6a Added nat-pmp implementation and #ifdef'd out changes to network.c which would utilize it.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15440
diff changeset
297 unsigned short actual_port;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
298 #ifdef HAVE_GETADDRINFO
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
299 int errnum;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
300 struct addrinfo hints, *res, *next;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
301 char serv[6];
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
302
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
303 /*
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
304 * Get a list of addresses on this machine.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
305 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
306 snprintf(serv, sizeof(serv), "%hu", port);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
307 memset(&hints, 0, sizeof(struct addrinfo));
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
308 hints.ai_flags = AI_PASSIVE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
309 hints.ai_family = AF_UNSPEC;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
310 hints.ai_socktype = socket_type;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
311 errnum = getaddrinfo(NULL /* any IP */, serv, &hints, &res);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
312 if (errnum != 0) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
313 #ifndef _WIN32
21862
ae58ffd5e929 Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents: 21774
diff changeset
314 purple_debug_warning("network", "getaddrinfo: %s\n", purple_gai_strerror(errnum));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
315 if (errnum == EAI_SYSTEM)
21121
35b4f1dc4c8d replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20347
diff changeset
316 purple_debug_warning("network", "getaddrinfo: system error: %s\n", g_strerror(errno));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
317 #else
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
318 purple_debug_warning("network", "getaddrinfo: Error Code = %d\n", errnum);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
319 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
320 return NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
321 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
322
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
323 /*
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
324 * Go through the list of addresses and attempt to listen on
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
325 * one of them.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
326 * XXX - Try IPv6 addresses first?
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
327 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
328 for (next = res; next != NULL; next = next->ai_next) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
329 listenfd = socket(next->ai_family, next->ai_socktype, next->ai_protocol);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
330 if (listenfd < 0)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
331 continue;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
332 if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0)
21121
35b4f1dc4c8d replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20347
diff changeset
333 purple_debug_warning("network", "setsockopt: %s\n", g_strerror(errno));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
334 if (bind(listenfd, next->ai_addr, next->ai_addrlen) == 0)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
335 break; /* success */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
336 /* XXX - It is unclear to me (datallah) whether we need to be
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
337 using a new socket each time */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
338 close(listenfd);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
339 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
340
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
341 freeaddrinfo(res);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
342
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
343 if (next == NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
344 return NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
345 #else
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
346 struct sockaddr_in sockin;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
347
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
348 if ((listenfd = socket(AF_INET, socket_type, 0)) < 0) {
21121
35b4f1dc4c8d replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20347
diff changeset
349 purple_debug_warning("network", "socket: %s\n", g_strerror(errno));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
350 return NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
351 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
352
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
353 if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0)
21121
35b4f1dc4c8d replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20347
diff changeset
354 purple_debug_warning("network", "setsockopt: %s\n", g_strerror(errno));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
355
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
356 memset(&sockin, 0, sizeof(struct sockaddr_in));
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
357 sockin.sin_family = PF_INET;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
358 sockin.sin_port = htons(port);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
359
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
360 if (bind(listenfd, (struct sockaddr *)&sockin, sizeof(struct sockaddr_in)) != 0) {
21121
35b4f1dc4c8d replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20347
diff changeset
361 purple_debug_warning("network", "bind: %s\n", g_strerror(errno));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
362 close(listenfd);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
363 return NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
364 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
365 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
366
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
367 if (socket_type == SOCK_STREAM && listen(listenfd, 4) != 0) {
21121
35b4f1dc4c8d replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20347
diff changeset
368 purple_debug_warning("network", "listen: %s\n", g_strerror(errno));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
369 close(listenfd);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
370 return NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
371 }
20347
04fe5601fedb applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20074
diff changeset
372 flags = fcntl(listenfd, F_GETFL);
04fe5601fedb applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 20074
diff changeset
373 fcntl(listenfd, F_SETFL, flags | O_NONBLOCK);
23712
91169093449d More leaks of fds to client processes.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23201
diff changeset
374 #ifndef _WIN32
91169093449d More leaks of fds to client processes.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23201
diff changeset
375 fcntl(listenfd, F_SETFD, FD_CLOEXEC);
91169093449d More leaks of fds to client processes.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23201
diff changeset
376 #endif
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
377 actual_port = purple_network_get_port_from_fd(listenfd);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
378
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
379 purple_debug_info("network", "Listening on port: %hu\n", actual_port);
15900
3a45be1c3281 Whitespace and make sure stuff is #defined to an actual value.
Mark Doliner <mark@kingant.net>
parents: 15893
diff changeset
380
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
381 listen_data = g_new0(PurpleNetworkListenData, 1);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
382 listen_data->listenfd = listenfd;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
383 listen_data->adding = TRUE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
384 listen_data->retry = TRUE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
385 listen_data->cb = cb;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
386 listen_data->cb_data = cb_data;
19644
ec7b92cbf49f Store the socket_type in the PurpleNetworkListenData correctly so that callback functions can use it correctly. Fixes #2933.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 19408
diff changeset
387 listen_data->socket_type = socket_type;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
388
21697
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
389 if (!listen_map_external || !purple_prefs_get_bool("/purple/network/map_ports"))
21466
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
390 {
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
391 purple_debug_info("network", "Skipping external port mapping.\n");
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
392 /* The pmp_map_cb does what we want to do */
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
393 purple_timeout_add(0, purple_network_finish_pmp_map_cb, listen_data);
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
394 }
15646
552be3958d6a Added nat-pmp implementation and #ifdef'd out changes to network.c which would utilize it.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15440
diff changeset
395 /* Attempt a NAT-PMP Mapping, which will return immediately */
21466
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
396 else if (purple_pmp_create_map(((socket_type == SOCK_STREAM) ? PURPLE_PMP_TYPE_TCP : PURPLE_PMP_TYPE_UDP),
15949
b4ab4812838a purple_pmp_create_map() returns a gboolean now, not a pointer
Evan Schoenberg <evan.s@dreskin.net>
parents: 15900
diff changeset
397 actual_port, actual_port, PURPLE_PMP_LIFETIME))
15855
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
398 {
21466
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
399 purple_debug_info("network", "Created NAT-PMP mapping on port %i\n", actual_port);
15855
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
400 /* We want to return listen_data now, and on the next run loop trigger the cb and destroy listen_data */
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
401 purple_timeout_add(0, purple_network_finish_pmp_map_cb, listen_data);
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
402 }
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
403 else
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
404 {
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
405 /* Attempt a UPnP Mapping */
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
406 listen_data->mapping_data = purple_upnp_set_port_mapping(
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
407 actual_port,
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
408 (socket_type == SOCK_STREAM) ? "TCP" : "UDP",
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
409 purple_network_set_upnp_port_mapping_cb, listen_data);
9b875f0ecb86 nat-pmp is now functional with a compatible router. I'm not enabling this code yet because it hasn't been tested with a router which doesn't support nat-pmp.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15822
diff changeset
410 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
411
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
412 return listen_data;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
413 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
414
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
415 PurpleNetworkListenData *
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
416 purple_network_listen(unsigned short port, int socket_type,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
417 PurpleNetworkListenCallback cb, gpointer cb_data)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
418 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
419 g_return_val_if_fail(port != 0, NULL);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
420
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
421 return purple_network_do_listen(port, socket_type, cb, cb_data);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
422 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
423
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
424 PurpleNetworkListenData *
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
425 purple_network_listen_range(unsigned short start, unsigned short end,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
426 int socket_type, PurpleNetworkListenCallback cb, gpointer cb_data)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
427 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
428 PurpleNetworkListenData *ret = NULL;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
429
16424
4999bbc52881 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents: 15974
diff changeset
430 if (purple_prefs_get_bool("/purple/network/ports_range_use")) {
4999bbc52881 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents: 15974
diff changeset
431 start = purple_prefs_get_int("/purple/network/ports_range_start");
4999bbc52881 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents: 15974
diff changeset
432 end = purple_prefs_get_int("/purple/network/ports_range_end");
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
433 } else {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
434 if (end < start)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
435 end = start;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
436 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
437
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
438 for (; start <= end; start++) {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
439 ret = purple_network_do_listen(start, socket_type, cb, cb_data);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
440 if (ret != NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
441 break;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
442 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
443
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
444 return ret;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
445 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
446
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
447 void purple_network_listen_cancel(PurpleNetworkListenData *listen_data)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
448 {
15440
56a2a0bb290a Fix a crash when a network_listen_range process is canceled before its UPnP port mapping completes, which occurs regularly on certain routers when file transfers are initiated and then quickly finished. Much thanks to Elliott Harris and Eric Richie for their hard work with me hunting this down and fixing it.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15373
diff changeset
449 if (listen_data->mapping_data != NULL)
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
450 purple_upnp_cancel_port_mapping(listen_data->mapping_data);
15440
56a2a0bb290a Fix a crash when a network_listen_range process is canceled before its UPnP port mapping completes, which occurs regularly on certain routers when file transfers are initiated and then quickly finished. Much thanks to Elliott Harris and Eric Richie for their hard work with me hunting this down and fixing it.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15373
diff changeset
451
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
452 g_free(listen_data);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
453 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
454
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
455 unsigned short
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
456 purple_network_get_port_from_fd(int fd)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
457 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
458 struct sockaddr_in addr;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
459 socklen_t len;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
460
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
461 g_return_val_if_fail(fd >= 0, 0);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
462
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
463 len = sizeof(addr);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
464 if (getsockname(fd, (struct sockaddr *) &addr, &len) == -1) {
21121
35b4f1dc4c8d replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 20347
diff changeset
465 purple_debug_warning("network", "getsockname: %s\n", g_strerror(errno));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
466 return 0;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
467 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
468
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
469 return ntohs(addr.sin_port);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
470 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
471
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
472 #ifdef _WIN32
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
473 #ifndef NS_NLA
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
474 #define NS_NLA 15
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
475 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
476 static gint
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
477 wpurple_get_connected_network_count(void)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
478 {
19408
cc36a5aac908 Fix some conversion warnings about using negative values with unsigned types. There are more, but these were easy fixes. You may think that I'm changing the API, but I'm really not - it was just wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 18401
diff changeset
479 gint net_cnt = 0;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
480
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
481 WSAQUERYSET qs;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
482 HANDLE h;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
483 gint retval;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
484 int errorid;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
485
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
486 memset(&qs, 0, sizeof(WSAQUERYSET));
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
487 qs.dwSize = sizeof(WSAQUERYSET);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
488 qs.dwNameSpace = NS_NLA;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
489
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
490 retval = WSALookupServiceBegin(&qs, LUP_RETURN_ALL, &h);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
491 if (retval != ERROR_SUCCESS) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
492 gchar *msg;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
493 errorid = WSAGetLastError();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
494 msg = g_win32_error_message(errorid);
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
495 purple_debug_warning("network", "Couldn't retrieve NLA SP lookup handle. "
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
496 "NLA service is probably not running. Message: %s (%d).\n",
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
497 msg, errorid);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
498 g_free(msg);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
499
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
500 return -1;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
501 } else {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
502 char buf[4096];
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
503 WSAQUERYSET *res = (LPWSAQUERYSET) buf;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
504 DWORD size = sizeof(buf);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
505 while ((retval = WSALookupServiceNext(h, 0, &size, res)) == ERROR_SUCCESS) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
506 net_cnt++;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
507 purple_debug_info("network", "found network '%s'\n",
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
508 res->lpszServiceInstanceName ? res->lpszServiceInstanceName : "(NULL)");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
509 size = sizeof(buf);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
510 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
511
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
512 errorid = WSAGetLastError();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
513 if (!(errorid == WSA_E_NO_MORE || errorid == WSAENOMORE)) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
514 gchar *msg = g_win32_error_message(errorid);
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
515 purple_debug_error("network", "got unexpected NLA response %s (%d)\n", msg, errorid);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
516 g_free(msg);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
517
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
518 net_cnt = -1;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
519 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
520
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
521 retval = WSALookupServiceEnd(h);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
522 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
523
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
524 return net_cnt;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
525
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
526 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
527
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
528 static gboolean wpurple_network_change_thread_cb(gpointer data)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
529 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
530 gint new_count;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
531 PurpleConnectionUiOps *ui_ops = purple_connections_get_ui_ops();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
532
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
533 new_count = wpurple_get_connected_network_count();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
534
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
535 if (new_count < 0)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
536 return FALSE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
537
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
538 purple_debug_info("network", "Received Network Change Notification. Current network count is %d, previous count was %d.\n", new_count, current_network_count);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
539
15974
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
540 purple_signal_emit(purple_network_get_handle(), "network-configuration-changed", NULL);
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
541
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
542 if (new_count > 0 && ui_ops != NULL && ui_ops->network_connected != NULL) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
543 ui_ops->network_connected();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
544 } else if (new_count == 0 && current_network_count > 0 &&
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
545 ui_ops != NULL && ui_ops->network_disconnected != NULL) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
546 ui_ops->network_disconnected();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
547 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
548
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
549 current_network_count = new_count;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
550
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
551 return FALSE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
552 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
553
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
554 static gboolean _print_debug_msg(gpointer data) {
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
555 gchar *msg = data;
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
556 purple_debug_warning("network", msg);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
557 g_free(msg);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
558 return FALSE;
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
559 }
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
560
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
561 static gpointer wpurple_network_change_thread(gpointer data)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
562 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
563 WSAQUERYSET qs;
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
564 WSAEVENT *nla_event;
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
565 time_t last_trigger = time(NULL) - 31;
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
566 char buf[4096];
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
567 WSAQUERYSET *res = (LPWSAQUERYSET) buf;
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
568 DWORD size;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
569
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
570 if ((nla_event = WSACreateEvent()) == WSA_INVALID_EVENT) {
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
571 int errorid = WSAGetLastError();
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
572 gchar *msg = g_win32_error_message(errorid);
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
573 purple_timeout_add(0, _print_debug_msg,
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
574 g_strdup_printf("Couldn't create WSA event. "
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
575 "Message: %s (%d).\n", msg, errorid));
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
576 g_free(msg);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
577 g_thread_exit(NULL);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
578 return NULL;
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
579 }
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
580
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
581 while (TRUE) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
582 int retval;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
583 DWORD retLen = 0;
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
584 WSACOMPLETION completion;
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
585 WSAOVERLAPPED overlapped;
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
586
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
587 g_static_mutex_lock(&mutex);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
588 if (network_initialized == FALSE) {
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
589 /* purple_network_uninit has been called */
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
590 WSACloseEvent(nla_event);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
591 g_static_mutex_unlock(&mutex);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
592 g_thread_exit(NULL);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
593 return NULL;
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
594 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
595
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
596 if (network_change_handle == NULL) {
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
597 memset(&qs, 0, sizeof(WSAQUERYSET));
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
598 qs.dwSize = sizeof(WSAQUERYSET);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
599 qs.dwNameSpace = NS_NLA;
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
600 if (WSALookupServiceBegin(&qs, 0, &network_change_handle) == SOCKET_ERROR) {
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
601 int errorid = WSAGetLastError();
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
602 gchar *msg = g_win32_error_message(errorid);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
603 purple_timeout_add(0, _print_debug_msg,
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
604 g_strdup_printf("Couldn't retrieve NLA SP lookup handle. "
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
605 "NLA service is probably not running. Message: %s (%d).\n",
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
606 msg, errorid));
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
607 g_free(msg);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
608 WSACloseEvent(nla_event);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
609 g_static_mutex_unlock(&mutex);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
610 g_thread_exit(NULL);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
611 return NULL;
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
612 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
613 }
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
614 g_static_mutex_unlock(&mutex);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
615
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
616 memset(&completion, 0, sizeof(WSACOMPLETION));
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
617 completion.Type = NSP_NOTIFY_EVENT;
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
618 overlapped.hEvent = nla_event;
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
619 completion.Parameters.Event.lpOverlapped = &overlapped;
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
620
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
621 if (MyWSANSPIoctl(network_change_handle, SIO_NSP_NOTIFY_CHANGE, NULL, 0, NULL, 0, &retLen, &completion) == SOCKET_ERROR) {
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
622 int errorid = WSAGetLastError();
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
623 if (errorid == WSA_INVALID_HANDLE) {
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
624 purple_timeout_add(0, _print_debug_msg,
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
625 g_strdup("Invalid NLA handle; resetting.\n"));
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
626 g_static_mutex_lock(&mutex);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
627 retval = WSALookupServiceEnd(network_change_handle);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
628 network_change_handle = NULL;
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
629 g_static_mutex_unlock(&mutex);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
630 continue;
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
631 /* WSA_IO_PENDING indicates successful async notification will happen */
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
632 } else if (errorid != WSA_IO_PENDING) {
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
633 gchar *msg = g_win32_error_message(errorid);
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
634 purple_timeout_add(0, _print_debug_msg,
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
635 g_strdup_printf("Unable to wait for changes. Message: %s (%d).\n",
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
636 msg, errorid));
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
637 g_free(msg);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
638 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
639 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
640
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
641 /* Make sure at least 30 seconds have elapsed since the last
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
642 * notification so we don't peg the cpu if this keeps changing. */
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
643 if ((time(NULL) - last_trigger) < 30)
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
644 Sleep(30000);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
645
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
646 /* This will block until NLA notifies us */
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
647 retval = WaitForSingleObjectEx(nla_event, WSA_INFINITE, TRUE);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
648
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
649 last_trigger = time(NULL);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
650
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
651 g_static_mutex_lock(&mutex);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
652 if (network_initialized == FALSE) {
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
653 /* Time to die */
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
654 WSACloseEvent(nla_event);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
655 g_static_mutex_unlock(&mutex);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
656 g_thread_exit(NULL);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
657 return NULL;
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
658 }
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
659
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
660 size = sizeof(buf);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
661 while ((retval = WSALookupServiceNext(network_change_handle, 0, &size, res)) == ERROR_SUCCESS) {
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
662 /*purple_timeout_add(0, _print_debug_msg,
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
663 g_strdup_printf("thread found network '%s'\n",
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
664 res->lpszServiceInstanceName ? res->lpszServiceInstanceName : "(NULL)"));*/
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
665 size = sizeof(buf);
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
666 }
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
667
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
668 WSAResetEvent(nla_event);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
669 g_static_mutex_unlock(&mutex);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
670
21466
7a05b6f84545 Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21121
diff changeset
671 purple_timeout_add(0, wpurple_network_change_thread_cb, NULL);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
672 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
673
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
674 g_thread_exit(NULL);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
675 return NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
676 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
677 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
678
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
679 gboolean
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
680 purple_network_is_available(void)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
681 {
22895
0bd86dae2734 Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@wiktel.com>
parents: 22889
diff changeset
682 #ifdef HAVE_NETWORKMANAGER
25852
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
683 if (force_online)
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
684 return TRUE;
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
685
24301
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
686 if (!have_nm_state)
22882
6421d275c85e Fix some whitespace as noticed by QuLogic.
Richard Laager <rlaager@wiktel.com>
parents: 22876
diff changeset
687 {
24301
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
688 have_nm_state = TRUE;
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
689 nm_state = nm_get_network_state();
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
690 if (nm_state == NM_STATE_UNKNOWN)
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
691 purple_debug_warning("network", "NetworkManager not active. Assuming connection exists.\n");
22876
e6674df4cbf1 Changes suggested by QuLogic to fix my broken changes to the NetworkManager
Richard Laager <rlaager@wiktel.com>
parents: 22875
diff changeset
692 }
24301
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
693
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
694 if (nm_state == NM_STATE_UNKNOWN || nm_state == NM_STATE_CONNECTED)
22875
4f6040bb6f7a Update configure.ac to properly detect Network Manager (via NetworkManager.h instead of libnm_glib). Also, change the code so that if NetworkManager is dead, we'll assume we're connected to the network and try anyway.
Richard Laager <rlaager@wiktel.com>
parents: 22874
diff changeset
695 return TRUE;
22876
e6674df4cbf1 Changes suggested by QuLogic to fix my broken changes to the NetworkManager
Richard Laager <rlaager@wiktel.com>
parents: 22875
diff changeset
696
e6674df4cbf1 Changes suggested by QuLogic to fix my broken changes to the NetworkManager
Richard Laager <rlaager@wiktel.com>
parents: 22875
diff changeset
697 return FALSE;
e6674df4cbf1 Changes suggested by QuLogic to fix my broken changes to the NetworkManager
Richard Laager <rlaager@wiktel.com>
parents: 22875
diff changeset
698
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
699 #elif defined _WIN32
25852
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
700 return (current_network_count > 0 || force_online);
22876
e6674df4cbf1 Changes suggested by QuLogic to fix my broken changes to the NetworkManager
Richard Laager <rlaager@wiktel.com>
parents: 22875
diff changeset
701 #else
e6674df4cbf1 Changes suggested by QuLogic to fix my broken changes to the NetworkManager
Richard Laager <rlaager@wiktel.com>
parents: 22875
diff changeset
702 return TRUE;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
703 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
704 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
705
25852
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
706 void
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
707 purple_network_force_online()
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
708 {
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
709 #if defined(HAVE_NETWORKMANAGER) || defined(_WIN32)
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
710 force_online = TRUE;
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
711 #endif
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
712 }
b38cbefca6ad Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@wiktel.com>
parents: 24301
diff changeset
713
22895
0bd86dae2734 Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@wiktel.com>
parents: 22889
diff changeset
714 #ifdef HAVE_NETWORKMANAGER
22594
0e426ad6cc87 Make some more things static
Stu Tomlinson <stu@nosnilmot.com>
parents: 21862
diff changeset
715 static void
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
716 nm_update_state(NMState state)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
717 {
24301
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
718 NMState prev = nm_state;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
719 PurpleConnectionUiOps *ui_ops = purple_connections_get_ui_ops();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
720
24301
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
721 have_nm_state = TRUE;
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
722 nm_state = state;
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
723
15974
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
724 purple_signal_emit(purple_network_get_handle(), "network-configuration-changed", NULL);
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
725
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
726 switch(state)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
727 {
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
728 case NM_STATE_CONNECTED:
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
729 /* Call res_init in case DNS servers have changed */
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
730 res_init();
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
731 /* update STUN IP in case we it changed (theoretically we could
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
732 have gone from IPv4 to IPv6, f.ex. or we were previously
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
733 offline */
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
734 purple_network_set_stun_server(
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
735 purple_prefs_get_string("/purple/network/stun_server"));
26055
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
736 purple_network_set_turn_server(
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
737 purple_prefs_get_string("/purple/network/turn_server"));
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
738
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
739 if (ui_ops != NULL && ui_ops->network_connected != NULL)
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
740 ui_ops->network_connected();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
741 break;
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
742 case NM_STATE_ASLEEP:
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
743 case NM_STATE_CONNECTING:
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
744 case NM_STATE_DISCONNECTED:
24301
785db7300ef2 Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@wiktel.com>
parents: 23712
diff changeset
745 if (prev != NM_STATE_CONNECTED && prev != NM_STATE_UNKNOWN)
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
746 break;
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
747 if (ui_ops != NULL && ui_ops->network_disconnected != NULL)
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
748 ui_ops->network_disconnected();
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
749 break;
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
750 case NM_STATE_UNKNOWN:
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
751 default:
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
752 break;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
753 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
754 }
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
755
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
756 static void
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
757 nm_state_change_cb(DBusGProxy *proxy, NMState state, gpointer user_data)
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
758 {
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
759 purple_debug_info("network", "Got StateChange from NetworkManager: %d.\n", state);
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
760 nm_update_state(state);
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
761 }
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
762
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
763 static NMState
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
764 nm_get_network_state(void)
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
765 {
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
766 GError *err = NULL;
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
767 NMState state = NM_STATE_UNKNOWN;
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
768
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
769 if (!nm_proxy)
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
770 return NM_STATE_UNKNOWN;
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
771
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
772 if (!dbus_g_proxy_call(nm_proxy, "state", &err, G_TYPE_INVALID, G_TYPE_UINT, &state, G_TYPE_INVALID)) {
23043
Stu Tomlinson <stu@nosnilmot.com>
parents: 22895
diff changeset
773 g_error_free(err);
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
774 return NM_STATE_UNKNOWN;
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
775 }
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
776
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
777 return state;
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
778 }
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
779
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
780 static void
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
781 nm_dbus_name_owner_changed_cb(DBusGProxy *proxy, char *service, char *old_owner, char *new_owner, gpointer user_data)
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
782 {
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
783 if (g_str_equal(service, NM_DBUS_SERVICE)) {
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
784 gboolean old_owner_good = old_owner && (old_owner[0] != '\0');
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
785 gboolean new_owner_good = new_owner && (new_owner[0] != '\0');
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
786
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
787 purple_debug_info("network", "Got NameOwnerChanged signal, service = '%s', old_owner = '%s', new_owner = '%s'\n", service, old_owner, new_owner);
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
788 if (!old_owner_good && new_owner_good) { /* Equivalent to old ServiceCreated signal */
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
789 purple_debug_info("network", "NetworkManager has started.\n");
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
790 nm_update_state(nm_get_network_state());
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
791 } else if (old_owner_good && !new_owner_good) { /* Equivalent to old ServiceDeleted signal */
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
792 purple_debug_info("network", "NetworkManager has gone away.\n");
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
793 nm_update_state(NM_STATE_UNKNOWN);
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
794 }
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
795 }
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
796 }
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
797
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
798 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
799
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
800 static void
26055
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
801 purple_network_ip_lookup_cb(GSList *hosts, gpointer data,
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
802 const char *error_message)
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
803 {
26055
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
804 const gchar **ip = (const gchar **) data;
26056
4f0aec6d4ad7 Removed some extra tabs on blank lines
Marcus Lundblad <ml@update.uu.se>
parents: 26055
diff changeset
805
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
806 if (error_message) {
26055
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
807 purple_debug_error("network", "lookup of IP address failed: %s\n",
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
808 error_message);
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
809 g_slist_free(hosts);
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
810 return;
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
811 }
26056
4f0aec6d4ad7 Removed some extra tabs on blank lines
Marcus Lundblad <ml@update.uu.se>
parents: 26055
diff changeset
812
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
813 if (hosts && g_slist_next(hosts)) {
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
814 struct sockaddr *addr = g_slist_next(hosts)->data;
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
815 char dst[INET6_ADDRSTRLEN];
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
816
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
817 if (addr->sa_family == AF_INET6) {
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
818 inet_ntop(addr->sa_family, &((struct sockaddr_in6 *) addr)->sin6_addr,
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
819 dst, sizeof(dst));
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
820 } else {
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
821 inet_ntop(addr->sa_family, &((struct sockaddr_in *) addr)->sin_addr,
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
822 dst, sizeof(dst));
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
823 }
26056
4f0aec6d4ad7 Removed some extra tabs on blank lines
Marcus Lundblad <ml@update.uu.se>
parents: 26055
diff changeset
824
26055
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
825 *ip = g_strdup(dst);
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
826 purple_debug_info("network", "set IP address: %s\n", *ip);
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
827 }
26551
5d1140b0b10a Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <paul@darkrain42.org>
parents: 26131
diff changeset
828
5d1140b0b10a Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <paul@darkrain42.org>
parents: 26131
diff changeset
829 while (hosts != NULL) {
5d1140b0b10a Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <paul@darkrain42.org>
parents: 26131
diff changeset
830 hosts = g_slist_delete_link(hosts, hosts);
5d1140b0b10a Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <paul@darkrain42.org>
parents: 26131
diff changeset
831 /* Free the address */
5d1140b0b10a Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <paul@darkrain42.org>
parents: 26131
diff changeset
832 g_free(hosts->data);
5d1140b0b10a Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <paul@darkrain42.org>
parents: 26131
diff changeset
833 hosts = g_slist_delete_link(hosts, hosts);
5d1140b0b10a Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <paul@darkrain42.org>
parents: 26131
diff changeset
834 }
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
835 }
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
836
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
837 void
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
838 purple_network_set_stun_server(const gchar *stun_server)
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
839 {
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
840 if (stun_server && stun_server[0] != '\0') {
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
841 if (purple_network_is_available()) {
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
842 purple_debug_info("network", "running DNS query for STUN server\n");
26055
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
843 purple_dnsquery_a(stun_server, 3478, purple_network_ip_lookup_cb,
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
844 &stun_ip);
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
845 } else {
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
846 purple_debug_info("network",
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
847 "network is unavailable, don't try to update STUN IP");
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
848 }
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
849 } else if (stun_ip) {
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
850 g_free(stun_ip);
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
851 stun_ip = NULL;
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
852 }
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
853 }
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
854
26055
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
855 void
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
856 purple_network_set_turn_server(const gchar *turn_server)
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
857 {
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
858 if (turn_server && turn_server[0] != '\0') {
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
859 if (purple_network_is_available()) {
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
860 purple_debug_info("network", "running DNS query for TURN server\n");
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
861 purple_dnsquery_a(turn_server,
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
862 purple_prefs_get_int("/purple/network/turn_port"),
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
863 purple_network_ip_lookup_cb, &turn_ip);
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
864 } else {
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
865 purple_debug_info("network",
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
866 "network is unavailable, don't try to update TURN IP");
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
867 }
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
868 } else if (turn_ip) {
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
869 g_free(turn_ip);
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
870 turn_ip = NULL;
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
871 }
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
872 }
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
873
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
874
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
875 const gchar *
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
876 purple_network_get_stun_ip(void)
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
877 {
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
878 return stun_ip;
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
879 }
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
880
26055
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
881 const gchar *
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
882 purple_network_get_turn_ip(void)
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
883 {
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
884 return turn_ip;
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
885 }
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
886
15974
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
887 void *
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
888 purple_network_get_handle(void)
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
889 {
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
890 static int handle;
19408
cc36a5aac908 Fix some conversion warnings about using negative values with unsigned types. There are more, but these were easy fixes. You may think that I'm changing the API, but I'm really not - it was just wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 18401
diff changeset
891
15974
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
892 return &handle;
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
893 }
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
894
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
895 void
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
896 purple_network_init(void)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
897 {
22895
0bd86dae2734 Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@wiktel.com>
parents: 22889
diff changeset
898 #ifdef HAVE_NETWORKMANAGER
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
899 GError *error = NULL;
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
900 #endif
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
901 #ifdef _WIN32
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
902 GError *err = NULL;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
903 gint cnt = wpurple_get_connected_network_count();
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
904
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
905 network_initialized = TRUE;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
906 if (cnt < 0) /* Assume there is a network */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
907 current_network_count = 1;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
908 /* Don't listen for network changes if we can't tell anyway */
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
909 else {
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
910 current_network_count = cnt;
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
911 if ((MyWSANSPIoctl = (void*) wpurple_find_and_loadproc("ws2_32.dll", "WSANSPIoctl"))) {
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
912 if (!g_thread_create(wpurple_network_change_thread, NULL, FALSE, &err))
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
913 purple_debug_error("network", "Couldn't create Network Monitor thread: %s\n", err ? err->message : "");
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
914 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
915 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
916 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
917
16424
4999bbc52881 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents: 15974
diff changeset
918 purple_prefs_add_none ("/purple/network");
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
919 purple_prefs_add_string("/purple/network/stun_server", "");
26055
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
920 purple_prefs_add_string("/purple/network/turn_server", "");
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
921 purple_prefs_add_int ("/purple/network/turn_port", 3478);
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
922 purple_prefs_add_string("/purple/network/turn_username", "");
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
923 purple_prefs_add_string("/purple/network/turn_password", "");
16424
4999bbc52881 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents: 15974
diff changeset
924 purple_prefs_add_bool ("/purple/network/auto_ip", TRUE);
4999bbc52881 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents: 15974
diff changeset
925 purple_prefs_add_string("/purple/network/public_ip", "");
21697
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
926 purple_prefs_add_bool ("/purple/network/map_ports", TRUE);
16424
4999bbc52881 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents: 15974
diff changeset
927 purple_prefs_add_bool ("/purple/network/ports_range_use", FALSE);
4999bbc52881 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents: 15974
diff changeset
928 purple_prefs_add_int ("/purple/network/ports_range_start", 1024);
4999bbc52881 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents: 15974
diff changeset
929 purple_prefs_add_int ("/purple/network/ports_range_end", 2048);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
930
21697
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
931 if(purple_prefs_get_bool("/purple/network/map_ports") || purple_prefs_get_bool("/purple/network/auto_ip"))
65ef019c000b Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21466
diff changeset
932 purple_upnp_discover(NULL, NULL);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
933
22895
0bd86dae2734 Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@wiktel.com>
parents: 22889
diff changeset
934 #ifdef HAVE_NETWORKMANAGER
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
935 nm_conn = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
936 if (!nm_conn) {
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
937 purple_debug_warning("network", "Error connecting to DBus System service: %s.\n", error->message);
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
938 } else {
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
939 nm_proxy = dbus_g_proxy_new_for_name(nm_conn,
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
940 NM_DBUS_SERVICE,
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
941 NM_DBUS_PATH,
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
942 NM_DBUS_INTERFACE);
22889
f5d39c44465a Modify the NetworkManager support to use "StateChange" directly, instead of
Richard Laager <rlaager@wiktel.com>
parents: 22882
diff changeset
943 dbus_g_proxy_add_signal(nm_proxy, "StateChange", G_TYPE_UINT, G_TYPE_INVALID);
f5d39c44465a Modify the NetworkManager support to use "StateChange" directly, instead of
Richard Laager <rlaager@wiktel.com>
parents: 22882
diff changeset
944 dbus_g_proxy_connect_signal(nm_proxy, "StateChange",
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
945 G_CALLBACK(nm_state_change_cb), NULL, NULL);
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
946
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
947 dbus_proxy = dbus_g_proxy_new_for_name(nm_conn,
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
948 DBUS_SERVICE_DBUS,
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
949 DBUS_PATH_DBUS,
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
950 DBUS_INTERFACE_DBUS);
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
951 dbus_g_proxy_add_signal(dbus_proxy, "NameOwnerChanged", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
952 dbus_g_proxy_connect_signal(dbus_proxy, "NameOwnerChanged",
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
953 G_CALLBACK(nm_dbus_name_owner_changed_cb), NULL, NULL);
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
954 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
955 #endif
15974
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
956
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
957 purple_signal_register(purple_network_get_handle(), "network-configuration-changed",
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
958 purple_marshal_VOID, NULL, 0);
19408
cc36a5aac908 Fix some conversion warnings about using negative values with unsigned types. There are more, but these were easy fixes. You may think that I'm changing the API, but I'm really not - it was just wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 18401
diff changeset
959
15974
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
960 purple_pmp_init();
1a12ce76c4f4 The network module now registers the signal 'network-configuration-changed' and emits it when a network change is detected via libnm or the win32 network monitor. The UI could also emit this signal if it knows something network.c doesn't. UPnP and NAT-PMP respond to the signal by clearing their IP address caches; changing networks without quitting/relaunching will now lead to the new IP address being (lazily) determined. This commit also enables nat-pmp and adds nat-pmp.[h|c] to the build process; please let me know if there are any problems building, as I only have OS X test machines.
Evan Schoenberg <evan.s@dreskin.net>
parents: 15949
diff changeset
961 purple_upnp_init();
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
962
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
963 purple_network_set_stun_server(
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
964 purple_prefs_get_string("/purple/network/stun_server"));
26055
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
965 purple_network_set_turn_server(
c56e8826fed0 Added support to generate relayed candidates (TURN).
Marcus Lundblad <ml@update.uu.se>
parents: 26050
diff changeset
966 purple_prefs_get_string("/purple/network/turn_server"));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
967 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
968
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
969 void
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15646
diff changeset
970 purple_network_uninit(void)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
971 {
22895
0bd86dae2734 Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@wiktel.com>
parents: 22889
diff changeset
972 #ifdef HAVE_NETWORKMANAGER
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
973 if (nm_proxy) {
22889
f5d39c44465a Modify the NetworkManager support to use "StateChange" directly, instead of
Richard Laager <rlaager@wiktel.com>
parents: 22882
diff changeset
974 dbus_g_proxy_disconnect_signal(nm_proxy, "StateChange", G_CALLBACK(nm_state_change_cb), NULL);
22874
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
975 g_object_unref(G_OBJECT(nm_proxy));
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
976 }
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
977 if (dbus_proxy) {
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
978 dbus_g_proxy_disconnect_signal(dbus_proxy, "NameOwnerChanged", G_CALLBACK(nm_dbus_name_owner_changed_cb), NULL);
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
979 g_object_unref(G_OBJECT(dbus_proxy));
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
980 }
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
981 if (nm_conn)
790c606ff8a9 A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@wiktel.com>
parents: 22594
diff changeset
982 dbus_g_connection_unref(nm_conn);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
983 #endif
21067
96929e7acb86 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <pidgin@unreliablesource.net>
parents: 20347
diff changeset
984
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
985 #ifdef _WIN32
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
986 g_static_mutex_lock(&mutex);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
987 network_initialized = FALSE;
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
988 if (network_change_handle != NULL) {
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
989 int retval;
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
990 /* Trigger the NLA thread to stop waiting for network changes. Not
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
991 * doing this can cause hangs on WSACleanup. */
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
992 purple_debug_warning("network", "Terminating the NLA thread\n");
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
993 if ((retval = WSALookupServiceEnd(network_change_handle)) == SOCKET_ERROR) {
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
994 int errorid = WSAGetLastError();
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
995 gchar *msg = g_win32_error_message(errorid);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
996 purple_debug_warning("network", "Unable to kill NLA thread. Message: %s (%d).\n",
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
997 msg, errorid);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
998 g_free(msg);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
999 }
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
1000 network_change_handle = NULL;
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
1001
24888
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
1002 }
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
1003 g_static_mutex_unlock(&mutex);
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
1004
a6742d9eadf3 Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <paul@darkrain42.org>
parents: 24301
diff changeset
1005 #endif
21067
96929e7acb86 Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <pidgin@unreliablesource.net>
parents: 20347
diff changeset
1006 purple_signal_unregister(purple_network_get_handle(),
25401
75f72178e361 Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24888
diff changeset
1007 "network-configuration-changed");
26050
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
1008
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
1009 if (stun_ip)
ae3d25465d0f Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <ml@update.uu.se>
parents: 24888
diff changeset
1010 g_free(stun_ip);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1011 }