Sun, 14 Apr 2013 15:23:08 +0200
Replace deprecated g_thread_create with g_thread_try_new
| 8231 | 1 | /** |
| 2 | * @file network.c Network Implementation | |
| 3 | * @ingroup core | |
|
20147
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
4 | */ |
|
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
5 | |
|
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
6 | /* purple |
| 8231 | 7 | * |
| 15884 | 8 | * Purple is the legal property of its developers, whose names are too numerous |
| 8231 | 9 | * to list here. Please refer to the COPYRIGHT file distributed with this |
| 10 | * source distribution. | |
| 11 | * | |
| 12 | * This program is free software; you can redistribute it and/or modify | |
| 13 | * it under the terms of the GNU General Public License as published by | |
| 14 | * the Free Software Foundation; either version 2 of the License, or | |
| 15 | * (at your option) any later version. | |
| 16 | * | |
| 17 | * This program is distributed in the hope that it will be useful, | |
| 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 20 | * GNU General Public License for more details. | |
| 21 | * | |
| 22 | * You should have received a copy of the GNU General Public License | |
| 23 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19832
diff
changeset
|
24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 8231 | 25 | */ |
| 26 | ||
|
8245
c1397ca0a619
[gaim-migrate @ 8968]
Herman Bloggs <herman@bluedigits.com>
parents:
8240
diff
changeset
|
27 | #include "internal.h" |
| 8231 | 28 | |
|
13156
539a637c61dc
[gaim-migrate @ 15518]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13131
diff
changeset
|
29 | #ifndef _WIN32 |
|
23352
9714223ca7a7
A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents:
23185
diff
changeset
|
30 | #include <arpa/nameser.h> |
| 14864 | 31 | #include <resolv.h> |
| 32 | #include <netinet/in.h> | |
|
13156
539a637c61dc
[gaim-migrate @ 15518]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13131
diff
changeset
|
33 | #include <net/if.h> |
|
539a637c61dc
[gaim-migrate @ 15518]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13131
diff
changeset
|
34 | #include <sys/ioctl.h> |
|
29714
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
35 | #ifdef HAVE_GETIFADDRS |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
36 | #include <ifaddrs.h> |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
37 | #endif |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
38 | #else |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
39 | #include <nspapi.h> |
|
13156
539a637c61dc
[gaim-migrate @ 15518]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13131
diff
changeset
|
40 | #endif |
|
539a637c61dc
[gaim-migrate @ 15518]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13131
diff
changeset
|
41 | |
|
539a637c61dc
[gaim-migrate @ 15518]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13131
diff
changeset
|
42 | /* Solaris */ |
|
539a637c61dc
[gaim-migrate @ 15518]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13131
diff
changeset
|
43 | #if defined (__SVR4) && defined (__sun) |
|
539a637c61dc
[gaim-migrate @ 15518]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13131
diff
changeset
|
44 | #include <sys/sockio.h> |
|
539a637c61dc
[gaim-migrate @ 15518]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13131
diff
changeset
|
45 | #endif |
|
539a637c61dc
[gaim-migrate @ 15518]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13131
diff
changeset
|
46 | |
| 8231 | 47 | #include "debug.h" |
| 48 | #include "account.h" | |
|
16035
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
49 | #include "nat-pmp.h" |
| 8231 | 50 | #include "network.h" |
| 51 | #include "prefs.h" | |
|
11411
b74834586187
[gaim-migrate @ 13648]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11391
diff
changeset
|
52 | #include "stun.h" |
|
11195
d84d542a04ac
[gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
11033
diff
changeset
|
53 | #include "upnp.h" |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
54 | #include "dnsquery.h" |
| 8231 | 55 | |
|
27898
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
56 | #ifdef USE_IDN |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
57 | #include <idna.h> |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
58 | #endif |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
59 | |
|
15278
7f469b5c8d7a
[gaim-migrate @ 18006]
Mark Doliner <markdoliner@pidgin.im>
parents:
15116
diff
changeset
|
60 | /* |
|
7f469b5c8d7a
[gaim-migrate @ 18006]
Mark Doliner <markdoliner@pidgin.im>
parents:
15116
diff
changeset
|
61 | * Calling sizeof(struct ifreq) isn't always correct on |
|
7f469b5c8d7a
[gaim-migrate @ 18006]
Mark Doliner <markdoliner@pidgin.im>
parents:
15116
diff
changeset
|
62 | * Mac OS X (and maybe others). |
|
7f469b5c8d7a
[gaim-migrate @ 18006]
Mark Doliner <markdoliner@pidgin.im>
parents:
15116
diff
changeset
|
63 | */ |
|
7f469b5c8d7a
[gaim-migrate @ 18006]
Mark Doliner <markdoliner@pidgin.im>
parents:
15116
diff
changeset
|
64 | #ifdef _SIZEOF_ADDR_IFREQ |
|
7f469b5c8d7a
[gaim-migrate @ 18006]
Mark Doliner <markdoliner@pidgin.im>
parents:
15116
diff
changeset
|
65 | # define HX_SIZE_OF_IFREQ(a) _SIZEOF_ADDR_IFREQ(a) |
|
7f469b5c8d7a
[gaim-migrate @ 18006]
Mark Doliner <markdoliner@pidgin.im>
parents:
15116
diff
changeset
|
66 | #else |
|
7f469b5c8d7a
[gaim-migrate @ 18006]
Mark Doliner <markdoliner@pidgin.im>
parents:
15116
diff
changeset
|
67 | # define HX_SIZE_OF_IFREQ(a) sizeof(a) |
|
7f469b5c8d7a
[gaim-migrate @ 18006]
Mark Doliner <markdoliner@pidgin.im>
parents:
15116
diff
changeset
|
68 | #endif |
|
7f469b5c8d7a
[gaim-migrate @ 18006]
Mark Doliner <markdoliner@pidgin.im>
parents:
15116
diff
changeset
|
69 | |
|
23060
db9632a9b374
Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@pidgin.im>
parents:
23054
diff
changeset
|
70 | #ifdef HAVE_NETWORKMANAGER |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
71 | #include <dbus/dbus-glib.h> |
|
23060
db9632a9b374
Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@pidgin.im>
parents:
23054
diff
changeset
|
72 | #include <NetworkManager.h> |
| 14758 | 73 | |
|
31653
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
74 | #if !defined(NM_CHECK_VERSION) |
|
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
75 | #define NM_CHECK_VERSION(x,y,z) 0 |
|
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
76 | #endif |
|
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
77 | |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
78 | static DBusGConnection *nm_conn = NULL; |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
79 | static DBusGProxy *nm_proxy = NULL; |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
80 | static DBusGProxy *dbus_proxy = NULL; |
|
24519
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
81 | static NMState nm_state = NM_STATE_UNKNOWN; |
|
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
82 | static gboolean have_nm_state = FALSE; |
| 14758 | 83 | |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
84 | #elif defined _WIN32 |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
85 | static int current_network_count; |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
86 | |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
87 | /* Mutex for the other global vars */ |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
88 | static GStaticMutex mutex = G_STATIC_MUTEX_INIT; |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
89 | static gboolean network_initialized = FALSE; |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
90 | static HANDLE network_change_handle = NULL; |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
91 | static int (WSAAPI *MyWSANSPIoctl) ( |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
92 | HANDLE hLookup, DWORD dwControlCode, LPVOID lpvInBuffer, |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
93 | DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
94 | LPDWORD lpcbBytesReturned, LPWSACOMPLETION lpCompletion) = NULL; |
| 14758 | 95 | #endif |
| 96 | ||
| 15884 | 97 | struct _PurpleNetworkListenData { |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
98 | int listenfd; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
99 | int socket_type; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
100 | gboolean retry; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
101 | gboolean adding; |
| 15884 | 102 | PurpleNetworkListenCallback cb; |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
103 | gpointer cb_data; |
|
15502
250802f80d94
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 <evands@pidgin.im>
parents:
15435
diff
changeset
|
104 | UPnPMappingAddRemove *mapping_data; |
|
30614
ba7a36c1696b
Make sure we keep track of this timer and remove it if our caller frees
Mark Doliner <markdoliner@pidgin.im>
parents:
30027
diff
changeset
|
105 | int timer; |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
106 | }; |
|
11391
d172e72988cc
[gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents:
11336
diff
changeset
|
107 | |
|
23060
db9632a9b374
Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@pidgin.im>
parents:
23054
diff
changeset
|
108 | #ifdef HAVE_NETWORKMANAGER |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
109 | static NMState nm_get_network_state(void); |
| 14758 | 110 | #endif |
| 111 | ||
|
24999
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
112 | #if defined(HAVE_NETWORKMANAGER) || defined(_WIN32) |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
113 | static gboolean force_online; |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
114 | #endif |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
115 | |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
116 | /* Cached IP addresses for STUN and TURN servers (set globally in prefs) */ |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
117 | static gchar *stun_ip = NULL; |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
118 | static gchar *turn_ip = NULL; |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
119 | |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
120 | /* Keep track of port mappings done with UPnP and NAT-PMP */ |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
121 | static GHashTable *upnp_port_mappings = NULL; |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
122 | static GHashTable *nat_pmp_port_mappings = NULL; |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
123 | |
|
8838
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
124 | const unsigned char * |
| 15884 | 125 | purple_network_ip_atoi(const char *ip) |
|
8838
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
126 | { |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
127 | static unsigned char ret[4]; |
| 8981 | 128 | gchar *delimiter = "."; |
|
8838
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
129 | gchar **split; |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
130 | int i; |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
131 | |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
132 | g_return_val_if_fail(ip != NULL, NULL); |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
133 | |
| 8981 | 134 | split = g_strsplit(ip, delimiter, 4); |
|
8838
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
135 | for (i = 0; split[i] != NULL; i++) |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
136 | ret[i] = atoi(split[i]); |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
137 | g_strfreev(split); |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
138 | |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
139 | /* i should always be 4 */ |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
140 | if (i != 4) |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
141 | return NULL; |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
142 | |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
143 | return ret; |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
144 | } |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
145 | |
| 8231 | 146 | void |
| 15884 | 147 | purple_network_set_public_ip(const char *ip) |
| 8231 | 148 | { |
| 149 | g_return_if_fail(ip != NULL); | |
| 150 | ||
|
8838
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
151 | /* XXX - Ensure the IP address is valid */ |
|
c23227da7b4a
[gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents:
8834
diff
changeset
|
152 | |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16035
diff
changeset
|
153 | purple_prefs_set_string("/purple/network/public_ip", ip); |
| 8231 | 154 | } |
| 155 | ||
| 156 | const char * | |
| 15884 | 157 | purple_network_get_public_ip(void) |
| 8231 | 158 | { |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16035
diff
changeset
|
159 | return purple_prefs_get_string("/purple/network/public_ip"); |
| 8231 | 160 | } |
| 161 | ||
| 162 | const char * | |
| 15884 | 163 | purple_network_get_local_system_ip(int fd) |
| 8231 | 164 | { |
|
13346
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
165 | char buffer[1024]; |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
166 | static char ip[16]; |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
167 | char *tmp; |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
168 | struct ifconf ifc; |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
169 | struct ifreq *ifr; |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
170 | struct sockaddr_in *sinptr; |
| 29704 | 171 | guint32 lhost = htonl((127 << 24) + 1); /* 127.0.0.1 */ |
|
13346
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
172 | long unsigned int add; |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
173 | int source = fd; |
| 8231 | 174 | |
|
13346
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
175 | if (fd < 0) |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
176 | source = socket(PF_INET,SOCK_STREAM, 0); |
| 8231 | 177 | |
|
13346
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
178 | ifc.ifc_len = sizeof(buffer); |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
179 | ifc.ifc_req = (struct ifreq *)buffer; |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
180 | ioctl(source, SIOCGIFCONF, &ifc); |
| 8231 | 181 | |
|
13346
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
182 | if (fd < 0) |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
183 | close(source); |
| 8231 | 184 | |
|
13346
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
185 | tmp = buffer; |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
186 | while (tmp < buffer + ifc.ifc_len) |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
187 | { |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
188 | ifr = (struct ifreq *)tmp; |
|
15278
7f469b5c8d7a
[gaim-migrate @ 18006]
Mark Doliner <markdoliner@pidgin.im>
parents:
15116
diff
changeset
|
189 | tmp += HX_SIZE_OF_IFREQ(*ifr); |
| 8231 | 190 | |
|
13346
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
191 | if (ifr->ifr_addr.sa_family == AF_INET) |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
192 | { |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
193 | sinptr = (struct sockaddr_in *)&ifr->ifr_addr; |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
194 | if (sinptr->sin_addr.s_addr != lhost) |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
195 | { |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
196 | add = ntohl(sinptr->sin_addr.s_addr); |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
197 | g_snprintf(ip, 16, "%lu.%lu.%lu.%lu", |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
198 | ((add >> 24) & 255), |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
199 | ((add >> 16) & 255), |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
200 | ((add >> 8) & 255), |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
201 | add & 255); |
| 8231 | 202 | |
|
13346
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
203 | return ip; |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
204 | } |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
205 | } |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
206 | } |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
207 | |
|
a024b2b0a160
[gaim-migrate @ 15715]
Mark Doliner <markdoliner@pidgin.im>
parents:
13168
diff
changeset
|
208 | return "0.0.0.0"; |
| 8231 | 209 | } |
| 210 | ||
|
29510
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
211 | GList * |
|
29511
7c4b1ba4f2aa
Remove IPv6 support from _get_local_system_ips, since I couldn't get it to
Marcus Lundblad <malu@pidgin.im>
parents:
29510
diff
changeset
|
212 | purple_network_get_all_local_system_ips(void) |
|
29510
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
213 | { |
|
29716
59a5b6c2e6cb
Oops, probably better if we have both getifaddrs() and inet_ntop()
Paul Aurich <darkrain42@pidgin.im>
parents:
29714
diff
changeset
|
214 | #if defined(HAVE_GETIFADDRS) && defined(HAVE_INET_NTOP) |
|
29714
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
215 | GList *result = NULL; |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
216 | struct ifaddrs *start, *ifa; |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
217 | int ret; |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
218 | |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
219 | ret = getifaddrs(&start); |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
220 | if (ret < 0) { |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
221 | purple_debug_warning("network", |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
222 | "getifaddrs() failed: %s\n", g_strerror(errno)); |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
223 | return NULL; |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
224 | } |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
225 | |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
226 | for (ifa = start; ifa; ifa = ifa->ifa_next) { |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
227 | int family = ifa->ifa_addr ? ifa->ifa_addr->sa_family : AF_UNSPEC; |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
228 | char host[INET6_ADDRSTRLEN]; |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
229 | const char *tmp = NULL; |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
230 | |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
231 | if ((family != AF_INET && family != AF_INET6) || ifa->ifa_flags & IFF_LOOPBACK) |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
232 | continue; |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
233 | |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
234 | if (family == AF_INET) |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
235 | tmp = inet_ntop(family, &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr, host, sizeof(host)); |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
236 | else { |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
237 | struct sockaddr_in6 *sockaddr = (struct sockaddr_in6 *)ifa->ifa_addr; |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
238 | /* Peer-peer link-local communication is a big TODO. I am not sure |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
239 | * how communicating link-local addresses is supposed to work, and |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
240 | * it seems like it would require attempting the cartesian product |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
241 | * of the local and remote interfaces to see if any match (eww). |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
242 | */ |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
243 | if (!IN6_IS_ADDR_LINKLOCAL(&sockaddr->sin6_addr)) |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
244 | tmp = inet_ntop(family, &sockaddr->sin6_addr, host, sizeof(host)); |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
245 | } |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
246 | if (tmp != NULL) |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
247 | result = g_list_prepend(result, g_strdup(tmp)); |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
248 | } |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
249 | |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
250 | freeifaddrs(start); |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
251 | |
|
8c1f3beb9fdc
network: Use getifaddrs() to enumerate local interfaces/IPs if available.
Paul Aurich <darkrain42@pidgin.im>
parents:
29704
diff
changeset
|
252 | return g_list_reverse(result); |
|
29716
59a5b6c2e6cb
Oops, probably better if we have both getifaddrs() and inet_ntop()
Paul Aurich <darkrain42@pidgin.im>
parents:
29714
diff
changeset
|
253 | #else /* HAVE_GETIFADDRS && HAVE_INET_NTOP */ |
|
29510
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
254 | GList *result = NULL; |
| 29704 | 255 | int source = socket(PF_INET,SOCK_STREAM, 0); |
|
29510
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
256 | char buffer[1024]; |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
257 | char *tmp; |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
258 | struct ifconf ifc; |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
259 | struct ifreq *ifr; |
| 29704 | 260 | |
|
29510
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
261 | ifc.ifc_len = sizeof(buffer); |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
262 | ifc.ifc_req = (struct ifreq *)buffer; |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
263 | ioctl(source, SIOCGIFCONF, &ifc); |
|
29511
7c4b1ba4f2aa
Remove IPv6 support from _get_local_system_ips, since I couldn't get it to
Marcus Lundblad <malu@pidgin.im>
parents:
29510
diff
changeset
|
264 | close(source); |
|
29510
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
265 | |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
266 | tmp = buffer; |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
267 | while (tmp < buffer + ifc.ifc_len) { |
|
29511
7c4b1ba4f2aa
Remove IPv6 support from _get_local_system_ips, since I couldn't get it to
Marcus Lundblad <malu@pidgin.im>
parents:
29510
diff
changeset
|
268 | char dst[INET_ADDRSTRLEN]; |
|
29510
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
269 | |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
270 | ifr = (struct ifreq *)tmp; |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
271 | tmp += HX_SIZE_OF_IFREQ(*ifr); |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
272 | |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
273 | if (ifr->ifr_addr.sa_family == AF_INET) { |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
274 | struct sockaddr_in *sinptr = (struct sockaddr_in *)&ifr->ifr_addr; |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
275 | |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
276 | inet_ntop(AF_INET, &sinptr->sin_addr, dst, |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
277 | sizeof(dst)); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31191
diff
changeset
|
278 | purple_debug_info("network", |
|
29510
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
279 | "found local i/f with address %s on IPv4\n", dst); |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
280 | if (!purple_strequal(dst, "127.0.0.1")) { |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
281 | result = g_list_append(result, g_strdup(dst)); |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
282 | } |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
283 | } |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
284 | } |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
285 | |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
286 | return result; |
|
29716
59a5b6c2e6cb
Oops, probably better if we have both getifaddrs() and inet_ntop()
Paul Aurich <darkrain42@pidgin.im>
parents:
29714
diff
changeset
|
287 | #endif /* HAVE_GETIFADDRS && HAVE_INET_NTOP */ |
|
29510
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
288 | } |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
27898
diff
changeset
|
289 | |
| 8231 | 290 | const char * |
| 15884 | 291 | purple_network_get_my_ip(int fd) |
| 8231 | 292 | { |
|
12686
ec3e7c4ff045
[gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents:
11424
diff
changeset
|
293 | const char *ip = NULL; |
| 15884 | 294 | PurpleStunNatDiscovery *stun; |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8251
diff
changeset
|
295 | |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8251
diff
changeset
|
296 | /* Check if the user specified an IP manually */ |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16035
diff
changeset
|
297 | if (!purple_prefs_get_bool("/purple/network/auto_ip")) { |
| 15884 | 298 | ip = purple_network_get_public_ip(); |
|
15116
037b787407ba
[gaim-migrate @ 17838]
Mark Doliner <markdoliner@pidgin.im>
parents:
14959
diff
changeset
|
299 | /* Make sure the IP address entered by the user is valid */ |
| 15884 | 300 | if ((ip != NULL) && (purple_network_ip_atoi(ip) != NULL)) |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8251
diff
changeset
|
301 | return ip; |
|
21810
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
302 | } else { |
|
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
303 | /* Check if STUN discovery was already done */ |
|
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
304 | stun = purple_stun_discover(NULL); |
|
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
305 | if ((stun != NULL) && (stun->status == PURPLE_STUN_STATUS_DISCOVERED)) |
|
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
306 | return stun->publicip; |
|
11424
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11411
diff
changeset
|
307 | |
|
21810
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
308 | /* Attempt to get the IP from a NAT device using UPnP */ |
|
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
309 | ip = purple_upnp_get_public_ip(); |
|
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
310 | if (ip != NULL) |
|
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
311 | return ip; |
|
11195
d84d542a04ac
[gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
11033
diff
changeset
|
312 | |
|
21810
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
313 | /* Attempt to get the IP from a NAT device using NAT-PMP */ |
|
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
314 | ip = purple_pmp_get_public_ip(); |
|
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
315 | if (ip != NULL) |
|
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
316 | return ip; |
|
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
317 | } |
|
15708
979f43512119
Added nat-pmp implementation and #ifdef'd out changes to network.c which would utilize it.
Evan Schoenberg <evands@pidgin.im>
parents:
15502
diff
changeset
|
318 | |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8251
diff
changeset
|
319 | /* Just fetch the IP of the local system */ |
| 15884 | 320 | return purple_network_get_local_system_ip(fd); |
| 8231 | 321 | } |
| 322 | ||
|
11391
d172e72988cc
[gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents:
11336
diff
changeset
|
323 | |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
324 | static void |
| 15884 | 325 | purple_network_set_upnp_port_mapping_cb(gboolean success, gpointer data) |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
326 | { |
| 15884 | 327 | PurpleNetworkListenData *listen_data; |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
328 | |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
329 | listen_data = data; |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
330 | /* TODO: Once we're keeping track of upnp requests... */ |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
331 | /* listen_data->pnp_data = NULL; */ |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
332 | |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
333 | if (!success) { |
|
27497
2dc5a0e0c4c2
Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents:
27334
diff
changeset
|
334 | purple_debug_warning("network", "Couldn't create UPnP mapping\n"); |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
335 | if (listen_data->retry) { |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
336 | listen_data->retry = FALSE; |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
337 | listen_data->adding = FALSE; |
| 15884 | 338 | listen_data->mapping_data = purple_upnp_remove_port_mapping( |
| 339 | purple_network_get_port_from_fd(listen_data->listenfd), | |
|
15502
250802f80d94
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 <evands@pidgin.im>
parents:
15435
diff
changeset
|
340 | (listen_data->socket_type == SOCK_STREAM) ? "TCP" : "UDP", |
| 15884 | 341 | purple_network_set_upnp_port_mapping_cb, listen_data); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
342 | return; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
343 | } |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
344 | } else if (!listen_data->adding) { |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
345 | /* We've tried successfully to remove the port mapping. |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
346 | * Try to add it again */ |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
347 | listen_data->adding = TRUE; |
| 15884 | 348 | listen_data->mapping_data = purple_upnp_set_port_mapping( |
| 349 | purple_network_get_port_from_fd(listen_data->listenfd), | |
|
15502
250802f80d94
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 <evands@pidgin.im>
parents:
15435
diff
changeset
|
350 | (listen_data->socket_type == SOCK_STREAM) ? "TCP" : "UDP", |
| 15884 | 351 | purple_network_set_upnp_port_mapping_cb, listen_data); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
352 | return; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
353 | } |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
354 | |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
355 | if (success) { |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
356 | /* add port mapping to hash table */ |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
357 | gint key = purple_network_get_port_from_fd(listen_data->listenfd); |
|
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
358 | gint value = listen_data->socket_type; |
|
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
359 | g_hash_table_insert(upnp_port_mappings, GINT_TO_POINTER(key), GINT_TO_POINTER(value)); |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
360 | } |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
361 | |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
362 | if (listen_data->cb) |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
363 | listen_data->cb(listen_data->listenfd, listen_data->cb_data); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
364 | |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
365 | /* Clear the UPnP mapping data, since it's complete and purple_network_listen_cancel() will try to cancel |
|
15502
250802f80d94
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 <evands@pidgin.im>
parents:
15435
diff
changeset
|
366 | * it otherwise. */ |
|
250802f80d94
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 <evands@pidgin.im>
parents:
15435
diff
changeset
|
367 | listen_data->mapping_data = NULL; |
| 15884 | 368 | purple_network_listen_cancel(listen_data); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
369 | } |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
370 | |
|
15933
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
371 | static gboolean |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
372 | purple_network_finish_pmp_map_cb(gpointer data) |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
373 | { |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
374 | PurpleNetworkListenData *listen_data; |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
375 | gint key; |
|
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
376 | gint value; |
|
15963
effb28723fee
Whitespace and make sure stuff is #defined to an actual value.
Mark Doliner <markdoliner@pidgin.im>
parents:
15956
diff
changeset
|
377 | |
|
15933
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
378 | listen_data = data; |
|
30614
ba7a36c1696b
Make sure we keep track of this timer and remove it if our caller frees
Mark Doliner <markdoliner@pidgin.im>
parents:
30027
diff
changeset
|
379 | listen_data->timer = 0; |
|
15963
effb28723fee
Whitespace and make sure stuff is #defined to an actual value.
Mark Doliner <markdoliner@pidgin.im>
parents:
15956
diff
changeset
|
380 | |
|
27334
1e3e27346559
Remove port mappings from the hash tables when removing them.
Marcus Lundblad <malu@pidgin.im>
parents:
27332
diff
changeset
|
381 | /* add port mapping to hash table */ |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
382 | key = purple_network_get_port_from_fd(listen_data->listenfd); |
|
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
383 | value = listen_data->socket_type; |
|
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
384 | g_hash_table_insert(nat_pmp_port_mappings, GINT_TO_POINTER(key), GINT_TO_POINTER(value)); |
|
27334
1e3e27346559
Remove port mappings from the hash tables when removing them.
Marcus Lundblad <malu@pidgin.im>
parents:
27332
diff
changeset
|
385 | |
|
15933
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
386 | if (listen_data->cb) |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
387 | listen_data->cb(listen_data->listenfd, listen_data->cb_data); |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
388 | |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
389 | purple_network_listen_cancel(listen_data); |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
390 | |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
391 | return FALSE; |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
392 | } |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
393 | |
| 15884 | 394 | static PurpleNetworkListenData * |
|
32594
f2feea134fdb
Remove deprecated purple_network_listen_map_external().
Andrew Victor <andrew.victor@mxit.com>
parents:
32593
diff
changeset
|
395 | purple_network_do_listen(unsigned short port, int socket_family, int socket_type, gboolean map_external, |
|
f2feea134fdb
Remove deprecated purple_network_listen_map_external().
Andrew Victor <andrew.victor@mxit.com>
parents:
32593
diff
changeset
|
396 | PurpleNetworkListenCallback cb, gpointer cb_data) |
| 8231 | 397 | { |
|
9452
0e3cdb898d3e
[gaim-migrate @ 10276]
Mark Doliner <markdoliner@pidgin.im>
parents:
9449
diff
changeset
|
398 | int listenfd = -1; |
|
20239
ae122f419324
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20147
diff
changeset
|
399 | int flags; |
| 8231 | 400 | const int on = 1; |
| 15884 | 401 | PurpleNetworkListenData *listen_data; |
|
15708
979f43512119
Added nat-pmp implementation and #ifdef'd out changes to network.c which would utilize it.
Evan Schoenberg <evands@pidgin.im>
parents:
15502
diff
changeset
|
402 | unsigned short actual_port; |
|
13426
032ea2c9ce2d
[gaim-migrate @ 15800]
Daniel Atallah <datallah@pidgin.im>
parents:
13346
diff
changeset
|
403 | #ifdef HAVE_GETADDRINFO |
|
9449
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
404 | int errnum; |
|
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
405 | struct addrinfo hints, *res, *next; |
| 9456 | 406 | char serv[6]; |
| 8231 | 407 | |
|
9449
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
408 | /* |
|
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
409 | * Get a list of addresses on this machine. |
|
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
410 | */ |
|
27116
19dff7b3ed0f
A patch from Scott Wolchok to replace snprintf() with g_snprintf() and
Richard Laager <rlaager@pidgin.im>
parents:
26782
diff
changeset
|
411 | g_snprintf(serv, sizeof(serv), "%hu", port); |
| 8231 | 412 | memset(&hints, 0, sizeof(struct addrinfo)); |
| 413 | hints.ai_flags = AI_PASSIVE; | |
|
30027
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
414 | hints.ai_family = socket_family; |
|
12730
f64fdbc34677
[gaim-migrate @ 15074]
Daniel Atallah <datallah@pidgin.im>
parents:
12728
diff
changeset
|
415 | hints.ai_socktype = socket_type; |
|
9449
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
416 | errnum = getaddrinfo(NULL /* any IP */, serv, &hints, &res); |
|
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
417 | if (errnum != 0) { |
|
11221
be3982550ac0
[gaim-migrate @ 13353]
Daniel Atallah <datallah@pidgin.im>
parents:
11215
diff
changeset
|
418 | #ifndef _WIN32 |
|
21977
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21817
diff
changeset
|
419 | purple_debug_warning("network", "getaddrinfo: %s\n", purple_gai_strerror(errnum)); |
|
9449
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
420 | if (errnum == EAI_SYSTEM) |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
20239
diff
changeset
|
421 | purple_debug_warning("network", "getaddrinfo: system error: %s\n", g_strerror(errno)); |
|
11221
be3982550ac0
[gaim-migrate @ 13353]
Daniel Atallah <datallah@pidgin.im>
parents:
11215
diff
changeset
|
422 | #else |
| 15884 | 423 | purple_debug_warning("network", "getaddrinfo: Error Code = %d\n", errnum); |
|
11221
be3982550ac0
[gaim-migrate @ 13353]
Daniel Atallah <datallah@pidgin.im>
parents:
11215
diff
changeset
|
424 | #endif |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
425 | return NULL; |
| 8231 | 426 | } |
|
9449
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
427 | |
|
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
428 | /* |
|
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
429 | * Go through the list of addresses and attempt to listen on |
|
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
430 | * one of them. |
|
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
431 | * XXX - Try IPv6 addresses first? |
|
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
432 | */ |
|
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
433 | for (next = res; next != NULL; next = next->ai_next) { |
| 9455 | 434 | listenfd = socket(next->ai_family, next->ai_socktype, next->ai_protocol); |
| 8231 | 435 | if (listenfd < 0) |
| 436 | continue; | |
|
9449
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
437 | if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0) |
|
30027
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
438 | purple_debug_warning("network", "setsockopt(SO_REUSEADDR): %s\n", g_strerror(errno)); |
| 9455 | 439 | if (bind(listenfd, next->ai_addr, next->ai_addrlen) == 0) |
| 8231 | 440 | break; /* success */ |
|
12730
f64fdbc34677
[gaim-migrate @ 15074]
Daniel Atallah <datallah@pidgin.im>
parents:
12728
diff
changeset
|
441 | /* XXX - It is unclear to me (datallah) whether we need to be |
|
f64fdbc34677
[gaim-migrate @ 15074]
Daniel Atallah <datallah@pidgin.im>
parents:
12728
diff
changeset
|
442 | using a new socket each time */ |
| 8231 | 443 | close(listenfd); |
|
9449
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
444 | } |
| 8231 | 445 | |
|
9449
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
446 | freeaddrinfo(res); |
| 8231 | 447 | |
|
9449
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
448 | if (next == NULL) |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
449 | return NULL; |
| 8231 | 450 | #else |
| 451 | struct sockaddr_in sockin; | |
| 452 | ||
|
30027
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
453 | if (socket_family != AF_INET && socket_family != AF_UNSPEC) { |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
454 | purple_debug_warning("network", "Address family %d only " |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
455 | "supported when built with getaddrinfo() " |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
456 | "support\n", socket_family); |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
457 | return NULL; |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
458 | } |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
459 | |
|
12730
f64fdbc34677
[gaim-migrate @ 15074]
Daniel Atallah <datallah@pidgin.im>
parents:
12728
diff
changeset
|
460 | if ((listenfd = socket(AF_INET, socket_type, 0)) < 0) { |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
20239
diff
changeset
|
461 | purple_debug_warning("network", "socket: %s\n", g_strerror(errno)); |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
462 | return NULL; |
| 8231 | 463 | } |
| 464 | ||
|
9449
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
465 | if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0) |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
20239
diff
changeset
|
466 | purple_debug_warning("network", "setsockopt: %s\n", g_strerror(errno)); |
| 8231 | 467 | |
| 468 | memset(&sockin, 0, sizeof(struct sockaddr_in)); | |
|
9449
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
469 | sockin.sin_family = PF_INET; |
|
8251
091ca9b900c1
[gaim-migrate @ 8974]
Mark Doliner <markdoliner@pidgin.im>
parents:
8250
diff
changeset
|
470 | sockin.sin_port = htons(port); |
| 8231 | 471 | |
| 472 | if (bind(listenfd, (struct sockaddr *)&sockin, sizeof(struct sockaddr_in)) != 0) { | |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
20239
diff
changeset
|
473 | purple_debug_warning("network", "bind: %s\n", g_strerror(errno)); |
| 8231 | 474 | close(listenfd); |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
475 | return NULL; |
| 8231 | 476 | } |
| 477 | #endif | |
| 478 | ||
|
12730
f64fdbc34677
[gaim-migrate @ 15074]
Daniel Atallah <datallah@pidgin.im>
parents:
12728
diff
changeset
|
479 | if (socket_type == SOCK_STREAM && listen(listenfd, 4) != 0) { |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
20239
diff
changeset
|
480 | purple_debug_warning("network", "listen: %s\n", g_strerror(errno)); |
| 8231 | 481 | close(listenfd); |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
482 | return NULL; |
| 8231 | 483 | } |
|
20239
ae122f419324
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20147
diff
changeset
|
484 | flags = fcntl(listenfd, F_GETFL); |
|
ae122f419324
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
20147
diff
changeset
|
485 | fcntl(listenfd, F_SETFL, flags | O_NONBLOCK); |
|
24044
3fd74bed3968
More leaks of fds to client processes.
Daniel Atallah <datallah@pidgin.im>
parents:
23352
diff
changeset
|
486 | #ifndef _WIN32 |
|
3fd74bed3968
More leaks of fds to client processes.
Daniel Atallah <datallah@pidgin.im>
parents:
23352
diff
changeset
|
487 | fcntl(listenfd, F_SETFD, FD_CLOEXEC); |
|
3fd74bed3968
More leaks of fds to client processes.
Daniel Atallah <datallah@pidgin.im>
parents:
23352
diff
changeset
|
488 | #endif |
| 15884 | 489 | actual_port = purple_network_get_port_from_fd(listenfd); |
|
11391
d172e72988cc
[gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents:
11336
diff
changeset
|
490 | |
| 15884 | 491 | purple_debug_info("network", "Listening on port: %hu\n", actual_port); |
|
15963
effb28723fee
Whitespace and make sure stuff is #defined to an actual value.
Mark Doliner <markdoliner@pidgin.im>
parents:
15956
diff
changeset
|
492 | |
| 15884 | 493 | listen_data = g_new0(PurpleNetworkListenData, 1); |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
494 | listen_data->listenfd = listenfd; |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
495 | listen_data->adding = TRUE; |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
496 | listen_data->retry = TRUE; |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
497 | listen_data->cb = cb; |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
498 | listen_data->cb_data = cb_data; |
|
19822
a533aa745702
Store the socket_type in the PurpleNetworkListenData correctly so that callback functions can use it correctly. Fixes #2933.
Daniel Atallah <datallah@pidgin.im>
parents:
19585
diff
changeset
|
499 | listen_data->socket_type = socket_type; |
|
11195
d84d542a04ac
[gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
11033
diff
changeset
|
500 | |
|
32594
f2feea134fdb
Remove deprecated purple_network_listen_map_external().
Andrew Victor <andrew.victor@mxit.com>
parents:
32593
diff
changeset
|
501 | if (!purple_socket_speaks_ipv4(listenfd) || !map_external || |
|
30027
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
502 | !purple_prefs_get_bool("/purple/network/map_ports")) |
|
21549
7436059db33b
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 <datallah@pidgin.im>
parents:
21389
diff
changeset
|
503 | { |
|
7436059db33b
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 <datallah@pidgin.im>
parents:
21389
diff
changeset
|
504 | purple_debug_info("network", "Skipping external port mapping.\n"); |
|
7436059db33b
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 <datallah@pidgin.im>
parents:
21389
diff
changeset
|
505 | /* The pmp_map_cb does what we want to do */ |
|
30614
ba7a36c1696b
Make sure we keep track of this timer and remove it if our caller frees
Mark Doliner <markdoliner@pidgin.im>
parents:
30027
diff
changeset
|
506 | listen_data->timer = purple_timeout_add(0, purple_network_finish_pmp_map_cb, listen_data); |
|
21549
7436059db33b
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 <datallah@pidgin.im>
parents:
21389
diff
changeset
|
507 | } |
|
15708
979f43512119
Added nat-pmp implementation and #ifdef'd out changes to network.c which would utilize it.
Evan Schoenberg <evands@pidgin.im>
parents:
15502
diff
changeset
|
508 | /* Attempt a NAT-PMP Mapping, which will return immediately */ |
|
21549
7436059db33b
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 <datallah@pidgin.im>
parents:
21389
diff
changeset
|
509 | else if (purple_pmp_create_map(((socket_type == SOCK_STREAM) ? PURPLE_PMP_TYPE_TCP : PURPLE_PMP_TYPE_UDP), |
|
16012
77b7fe1bfe69
purple_pmp_create_map() returns a gboolean now, not a pointer
Evan Schoenberg <evands@pidgin.im>
parents:
15963
diff
changeset
|
510 | actual_port, actual_port, PURPLE_PMP_LIFETIME)) |
|
15933
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
511 | { |
|
21549
7436059db33b
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 <datallah@pidgin.im>
parents:
21389
diff
changeset
|
512 | purple_debug_info("network", "Created NAT-PMP mapping on port %i\n", actual_port); |
|
15933
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
513 | /* We want to return listen_data now, and on the next run loop trigger the cb and destroy listen_data */ |
|
30614
ba7a36c1696b
Make sure we keep track of this timer and remove it if our caller frees
Mark Doliner <markdoliner@pidgin.im>
parents:
30027
diff
changeset
|
514 | listen_data->timer = purple_timeout_add(0, purple_network_finish_pmp_map_cb, listen_data); |
|
15933
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
515 | } |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
516 | else |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
517 | { |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
518 | /* Attempt a UPnP Mapping */ |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
519 | listen_data->mapping_data = purple_upnp_set_port_mapping( |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
520 | actual_port, |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
521 | (socket_type == SOCK_STREAM) ? "TCP" : "UDP", |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
522 | purple_network_set_upnp_port_mapping_cb, listen_data); |
|
913ba1d4b81c
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 <evands@pidgin.im>
parents:
15884
diff
changeset
|
523 | } |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
524 | |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
525 | return listen_data; |
| 8231 | 526 | } |
| 527 | ||
| 15884 | 528 | PurpleNetworkListenData * |
|
32594
f2feea134fdb
Remove deprecated purple_network_listen_map_external().
Andrew Victor <andrew.victor@mxit.com>
parents:
32593
diff
changeset
|
529 | purple_network_listen(unsigned short port, int socket_family, int socket_type, |
|
f2feea134fdb
Remove deprecated purple_network_listen_map_external().
Andrew Victor <andrew.victor@mxit.com>
parents:
32593
diff
changeset
|
530 | gboolean map_external, PurpleNetworkListenCallback cb, |
|
30027
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
531 | gpointer cb_data) |
|
8246
c83c0421149a
[gaim-migrate @ 8969]
Mark Doliner <markdoliner@pidgin.im>
parents:
8245
diff
changeset
|
532 | { |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
533 | g_return_val_if_fail(port != 0, NULL); |
|
8250
e855dcce1fa0
[gaim-migrate @ 8973]
Mark Doliner <markdoliner@pidgin.im>
parents:
8248
diff
changeset
|
534 | |
|
32594
f2feea134fdb
Remove deprecated purple_network_listen_map_external().
Andrew Victor <andrew.victor@mxit.com>
parents:
32593
diff
changeset
|
535 | return purple_network_do_listen(port, socket_family, socket_type, map_external, |
|
30027
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
536 | cb, cb_data); |
|
8246
c83c0421149a
[gaim-migrate @ 8969]
Mark Doliner <markdoliner@pidgin.im>
parents:
8245
diff
changeset
|
537 | } |
|
c83c0421149a
[gaim-migrate @ 8969]
Mark Doliner <markdoliner@pidgin.im>
parents:
8245
diff
changeset
|
538 | |
| 15884 | 539 | PurpleNetworkListenData * |
|
32593
8fe5585c5397
Rename purple_network_listen_range_family() to purple_network_listen_range().
Andrew Victor <andrew.victor@mxit.com>
parents:
32592
diff
changeset
|
540 | purple_network_listen_range(unsigned short start, unsigned short end, |
|
32594
f2feea134fdb
Remove deprecated purple_network_listen_map_external().
Andrew Victor <andrew.victor@mxit.com>
parents:
32593
diff
changeset
|
541 | int socket_family, int socket_type, gboolean map_external, |
|
30027
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
542 | PurpleNetworkListenCallback cb, |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
29716
diff
changeset
|
543 | gpointer cb_data) |
| 8231 | 544 | { |
| 15884 | 545 | PurpleNetworkListenData *ret = NULL; |
| 8231 | 546 | |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16035
diff
changeset
|
547 | if (purple_prefs_get_bool("/purple/network/ports_range_use")) { |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16035
diff
changeset
|
548 | start = purple_prefs_get_int("/purple/network/ports_range_start"); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16035
diff
changeset
|
549 | end = purple_prefs_get_int("/purple/network/ports_range_end"); |
|
8250
e855dcce1fa0
[gaim-migrate @ 8973]
Mark Doliner <markdoliner@pidgin.im>
parents:
8248
diff
changeset
|
550 | } else { |
|
e855dcce1fa0
[gaim-migrate @ 8973]
Mark Doliner <markdoliner@pidgin.im>
parents:
8248
diff
changeset
|
551 | if (end < start) |
|
e855dcce1fa0
[gaim-migrate @ 8973]
Mark Doliner <markdoliner@pidgin.im>
parents:
8248
diff
changeset
|
552 | end = start; |
|
8239
d19f1c66720c
[gaim-migrate @ 8962]
Mark Doliner <markdoliner@pidgin.im>
parents:
8231
diff
changeset
|
553 | } |
| 8231 | 554 | |
| 555 | for (; start <= end; start++) { | |
|
32594
f2feea134fdb
Remove deprecated purple_network_listen_map_external().
Andrew Victor <andrew.victor@mxit.com>
parents:
32593
diff
changeset
|
556 | ret = purple_network_do_listen(start, AF_UNSPEC, socket_type, map_external, cb, cb_data); |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
557 | if (ret != NULL) |
| 8231 | 558 | break; |
| 559 | } | |
| 560 | ||
| 561 | return ret; | |
| 562 | } | |
| 563 | ||
| 15884 | 564 | void purple_network_listen_cancel(PurpleNetworkListenData *listen_data) |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
565 | { |
|
15502
250802f80d94
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 <evands@pidgin.im>
parents:
15435
diff
changeset
|
566 | if (listen_data->mapping_data != NULL) |
| 15884 | 567 | purple_upnp_cancel_port_mapping(listen_data->mapping_data); |
|
15502
250802f80d94
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 <evands@pidgin.im>
parents:
15435
diff
changeset
|
568 | |
|
30614
ba7a36c1696b
Make sure we keep track of this timer and remove it if our caller frees
Mark Doliner <markdoliner@pidgin.im>
parents:
30027
diff
changeset
|
569 | if (listen_data->timer > 0) |
|
ba7a36c1696b
Make sure we keep track of this timer and remove it if our caller frees
Mark Doliner <markdoliner@pidgin.im>
parents:
30027
diff
changeset
|
570 | purple_timeout_remove(listen_data->timer); |
|
ba7a36c1696b
Make sure we keep track of this timer and remove it if our caller frees
Mark Doliner <markdoliner@pidgin.im>
parents:
30027
diff
changeset
|
571 | |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
572 | g_free(listen_data); |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
573 | } |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
574 | |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8251
diff
changeset
|
575 | unsigned short |
| 15884 | 576 | purple_network_get_port_from_fd(int fd) |
| 8231 | 577 | { |
| 578 | struct sockaddr_in addr; | |
| 579 | socklen_t len; | |
| 580 | ||
|
9449
8c5a1697bca6
[gaim-migrate @ 10273]
Mark Doliner <markdoliner@pidgin.im>
parents:
8981
diff
changeset
|
581 | g_return_val_if_fail(fd >= 0, 0); |
| 8231 | 582 | |
| 583 | len = sizeof(addr); | |
| 584 | if (getsockname(fd, (struct sockaddr *) &addr, &len) == -1) { | |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
20239
diff
changeset
|
585 | purple_debug_warning("network", "getsockname: %s\n", g_strerror(errno)); |
| 8231 | 586 | return 0; |
| 587 | } | |
| 588 | ||
| 589 | return ntohs(addr.sin_port); | |
| 590 | } | |
| 591 | ||
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
592 | #ifdef _WIN32 |
|
14853
d06b1f28a8b2
[gaim-migrate @ 17556]
Daniel Atallah <datallah@pidgin.im>
parents:
14842
diff
changeset
|
593 | #ifndef NS_NLA |
|
d06b1f28a8b2
[gaim-migrate @ 17556]
Daniel Atallah <datallah@pidgin.im>
parents:
14842
diff
changeset
|
594 | #define NS_NLA 15 |
|
d06b1f28a8b2
[gaim-migrate @ 17556]
Daniel Atallah <datallah@pidgin.im>
parents:
14842
diff
changeset
|
595 | #endif |
|
14842
fe08ba80d369
[gaim-migrate @ 17544]
Daniel Atallah <datallah@pidgin.im>
parents:
14839
diff
changeset
|
596 | static gint |
| 15884 | 597 | wpurple_get_connected_network_count(void) |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
598 | { |
|
19585
14b519abcc26
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 <datallah@pidgin.im>
parents:
18555
diff
changeset
|
599 | gint net_cnt = 0; |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
600 | |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
601 | WSAQUERYSET qs; |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
602 | HANDLE h; |
|
14957
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
603 | gint retval; |
|
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
604 | int errorid; |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
605 | |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
606 | memset(&qs, 0, sizeof(WSAQUERYSET)); |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
607 | qs.dwSize = sizeof(WSAQUERYSET); |
|
14853
d06b1f28a8b2
[gaim-migrate @ 17556]
Daniel Atallah <datallah@pidgin.im>
parents:
14842
diff
changeset
|
608 | qs.dwNameSpace = NS_NLA; |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
609 | |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
610 | retval = WSALookupServiceBegin(&qs, LUP_RETURN_ALL, &h); |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
611 | if (retval != ERROR_SUCCESS) { |
|
14957
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
612 | gchar *msg; |
|
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
613 | errorid = WSAGetLastError(); |
|
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
614 | msg = g_win32_error_message(errorid); |
| 15884 | 615 | purple_debug_warning("network", "Couldn't retrieve NLA SP lookup handle. " |
|
14853
d06b1f28a8b2
[gaim-migrate @ 17556]
Daniel Atallah <datallah@pidgin.im>
parents:
14842
diff
changeset
|
616 | "NLA service is probably not running. Message: %s (%d).\n", |
|
d06b1f28a8b2
[gaim-migrate @ 17556]
Daniel Atallah <datallah@pidgin.im>
parents:
14842
diff
changeset
|
617 | msg, errorid); |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
618 | g_free(msg); |
|
14838
40cc5f858426
[gaim-migrate @ 17540]
Daniel Atallah <datallah@pidgin.im>
parents:
14784
diff
changeset
|
619 | |
|
14842
fe08ba80d369
[gaim-migrate @ 17544]
Daniel Atallah <datallah@pidgin.im>
parents:
14839
diff
changeset
|
620 | return -1; |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
621 | } else { |
|
14959
eb5cf3522fda
[gaim-migrate @ 17669]
Daniel Atallah <datallah@pidgin.im>
parents:
14957
diff
changeset
|
622 | char buf[4096]; |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
623 | WSAQUERYSET *res = (LPWSAQUERYSET) buf; |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
624 | DWORD size = sizeof(buf); |
|
14957
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
625 | while ((retval = WSALookupServiceNext(h, 0, &size, res)) == ERROR_SUCCESS) { |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
626 | net_cnt++; |
| 15884 | 627 | purple_debug_info("network", "found network '%s'\n", |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
628 | res->lpszServiceInstanceName ? res->lpszServiceInstanceName : "(NULL)"); |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
629 | size = sizeof(buf); |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
630 | } |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
631 | |
|
14957
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
632 | errorid = WSAGetLastError(); |
|
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
633 | if (!(errorid == WSA_E_NO_MORE || errorid == WSAENOMORE)) { |
|
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
634 | gchar *msg = g_win32_error_message(errorid); |
| 15884 | 635 | purple_debug_error("network", "got unexpected NLA response %s (%d)\n", msg, errorid); |
|
14957
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
636 | g_free(msg); |
|
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
637 | |
|
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
638 | net_cnt = -1; |
|
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
639 | } |
|
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
640 | |
|
1519e663dd9b
[gaim-migrate @ 17667]
Daniel Atallah <datallah@pidgin.im>
parents:
14877
diff
changeset
|
641 | retval = WSALookupServiceEnd(h); |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
642 | } |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
643 | |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
644 | return net_cnt; |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
645 | |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
646 | } |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
647 | |
| 15884 | 648 | static gboolean wpurple_network_change_thread_cb(gpointer data) |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
649 | { |
|
14842
fe08ba80d369
[gaim-migrate @ 17544]
Daniel Atallah <datallah@pidgin.im>
parents:
14839
diff
changeset
|
650 | gint new_count; |
| 15884 | 651 | PurpleConnectionUiOps *ui_ops = purple_connections_get_ui_ops(); |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
652 | |
| 15884 | 653 | new_count = wpurple_get_connected_network_count(); |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
654 | |
|
14842
fe08ba80d369
[gaim-migrate @ 17544]
Daniel Atallah <datallah@pidgin.im>
parents:
14839
diff
changeset
|
655 | if (new_count < 0) |
|
fe08ba80d369
[gaim-migrate @ 17544]
Daniel Atallah <datallah@pidgin.im>
parents:
14839
diff
changeset
|
656 | return FALSE; |
|
fe08ba80d369
[gaim-migrate @ 17544]
Daniel Atallah <datallah@pidgin.im>
parents:
14839
diff
changeset
|
657 | |
| 15884 | 658 | purple_debug_info("network", "Received Network Change Notification. Current network count is %d, previous count was %d.\n", new_count, current_network_count); |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
659 | |
|
16035
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
660 | purple_signal_emit(purple_network_get_handle(), "network-configuration-changed", NULL); |
|
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
661 | |
|
14877
084d14fe0445
[gaim-migrate @ 17581]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14864
diff
changeset
|
662 | if (new_count > 0 && ui_ops != NULL && ui_ops->network_connected != NULL) { |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
663 | ui_ops->network_connected(); |
|
14877
084d14fe0445
[gaim-migrate @ 17581]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14864
diff
changeset
|
664 | } else if (new_count == 0 && current_network_count > 0 && |
|
084d14fe0445
[gaim-migrate @ 17581]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
14864
diff
changeset
|
665 | ui_ops != NULL && ui_ops->network_disconnected != NULL) { |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
666 | ui_ops->network_disconnected(); |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
667 | } |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
668 | |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
669 | current_network_count = new_count; |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
670 | |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
671 | return FALSE; |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
672 | } |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
673 | |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
674 | static gboolean _print_debug_msg(gpointer data) { |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
675 | gchar *msg = data; |
|
30792
155b65d26118
Fix some cases where an arbitrary string was being specified as a printf format.
Daniel Atallah <datallah@pidgin.im>
parents:
30753
diff
changeset
|
676 | purple_debug_warning("network", "%s", msg); |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
677 | g_free(msg); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
678 | return FALSE; |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
679 | } |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
680 | |
| 15884 | 681 | static gpointer wpurple_network_change_thread(gpointer data) |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
682 | { |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
683 | WSAQUERYSET qs; |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
684 | WSAEVENT *nla_event; |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
685 | time_t last_trigger = time(NULL) - 31; |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
686 | char buf[4096]; |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
687 | WSAQUERYSET *res = (LPWSAQUERYSET) buf; |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
688 | DWORD size; |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
689 | |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
690 | if ((nla_event = WSACreateEvent()) == WSA_INVALID_EVENT) { |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
691 | int errorid = WSAGetLastError(); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
692 | gchar *msg = g_win32_error_message(errorid); |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
693 | purple_timeout_add(0, _print_debug_msg, |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
694 | g_strdup_printf("Couldn't create WSA event. " |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
695 | "Message: %s (%d).\n", msg, errorid)); |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
696 | g_free(msg); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
697 | g_thread_exit(NULL); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
698 | return NULL; |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
699 | } |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
700 | |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
701 | while (TRUE) { |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
702 | int retval; |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
703 | DWORD retLen = 0; |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
704 | WSACOMPLETION completion; |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
705 | WSAOVERLAPPED overlapped; |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
706 | |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
707 | g_static_mutex_lock(&mutex); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
708 | if (network_initialized == FALSE) { |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
709 | /* purple_network_uninit has been called */ |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
710 | WSACloseEvent(nla_event); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
711 | g_static_mutex_unlock(&mutex); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
712 | g_thread_exit(NULL); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
713 | return NULL; |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
714 | } |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
715 | |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
716 | if (network_change_handle == NULL) { |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
717 | memset(&qs, 0, sizeof(WSAQUERYSET)); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
718 | qs.dwSize = sizeof(WSAQUERYSET); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
719 | qs.dwNameSpace = NS_NLA; |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
720 | if (WSALookupServiceBegin(&qs, 0, &network_change_handle) == SOCKET_ERROR) { |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
721 | int errorid = WSAGetLastError(); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
722 | gchar *msg = g_win32_error_message(errorid); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
723 | purple_timeout_add(0, _print_debug_msg, |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
724 | g_strdup_printf("Couldn't retrieve NLA SP lookup handle. " |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
725 | "NLA service is probably not running. Message: %s (%d).\n", |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
726 | msg, errorid)); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
727 | g_free(msg); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
728 | WSACloseEvent(nla_event); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
729 | g_static_mutex_unlock(&mutex); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
730 | g_thread_exit(NULL); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
731 | return NULL; |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
732 | } |
|
14853
d06b1f28a8b2
[gaim-migrate @ 17556]
Daniel Atallah <datallah@pidgin.im>
parents:
14842
diff
changeset
|
733 | } |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
734 | g_static_mutex_unlock(&mutex); |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
735 | |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
736 | memset(&completion, 0, sizeof(WSACOMPLETION)); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
737 | completion.Type = NSP_NOTIFY_EVENT; |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
738 | overlapped.hEvent = nla_event; |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
739 | completion.Parameters.Event.lpOverlapped = &overlapped; |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
740 | |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
741 | if (MyWSANSPIoctl(network_change_handle, SIO_NSP_NOTIFY_CHANGE, NULL, 0, NULL, 0, &retLen, &completion) == SOCKET_ERROR) { |
|
14853
d06b1f28a8b2
[gaim-migrate @ 17556]
Daniel Atallah <datallah@pidgin.im>
parents:
14842
diff
changeset
|
742 | int errorid = WSAGetLastError(); |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
743 | if (errorid == WSA_INVALID_HANDLE) { |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
744 | purple_timeout_add(0, _print_debug_msg, |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
745 | g_strdup("Invalid NLA handle; resetting.\n")); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
746 | g_static_mutex_lock(&mutex); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
747 | retval = WSALookupServiceEnd(network_change_handle); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
748 | network_change_handle = NULL; |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
749 | g_static_mutex_unlock(&mutex); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
750 | continue; |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
751 | /* WSA_IO_PENDING indicates successful async notification will happen */ |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
752 | } else if (errorid != WSA_IO_PENDING) { |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
753 | gchar *msg = g_win32_error_message(errorid); |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
754 | purple_timeout_add(0, _print_debug_msg, |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
755 | g_strdup_printf("Unable to wait for changes. Message: %s (%d).\n", |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
756 | msg, errorid)); |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
757 | g_free(msg); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
758 | } |
|
14853
d06b1f28a8b2
[gaim-migrate @ 17556]
Daniel Atallah <datallah@pidgin.im>
parents:
14842
diff
changeset
|
759 | } |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
760 | |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
761 | /* Make sure at least 30 seconds have elapsed since the last |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
762 | * notification so we don't peg the cpu if this keeps changing. */ |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
763 | if ((time(NULL) - last_trigger) < 30) |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
764 | Sleep(30000); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
765 | |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
766 | /* This will block until NLA notifies us */ |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
767 | retval = WaitForSingleObjectEx(nla_event, WSA_INFINITE, TRUE); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
768 | |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
769 | last_trigger = time(NULL); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
770 | |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
771 | g_static_mutex_lock(&mutex); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
772 | if (network_initialized == FALSE) { |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
773 | /* Time to die */ |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
774 | WSACloseEvent(nla_event); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
775 | g_static_mutex_unlock(&mutex); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
776 | g_thread_exit(NULL); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
777 | return NULL; |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
778 | } |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
779 | |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
780 | size = sizeof(buf); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
781 | while ((retval = WSALookupServiceNext(network_change_handle, 0, &size, res)) == ERROR_SUCCESS) { |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
782 | /*purple_timeout_add(0, _print_debug_msg, |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
783 | g_strdup_printf("thread found network '%s'\n", |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
784 | res->lpszServiceInstanceName ? res->lpszServiceInstanceName : "(NULL)"));*/ |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
785 | size = sizeof(buf); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
786 | } |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
787 | |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
788 | WSAResetEvent(nla_event); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
789 | g_static_mutex_unlock(&mutex); |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
790 | |
|
21549
7436059db33b
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 <datallah@pidgin.im>
parents:
21389
diff
changeset
|
791 | purple_timeout_add(0, wpurple_network_change_thread_cb, NULL); |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
792 | } |
|
14853
d06b1f28a8b2
[gaim-migrate @ 17556]
Daniel Atallah <datallah@pidgin.im>
parents:
14842
diff
changeset
|
793 | |
|
d06b1f28a8b2
[gaim-migrate @ 17556]
Daniel Atallah <datallah@pidgin.im>
parents:
14842
diff
changeset
|
794 | g_thread_exit(NULL); |
|
d06b1f28a8b2
[gaim-migrate @ 17556]
Daniel Atallah <datallah@pidgin.im>
parents:
14842
diff
changeset
|
795 | return NULL; |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
796 | } |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
797 | #endif |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
798 | |
| 14758 | 799 | gboolean |
| 15884 | 800 | purple_network_is_available(void) |
| 14758 | 801 | { |
|
23060
db9632a9b374
Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@pidgin.im>
parents:
23054
diff
changeset
|
802 | #ifdef HAVE_NETWORKMANAGER |
|
24999
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
803 | if (force_online) |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
804 | return TRUE; |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
805 | |
|
24519
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
806 | if (!have_nm_state) |
|
23047
f2c25bf1e0fd
Fix some whitespace as noticed by QuLogic.
Richard Laager <rlaager@pidgin.im>
parents:
23041
diff
changeset
|
807 | { |
|
24519
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
808 | have_nm_state = TRUE; |
|
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
809 | nm_state = nm_get_network_state(); |
|
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
810 | if (nm_state == NM_STATE_UNKNOWN) |
|
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
811 | purple_debug_warning("network", "NetworkManager not active. Assuming connection exists.\n"); |
|
23041
58661da65e36
Changes suggested by QuLogic to fix my broken changes to the NetworkManager
Richard Laager <rlaager@pidgin.im>
parents:
23040
diff
changeset
|
812 | } |
|
24519
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
813 | |
|
32077
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
814 | switch (nm_state) |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
815 | { |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
816 | case NM_STATE_UNKNOWN: |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
817 | #if NM_CHECK_VERSION(0,8,992) |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
818 | case NM_STATE_CONNECTED_LOCAL: |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
819 | case NM_STATE_CONNECTED_SITE: |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
820 | case NM_STATE_CONNECTED_GLOBAL: |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
821 | #else |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
822 | case NM_STATE_CONNECTED: |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
823 | #endif |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
824 | return TRUE; |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
825 | default: |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
826 | break; |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
827 | } |
|
23041
58661da65e36
Changes suggested by QuLogic to fix my broken changes to the NetworkManager
Richard Laager <rlaager@pidgin.im>
parents:
23040
diff
changeset
|
828 | |
|
58661da65e36
Changes suggested by QuLogic to fix my broken changes to the NetworkManager
Richard Laager <rlaager@pidgin.im>
parents:
23040
diff
changeset
|
829 | return FALSE; |
|
58661da65e36
Changes suggested by QuLogic to fix my broken changes to the NetworkManager
Richard Laager <rlaager@pidgin.im>
parents:
23040
diff
changeset
|
830 | |
|
14839
221c60cc76e0
[gaim-migrate @ 17541]
Daniel Atallah <datallah@pidgin.im>
parents:
14838
diff
changeset
|
831 | #elif defined _WIN32 |
|
24999
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
832 | return (current_network_count > 0 || force_online); |
|
23041
58661da65e36
Changes suggested by QuLogic to fix my broken changes to the NetworkManager
Richard Laager <rlaager@pidgin.im>
parents:
23040
diff
changeset
|
833 | #else |
|
58661da65e36
Changes suggested by QuLogic to fix my broken changes to the NetworkManager
Richard Laager <rlaager@pidgin.im>
parents:
23040
diff
changeset
|
834 | return TRUE; |
| 14758 | 835 | #endif |
| 836 | } | |
| 837 | ||
|
24999
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
838 | void |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
839 | purple_network_force_online() |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
840 | { |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
841 | #if defined(HAVE_NETWORKMANAGER) || defined(_WIN32) |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
842 | force_online = TRUE; |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
843 | #endif |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
844 | } |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24519
diff
changeset
|
845 | |
|
23060
db9632a9b374
Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@pidgin.im>
parents:
23054
diff
changeset
|
846 | #ifdef HAVE_NETWORKMANAGER |
|
22735
a9c84e4679d8
Make some more things static
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21977
diff
changeset
|
847 | static void |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
848 | nm_update_state(NMState state) |
| 14758 | 849 | { |
|
24519
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
850 | NMState prev = nm_state; |
| 15884 | 851 | PurpleConnectionUiOps *ui_ops = purple_connections_get_ui_ops(); |
| 14758 | 852 | |
|
24519
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
853 | have_nm_state = TRUE; |
|
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
854 | nm_state = state; |
|
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
855 | |
|
16035
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
856 | purple_signal_emit(purple_network_get_handle(), "network-configuration-changed", NULL); |
|
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
857 | |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
858 | switch(state) |
| 14758 | 859 | { |
|
31653
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
860 | #if NM_CHECK_VERSION(0,8,992) |
|
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
861 | case NM_STATE_CONNECTED_LOCAL: |
|
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
862 | case NM_STATE_CONNECTED_SITE: |
|
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
863 | case NM_STATE_CONNECTED_GLOBAL: |
|
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
864 | #else |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
865 | case NM_STATE_CONNECTED: |
|
31653
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
866 | #endif |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
867 | /* Call res_init in case DNS servers have changed */ |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
868 | res_init(); |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
869 | /* update STUN IP in case we it changed (theoretically we could |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
870 | have gone from IPv4 to IPv6, f.ex. or we were previously |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
871 | offline */ |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
872 | purple_network_set_stun_server( |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
873 | purple_prefs_get_string("/purple/network/stun_server")); |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
874 | purple_network_set_turn_server( |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
875 | purple_prefs_get_string("/purple/network/turn_server")); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31191
diff
changeset
|
876 | |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
877 | if (ui_ops != NULL && ui_ops->network_connected != NULL) |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
878 | ui_ops->network_connected(); |
| 14758 | 879 | break; |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
880 | case NM_STATE_ASLEEP: |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
881 | case NM_STATE_CONNECTING: |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
882 | case NM_STATE_DISCONNECTED: |
|
31653
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
883 | #if NM_CHECK_VERSION(0,8,992) |
|
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
884 | case NM_STATE_DISCONNECTING: |
|
a36102ecb723
Support new connection states in NetworkMakanter 0.9. Fixes #13505.
Dan Williams <dcbw@redhat.com>
parents:
31294
diff
changeset
|
885 | #endif |
|
24519
d4af3d043211
Improve our NetworkManager support in a couple of ways:
Richard Laager <rlaager@pidgin.im>
parents:
24044
diff
changeset
|
886 | if (prev != NM_STATE_CONNECTED && prev != NM_STATE_UNKNOWN) |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
887 | break; |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
888 | if (ui_ops != NULL && ui_ops->network_disconnected != NULL) |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
889 | ui_ops->network_disconnected(); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
890 | break; |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
891 | case NM_STATE_UNKNOWN: |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
892 | default: |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
893 | break; |
| 14758 | 894 | } |
| 895 | } | |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
896 | |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
897 | static void |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
898 | nm_state_change_cb(DBusGProxy *proxy, NMState state, gpointer user_data) |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
899 | { |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
900 | purple_debug_info("network", "Got StateChange from NetworkManager: %d.\n", state); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
901 | nm_update_state(state); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
902 | } |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
903 | |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
904 | static NMState |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
905 | nm_get_network_state(void) |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
906 | { |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
907 | GError *err = NULL; |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
908 | NMState state = NM_STATE_UNKNOWN; |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
909 | |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
910 | if (!nm_proxy) |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
911 | return NM_STATE_UNKNOWN; |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
912 | |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
913 | if (!dbus_g_proxy_call(nm_proxy, "state", &err, G_TYPE_INVALID, G_TYPE_UINT, &state, G_TYPE_INVALID)) { |
| 23185 | 914 | g_error_free(err); |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
915 | return NM_STATE_UNKNOWN; |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
916 | } |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
917 | |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
918 | return state; |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
919 | } |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
920 | |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
921 | static void |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
922 | nm_dbus_name_owner_changed_cb(DBusGProxy *proxy, char *service, char *old_owner, char *new_owner, gpointer user_data) |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
923 | { |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
924 | if (g_str_equal(service, NM_DBUS_SERVICE)) { |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
925 | gboolean old_owner_good = old_owner && (old_owner[0] != '\0'); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
926 | gboolean new_owner_good = new_owner && (new_owner[0] != '\0'); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
927 | |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
928 | purple_debug_info("network", "Got NameOwnerChanged signal, service = '%s', old_owner = '%s', new_owner = '%s'\n", service, old_owner, new_owner); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
929 | if (!old_owner_good && new_owner_good) { /* Equivalent to old ServiceCreated signal */ |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
930 | purple_debug_info("network", "NetworkManager has started.\n"); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
931 | nm_update_state(nm_get_network_state()); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
932 | } else if (old_owner_good && !new_owner_good) { /* Equivalent to old ServiceDeleted signal */ |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
933 | purple_debug_info("network", "NetworkManager has gone away.\n"); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
934 | nm_update_state(NM_STATE_UNKNOWN); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
935 | } |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
936 | } |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
937 | } |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
938 | |
| 14758 | 939 | #endif |
| 940 | ||
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
941 | static void |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31191
diff
changeset
|
942 | purple_network_ip_lookup_cb(GSList *hosts, gpointer data, |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
943 | const char *error_message) |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
944 | { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31191
diff
changeset
|
945 | const gchar **ip = (const gchar **) data; |
|
26262
1ad96aa2e92a
Removed some extra tabs on blank lines
Marcus Lundblad <malu@pidgin.im>
parents:
26261
diff
changeset
|
946 | |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
947 | if (error_message) { |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
948 | purple_debug_error("network", "lookup of IP address failed: %s\n", |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
949 | error_message); |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
950 | g_slist_free(hosts); |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
951 | return; |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
952 | } |
|
26262
1ad96aa2e92a
Removed some extra tabs on blank lines
Marcus Lundblad <malu@pidgin.im>
parents:
26261
diff
changeset
|
953 | |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
954 | if (hosts && g_slist_next(hosts)) { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31191
diff
changeset
|
955 | struct sockaddr *addr = g_slist_next(hosts)->data; |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
956 | char dst[INET6_ADDRSTRLEN]; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31191
diff
changeset
|
957 | |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
958 | if (addr->sa_family == AF_INET6) { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31191
diff
changeset
|
959 | inet_ntop(addr->sa_family, &((struct sockaddr_in6 *) addr)->sin6_addr, |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
960 | dst, sizeof(dst)); |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
961 | } else { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31191
diff
changeset
|
962 | inet_ntop(addr->sa_family, &((struct sockaddr_in *) addr)->sin_addr, |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
963 | dst, sizeof(dst)); |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
964 | } |
|
26262
1ad96aa2e92a
Removed some extra tabs on blank lines
Marcus Lundblad <malu@pidgin.im>
parents:
26261
diff
changeset
|
965 | |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
966 | *ip = g_strdup(dst); |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
967 | purple_debug_info("network", "set IP address: %s\n", *ip); |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
968 | } |
|
26782
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26337
diff
changeset
|
969 | |
|
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26337
diff
changeset
|
970 | while (hosts != NULL) { |
|
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26337
diff
changeset
|
971 | hosts = g_slist_delete_link(hosts, hosts); |
|
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26337
diff
changeset
|
972 | /* Free the address */ |
|
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26337
diff
changeset
|
973 | g_free(hosts->data); |
|
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26337
diff
changeset
|
974 | hosts = g_slist_delete_link(hosts, hosts); |
|
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26337
diff
changeset
|
975 | } |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
976 | } |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
977 | |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
978 | void |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
979 | purple_network_set_stun_server(const gchar *stun_server) |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
980 | { |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
981 | if (stun_server && stun_server[0] != '\0') { |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
982 | if (purple_network_is_available()) { |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
983 | purple_debug_info("network", "running DNS query for STUN server\n"); |
|
32297
100ef65e9664
Replace purple_dnsquery_a_account with purple_dnsquery_a.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31831
diff
changeset
|
984 | purple_dnsquery_a(NULL, stun_server, 3478, purple_network_ip_lookup_cb, |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
985 | &stun_ip); |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
986 | } else { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31191
diff
changeset
|
987 | purple_debug_info("network", |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
988 | "network is unavailable, don't try to update STUN IP"); |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
989 | } |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
990 | } else if (stun_ip) { |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
991 | g_free(stun_ip); |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
992 | stun_ip = NULL; |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
993 | } |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
994 | } |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
995 | |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
996 | void |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
997 | purple_network_set_turn_server(const gchar *turn_server) |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
998 | { |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
999 | if (turn_server && turn_server[0] != '\0') { |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1000 | if (purple_network_is_available()) { |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1001 | purple_debug_info("network", "running DNS query for TURN server\n"); |
|
32297
100ef65e9664
Replace purple_dnsquery_a_account with purple_dnsquery_a.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
31831
diff
changeset
|
1002 | purple_dnsquery_a(NULL, turn_server, |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31191
diff
changeset
|
1003 | purple_prefs_get_int("/purple/network/turn_port"), |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1004 | purple_network_ip_lookup_cb, &turn_ip); |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1005 | } else { |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31191
diff
changeset
|
1006 | purple_debug_info("network", |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1007 | "network is unavailable, don't try to update TURN IP"); |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1008 | } |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1009 | } else if (turn_ip) { |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1010 | g_free(turn_ip); |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1011 | turn_ip = NULL; |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1012 | } |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1013 | } |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1014 | |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1015 | |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
1016 | const gchar * |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
1017 | purple_network_get_stun_ip(void) |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
1018 | { |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
1019 | return stun_ip; |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
1020 | } |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
1021 | |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1022 | const gchar * |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1023 | purple_network_get_turn_ip(void) |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1024 | { |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1025 | return turn_ip; |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1026 | } |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1027 | |
|
16035
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
1028 | void * |
|
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
1029 | purple_network_get_handle(void) |
|
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
1030 | { |
|
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
1031 | static int handle; |
|
19585
14b519abcc26
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 <datallah@pidgin.im>
parents:
18555
diff
changeset
|
1032 | |
|
16035
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
1033 | return &handle; |
|
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
1034 | } |
|
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
1035 | |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1036 | static void |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1037 | purple_network_upnp_mapping_remove_cb(gboolean sucess, gpointer data) |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1038 | { |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1039 | purple_debug_info("network", "done removing UPnP port mapping\n"); |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1040 | } |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1041 | |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1042 | /* the reason for these functions to have these signatures is to be able to |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1043 | use them for g_hash_table_foreach to clean remaining port mappings, which is |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1044 | not yet done */ |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1045 | static void |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1046 | purple_network_upnp_mapping_remove(gpointer key, gpointer value, |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1047 | gpointer user_data) |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1048 | { |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1049 | gint port = GPOINTER_TO_INT(key); |
|
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1050 | gint protocol = GPOINTER_TO_INT(value); |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1051 | purple_debug_info("network", "removing UPnP port mapping for port %d\n", |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1052 | port); |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1053 | purple_upnp_remove_port_mapping(port, |
|
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1054 | protocol == SOCK_STREAM ? "TCP" : "UDP", |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1055 | purple_network_upnp_mapping_remove_cb, NULL); |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1056 | g_hash_table_remove(upnp_port_mappings, GINT_TO_POINTER(port)); |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1057 | } |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1058 | |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1059 | static void |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1060 | purple_network_nat_pmp_mapping_remove(gpointer key, gpointer value, |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1061 | gpointer user_data) |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1062 | { |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1063 | gint port = GPOINTER_TO_INT(key); |
|
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1064 | gint protocol = GPOINTER_TO_INT(value); |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1065 | purple_debug_info("network", "removing NAT-PMP port mapping for port %d\n", |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1066 | port); |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1067 | purple_pmp_destroy_map( |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1068 | protocol == SOCK_STREAM ? PURPLE_PMP_TYPE_TCP : PURPLE_PMP_TYPE_UDP, |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1069 | port); |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1070 | g_hash_table_remove(nat_pmp_port_mappings, GINT_TO_POINTER(port)); |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1071 | } |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1072 | |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1073 | void |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1074 | purple_network_remove_port_mapping(gint fd) |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1075 | { |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1076 | int port = purple_network_get_port_from_fd(fd); |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1077 | gint protocol = GPOINTER_TO_INT(g_hash_table_lookup(upnp_port_mappings, GINT_TO_POINTER(port))); |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1078 | |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1079 | if (protocol) { |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1080 | purple_network_upnp_mapping_remove(GINT_TO_POINTER(port), GINT_TO_POINTER(protocol), NULL); |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1081 | } else { |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1082 | protocol = GPOINTER_TO_INT(g_hash_table_lookup(nat_pmp_port_mappings, GINT_TO_POINTER(port))); |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1083 | if (protocol) { |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1084 | purple_network_nat_pmp_mapping_remove(GINT_TO_POINTER(port), GINT_TO_POINTER(protocol), NULL); |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1085 | } |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1086 | } |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1087 | } |
|
27898
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1088 | |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1089 | int purple_network_convert_idn_to_ascii(const gchar *in, gchar **out) |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1090 | { |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1091 | #ifdef USE_IDN |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1092 | char *tmp; |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1093 | int ret; |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1094 | |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1095 | g_return_val_if_fail(out != NULL, -1); |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1096 | |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1097 | ret = idna_to_ascii_8z(in, &tmp, IDNA_USE_STD3_ASCII_RULES); |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1098 | if (ret != IDNA_SUCCESS) { |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1099 | *out = NULL; |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1100 | return ret; |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1101 | } |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1102 | |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1103 | *out = g_strdup(tmp); |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1104 | /* This *MUST* be freed with free, not g_free */ |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1105 | free(tmp); |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1106 | return 0; |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1107 | #else |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1108 | g_return_val_if_fail(out != NULL, -1); |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1109 | |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1110 | *out = g_strdup(in); |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1111 | return 0; |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1112 | #endif |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1113 | } |
|
4a6450d92e11
Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents:
27497
diff
changeset
|
1114 | |
| 8231 | 1115 | void |
| 15884 | 1116 | purple_network_init(void) |
| 8231 | 1117 | { |
|
23060
db9632a9b374
Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@pidgin.im>
parents:
23054
diff
changeset
|
1118 | #ifdef HAVE_NETWORKMANAGER |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1119 | GError *error = NULL; |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1120 | #endif |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
1121 | #ifdef _WIN32 |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
1122 | GError *err = NULL; |
| 15884 | 1123 | gint cnt = wpurple_get_connected_network_count(); |
|
14842
fe08ba80d369
[gaim-migrate @ 17544]
Daniel Atallah <datallah@pidgin.im>
parents:
14839
diff
changeset
|
1124 | |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1125 | network_initialized = TRUE; |
|
14842
fe08ba80d369
[gaim-migrate @ 17544]
Daniel Atallah <datallah@pidgin.im>
parents:
14839
diff
changeset
|
1126 | if (cnt < 0) /* Assume there is a network */ |
|
fe08ba80d369
[gaim-migrate @ 17544]
Daniel Atallah <datallah@pidgin.im>
parents:
14839
diff
changeset
|
1127 | current_network_count = 1; |
|
fe08ba80d369
[gaim-migrate @ 17544]
Daniel Atallah <datallah@pidgin.im>
parents:
14839
diff
changeset
|
1128 | /* Don't listen for network changes if we can't tell anyway */ |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
1129 | else { |
|
14842
fe08ba80d369
[gaim-migrate @ 17544]
Daniel Atallah <datallah@pidgin.im>
parents:
14839
diff
changeset
|
1130 | current_network_count = cnt; |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
1131 | if ((MyWSANSPIoctl = (void*) wpurple_find_and_loadproc("ws2_32.dll", "WSANSPIoctl"))) { |
|
33883
8a0d96bd9cf4
Replace deprecated g_thread_create with g_thread_try_new
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
32859
diff
changeset
|
1132 | GThread *thread = g_thread_try_new("Network Monitor thread", wpurple_network_change_thread, NULL, &err); |
|
8a0d96bd9cf4
Replace deprecated g_thread_create with g_thread_try_new
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
32859
diff
changeset
|
1133 | if (thread) |
|
8a0d96bd9cf4
Replace deprecated g_thread_create with g_thread_try_new
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
32859
diff
changeset
|
1134 | g_thread_unref(thread); |
|
8a0d96bd9cf4
Replace deprecated g_thread_create with g_thread_try_new
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
32859
diff
changeset
|
1135 | else |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
1136 | purple_debug_error("network", "Couldn't create Network Monitor thread: %s\n", err ? err->message : ""); |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
1137 | } |
|
14842
fe08ba80d369
[gaim-migrate @ 17544]
Daniel Atallah <datallah@pidgin.im>
parents:
14839
diff
changeset
|
1138 | } |
|
14784
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
1139 | #endif |
|
3a82321f46f2
[gaim-migrate @ 17476]
Daniel Atallah <datallah@pidgin.im>
parents:
14758
diff
changeset
|
1140 | |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16035
diff
changeset
|
1141 | purple_prefs_add_none ("/purple/network"); |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
1142 | purple_prefs_add_string("/purple/network/stun_server", ""); |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1143 | purple_prefs_add_string("/purple/network/turn_server", ""); |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1144 | purple_prefs_add_int ("/purple/network/turn_port", 3478); |
|
31831
c3778a69ecee
Add support for using TCP relaying with TURN
Marcus Lundblad <malu@pidgin.im>
parents:
31680
diff
changeset
|
1145 | purple_prefs_add_int ("/purple/network/turn_port_tcp", 3478); |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1146 | purple_prefs_add_string("/purple/network/turn_username", ""); |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1147 | purple_prefs_add_string("/purple/network/turn_password", ""); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16035
diff
changeset
|
1148 | purple_prefs_add_bool ("/purple/network/auto_ip", TRUE); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16035
diff
changeset
|
1149 | purple_prefs_add_string("/purple/network/public_ip", ""); |
|
21810
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
1150 | purple_prefs_add_bool ("/purple/network/map_ports", TRUE); |
|
16478
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16035
diff
changeset
|
1151 | purple_prefs_add_bool ("/purple/network/ports_range_use", FALSE); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16035
diff
changeset
|
1152 | purple_prefs_add_int ("/purple/network/ports_range_start", 1024); |
|
19107605c565
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents:
16035
diff
changeset
|
1153 | purple_prefs_add_int ("/purple/network/ports_range_end", 2048); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
1154 | |
|
21810
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
1155 | if(purple_prefs_get_bool("/purple/network/map_ports") || purple_prefs_get_bool("/purple/network/auto_ip")) |
|
0b5181178201
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 <datallah@pidgin.im>
parents:
21549
diff
changeset
|
1156 | purple_upnp_discover(NULL, NULL); |
| 14758 | 1157 | |
|
23060
db9632a9b374
Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@pidgin.im>
parents:
23054
diff
changeset
|
1158 | #ifdef HAVE_NETWORKMANAGER |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1159 | nm_conn = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1160 | if (!nm_conn) { |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1161 | purple_debug_warning("network", "Error connecting to DBus System service: %s.\n", error->message); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1162 | } else { |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1163 | nm_proxy = dbus_g_proxy_new_for_name(nm_conn, |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1164 | NM_DBUS_SERVICE, |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1165 | NM_DBUS_PATH, |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1166 | NM_DBUS_INTERFACE); |
|
32077
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
1167 | /* NM 0.6 signal */ |
|
23054
2dc4cdd54b28
Modify the NetworkManager support to use "StateChange" directly, instead of
Richard Laager <rlaager@pidgin.im>
parents:
23047
diff
changeset
|
1168 | dbus_g_proxy_add_signal(nm_proxy, "StateChange", G_TYPE_UINT, G_TYPE_INVALID); |
|
2dc4cdd54b28
Modify the NetworkManager support to use "StateChange" directly, instead of
Richard Laager <rlaager@pidgin.im>
parents:
23047
diff
changeset
|
1169 | dbus_g_proxy_connect_signal(nm_proxy, "StateChange", |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1170 | G_CALLBACK(nm_state_change_cb), NULL, NULL); |
|
32077
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
1171 | /* NM 0.7 and later signal */ |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
1172 | dbus_g_proxy_add_signal(nm_proxy, "StateChanged", G_TYPE_UINT, G_TYPE_INVALID); |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
1173 | dbus_g_proxy_connect_signal(nm_proxy, "StateChanged", |
|
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
1174 | G_CALLBACK(nm_state_change_cb), NULL, NULL); |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1175 | |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1176 | dbus_proxy = dbus_g_proxy_new_for_name(nm_conn, |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1177 | DBUS_SERVICE_DBUS, |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1178 | DBUS_PATH_DBUS, |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1179 | DBUS_INTERFACE_DBUS); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1180 | dbus_g_proxy_add_signal(dbus_proxy, "NameOwnerChanged", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1181 | dbus_g_proxy_connect_signal(dbus_proxy, "NameOwnerChanged", |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1182 | G_CALLBACK(nm_dbus_name_owner_changed_cb), NULL, NULL); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1183 | } |
| 14758 | 1184 | #endif |
|
16035
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
1185 | |
|
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
1186 | purple_signal_register(purple_network_get_handle(), "network-configuration-changed", |
|
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
1187 | purple_marshal_VOID, NULL, 0); |
|
19585
14b519abcc26
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 <datallah@pidgin.im>
parents:
18555
diff
changeset
|
1188 | |
|
16035
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
1189 | purple_pmp_init(); |
|
eb4eda79a147
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 <evands@pidgin.im>
parents:
16012
diff
changeset
|
1190 | purple_upnp_init(); |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1191 | |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
1192 | purple_network_set_stun_server( |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
1193 | purple_prefs_get_string("/purple/network/stun_server")); |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1194 | purple_network_set_turn_server( |
|
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
1195 | purple_prefs_get_string("/purple/network/turn_server")); |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1196 | |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1197 | upnp_port_mappings = g_hash_table_new(g_direct_hash, g_direct_equal); |
|
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1198 | nat_pmp_port_mappings = g_hash_table_new(g_direct_hash, g_direct_equal); |
| 8231 | 1199 | } |
| 14758 | 1200 | |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1201 | |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1202 | |
| 14758 | 1203 | void |
| 15884 | 1204 | purple_network_uninit(void) |
| 14758 | 1205 | { |
|
23060
db9632a9b374
Use pkg-config to detect NetworkManager. Also, fail if it isn't present,
Richard Laager <rlaager@pidgin.im>
parents:
23054
diff
changeset
|
1206 | #ifdef HAVE_NETWORKMANAGER |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1207 | if (nm_proxy) { |
|
23054
2dc4cdd54b28
Modify the NetworkManager support to use "StateChange" directly, instead of
Richard Laager <rlaager@pidgin.im>
parents:
23047
diff
changeset
|
1208 | dbus_g_proxy_disconnect_signal(nm_proxy, "StateChange", G_CALLBACK(nm_state_change_cb), NULL); |
|
32077
09eab14835d9
*** Plucked rev 10ead4688e3af4132d454fa3bc241480500651c9 (dcbw@redhat.com):
Mark Doliner <markdoliner@pidgin.im>
parents:
31831
diff
changeset
|
1209 | dbus_g_proxy_disconnect_signal(nm_proxy, "StateChanged", G_CALLBACK(nm_state_change_cb), NULL); |
|
23039
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1210 | g_object_unref(G_OBJECT(nm_proxy)); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1211 | } |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1212 | if (dbus_proxy) { |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1213 | dbus_g_proxy_disconnect_signal(dbus_proxy, "NameOwnerChanged", G_CALLBACK(nm_dbus_name_owner_changed_cb), NULL); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1214 | g_object_unref(G_OBJECT(dbus_proxy)); |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1215 | } |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1216 | if (nm_conn) |
|
c9b53691fe42
A patch from QuLogic to replace the libnm_glib calls with straight DBus
Richard Laager <rlaager@pidgin.im>
parents:
22735
diff
changeset
|
1217 | dbus_g_connection_unref(nm_conn); |
| 14758 | 1218 | #endif |
|
21143
239b2f43bef5
Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents:
20239
diff
changeset
|
1219 | |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1220 | #ifdef _WIN32 |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1221 | g_static_mutex_lock(&mutex); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1222 | network_initialized = FALSE; |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1223 | if (network_change_handle != NULL) { |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1224 | int retval; |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1225 | /* Trigger the NLA thread to stop waiting for network changes. Not |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1226 | * doing this can cause hangs on WSACleanup. */ |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1227 | purple_debug_warning("network", "Terminating the NLA thread\n"); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1228 | if ((retval = WSALookupServiceEnd(network_change_handle)) == SOCKET_ERROR) { |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1229 | int errorid = WSAGetLastError(); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1230 | gchar *msg = g_win32_error_message(errorid); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1231 | purple_debug_warning("network", "Unable to kill NLA thread. Message: %s (%d).\n", |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1232 | msg, errorid); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1233 | g_free(msg); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1234 | } |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
1235 | network_change_handle = NULL; |
|
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
1236 | |
|
25326
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1237 | } |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1238 | g_static_mutex_unlock(&mutex); |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1239 | |
|
c4f4b222dbac
Adjust the NLA code to prevent hang on exit for Windows XP and Windows Vista.
Paul Aurich <darkrain42@pidgin.im>
parents:
24519
diff
changeset
|
1240 | #endif |
|
21143
239b2f43bef5
Make purple_xfers_uninit, purple_network_uninit, and purple_plugins_uninit
Etan Reisner <deryni@pidgin.im>
parents:
20239
diff
changeset
|
1241 | purple_signal_unregister(purple_network_get_handle(), |
|
25541
1b82a0195ff5
Fix 3 different race conditions in the win32 network management functionality.
Daniel Atallah <datallah@pidgin.im>
parents:
25326
diff
changeset
|
1242 | "network-configuration-changed"); |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1243 | |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
1244 | if (stun_ip) |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
25326
diff
changeset
|
1245 | g_free(stun_ip); |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1246 | |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1247 | g_hash_table_destroy(upnp_port_mappings); |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1248 | g_hash_table_destroy(nat_pmp_port_mappings); |
|
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1249 | |
|
31191
163f03d8d1d2
Cast back and forth between int and pointer instead of putting pointers
Mark Doliner <markdoliner@pidgin.im>
parents:
30792
diff
changeset
|
1250 | /* TODO: clean up remaining port mappings, note calling |
|
27332
8240ab259385
Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <malu@pidgin.im>
parents:
27116
diff
changeset
|
1251 | purple_upnp_remove_port_mapping from here doesn't quite work... */ |
| 14758 | 1252 | } |