libpurple/upnp.c

Fri, 05 Jul 2013 14:59:46 +0200

author
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
date
Fri, 05 Jul 2013 14:59:46 +0200
changeset 34239
59b2fc93f2c4
parent 34219
eee308def583
child 34287
6cd0c77b1f6a
permissions
-rw-r--r--

HTTP: migrate purple_util_fetch_url_request to new API for upnp

11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
1 /**
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
2 * @file upnp.c UPnP Implementation
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
3 * @ingroup core
20330
650a7af9c238 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents: 19859
diff changeset
4 */
650a7af9c238 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents: 19859
diff changeset
5
650a7af9c238 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents: 19859
diff changeset
6 /* purple
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
7 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
8 * Purple is the legal property of its developers, whose names are too numerous
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
9 * to list here. Please refer to the COPYRIGHT file distributed with this
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
10 * source distribution.
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
11 *
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
12 * This program is free software; you can redistribute it and/or modify
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
13 * it under the terms of the GNU General Public License as published by
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
14 * the Free Software Foundation; either version 2 of the License, or
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
15 * (at your option) any later version.
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
16 *
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
17 * This program is distributed in the hope that it will be useful,
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
20 * GNU General Public License for more details.
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
21 *
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
22 * You should have received a copy of the GNU General Public License
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
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: 16035
diff changeset
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
25 */
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
26 #include "internal.h"
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
27
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
28 #include "upnp.h"
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
29
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: 15884
diff changeset
30 #include "debug.h"
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: 15884
diff changeset
31 #include "eventloop.h"
34219
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
32 #include "http.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: 15884
diff changeset
33 #include "network.h"
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: 15884
diff changeset
34 #include "proxy.h"
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: 15884
diff changeset
35 #include "signals.h"
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: 15884
diff changeset
36 #include "util.h"
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: 15884
diff changeset
37 #include "xmlnode.h"
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
38
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
39 /***************************************************************
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
40 ** General Defines *
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
41 ****************************************************************/
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
42 #define HTTP_OK "200 OK"
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
43 #define DEFAULT_HTTP_PORT 80
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
44 #define DISCOVERY_TIMEOUT 1000
24011
0cff24bf7dba Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents: 22104
diff changeset
45 /* limit UPnP-triggered http downloads to 128k */
0cff24bf7dba Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents: 22104
diff changeset
46 #define MAX_UPNP_DOWNLOAD (128 * 1024)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
47
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
48 /***************************************************************
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
49 ** Discovery/Description Defines *
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
50 ****************************************************************/
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
51 #define NUM_UDP_ATTEMPTS 2
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
52
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
53 /* Address and port of an SSDP request used for discovery */
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
54 #define HTTPMU_HOST_ADDRESS "239.255.255.250"
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
55 #define HTTPMU_HOST_PORT 1900
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
56
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
57 #define SEARCH_REQUEST_DEVICE "urn:schemas-upnp-org:service:%s"
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
58
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
59 #define SEARCH_REQUEST_STRING \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
60 "M-SEARCH * HTTP/1.1\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
61 "MX: 2\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
62 "HOST: 239.255.255.250:1900\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
63 "MAN: \"ssdp:discover\"\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
64 "ST: urn:schemas-upnp-org:service:%s\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
65 "\r\n"
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
66
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
67 #define WAN_IP_CONN_SERVICE "WANIPConnection:1"
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
68 #define WAN_PPP_CONN_SERVICE "WANPPPConnection:1"
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
69
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
70 /******************************************************************
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
71 ** Action Defines *
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
72 *******************************************************************/
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
73 #define SOAP_ACTION \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
74 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
75 "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
76 "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
77 "<s:Body>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
78 "<u:%s xmlns:u=\"urn:schemas-upnp-org:service:%s\">\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
79 "%s" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
80 "</u:%s>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
81 "</s:Body>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
82 "</s:Envelope>"
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
83
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
84 #define PORT_MAPPING_LEASE_TIME "0"
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
85 #define PORT_MAPPING_DESCRIPTION "PURPLE_UPNP_PORT_FORWARD"
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
86
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
87 #define ADD_PORT_MAPPING_PARAMS \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
88 "<NewRemoteHost></NewRemoteHost>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
89 "<NewExternalPort>%i</NewExternalPort>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
90 "<NewProtocol>%s</NewProtocol>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
91 "<NewInternalPort>%i</NewInternalPort>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
92 "<NewInternalClient>%s</NewInternalClient>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
93 "<NewEnabled>1</NewEnabled>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
94 "<NewPortMappingDescription>" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
95 PORT_MAPPING_DESCRIPTION \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
96 "</NewPortMappingDescription>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
97 "<NewLeaseDuration>" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
98 PORT_MAPPING_LEASE_TIME \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
99 "</NewLeaseDuration>\r\n"
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
100
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
101 #define DELETE_PORT_MAPPING_PARAMS \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
102 "<NewRemoteHost></NewRemoteHost>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
103 "<NewExternalPort>%i</NewExternalPort>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
104 "<NewProtocol>%s</NewProtocol>\r\n"
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
105
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
106 typedef enum {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
107 PURPLE_UPNP_STATUS_UNDISCOVERED = -1,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
108 PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
109 PURPLE_UPNP_STATUS_DISCOVERING,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
110 PURPLE_UPNP_STATUS_DISCOVERED
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
111 } PurpleUPnPStatus;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
112
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
113 typedef struct {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
114 PurpleUPnPStatus status;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
115 gchar* control_url;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
116 gchar service_type[20];
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
117 char publicip[16];
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
118 char internalip[16];
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
119 time_t lookup_time;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
120 } PurpleUPnPControlInfo;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
121
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
122 typedef struct {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
123 guint inpa; /* purple_input_add handle */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
124 guint tima; /* purple_timeout_add handle */
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
125 int fd;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
126 struct sockaddr_in server;
27000
668af87393da Use matching buffer lengths to avoid confusion.
Daniel Atallah <datallah@pidgin.im>
parents: 25911
diff changeset
127 gchar service_type[20];
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
128 int retry_count;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
129 gchar *full_url;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
130 } UPnPDiscoveryData;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
131
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
132 struct _UPnPMappingAddRemove
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
133 {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
134 unsigned short portmap;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
135 gchar protocol[4];
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
136 gboolean add;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
137 PurpleUPnPCallback cb;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
138 gpointer cb_data;
31273
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
139 gboolean success;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
140 guint tima; /* purple_timeout_add handle */
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
141 PurpleHttpConnection *hc;
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
142 };
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
143
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
144 static PurpleUPnPControlInfo control_info = {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
145 PURPLE_UPNP_STATUS_UNDISCOVERED,
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
146 NULL, "\0", "\0", "\0", 0};
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
147
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
148 static GSList *discovery_callbacks = NULL;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
149
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
150 static void purple_upnp_discover_send_broadcast(UPnPDiscoveryData *dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
151 static void lookup_public_ip(void);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
152 static void lookup_internal_ip(void);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
153
31273
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
154 static gboolean
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
155 fire_ar_cb_async_and_free(gpointer data)
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
156 {
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
157 UPnPMappingAddRemove *ar = data;
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
158 if (ar) {
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
159 if (ar->cb)
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
160 ar->cb(ar->success, ar->cb_data);
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
161 g_free(ar);
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
162 }
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
163
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
164 return FALSE;
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
165 }
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
166
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
167 static void
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
168 fire_discovery_callbacks(gboolean success)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
169 {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
170 while(discovery_callbacks) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
171 gpointer data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
172 PurpleUPnPCallback cb = discovery_callbacks->data;
31190
107e045ff742 I prefer this syntax. Plus, it's slightly faster... right?
Mark Doliner <markdoliner@pidgin.im>
parents: 30514
diff changeset
173 discovery_callbacks = g_slist_delete_link(discovery_callbacks, discovery_callbacks);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
174 data = discovery_callbacks->data;
31190
107e045ff742 I prefer this syntax. Plus, it's slightly faster... right?
Mark Doliner <markdoliner@pidgin.im>
parents: 30514
diff changeset
175 discovery_callbacks = g_slist_delete_link(discovery_callbacks, discovery_callbacks);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
176 cb(success, data);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
177 }
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
178 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
179
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
180 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
181 purple_upnp_compare_device(const xmlnode* device, const gchar* deviceType)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
182 {
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
183 xmlnode* deviceTypeNode = xmlnode_get_child(device, "deviceType");
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
184 char *tmp;
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
185 gboolean ret;
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
186
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
187 if(deviceTypeNode == NULL) {
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
188 return FALSE;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
189 }
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
190
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
191 tmp = xmlnode_get_data(deviceTypeNode);
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
192 ret = !g_ascii_strcasecmp(tmp, deviceType);
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
193 g_free(tmp);
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
194
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
195 return ret;
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
196 }
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
197
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
198 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
199 purple_upnp_compare_service(const xmlnode* service, const gchar* serviceType)
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
200 {
13793
f5562178d141 [gaim-migrate @ 16203]
Nathan Walp <nwalp@pidgin.im>
parents: 13622
diff changeset
201 xmlnode* serviceTypeNode;
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
202 char *tmp;
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
203 gboolean ret;
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
204
13793
f5562178d141 [gaim-migrate @ 16203]
Nathan Walp <nwalp@pidgin.im>
parents: 13622
diff changeset
205 if(service == NULL) {
f5562178d141 [gaim-migrate @ 16203]
Nathan Walp <nwalp@pidgin.im>
parents: 13622
diff changeset
206 return FALSE;
f5562178d141 [gaim-migrate @ 16203]
Nathan Walp <nwalp@pidgin.im>
parents: 13622
diff changeset
207 }
f5562178d141 [gaim-migrate @ 16203]
Nathan Walp <nwalp@pidgin.im>
parents: 13622
diff changeset
208
f5562178d141 [gaim-migrate @ 16203]
Nathan Walp <nwalp@pidgin.im>
parents: 13622
diff changeset
209 serviceTypeNode = xmlnode_get_child(service, "serviceType");
f5562178d141 [gaim-migrate @ 16203]
Nathan Walp <nwalp@pidgin.im>
parents: 13622
diff changeset
210
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
211 if(serviceTypeNode == NULL) {
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
212 return FALSE;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
213 }
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
214
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
215 tmp = xmlnode_get_data(serviceTypeNode);
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
216 ret = !g_ascii_strcasecmp(tmp, serviceType);
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
217 g_free(tmp);
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
218
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
219 return ret;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
220 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
221
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
222 static gchar*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
223 purple_upnp_parse_description_response(const gchar* httpResponse, gsize len,
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
224 const gchar* httpURL, const gchar* serviceType)
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
225 {
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
226 gchar *baseURL, *controlURL, *service;
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
227 xmlnode *xmlRootNode, *serviceTypeNode, *controlURLNode, *baseURLNode;
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
228 char *tmp;
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
229
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
230 /* create the xml root node */
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
231 if ((xmlRootNode = xmlnode_from_str(httpResponse, len)) == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
232 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
233 "parse_description_response(): Could not parse xml root node\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
234 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
235 }
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
236
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
237 /* get the baseURL of the device */
33560
3f178b52c209 Fix a crash in upnp code introduced 3 weeks ago.
Mark Doliner <mark@kingant.net>
parents: 33542
diff changeset
238 baseURL = NULL;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
239 if((baseURLNode = xmlnode_get_child(xmlRootNode, "URLBase")) != NULL) {
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
240 baseURL = xmlnode_get_data(baseURLNode);
33542
d79e18b1b043 Fix UPNP mapping on some weird routers. Fixes #15373.
Ferdinand Stehle <unknown>
parents: 31949
diff changeset
241 }
d79e18b1b043 Fix UPNP mapping on some weird routers. Fixes #15373.
Ferdinand Stehle <unknown>
parents: 31949
diff changeset
242 /* fixes upnp-descriptions with empty urlbase-element */
d79e18b1b043 Fix UPNP mapping on some weird routers. Fixes #15373.
Ferdinand Stehle <unknown>
parents: 31949
diff changeset
243 if(baseURL == NULL){
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
244 baseURL = g_strdup(httpURL);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
245 }
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
246
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
247 /* get the serviceType child that has the service type as its data */
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
248
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
249 /* get urn:schemas-upnp-org:device:InternetGatewayDevice:1 and its devicelist */
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
250 serviceTypeNode = xmlnode_get_child(xmlRootNode, "device");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
251 while(!purple_upnp_compare_device(serviceTypeNode,
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
252 "urn:schemas-upnp-org:device:InternetGatewayDevice:1") &&
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
253 serviceTypeNode != NULL) {
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
254 serviceTypeNode = xmlnode_get_next_twin(serviceTypeNode);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
255 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
256 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
257 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
258 "parse_description_response(): could not get serviceTypeNode 1\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
259 g_free(baseURL);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
260 xmlnode_free(xmlRootNode);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
261 return NULL;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
262 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
263 serviceTypeNode = xmlnode_get_child(serviceTypeNode, "deviceList");
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
264 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
265 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
266 "parse_description_response(): could not get serviceTypeNode 2\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
267 g_free(baseURL);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
268 xmlnode_free(xmlRootNode);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
269 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
270 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
271
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
272 /* get urn:schemas-upnp-org:device:WANDevice:1 and its devicelist */
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
273 serviceTypeNode = xmlnode_get_child(serviceTypeNode, "device");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
274 while(!purple_upnp_compare_device(serviceTypeNode,
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
275 "urn:schemas-upnp-org:device:WANDevice:1") &&
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
276 serviceTypeNode != NULL) {
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
277 serviceTypeNode = xmlnode_get_next_twin(serviceTypeNode);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
278 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
279 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
280 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
281 "parse_description_response(): could not get serviceTypeNode 3\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
282 g_free(baseURL);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
283 xmlnode_free(xmlRootNode);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
284 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
285 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
286 serviceTypeNode = xmlnode_get_child(serviceTypeNode, "deviceList");
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
287 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
288 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
289 "parse_description_response(): could not get serviceTypeNode 4\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
290 g_free(baseURL);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
291 xmlnode_free(xmlRootNode);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
292 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
293 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
294
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
295 /* get urn:schemas-upnp-org:device:WANConnectionDevice:1 and its servicelist */
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
296 serviceTypeNode = xmlnode_get_child(serviceTypeNode, "device");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
297 while(serviceTypeNode && !purple_upnp_compare_device(serviceTypeNode,
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
298 "urn:schemas-upnp-org:device:WANConnectionDevice:1")) {
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
299 serviceTypeNode = xmlnode_get_next_twin(serviceTypeNode);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
300 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
301 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
302 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
303 "parse_description_response(): could not get serviceTypeNode 5\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
304 g_free(baseURL);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
305 xmlnode_free(xmlRootNode);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
306 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
307 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
308 serviceTypeNode = xmlnode_get_child(serviceTypeNode, "serviceList");
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
309 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
310 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
311 "parse_description_response(): could not get serviceTypeNode 6\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
312 g_free(baseURL);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
313 xmlnode_free(xmlRootNode);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
314 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
315 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
316
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
317 /* get the serviceType variable passed to this function */
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
318 service = g_strdup_printf(SEARCH_REQUEST_DEVICE, serviceType);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
319 serviceTypeNode = xmlnode_get_child(serviceTypeNode, "service");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
320 while(!purple_upnp_compare_service(serviceTypeNode, service) &&
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
321 serviceTypeNode != NULL) {
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
322 serviceTypeNode = xmlnode_get_next_twin(serviceTypeNode);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
323 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
324
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
325 g_free(service);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
326 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
327 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
328 "parse_description_response(): could not get serviceTypeNode 7\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
329 g_free(baseURL);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
330 xmlnode_free(xmlRootNode);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
331 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
332 }
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
333
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
334 /* get the controlURL of the service */
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
335 if((controlURLNode = xmlnode_get_child(serviceTypeNode,
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
336 "controlURL")) == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
337 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
338 "parse_description_response(): Could not find controlURL\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
339 g_free(baseURL);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
340 xmlnode_free(xmlRootNode);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
341 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
342 }
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
343
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
344 tmp = xmlnode_get_data(controlURLNode);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
345 if(baseURL && !purple_str_has_prefix(tmp, "http://") &&
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
346 !purple_str_has_prefix(tmp, "HTTP://")) {
15348
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
347 /* Handle absolute paths in a relative URL. This probably
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
348 * belongs in util.c. */
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
349 if (tmp[0] == '/') {
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
350 size_t length;
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
351 const char *path, *start = strstr(baseURL, "://");
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
352 start = start ? start + 3 : baseURL;
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
353 path = strchr(start, '/');
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
354 length = path ? path - baseURL : strlen(baseURL);
15683
9421e229cb97 Minor warning fix
Mark Doliner <markdoliner@pidgin.im>
parents: 15502
diff changeset
355 controlURL = g_strdup_printf("%.*s%s", (int)length, baseURL, tmp);
15348
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
356 } else {
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
357 controlURL = g_strdup_printf("%s%s", baseURL, tmp);
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
358 }
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
359 g_free(tmp);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
360 }else{
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
361 controlURL = tmp;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
362 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
363 g_free(baseURL);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
364 xmlnode_free(xmlRootNode);
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
365
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
366 return controlURL;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
367 }
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
368
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
369 static void
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
370 upnp_parse_description_cb(PurpleHttpConnection *http_conn,
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
371 PurpleHttpResponse *response, gpointer _dd)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
372 {
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
373 UPnPDiscoveryData *dd = _dd;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
374 gchar *control_url = NULL;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
375
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
376 if (response && purple_http_response_is_successfull(response)) {
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
377 const gchar *got_data;
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
378 size_t got_len;
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
379
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
380 got_data = purple_http_response_get_data(response, &got_len);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
381 control_url = purple_upnp_parse_description_response(
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
382 got_data, got_len, dd->full_url, dd->service_type);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
383 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
384
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
385 g_free(dd->full_url);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
386
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
387 if(control_url == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
388 purple_debug_error("upnp",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
389 "purple_upnp_parse_description(): control URL is NULL\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
390 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
391
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
392 control_info.status = control_url ? PURPLE_UPNP_STATUS_DISCOVERED
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
393 : PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
394 control_info.lookup_time = time(NULL);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
395 control_info.control_url = control_url;
33746
ad7e7fb98db3 Fix a crash when receiving UPnP responses with abnormally long values.
Mark Doliner <mark@kingant.net>
parents: 33560
diff changeset
396 g_strlcpy(control_info.service_type, dd->service_type,
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
397 sizeof(control_info.service_type));
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
398
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
399 fire_discovery_callbacks(control_url != NULL);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
400
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
401 /* Look up the public and internal IPs */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
402 if(control_url != NULL) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
403 lookup_public_ip();
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
404 lookup_internal_ip();
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
405 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
406
30514
b098c4f6eb80 Remove some timeout/input handlers for upnp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 30384
diff changeset
407 if (dd->inpa > 0)
b098c4f6eb80 Remove some timeout/input handlers for upnp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 30384
diff changeset
408 purple_input_remove(dd->inpa);
b098c4f6eb80 Remove some timeout/input handlers for upnp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 30384
diff changeset
409 if (dd->tima > 0)
b098c4f6eb80 Remove some timeout/input handlers for upnp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 30384
diff changeset
410 purple_timeout_remove(dd->tima);
b098c4f6eb80 Remove some timeout/input handlers for upnp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 30384
diff changeset
411
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
412 g_free(dd);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
413 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
414
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
415 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
416 purple_upnp_parse_description(const gchar* descriptionURL, UPnPDiscoveryData *dd)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
417 {
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
418 PurpleHttpRequest *req;
34219
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
419 PurpleHttpURL *url;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
420
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
421 /* Remove the timeout because everything it is waiting for has
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
422 * successfully completed */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
423 purple_timeout_remove(dd->tima);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
424 dd->tima = 0;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
425
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
426 /* Extract base url out of the descriptionURL.
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
427 * Example description URL: http://192.168.1.1:5678/rootDesc.xml
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
428 */
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
429 url = purple_http_url_parse(descriptionURL);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
430 if (!url) {
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
431 upnp_parse_description_cb(NULL, NULL, dd);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
432 return;
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
433 }
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
434 dd->full_url = g_strdup_printf("http://%s:%d",
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
435 purple_http_url_get_host(url),
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
436 purple_http_url_get_port(url));
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
437 purple_http_url_free(url);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
438
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
439 req = purple_http_request_new(descriptionURL);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
440 purple_http_request_set_max_len(req, MAX_UPNP_DOWNLOAD);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
441 purple_http_request(NULL, req, upnp_parse_description_cb, dd);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
442 purple_http_request_unref(req);
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
443 }
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
444
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
445 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
446 purple_upnp_parse_discover_response(const gchar* buf, unsigned int buf_len,
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
447 UPnPDiscoveryData *dd)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
448 {
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
449 gchar* startDescURL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
450 gchar* endDescURL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
451 gchar* descURL;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
452
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
453 if(g_strstr_len(buf, buf_len, HTTP_OK) == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
454 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
455 "parse_discover_response(): Failed In HTTP_OK\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
456 return;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
457 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
458
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
459 if((startDescURL = g_strstr_len(buf, buf_len, "http://")) == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
460 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
461 "parse_discover_response(): Failed In finding http://\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
462 return;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
463 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
464
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
465 endDescURL = g_strstr_len(startDescURL, buf_len - (startDescURL - buf),
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
466 "\r");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
467 if(endDescURL == NULL) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
468 endDescURL = g_strstr_len(startDescURL,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
469 buf_len - (startDescURL - buf), "\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
470 if(endDescURL == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
471 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
472 "parse_discover_response(): Failed In endDescURL\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
473 return;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
474 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
475 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
476
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
477 /* XXX: I'm not sure how this could ever happen */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
478 if(endDescURL == startDescURL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
479 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
480 "parse_discover_response(): endDescURL == startDescURL\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
481 return;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
482 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
483
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
484 descURL = g_strndup(startDescURL, endDescURL - startDescURL);
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
485
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
486 purple_upnp_parse_description(descURL, dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
487
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
488 g_free(descURL);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
489
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
490 }
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
491
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
492 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
493 purple_upnp_discover_timeout(gpointer data)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
494 {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
495 UPnPDiscoveryData* dd = data;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
496
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
497 if (dd->inpa)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
498 purple_input_remove(dd->inpa);
30514
b098c4f6eb80 Remove some timeout/input handlers for upnp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 30384
diff changeset
499 if (dd->tima > 0)
b098c4f6eb80 Remove some timeout/input handlers for upnp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 30384
diff changeset
500 purple_timeout_remove(dd->tima);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
501 dd->inpa = 0;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
502 dd->tima = 0;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
503
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
504 if (dd->retry_count < NUM_UDP_ATTEMPTS) {
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
505 /* TODO: We probably shouldn't be incrementing retry_count in two places */
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
506 dd->retry_count++;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
507 purple_upnp_discover_send_broadcast(dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
508 } else {
31949
f141aee90086 Fix some closes on invalid fds, which can crash on Windows.
Florian Quèze <florian@instantbird.org>
parents: 31273
diff changeset
509 if (dd->fd != -1)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
510 close(dd->fd);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
511
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
512 control_info.status = PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
513 control_info.lookup_time = time(NULL);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
514 control_info.service_type[0] = '\0';
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
515 g_free(control_info.control_url);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
516 control_info.control_url = NULL;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
517
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
518 fire_discovery_callbacks(FALSE);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
519
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
520 g_free(dd);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
521 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
522
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
523 return FALSE;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
524 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
525
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
526 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
527 purple_upnp_discover_udp_read(gpointer data, gint sock, PurpleInputCondition cond)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
528 {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
529 int len;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
530 UPnPDiscoveryData *dd = data;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
531 gchar buf[65536];
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
532
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
533 do {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
534 len = recv(dd->fd, buf,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
535 sizeof(buf) - 1, 0);
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
536
29810
8cb17c0c8fe5 Handle read of length 0 in upnp code.
Ethan Blanton <elb@pidgin.im>
parents: 27497
diff changeset
537 if(len >= 0) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
538 buf[len] = '\0';
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
539 break;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
540 } else if(errno != EINTR) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
541 /* We'll either get called again, or time out */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
542 return;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
543 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
544 } while (errno == EINTR);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
545
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
546 purple_input_remove(dd->inpa);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
547 dd->inpa = 0;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
548
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
549 close(dd->fd);
20044
2b66cf7c7266 grab revision 24d76e86b06c5b1ab5f0a3ea37bd69ced034e0d0 (Reset file descriptors to -1 instead of 0 to fix some weird unexpected crashes in finch
Luke Schierer <lschiere@pidgin.im>
parents: 19859
diff changeset
550 dd->fd = -1;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
551
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
552 /* parse the response, and see if it was a success */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
553 purple_upnp_parse_discover_response(buf, len, dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
554
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
555 /* We'll either time out or continue successfully */
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
556 }
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
557
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
558 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
559 purple_upnp_discover_send_broadcast(UPnPDiscoveryData *dd)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
560 {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
561 gchar *sendMessage = NULL;
25571
4cb4b6a61da6 Fix a null ptr deref/double free. Fixes #8336.
Daniel Atallah <datallah@pidgin.im>
parents: 24672
diff changeset
562 size_t totalSize;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
563 gboolean sentSuccess;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
564
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
565 /* because we are sending over UDP, if there is a failure
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
566 we should retry the send NUM_UDP_ATTEMPTS times. Also,
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
567 try different requests for WANIPConnection and WANPPPConnection*/
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
568 for(; dd->retry_count < NUM_UDP_ATTEMPTS; dd->retry_count++) {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13097
diff changeset
569 sentSuccess = FALSE;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
570
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
571 if((dd->retry_count % 2) == 0) {
33746
ad7e7fb98db3 Fix a crash when receiving UPnP responses with abnormally long values.
Mark Doliner <mark@kingant.net>
parents: 33560
diff changeset
572 g_strlcpy(dd->service_type, WAN_IP_CONN_SERVICE, sizeof(dd->service_type));
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
573 } else {
33746
ad7e7fb98db3 Fix a crash when receiving UPnP responses with abnormally long values.
Mark Doliner <mark@kingant.net>
parents: 33560
diff changeset
574 g_strlcpy(dd->service_type, WAN_PPP_CONN_SERVICE, sizeof(dd->service_type));
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
575 }
11213
837e1970689d [gaim-migrate @ 13344]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11204
diff changeset
576
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
577 sendMessage = g_strdup_printf(SEARCH_REQUEST_STRING, dd->service_type);
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
578
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
579 totalSize = strlen(sendMessage);
11213
837e1970689d [gaim-migrate @ 13344]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11204
diff changeset
580
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
581 do {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
582 if(sendto(dd->fd, sendMessage, totalSize, 0,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
583 (struct sockaddr*) &(dd->server),
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
584 sizeof(struct sockaddr_in)
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
585 ) == totalSize) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
586 sentSuccess = TRUE;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
587 break;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
588 }
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13097
diff changeset
589 } while (errno == EINTR || errno == EAGAIN);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
590
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
591 g_free(sendMessage);
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
592
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
593 if(sentSuccess) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
594 dd->tima = purple_timeout_add(DISCOVERY_TIMEOUT,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
595 purple_upnp_discover_timeout, dd);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
596 dd->inpa = purple_input_add(dd->fd, PURPLE_INPUT_READ,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
597 purple_upnp_discover_udp_read, dd);
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
598
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
599 return;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
600 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
601 }
11213
837e1970689d [gaim-migrate @ 13344]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11204
diff changeset
602
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
603 /* We have already done all our retries. Make sure that the callback
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
604 * doesn't get called before the original function returns */
30514
b098c4f6eb80 Remove some timeout/input handlers for upnp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 30384
diff changeset
605 dd->tima = purple_timeout_add(10, purple_upnp_discover_timeout, dd);
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
606 }
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
607
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
608 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
609 purple_upnp_discover(PurpleUPnPCallback cb, gpointer cb_data)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
610 {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
611 /* Socket Setup Variables */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
612 int sock;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
613 struct hostent* hp;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
614
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
615 /* UDP RECEIVE VARIABLES */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
616 UPnPDiscoveryData *dd;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
617
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
618 if (control_info.status == PURPLE_UPNP_STATUS_DISCOVERING) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
619 if (cb) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
620 discovery_callbacks = g_slist_append(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
621 discovery_callbacks, cb);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
622 discovery_callbacks = g_slist_append(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
623 discovery_callbacks, cb_data);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
624 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
625 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
626 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
627
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
628 dd = g_new0(UPnPDiscoveryData, 1);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
629 if (cb) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
630 discovery_callbacks = g_slist_append(discovery_callbacks, cb);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
631 discovery_callbacks = g_slist_append(discovery_callbacks,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
632 cb_data);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
633 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
634
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
635 /* Set up the sockets */
31949
f141aee90086 Fix some closes on invalid fds, which can crash on Windows.
Florian Quèze <florian@instantbird.org>
parents: 31273
diff changeset
636 dd->fd = sock = socket(AF_INET, SOCK_DGRAM, 0);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
637 if(sock == -1) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
638 purple_debug_error("upnp",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
639 "purple_upnp_discover(): Failed In sock creation\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
640 /* Short circuit the retry attempts */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
641 dd->retry_count = NUM_UDP_ATTEMPTS;
30514
b098c4f6eb80 Remove some timeout/input handlers for upnp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 30384
diff changeset
642 dd->tima = purple_timeout_add(10, purple_upnp_discover_timeout, dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
643 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
644 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
645
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
646 /* TODO: Non-blocking! */
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
647 if((hp = gethostbyname(HTTPMU_HOST_ADDRESS)) == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
648 purple_debug_error("upnp",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
649 "purple_upnp_discover(): Failed In gethostbyname\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
650 /* Short circuit the retry attempts */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
651 dd->retry_count = NUM_UDP_ATTEMPTS;
30514
b098c4f6eb80 Remove some timeout/input handlers for upnp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 30384
diff changeset
652 dd->tima = purple_timeout_add(10, purple_upnp_discover_timeout, dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
653 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
654 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
655
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
656 memset(&(dd->server), 0, sizeof(struct sockaddr));
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
657 dd->server.sin_family = AF_INET;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
658 memcpy(&(dd->server.sin_addr), hp->h_addr_list[0], hp->h_length);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
659 dd->server.sin_port = htons(HTTPMU_HOST_PORT);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
660
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
661 control_info.status = PURPLE_UPNP_STATUS_DISCOVERING;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
662
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
663 purple_upnp_discover_send_broadcast(dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
664 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
665
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
666 static PurpleHttpConnection*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
667 purple_upnp_generate_action_message_and_send(const gchar* actionName,
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
668 const gchar* actionParams, PurpleHttpCallback cb,
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
669 gpointer cb_data)
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
670 {
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
671 PurpleHttpConnection *hc;
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
672 PurpleHttpRequest *req;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
673 gchar* soapMessage;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
674
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
675 /* set the soap message */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
676 soapMessage = g_strdup_printf(SOAP_ACTION, actionName,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
677 control_info.service_type, actionParams, actionName);
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
678
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
679 req = purple_http_request_new(control_info.control_url);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
680 purple_http_request_set_max_len(req, MAX_UPNP_DOWNLOAD);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
681 purple_http_request_set_method(req, "POST");
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
682 purple_http_request_header_set_printf(req, "SOAPAction",
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
683 "\"urn:schemas-upnp-org:service:%s#%s\"",
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
684 control_info.service_type, actionName);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
685 purple_http_request_header_set(req, "Content-Type",
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
686 "text/xml; charset=utf-8");
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
687 purple_http_request_set_contents(req, soapMessage, -1);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
688 hc = purple_http_request(NULL, req, cb, cb_data);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
689 purple_http_request_unref(req);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
690
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
691 g_free(soapMessage);
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
692
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
693 return hc;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
694 }
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
695
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
696 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
697 purple_upnp_get_public_ip()
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
698 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
699 if (control_info.status == PURPLE_UPNP_STATUS_DISCOVERED
32189
3af8d41121b6 Don't use strlen() when all you're trying to do is check if the string
Mark Doliner <markdoliner@pidgin.im>
parents: 32147
diff changeset
700 && *control_info.publicip)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
701 return control_info.publicip;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
702
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
703 /* Trigger another UPnP discovery if 5 minutes have elapsed since the
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
704 * last one, and it wasn't successful */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
705 if (control_info.status < PURPLE_UPNP_STATUS_DISCOVERING
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
706 && (time(NULL) - control_info.lookup_time) > 300)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
707 purple_upnp_discover(NULL, NULL);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
708
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
709 return NULL;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
710 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
711
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
712 static void
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
713 looked_up_public_ip_cb(PurpleHttpConnection *http_conn,
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
714 PurpleHttpResponse *response, gpointer user_data)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
715 {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
716 gchar* temp, *temp2;
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
717 const gchar *got_data;
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
718 size_t got_len;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
719
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
720 if (!purple_http_response_is_successfull(response))
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
721 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
722
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
723 /* extract the ip, or see if there is an error */
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
724 got_data = purple_http_response_get_data(response, &got_len);
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
725 if((temp = g_strstr_len(got_data, got_len,
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
726 "<NewExternalIPAddress")) == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
727 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
728 "looked_up_public_ip_cb(): Failed Finding <NewExternalIPAddress\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
729 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
730 }
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
731 if(!(temp = g_strstr_len(temp, got_len - (temp - got_data), ">"))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
732 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
733 "looked_up_public_ip_cb(): Failed In Finding >\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
734 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
735 }
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
736 if(!(temp2 = g_strstr_len(temp, got_len - (temp - got_data), "<"))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
737 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
738 "looked_up_public_ip_cb(): Failed In Finding <\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
739 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
740 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
741 *temp2 = '\0';
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
742
33746
ad7e7fb98db3 Fix a crash when receiving UPnP responses with abnormally long values.
Mark Doliner <mark@kingant.net>
parents: 33560
diff changeset
743 g_strlcpy(control_info.publicip, temp + 1,
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
744 sizeof(control_info.publicip));
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
745
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
746 purple_debug_info("upnp", "NAT Returned IP: %s\n", control_info.publicip);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
747 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
748
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
749 static void
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
750 lookup_public_ip()
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
751 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
752 purple_upnp_generate_action_message_and_send("GetExternalIPAddress", "",
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
753 looked_up_public_ip_cb, NULL);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
754 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
755
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
756 /* TODO: This could be exported */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
757 static const gchar *
22104
56970903b8e9 Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents: 20636
diff changeset
758 purple_upnp_get_internal_ip(void)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
759 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
760 if (control_info.status == PURPLE_UPNP_STATUS_DISCOVERED
32189
3af8d41121b6 Don't use strlen() when all you're trying to do is check if the string
Mark Doliner <markdoliner@pidgin.im>
parents: 32147
diff changeset
761 && *control_info.internalip)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
762 return control_info.internalip;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
763
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
764 /* Trigger another UPnP discovery if 5 minutes have elapsed since the
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
765 * last one, and it wasn't successful */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
766 if (control_info.status < PURPLE_UPNP_STATUS_DISCOVERING
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
767 && (time(NULL) - control_info.lookup_time) > 300)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
768 purple_upnp_discover(NULL, NULL);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
769
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
770 return NULL;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
771 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
772
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
773 static void
14183
bdde840e984c [gaim-migrate @ 16755]
Mark Doliner <markdoliner@pidgin.im>
parents: 14170
diff changeset
774 looked_up_internal_ip_cb(gpointer data, gint source, const gchar *error_message)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
775 {
31949
f141aee90086 Fix some closes on invalid fds, which can crash on Windows.
Florian Quèze <florian@instantbird.org>
parents: 31273
diff changeset
776 if (source != -1) {
33746
ad7e7fb98db3 Fix a crash when receiving UPnP responses with abnormally long values.
Mark Doliner <mark@kingant.net>
parents: 33560
diff changeset
777 g_strlcpy(control_info.internalip,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
778 purple_network_get_local_system_ip(source),
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
779 sizeof(control_info.internalip));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
780 purple_debug_info("upnp", "Local IP: %s\n",
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
781 control_info.internalip);
14151
34427f138b1f [gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents: 13793
diff changeset
782 close(source);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
783 } else
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27000
diff changeset
784 purple_debug_error("upnp", "Unable to look up local IP\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
785
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
786 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
787
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
788 static void
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
789 lookup_internal_ip()
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
790 {
34219
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
791 PurpleHttpURL *url;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
792
34219
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
793 url = purple_http_url_parse(control_info.control_url);
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
794 if (!url) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
795 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
796 "lookup_internal_ip(): Failed In Parse URL\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
797 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
798 }
34219
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
799
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
800 if(purple_proxy_connect(NULL, NULL, purple_http_url_get_host(url),
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
801 purple_http_url_get_port(url), looked_up_internal_ip_cb,
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
802 NULL) == NULL)
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
803 {
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
804 purple_debug_error("upnp", "Get Local IP Connect Failed: "
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
805 "Address: %s @@@ Port %d\n",
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
806 purple_http_url_get_host(url),
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
807 purple_http_url_get_port(url));
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
808 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
809
34219
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
810 purple_http_url_free(url);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
811 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
812
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
813 static void
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
814 done_port_mapping_cb(PurpleHttpConnection *http_conn,
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
815 PurpleHttpResponse *response, gpointer user_data)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
816 {
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
817 UPnPMappingAddRemove *ar = user_data;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
818
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
819 gboolean success = TRUE;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
820
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
821 /* determine if port mapping was a success */
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
822 if (!purple_http_response_is_successfull(response))
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
823 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
824 purple_debug_error("upnp",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
825 "purple_upnp_set_port_mapping(): Failed HTTP_OK\n%s\n",
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
826 purple_http_response_get_error(response));
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
827 success = FALSE;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
828 } else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
829 purple_debug_info("upnp", "Successfully completed port mapping operation\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
830
31273
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
831 ar->success = success;
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
832 ar->tima = purple_timeout_add(0, fire_ar_cb_async_and_free, ar);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
833 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
834
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
835 static void
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
836 do_port_mapping_cb(gboolean has_control_mapping, gpointer data)
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
837 {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
838 UPnPMappingAddRemove *ar = data;
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
839
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
840 if (has_control_mapping) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
841 gchar action_name[25];
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
842 gchar *action_params;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
843 if(ar->add) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
844 const gchar *internal_ip;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
845 /* get the internal IP */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
846 if(!(internal_ip = purple_upnp_get_internal_ip())) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
847 purple_debug_error("upnp",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
848 "purple_upnp_set_port_mapping(): couldn't get local ip\n");
31273
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
849 ar->success = FALSE;
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
850 ar->tima = purple_timeout_add(0, fire_ar_cb_async_and_free, ar);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
851 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
852 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
853 strncpy(action_name, "AddPortMapping",
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
854 sizeof(action_name));
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
855 action_params = g_strdup_printf(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
856 ADD_PORT_MAPPING_PARAMS,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
857 ar->portmap, ar->protocol, ar->portmap,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
858 internal_ip);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
859 } else {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
860 strncpy(action_name, "DeletePortMapping", sizeof(action_name));
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
861 action_params = g_strdup_printf(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
862 DELETE_PORT_MAPPING_PARAMS,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
863 ar->portmap, ar->protocol);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
864 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
865
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
866 ar->hc = purple_upnp_generate_action_message_and_send(
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
867 action_name, action_params, done_port_mapping_cb, ar);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
868
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
869 g_free(action_params);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
870 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
871 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
872
31273
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
873 ar->success = FALSE;
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
874 ar->tima = purple_timeout_add(0, fire_ar_cb_async_and_free, ar);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
875 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
876
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
877 static gboolean
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
878 fire_port_mapping_failure_cb(gpointer data)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
879 {
31273
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
880 UPnPMappingAddRemove *ar = data;
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
881
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
882 ar->tima = 0;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
883 do_port_mapping_cb(FALSE, data);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
884 return FALSE;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
885 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
886
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
887 void purple_upnp_cancel_port_mapping(UPnPMappingAddRemove *ar)
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
888 {
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
889 GSList *l;
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
890
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
891 /* Remove ar from discovery_callbacks if present; it was inserted after a cb.
30383
030f0d1491e1 Comment spellcheck.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 29810
diff changeset
892 * The same cb may be in the list multiple times, so be careful to remove
030f0d1491e1 Comment spellcheck.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 29810
diff changeset
893 * the one associated with ar. */
30384
4b8995626b20 Fix a read-after-free from valgrind:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30383
diff changeset
894 l = discovery_callbacks;
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
895 while (l)
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
896 {
30384
4b8995626b20 Fix a read-after-free from valgrind:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30383
diff changeset
897 GSList *next = l->next;
4b8995626b20 Fix a read-after-free from valgrind:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30383
diff changeset
898
4b8995626b20 Fix a read-after-free from valgrind:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30383
diff changeset
899 if (next && (next->data == ar)) {
4b8995626b20 Fix a read-after-free from valgrind:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30383
diff changeset
900 discovery_callbacks = g_slist_delete_link(discovery_callbacks, next);
4b8995626b20 Fix a read-after-free from valgrind:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30383
diff changeset
901 next = l->next;
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
902 discovery_callbacks = g_slist_delete_link(discovery_callbacks, l);
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
903 }
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
904
30384
4b8995626b20 Fix a read-after-free from valgrind:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30383
diff changeset
905 l = next;
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
906 }
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
907
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
908 if (ar->tima > 0)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
909 purple_timeout_remove(ar->tima);
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
910
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
911 purple_http_conn_cancel(ar->hc);
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
912
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
913 g_free(ar);
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
914 }
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
915
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
916 UPnPMappingAddRemove *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
917 purple_upnp_set_port_mapping(unsigned short portmap, const gchar* protocol,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
918 PurpleUPnPCallback cb, gpointer cb_data)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
919 {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
920 UPnPMappingAddRemove *ar;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
921
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
922 ar = g_new0(UPnPMappingAddRemove, 1);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
923 ar->cb = cb;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
924 ar->cb_data = cb_data;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
925 ar->add = TRUE;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
926 ar->portmap = portmap;
33746
ad7e7fb98db3 Fix a crash when receiving UPnP responses with abnormally long values.
Mark Doliner <mark@kingant.net>
parents: 33560
diff changeset
927 g_strlcpy(ar->protocol, protocol, sizeof(ar->protocol));
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
928
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
929 /* If we're waiting for a discovery, add to the callbacks list */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
930 if(control_info.status == PURPLE_UPNP_STATUS_DISCOVERING) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
931 /* TODO: This will fail because when this cb is triggered,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
932 * the internal IP lookup won't be complete */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
933 discovery_callbacks = g_slist_append(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
934 discovery_callbacks, do_port_mapping_cb);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
935 discovery_callbacks = g_slist_append(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
936 discovery_callbacks, ar);
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
937 return ar;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
938 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
939
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
940 /* If we haven't had a successful UPnP discovery, check if 5 minutes has
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
941 * elapsed since the last try, try again */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
942 if(control_info.status == PURPLE_UPNP_STATUS_UNDISCOVERED ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
943 (control_info.status == PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
944 && (time(NULL) - control_info.lookup_time) > 300)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
945 purple_upnp_discover(do_port_mapping_cb, ar);
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
946 return ar;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
947 } else if(control_info.status == PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
948 if (cb) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
949 /* Asynchronously trigger a failed response */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
950 ar->tima = purple_timeout_add(10, fire_port_mapping_failure_cb, ar);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
951 } else {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
952 /* No need to do anything if nobody expects a response*/
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
953 g_free(ar);
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
954 ar = NULL;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
955 }
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
956 return ar;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
957 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
958
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
959 do_port_mapping_cb(TRUE, ar);
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
960 return ar;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
961 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
962
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
963 UPnPMappingAddRemove *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
964 purple_upnp_remove_port_mapping(unsigned short portmap, const char* protocol,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
965 PurpleUPnPCallback cb, gpointer cb_data)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
966 {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
967 UPnPMappingAddRemove *ar;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
968
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
969 ar = g_new0(UPnPMappingAddRemove, 1);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
970 ar->cb = cb;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
971 ar->cb_data = cb_data;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
972 ar->add = FALSE;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
973 ar->portmap = portmap;
33746
ad7e7fb98db3 Fix a crash when receiving UPnP responses with abnormally long values.
Mark Doliner <mark@kingant.net>
parents: 33560
diff changeset
974 g_strlcpy(ar->protocol, protocol, sizeof(ar->protocol));
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
975
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
976 /* If we're waiting for a discovery, add to the callbacks list */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
977 if(control_info.status == PURPLE_UPNP_STATUS_DISCOVERING) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
978 discovery_callbacks = g_slist_append(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
979 discovery_callbacks, do_port_mapping_cb);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
980 discovery_callbacks = g_slist_append(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
981 discovery_callbacks, ar);
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
982 return ar;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
983 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
984
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
985 /* If we haven't had a successful UPnP discovery, check if 5 minutes has
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
986 * elapsed since the last try, try again */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
987 if(control_info.status == PURPLE_UPNP_STATUS_UNDISCOVERED ||
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
988 (control_info.status == PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
989 && (time(NULL) - control_info.lookup_time) > 300)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
990 purple_upnp_discover(do_port_mapping_cb, ar);
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
991 return ar;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
992 } else if(control_info.status == PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
993 if (cb) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
994 /* Asynchronously trigger a failed response */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
995 ar->tima = purple_timeout_add(10, fire_port_mapping_failure_cb, ar);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
996 } else {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
997 /* No need to do anything if nobody expects a response*/
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
998 g_free(ar);
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
999 ar = NULL;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1000 }
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
1001 return ar;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1002 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1003
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1004 do_port_mapping_cb(TRUE, ar);
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
1005 return ar;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
1006 }
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: 15884
diff changeset
1007
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: 15884
diff changeset
1008 static 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: 15884
diff changeset
1009 purple_upnp_network_config_changed_cb(void *data)
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: 15884
diff changeset
1010 {
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: 15884
diff changeset
1011 /* Reset the control_info to default values */
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: 15884
diff changeset
1012 control_info.status = PURPLE_UPNP_STATUS_UNDISCOVERED;
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: 15884
diff changeset
1013 g_free(control_info.control_url);
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: 15884
diff changeset
1014 control_info.control_url = 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: 15884
diff changeset
1015 control_info.service_type[0] = '\0';
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: 15884
diff changeset
1016 control_info.publicip[0] = '\0';
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: 15884
diff changeset
1017 control_info.internalip[0] = '\0';
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: 15884
diff changeset
1018 control_info.lookup_time = 0;
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: 15884
diff changeset
1019 }
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: 15884
diff changeset
1020
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: 15884
diff changeset
1021 static 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: 15884
diff changeset
1022 purple_upnp_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: 15884
diff changeset
1023 {
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: 15884
diff changeset
1024 static int handle;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 24672
diff changeset
1025
24011
0cff24bf7dba Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents: 22104
diff changeset
1026 return &handle;
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: 15884
diff changeset
1027 }
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: 15884
diff changeset
1028
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: 15884
diff changeset
1029 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: 15884
diff changeset
1030 purple_upnp_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: 15884
diff changeset
1031 {
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: 15884
diff changeset
1032 purple_signal_connect(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: 15884
diff changeset
1033 purple_upnp_get_handle(), PURPLE_CALLBACK(purple_upnp_network_config_changed_cb),
24011
0cff24bf7dba Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents: 22104
diff changeset
1034 NULL);
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: 15884
diff changeset
1035 }

mercurial