libpurple/upnp.c

Fri, 11 Mar 2022 03:29:48 -0600

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Fri, 11 Mar 2022 03:29:48 -0600
changeset 41281
aa8fc0497d6d
parent 41214
b0b7d118475f
child 41672
7d3c68e0a8ee
permissions
-rw-r--r--

Add an echo user to the demo protocol

Testing Done:
Opened a conversation and typed a few message.

Reviewed at https://reviews.imfreedom.org/r/1328/

20330
650a7af9c238 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents: 19859
diff changeset
1 /* purple
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
2 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
3 * 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
4 * 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
5 * source distribution.
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
6 *
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
7 * 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
8 * 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
9 * the Free Software Foundation; either version 2 of the License, or
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
10 * (at your option) any later version.
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 distributed in the hope that it will be useful,
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
15 * GNU General Public License for more details.
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 * 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
18 * 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
19 * 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
20 */
37489
cbf9ccc715ab Move everything in libpurple that was using the network-changed signal to use the gio one
Gary Kramlich <grim@reaperworld.com>
parents: 36257
diff changeset
21 #include <gio/gio.h>
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
22 #include <libsoup/soup.h>
37489
cbf9ccc715ab Move everything in libpurple that was using the network-changed signal to use the gio one
Gary Kramlich <grim@reaperworld.com>
parents: 36257
diff changeset
23
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
24 #include "internal.h"
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 "upnp.h"
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
27
40818
3891ef6e3b56 Fix building on glib < 2.58.0 as we have a minimum of 2.52.0
Gary Kramlich <grim@reaperworld.com>
parents: 40645
diff changeset
28 #include "glibcompat.h"
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41211
diff changeset
29 #include "soupcompat.h"
40818
3891ef6e3b56 Fix building on glib < 2.58.0 as we have a minimum of 2.52.0
Gary Kramlich <grim@reaperworld.com>
parents: 40645
diff changeset
30
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
31 #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
32 #include "eventloop.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
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"
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
35 #include "purple-gio.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
36 #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
37 #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
38 #include "xmlnode.h"
11195
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 /***************************************************************
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
41 ** General Defines *
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
42 ****************************************************************/
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
43 #define HTTP_OK "200 OK"
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
44 #define DEFAULT_HTTP_PORT 80
40412
c0905847d779 Use g_timeout_add_seconds some more.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40125
diff changeset
45 #define DISCOVERY_TIMEOUT 1
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
46 /* 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
47 #define MAX_UPNP_DOWNLOAD (128 * 1024)
11195
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 /***************************************************************
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
50 ** Discovery/Description Defines *
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
51 ****************************************************************/
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
52 #define NUM_UDP_ATTEMPTS 2
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
53
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
54 /* Address and port of an SSDP request used for discovery */
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
55 #define HTTPMU_HOST_ADDRESS "239.255.255.250"
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
56 #define HTTPMU_HOST_PORT 1900
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
57
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
58 #define SEARCH_REQUEST_DEVICE "urn:schemas-upnp-org:service:%s"
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
59
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
60 #define SEARCH_REQUEST_STRING \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
61 "M-SEARCH * HTTP/1.1\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
62 "MX: 2\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
63 "HOST: 239.255.255.250:1900\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
64 "MAN: \"ssdp:discover\"\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
65 "ST: urn:schemas-upnp-org:service:%s\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
66 "\r\n"
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
67
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
68 #define WAN_IP_CONN_SERVICE "WANIPConnection:1"
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
69 #define WAN_PPP_CONN_SERVICE "WANPPPConnection:1"
11195
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 /******************************************************************
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
72 ** Action Defines *
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
73 *******************************************************************/
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
74 #define SOAP_ACTION \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
75 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
76 "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
77 "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
78 "<s:Body>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
79 "<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
80 "%s" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
81 "</u:%s>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
82 "</s:Body>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
83 "</s:Envelope>"
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
84
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
85 #define PORT_MAPPING_LEASE_TIME "0"
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
86 #define PORT_MAPPING_DESCRIPTION "PURPLE_UPNP_PORT_FORWARD"
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
87
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
88 #define ADD_PORT_MAPPING_PARAMS \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
89 "<NewRemoteHost></NewRemoteHost>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
90 "<NewExternalPort>%i</NewExternalPort>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
91 "<NewProtocol>%s</NewProtocol>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
92 "<NewInternalPort>%i</NewInternalPort>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
93 "<NewInternalClient>%s</NewInternalClient>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
94 "<NewEnabled>1</NewEnabled>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
95 "<NewPortMappingDescription>" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
96 PORT_MAPPING_DESCRIPTION \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
97 "</NewPortMappingDescription>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
98 "<NewLeaseDuration>" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
99 PORT_MAPPING_LEASE_TIME \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
100 "</NewLeaseDuration>\r\n"
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
101
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
102 #define DELETE_PORT_MAPPING_PARAMS \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
103 "<NewRemoteHost></NewRemoteHost>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
104 "<NewExternalPort>%i</NewExternalPort>\r\n" \
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
105 "<NewProtocol>%s</NewProtocol>\r\n"
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
106
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
107 typedef enum {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
108 PURPLE_UPNP_STATUS_UNDISCOVERED = -1,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
109 PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
110 PURPLE_UPNP_STATUS_DISCOVERING,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
111 PURPLE_UPNP_STATUS_DISCOVERED
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
112 } PurpleUPnPStatus;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
113
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
114 typedef struct {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
115 PurpleUPnPStatus status;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
116 gchar* control_url;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
117 gchar service_type[20];
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
118 char publicip[16];
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
119 char internalip[16];
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
120 gint64 lookup_time;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
121 } PurpleUPnPControlInfo;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
122
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
123 typedef struct {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
124 guint inpa; /* purple_input_add handle */
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
125 guint tima; /* g_timeout_add handle */
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
126 GSocket *socket;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
127 GSocketAddress *server;
27000
668af87393da Use matching buffer lengths to avoid confusion.
Daniel Atallah <datallah@pidgin.im>
parents: 25911
diff changeset
128 gchar service_type[20];
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
129 int retry_count;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
130 gchar *full_url;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
131 } UPnPDiscoveryData;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
132
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
133 struct _PurpleUPnPMappingAddRemove
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
134 {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
135 unsigned short portmap;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
136 gchar protocol[4];
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
137 gboolean add;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
138 PurpleUPnPCallback cb;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
139 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
140 gboolean success;
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
141 guint tima; /* g_timeout_add handle */
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
142 SoupMessage *msg;
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
143 };
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
144
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
145 static PurpleUPnPControlInfo control_info = {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
146 PURPLE_UPNP_STATUS_UNDISCOVERED,
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
147 NULL, "\0", "\0", "\0", 0};
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
148
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
149 static SoupSession *session = NULL;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
150 static GSList *discovery_callbacks = NULL;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
151
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
152 static void purple_upnp_discover_send_broadcast(UPnPDiscoveryData *dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
153 static void lookup_public_ip(void);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
154 static void lookup_internal_ip(void);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
155
31273
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
156 static gboolean
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
157 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
158 {
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
159 PurpleUPnPMappingAddRemove *ar = data;
31273
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
160 if (ar) {
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
161 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
162 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
163 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
164 }
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 return FALSE;
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
167 }
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
168
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
169 static void
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
170 fire_discovery_callbacks(gboolean success)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
171 {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
172 while(discovery_callbacks) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
173 gpointer data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
174 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
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 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
177 discovery_callbacks = g_slist_delete_link(discovery_callbacks, discovery_callbacks);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
178 cb(success, data);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
179 }
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
180 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
181
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
182 static gboolean
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
183 purple_upnp_compare_device(const PurpleXmlNode* device, const gchar* deviceType)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
184 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
185 PurpleXmlNode* deviceTypeNode = purple_xmlnode_get_child(device, "deviceType");
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
186 char *tmp;
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
187 gboolean ret;
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
188
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
189 if(deviceTypeNode == NULL) {
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
190 return FALSE;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
191 }
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
192
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
193 tmp = purple_xmlnode_get_data(deviceTypeNode);
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
194 ret = !g_ascii_strcasecmp(tmp, deviceType);
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
195 g_free(tmp);
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
196
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
197 return ret;
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
198 }
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
199
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
200 static gboolean
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
201 purple_upnp_compare_service(const PurpleXmlNode* service, const gchar* serviceType)
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
202 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
203 PurpleXmlNode* serviceTypeNode;
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
204 char *tmp;
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
205 gboolean ret;
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
206
13793
f5562178d141 [gaim-migrate @ 16203]
Nathan Walp <nwalp@pidgin.im>
parents: 13622
diff changeset
207 if(service == NULL) {
f5562178d141 [gaim-migrate @ 16203]
Nathan Walp <nwalp@pidgin.im>
parents: 13622
diff changeset
208 return FALSE;
f5562178d141 [gaim-migrate @ 16203]
Nathan Walp <nwalp@pidgin.im>
parents: 13622
diff changeset
209 }
f5562178d141 [gaim-migrate @ 16203]
Nathan Walp <nwalp@pidgin.im>
parents: 13622
diff changeset
210
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
211 serviceTypeNode = purple_xmlnode_get_child(service, "serviceType");
13793
f5562178d141 [gaim-migrate @ 16203]
Nathan Walp <nwalp@pidgin.im>
parents: 13622
diff changeset
212
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
213 if(serviceTypeNode == NULL) {
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
214 return FALSE;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
215 }
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
216
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
217 tmp = purple_xmlnode_get_data(serviceTypeNode);
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
218 ret = !g_ascii_strcasecmp(tmp, serviceType);
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
219 g_free(tmp);
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
220
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
221 return ret;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
222 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
223
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
224 static gchar*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
225 purple_upnp_parse_description_response(const gchar* httpResponse, gsize len,
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
226 const gchar* httpURL, const gchar* serviceType)
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
227 {
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
228 gchar *baseURL, *controlURL, *service;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
229 PurpleXmlNode *xmlRootNode, *serviceTypeNode, *controlURLNode, *baseURLNode;
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
230 char *tmp;
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
231
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
232 /* create the xml root node */
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
233 if ((xmlRootNode = purple_xmlnode_from_str(httpResponse, len)) == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
234 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
235 "parse_description_response(): Could not parse xml root node\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
236 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
237 }
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
238
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
239 /* 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
240 baseURL = NULL;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
241 if((baseURLNode = purple_xmlnode_get_child(xmlRootNode, "URLBase")) != NULL) {
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
242 baseURL = purple_xmlnode_get_data(baseURLNode);
33542
d79e18b1b043 Fix UPNP mapping on some weird routers. Fixes #15373.
Ferdinand Stehle <unknown>
parents: 31949
diff changeset
243 }
d79e18b1b043 Fix UPNP mapping on some weird routers. Fixes #15373.
Ferdinand Stehle <unknown>
parents: 31949
diff changeset
244 /* fixes upnp-descriptions with empty urlbase-element */
d79e18b1b043 Fix UPNP mapping on some weird routers. Fixes #15373.
Ferdinand Stehle <unknown>
parents: 31949
diff changeset
245 if(baseURL == NULL){
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
246 baseURL = g_strdup(httpURL);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
247 }
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 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
250
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
251 /* get urn:schemas-upnp-org:device:InternetGatewayDevice:1 and its devicelist */
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
252 serviceTypeNode = purple_xmlnode_get_child(xmlRootNode, "device");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
253 while(!purple_upnp_compare_device(serviceTypeNode,
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
254 "urn:schemas-upnp-org:device:InternetGatewayDevice:1") &&
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
255 serviceTypeNode != NULL) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
256 serviceTypeNode = purple_xmlnode_get_next_twin(serviceTypeNode);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
257 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
258 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
259 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
260 "parse_description_response(): could not get serviceTypeNode 1\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
261 g_free(baseURL);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
262 purple_xmlnode_free(xmlRootNode);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
263 return NULL;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
264 }
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
265 serviceTypeNode = purple_xmlnode_get_child(serviceTypeNode, "deviceList");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
266 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
267 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
268 "parse_description_response(): could not get serviceTypeNode 2\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
269 g_free(baseURL);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
270 purple_xmlnode_free(xmlRootNode);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
271 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
272 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
273
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
274 /* get urn:schemas-upnp-org:device:WANDevice:1 and its devicelist */
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
275 serviceTypeNode = purple_xmlnode_get_child(serviceTypeNode, "device");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
276 while(!purple_upnp_compare_device(serviceTypeNode,
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
277 "urn:schemas-upnp-org:device:WANDevice:1") &&
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
278 serviceTypeNode != NULL) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
279 serviceTypeNode = purple_xmlnode_get_next_twin(serviceTypeNode);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
280 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
281 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
282 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
283 "parse_description_response(): could not get serviceTypeNode 3\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
284 g_free(baseURL);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
285 purple_xmlnode_free(xmlRootNode);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
286 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
287 }
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
288 serviceTypeNode = purple_xmlnode_get_child(serviceTypeNode, "deviceList");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
289 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
290 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
291 "parse_description_response(): could not get serviceTypeNode 4\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
292 g_free(baseURL);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
293 purple_xmlnode_free(xmlRootNode);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
294 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
295 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
296
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
297 /* get urn:schemas-upnp-org:device:WANConnectionDevice:1 and its servicelist */
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
298 serviceTypeNode = purple_xmlnode_get_child(serviceTypeNode, "device");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
299 while(serviceTypeNode && !purple_upnp_compare_device(serviceTypeNode,
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
300 "urn:schemas-upnp-org:device:WANConnectionDevice:1")) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
301 serviceTypeNode = purple_xmlnode_get_next_twin(serviceTypeNode);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
302 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
303 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
304 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
305 "parse_description_response(): could not get serviceTypeNode 5\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
306 g_free(baseURL);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
307 purple_xmlnode_free(xmlRootNode);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
308 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
309 }
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
310 serviceTypeNode = purple_xmlnode_get_child(serviceTypeNode, "serviceList");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
311 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
312 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
313 "parse_description_response(): could not get serviceTypeNode 6\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
314 g_free(baseURL);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
315 purple_xmlnode_free(xmlRootNode);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
316 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
317 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
318
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
319 /* get the serviceType variable passed to this function */
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
320 service = g_strdup_printf(SEARCH_REQUEST_DEVICE, serviceType);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
321 serviceTypeNode = purple_xmlnode_get_child(serviceTypeNode, "service");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
322 while(!purple_upnp_compare_service(serviceTypeNode, service) &&
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
323 serviceTypeNode != NULL) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
324 serviceTypeNode = purple_xmlnode_get_next_twin(serviceTypeNode);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
325 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
326
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
327 g_free(service);
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
328 if(serviceTypeNode == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
329 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
330 "parse_description_response(): could not get serviceTypeNode 7\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
331 g_free(baseURL);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
332 purple_xmlnode_free(xmlRootNode);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
333 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
334 }
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
335
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
336 /* get the controlURL of the service */
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
337 if((controlURLNode = purple_xmlnode_get_child(serviceTypeNode,
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
338 "controlURL")) == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
339 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
340 "parse_description_response(): Could not find controlURL\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
341 g_free(baseURL);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
342 purple_xmlnode_free(xmlRootNode);
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
343 return NULL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
344 }
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
345
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
346 tmp = purple_xmlnode_get_data(controlURLNode);
40125
a7acc7b00d79 Replace purple_str_has_{prefix,suffix} by g_str_has_{prefix,suffix}.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
347 if (baseURL && !g_str_has_prefix(tmp, "http://") &&
a7acc7b00d79 Replace purple_str_has_{prefix,suffix} by g_str_has_{prefix,suffix}.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
348 !g_str_has_prefix(tmp, "HTTP://")) {
15348
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
349 /* Handle absolute paths in a relative URL. This probably
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
350 * belongs in util.c. */
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
351 if (tmp[0] == '/') {
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
352 size_t length;
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
353 const char *path, *start = strstr(baseURL, "://");
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
354 start = start ? start + 3 : baseURL;
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
355 path = strchr(start, '/');
36256
a437550a9308 Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33770
diff changeset
356 length = path ? (gsize)(path - baseURL) : strlen(baseURL);
15683
9421e229cb97 Minor warning fix
Mark Doliner <markdoliner@pidgin.im>
parents: 15502
diff changeset
357 controlURL = g_strdup_printf("%.*s%s", (int)length, baseURL, tmp);
15348
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
358 } else {
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
359 controlURL = g_strdup_printf("%s%s", baseURL, tmp);
5911c7af0870 [gaim-migrate @ 18076]
Ethan Blanton <elb@pidgin.im>
parents: 15290
diff changeset
360 }
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
361 g_free(tmp);
40125
a7acc7b00d79 Replace purple_str_has_{prefix,suffix} by g_str_has_{prefix,suffix}.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
362 } else {
13622
9311eed487c7 [gaim-migrate @ 16007]
Richard Laager <rlaager@pidgin.im>
parents: 13201
diff changeset
363 controlURL = tmp;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
364 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
365 g_free(baseURL);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34304
diff changeset
366 purple_xmlnode_free(xmlRootNode);
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
367
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
368 return controlURL;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
369 }
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
370
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
371 static void
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
372 upnp_parse_description_cb(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg,
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
373 gpointer _dd)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
374 {
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
375 UPnPDiscoveryData *dd = _dd;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
376 gchar *control_url = NULL;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
377
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41211
diff changeset
378 if (msg && SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(msg))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
379 control_url = purple_upnp_parse_description_response(
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
380 msg->response_body->data, msg->response_body->length,
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
381 dd->full_url, dd->service_type);
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 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
383
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
384 g_free(dd->full_url);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
385
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
386 if(control_url == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
387 purple_debug_error("upnp",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
388 "purple_upnp_parse_description(): control URL is NULL\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
389 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
390
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
391 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
392 : PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER;
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
393 control_info.lookup_time = g_get_monotonic_time();
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
394 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
395 g_strlcpy(control_info.service_type, dd->service_type,
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
396 sizeof(control_info.service_type));
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
397
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
398 fire_discovery_callbacks(control_url != NULL);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
399
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
400 /* Look up the public and internal IPs */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
401 if(control_url != NULL) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
402 lookup_public_ip();
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
403 lookup_internal_ip();
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
404 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
405
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
406 if (dd->inpa > 0) {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
407 g_source_remove(dd->inpa);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
408 dd->inpa = 0;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
409 }
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
410 if (dd->tima > 0) {
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
411 g_source_remove(dd->tima);
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
412 dd->tima = 0;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
413 }
30514
b098c4f6eb80 Remove some timeout/input handlers for upnp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 30384
diff changeset
414
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
415 g_clear_object(&dd->socket);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
416 g_clear_object(&dd->server);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
417 g_free(dd);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
418 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
419
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
420 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
421 purple_upnp_parse_description(const gchar* descriptionURL, UPnPDiscoveryData *dd)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
422 {
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
423 SoupMessage *msg;
41211
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
424 gchar *host;
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
425 gint port;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
426
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
427 /* Remove the timeout because everything it is waiting for has
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
428 * successfully completed */
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
429 g_source_remove(dd->tima);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
430 dd->tima = 0;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
431
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
432 /* 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
433 * 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
434 */
41211
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
435 if (!g_uri_split_network(descriptionURL, G_URI_FLAGS_NONE, NULL, &host,
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
436 &port, NULL))
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
437 {
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
438 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
439 return;
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
440 }
41211
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
441 dd->full_url = g_strdup_printf("http://%s:%d", host, port);
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
442 g_free(host);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
443
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
444 msg = soup_message_new("GET", descriptionURL);
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
445 // purple_http_request_set_max_len(msg, MAX_UPNP_DOWNLOAD);
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
446 soup_session_queue_message(session, msg, upnp_parse_description_cb, dd);
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
447 }
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
448
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
449 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
450 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
451 UPnPDiscoveryData *dd)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
452 {
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
453 gchar* startDescURL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
454 gchar* endDescURL;
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
455 gchar* descURL;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
456
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
457 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
458 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
459 "parse_discover_response(): Failed In HTTP_OK\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
460 return;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
461 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
462
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
463 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
464 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
465 "parse_discover_response(): Failed In finding http://\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
466 return;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
467 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
468
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
469 endDescURL = g_strstr_len(startDescURL, buf_len - (startDescURL - buf),
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
470 "\r");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
471 if(endDescURL == NULL) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
472 endDescURL = g_strstr_len(startDescURL,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
473 buf_len - (startDescURL - buf), "\n");
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
474 if(endDescURL == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
475 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
476 "parse_discover_response(): Failed In endDescURL\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
477 return;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
478 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
479 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
480
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
481 /* XXX: I'm not sure how this could ever happen */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
482 if(endDescURL == startDescURL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
483 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
484 "parse_discover_response(): endDescURL == startDescURL\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
485 return;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
486 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
487
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
488 descURL = g_strndup(startDescURL, endDescURL - startDescURL);
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
489
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
490 purple_upnp_parse_description(descURL, dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
491
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
492 g_free(descURL);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
493
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
494 }
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
495
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
496 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
497 purple_upnp_discover_timeout(gpointer data)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
498 {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
499 UPnPDiscoveryData* dd = data;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
500
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
501 if (dd->inpa > 0) {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
502 g_source_remove(dd->inpa);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
503 dd->inpa = 0;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
504 }
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
505 if (dd->tima > 0) {
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
506 g_source_remove(dd->tima);
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
507 dd->tima = 0;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
508 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
509
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
510 if (dd->retry_count < NUM_UDP_ATTEMPTS) {
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
511 /* 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
512 dd->retry_count++;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
513 purple_upnp_discover_send_broadcast(dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
514 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
515 control_info.status = PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER;
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
516 control_info.lookup_time = g_get_monotonic_time();
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
517 control_info.service_type[0] = '\0';
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
518 g_free(control_info.control_url);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
519 control_info.control_url = NULL;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
520
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
521 fire_discovery_callbacks(FALSE);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
522
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
523 g_clear_object(&dd->socket);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
524 g_clear_object(&dd->server);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
525 g_free(dd);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
526 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
527
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
528 return FALSE;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
529 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
530
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
531 static void
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
532 purple_upnp_discover_udp_read(GSocket *socket, GIOCondition condition,
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
533 gpointer data)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
534 {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
535 UPnPDiscoveryData *dd = data;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
536 gchar buf[65536];
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
537 gssize len;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
538
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
539 len = g_socket_receive(dd->socket, buf, sizeof(buf) - 1, NULL, NULL);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
540 if (len >= 0) {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
541 buf[len] = '\0';
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
542 } else {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
543 /* We'll either get called again, or time out */
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
544 return;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
545 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
546
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
547 g_source_remove(dd->inpa);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
548 dd->inpa = 0;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
549
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
550 /* 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
551 purple_upnp_parse_discover_response(buf, len, dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
552
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
553 /* We'll either time out or continue successfully */
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
554 }
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
555
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
556 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
557 purple_upnp_discover_send_broadcast(UPnPDiscoveryData *dd)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
558 {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
559 gchar *sendMessage = NULL;
25571
4cb4b6a61da6 Fix a null ptr deref/double free. Fixes #8336.
Daniel Atallah <datallah@pidgin.im>
parents: 24672
diff changeset
560 size_t totalSize;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
561 gboolean sentSuccess;
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
562 GError *error = NULL;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
563
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
564 /* because we are sending over UDP, if there is a failure
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
565 we should retry the send NUM_UDP_ATTEMPTS times. Also,
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
566 try different requests for WANIPConnection and WANPPPConnection*/
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
567 for(; dd->retry_count < NUM_UDP_ATTEMPTS; dd->retry_count++) {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13097
diff changeset
568 sentSuccess = FALSE;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
569
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
570 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
571 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
572 } else {
33746
ad7e7fb98db3 Fix a crash when receiving UPnP responses with abnormally long values.
Mark Doliner <mark@kingant.net>
parents: 33560
diff changeset
573 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
574 }
11213
837e1970689d [gaim-migrate @ 13344]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11204
diff changeset
575
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
576 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
577
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
578 totalSize = strlen(sendMessage);
11213
837e1970689d [gaim-migrate @ 13344]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11204
diff changeset
579
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
580 do {
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
581 gssize sent;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
582 g_clear_error(&error);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
583 sent = g_socket_send_to(dd->socket, dd->server, sendMessage,
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
584 totalSize, NULL, &error);
36256
a437550a9308 Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33770
diff changeset
585 if (sent >= 0 && (gsize)sent == totalSize) {
12909
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 }
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
589 } while (error != NULL && error->code == G_IO_ERROR_WOULD_BLOCK);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
590
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
591 g_clear_error(&error);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
592 g_free(sendMessage);
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
593
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
594 if(sentSuccess) {
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
595 GSource *source;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
596 source = g_socket_create_source(dd->socket, G_IO_IN, NULL);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
597 g_source_set_callback(source,
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
598 G_SOURCE_FUNC(purple_upnp_discover_udp_read),
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
599 dd, NULL);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
600 dd->inpa = g_source_attach(source, NULL);
40645
2f389a7d3885 GSource is not a GObject and has its own ref/unref functions
Gary Kramlich <grim@reaperworld.com>
parents: 40644
diff changeset
601 g_source_unref(source);
40412
c0905847d779 Use g_timeout_add_seconds some more.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40125
diff changeset
602 dd->tima = g_timeout_add_seconds(DISCOVERY_TIMEOUT,
c0905847d779 Use g_timeout_add_seconds some more.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40125
diff changeset
603 purple_upnp_discover_timeout, dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
604 return;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
605 }
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
606 }
11213
837e1970689d [gaim-migrate @ 13344]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11204
diff changeset
607
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
608 /* 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
609 * doesn't get called before the original function returns */
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
610 dd->tima = g_timeout_add(10, purple_upnp_discover_timeout, dd);
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
611 }
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
612
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
613 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
614 purple_upnp_discover(PurpleUPnPCallback cb, gpointer cb_data)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
615 {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
616 /* Socket Setup Variables */
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
617 GSocket *socket;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
618 GError *error = NULL;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
619
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
620 /* UDP RECEIVE VARIABLES */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
621 UPnPDiscoveryData *dd;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
622
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
623 if (control_info.status == PURPLE_UPNP_STATUS_DISCOVERING) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
624 if (cb) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
625 discovery_callbacks = g_slist_append(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
626 discovery_callbacks, cb);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
627 discovery_callbacks = g_slist_append(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
628 discovery_callbacks, cb_data);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
629 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
630 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
631 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
632
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
633 dd = g_new0(UPnPDiscoveryData, 1);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
634 if (cb) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
635 discovery_callbacks = g_slist_append(discovery_callbacks, cb);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
636 discovery_callbacks = g_slist_append(discovery_callbacks,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
637 cb_data);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
638 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
639
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
640 /* Set up the sockets */
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
641 dd->socket = socket =
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
642 g_socket_new(G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_DATAGRAM,
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
643 G_SOCKET_PROTOCOL_DEFAULT, &error);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
644 if (socket == NULL) {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
645 purple_debug_error(
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
646 "upnp", "purple_upnp_discover(): Failed in sock creation: %s",
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
647 error->message);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
648 g_error_free(error);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
649 /* Short circuit the retry attempts */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
650 dd->retry_count = NUM_UDP_ATTEMPTS;
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
651 dd->tima = g_timeout_add(10, purple_upnp_discover_timeout, dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
652 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
653 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
654
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
655 dd->server = g_inet_socket_address_new_from_string(HTTPMU_HOST_ADDRESS,
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
656 HTTPMU_HOST_PORT);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
657
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
658 control_info.status = PURPLE_UPNP_STATUS_DISCOVERING;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
659
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
660 purple_upnp_discover_send_broadcast(dd);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
661 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
662
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
663 static SoupMessage *
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
664 purple_upnp_generate_action_message_and_send(const gchar *actionName,
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
665 const gchar *actionParams,
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
666 SoupSessionCallback cb,
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
667 gpointer cb_data)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
668 {
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
669 SoupMessage *msg;
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
670 gchar *action;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
671 gchar* soapMessage;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
672
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
673 /* set the soap message */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
674 soapMessage = g_strdup_printf(SOAP_ACTION, actionName,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
675 control_info.service_type, actionParams, actionName);
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
676
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
677 msg = soup_message_new("POST", control_info.control_url);
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
678 // purple_http_request_set_max_len(msg, MAX_UPNP_DOWNLOAD);
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
679 action = g_strdup_printf("\"urn:schemas-upnp-org:service:%s#%s\"",
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
680 control_info.service_type, actionName);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41213
diff changeset
681 soup_message_headers_replace(soup_message_get_request_headers(msg),
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41213
diff changeset
682 "SOAPAction", action);
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
683 g_free(action);
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
684 soup_message_set_request(msg, "text/xml; charset=utf-8", SOUP_MEMORY_TAKE,
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
685 soapMessage, strlen(soapMessage));
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
686 soup_session_queue_message(session, msg, cb, cb_data);
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
687
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
688 return msg;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
689 }
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
690
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
691 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
692 purple_upnp_get_public_ip()
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
693 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
694 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
695 && *control_info.publicip)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
696 return control_info.publicip;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
697
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
698 /* Trigger another UPnP discovery if 5 minutes have elapsed since the
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
699 * last one, and it wasn't successful */
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
700 if (control_info.status < PURPLE_UPNP_STATUS_DISCOVERING &&
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
701 (g_get_monotonic_time() - control_info.lookup_time) >
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
702 300 * G_USEC_PER_SEC) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
703 purple_upnp_discover(NULL, NULL);
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
704 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
705
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
706 return NULL;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
707 }
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 static void
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
710 looked_up_public_ip_cb(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg,
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
711 gpointer user_data)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
712 {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
713 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
714 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
715 size_t got_len;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
716
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41211
diff changeset
717 if (!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(msg))) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
718 return;
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
719 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
720
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
721 /* extract the ip, or see if there is an error */
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
722 got_data = msg->response_body->data;
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
723 got_len = msg->response_body->length;
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 if((temp = g_strstr_len(got_data, got_len,
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
725 "<NewExternalIPAddress")) == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
726 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
727 "looked_up_public_ip_cb(): Failed Finding <NewExternalIPAddress\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
728 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
729 }
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
730 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
731 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
732 "looked_up_public_ip_cb(): Failed In Finding >\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
733 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
734 }
34239
59b2fc93f2c4 HTTP: migrate purple_util_fetch_url_request to new API for upnp
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34219
diff changeset
735 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
736 purple_debug_error("upnp",
14899
c65f0b4fb351 [gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents: 14552
diff changeset
737 "looked_up_public_ip_cb(): Failed In Finding <\n");
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
738 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
739 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
740 *temp2 = '\0';
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
741
33746
ad7e7fb98db3 Fix a crash when receiving UPnP responses with abnormally long values.
Mark Doliner <mark@kingant.net>
parents: 33560
diff changeset
742 g_strlcpy(control_info.publicip, temp + 1,
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
743 sizeof(control_info.publicip));
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
744
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
745 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
746 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
747
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
748 static void
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
749 lookup_public_ip()
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
750 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
751 purple_upnp_generate_action_message_and_send("GetExternalIPAddress", "",
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
752 looked_up_public_ip_cb, NULL);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
753 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
754
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
755 /* TODO: This could be exported */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
756 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
757 purple_upnp_get_internal_ip(void)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
758 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
759 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
760 && *control_info.internalip)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
761 return control_info.internalip;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
762
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
763 /* Trigger another UPnP discovery if 5 minutes have elapsed since the
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
764 * last one, and it wasn't successful */
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
765 if (control_info.status < PURPLE_UPNP_STATUS_DISCOVERING &&
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
766 (g_get_monotonic_time() - control_info.lookup_time) >
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
767 300 * G_USEC_PER_SEC) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
768 purple_upnp_discover(NULL, NULL);
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
769 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
770
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
771 return NULL;
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
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
774 static void
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
775 looked_up_internal_ip_cb(GObject *source, GAsyncResult *result,
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
776 G_GNUC_UNUSED gpointer user_data)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
777 {
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
778 GSocketConnection *conn;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
779 GSocketAddress *addr;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
780 GInetSocketAddress *inetsockaddr;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
781 GError *error = NULL;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
782
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
783 conn = g_socket_client_connect_to_host_finish(G_SOCKET_CLIENT(source),
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
784 result, &error);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
785 if (conn == NULL) {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
786 purple_debug_error("upnp", "Unable to look up local IP: %s",
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
787 error->message);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
788 g_clear_error(&error);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
789 return;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
790 }
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
791
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
792 g_strlcpy(control_info.internalip, "0.0.0.0",
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
793 sizeof(control_info.internalip));
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
794
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
795 addr = g_socket_connection_get_local_address(conn, &error);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
796 if ((inetsockaddr = G_INET_SOCKET_ADDRESS(addr)) != NULL) {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
797 GInetAddress *inetaddr =
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
798 g_inet_socket_address_get_address(inetsockaddr);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
799 if (g_inet_address_get_family(inetaddr) == G_SOCKET_FAMILY_IPV4 &&
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
800 !g_inet_address_get_is_loopback(inetaddr))
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
801 {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
802 gchar *ip = g_inet_address_to_string(inetaddr);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
803 g_strlcpy(control_info.internalip, ip,
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
804 sizeof(control_info.internalip));
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
805 g_free(ip);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
806 }
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
807 } else {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
808 purple_debug_error(
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
809 "upnp", "Unable to get local address of connection: %s",
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
810 error ? error->message : "unknown socket address type");
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
811 g_clear_error(&error);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
812 }
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
813 g_object_unref(addr);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
814
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
815 purple_debug_info("upnp", "Local IP: %s", control_info.internalip);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
816 g_object_unref(conn);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
817 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
818
14416
c95ffd983a39 [gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
819 static void
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
820 lookup_internal_ip()
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
821 {
41211
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
822 gchar *host;
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
823 gint port;
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
824 GSocketClient *client;
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
825 GError *error = NULL;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
826
41211
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
827 if (!g_uri_split_network(control_info.control_url, G_URI_FLAGS_NONE, NULL,
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
828 &host, &port, &error))
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
829 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
830 purple_debug_error("upnp",
41211
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
831 "lookup_internal_ip(): Failed In Parse URL: %s",
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
832 error->message);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
833 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
834 }
34219
eee308def583 HTTP: get rid of purple_url_parse
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 33774
diff changeset
835
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
836 client = purple_gio_socket_client_new(NULL, &error);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
837 if (client == NULL) {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
838 purple_debug_error("upnp", "Get Local IP Connect to %s:%d Failed: %s",
41211
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
839 host, port, error->message);
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
840 g_clear_error(&error);
41211
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
841 g_free(host);
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
842 return;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
843 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
844
41211
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
845 purple_debug_info("upnp", "Attempting connection to %s:%u\n", host, port);
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
846 g_socket_client_connect_to_host_async(client, host, port, NULL,
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
847 looked_up_internal_ip_cb, NULL);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
848
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
849 g_object_unref(client);
41211
2e804c9c0919 Switch SoupURI to GUri
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40818
diff changeset
850 g_free(host);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
851 }
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 static void
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
854 done_port_mapping_cb(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg,
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
855 gpointer user_data)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
856 {
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
857 PurpleUPnPMappingAddRemove *ar = user_data;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
858
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
859 gboolean success = TRUE;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
860
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
861 /* determine if port mapping was a success */
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41211
diff changeset
862 if (!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(msg))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
863 purple_debug_error("upnp",
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
864 "purple_upnp_set_port_mapping(): Failed HTTP_OK: %s",
41213
0b5c475770e2 Use accessor for SoupMessage->reason_phrase
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
865 soup_message_get_reason_phrase(msg));
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
866 success = FALSE;
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
867 } else {
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
868 purple_debug_info("upnp",
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
869 "Successfully completed port mapping operation");
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
870 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
871
31273
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
872 ar->success = success;
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
873 ar->tima = g_timeout_add(0, fire_ar_cb_async_and_free, ar);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
874 }
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 static void
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
877 do_port_mapping_cb(gboolean has_control_mapping, gpointer data)
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
878 {
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
879 PurpleUPnPMappingAddRemove *ar = data;
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
880
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
881 if (has_control_mapping) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
882 gchar action_name[25];
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
883 gchar *action_params;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
884 if(ar->add) {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
885 const gchar *internal_ip;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
886 /* get the internal IP */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
887 if(!(internal_ip = purple_upnp_get_internal_ip())) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
888 purple_debug_error("upnp",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
889 "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
890 ar->success = FALSE;
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
891 ar->tima = g_timeout_add(0, fire_ar_cb_async_and_free, ar);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
892 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
893 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
894 strncpy(action_name, "AddPortMapping",
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
895 sizeof(action_name));
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
896 action_params = g_strdup_printf(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
897 ADD_PORT_MAPPING_PARAMS,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
898 ar->portmap, ar->protocol, ar->portmap,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
899 internal_ip);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
900 } else {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
901 strncpy(action_name, "DeletePortMapping", sizeof(action_name));
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
902 action_params = g_strdup_printf(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
903 DELETE_PORT_MAPPING_PARAMS,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
904 ar->portmap, ar->protocol);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
905 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
906
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
907 ar->msg = purple_upnp_generate_action_message_and_send(
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
908 action_name, action_params, done_port_mapping_cb, ar);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
910 g_free(action_params);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
911 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
912 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
913
31273
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
914 ar->success = FALSE;
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
915 ar->tima = g_timeout_add(0, fire_ar_cb_async_and_free, ar);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
916 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
917
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
918 static gboolean
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
919 fire_port_mapping_failure_cb(gpointer data)
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
920 {
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
921 PurpleUPnPMappingAddRemove *ar = data;
31273
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
922
c221db041ca1 upnp: Asynch-ronize the callbacks from UPnP to calling code. Refs #12387
Paul Aurich <darkrain42@pidgin.im>
parents: 31190
diff changeset
923 ar->tima = 0;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
924 do_port_mapping_cb(FALSE, data);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
925 return FALSE;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
926 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
927
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
928 void purple_upnp_cancel_port_mapping(PurpleUPnPMappingAddRemove *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
929 {
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
930 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
931
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
932 /* 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
933 * 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
934 * 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
935 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
936 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
937 {
30384
4b8995626b20 Fix a read-after-free from valgrind:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30383
diff changeset
938 GSList *next = l->next;
4b8995626b20 Fix a read-after-free from valgrind:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30383
diff changeset
939
4b8995626b20 Fix a read-after-free from valgrind:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30383
diff changeset
940 if (next && (next->data == ar)) {
4b8995626b20 Fix a read-after-free from valgrind:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30383
diff changeset
941 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
942 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
943 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
944 }
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
945
30384
4b8995626b20 Fix a read-after-free from valgrind:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30383
diff changeset
946 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
947 }
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
948
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
949 if (ar->tima > 0)
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
950 g_source_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
951
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
952 soup_session_cancel_message(session, ar->msg, SOUP_STATUS_CANCELLED);
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
953
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 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
955 }
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
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
957 PurpleUPnPMappingAddRemove *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
958 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
959 PurpleUPnPCallback cb, gpointer cb_data)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
960 {
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
961 PurpleUPnPMappingAddRemove *ar;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
962
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
963 ar = g_new0(PurpleUPnPMappingAddRemove, 1);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
964 ar->cb = cb;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
965 ar->cb_data = cb_data;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
966 ar->add = TRUE;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
967 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
968 g_strlcpy(ar->protocol, protocol, sizeof(ar->protocol));
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
969
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
970 /* 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
971 if(control_info.status == PURPLE_UPNP_STATUS_DISCOVERING) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
972 /* TODO: This will fail because when this cb is triggered,
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
973 * the internal IP lookup won't be complete */
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
974 discovery_callbacks = g_slist_append(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
975 discovery_callbacks, do_port_mapping_cb);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
976 discovery_callbacks = g_slist_append(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
977 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
978 return ar;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
979 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
980
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
981 if (control_info.status == PURPLE_UPNP_STATUS_UNDISCOVERED) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
982 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
983 return ar;
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
984 } else if (control_info.status == PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER) {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
985 if (g_get_monotonic_time() - control_info.lookup_time >
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
986 300 * G_USEC_PER_SEC) {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
987 /* If we haven't had a successful UPnP discovery, check if 5 minutes
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
988 * has elapsed since the last try, try again */
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
989 purple_upnp_discover(do_port_mapping_cb, ar);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
990 } else if (cb) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
991 /* Asynchronously trigger a failed response */
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
992 ar->tima = g_timeout_add(10, fire_port_mapping_failure_cb, ar);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
993 } else {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
994 /* No need to do anything if nobody expects a response*/
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
995 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
996 ar = NULL;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
997 }
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
998 return ar;
12734
69569600b471 [gaim-migrate @ 15078]
Daniel Atallah <datallah@pidgin.im>
parents: 12207
diff changeset
999 }
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
1000
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1001 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
1002 return ar;
12909
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
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
1005 PurpleUPnPMappingAddRemove *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
1006 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
1007 PurpleUPnPCallback cb, gpointer cb_data)
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1008 {
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
1009 PurpleUPnPMappingAddRemove *ar;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1010
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
1011 ar = g_new0(PurpleUPnPMappingAddRemove, 1);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1012 ar->cb = cb;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1013 ar->cb_data = cb_data;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1014 ar->add = FALSE;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1015 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
1016 g_strlcpy(ar->protocol, protocol, sizeof(ar->protocol));
11391
d172e72988cc [gaim-migrate @ 13620]
Adam Warrington <awarring@users.sourceforge.net>
parents: 11213
diff changeset
1017
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1018 /* 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
1019 if(control_info.status == PURPLE_UPNP_STATUS_DISCOVERING) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1020 discovery_callbacks = g_slist_append(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1021 discovery_callbacks, do_port_mapping_cb);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1022 discovery_callbacks = g_slist_append(
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1023 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
1024 return ar;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1025 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1026
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
1027 if (control_info.status == PURPLE_UPNP_STATUS_UNDISCOVERED) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15683
diff changeset
1028 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
1029 return ar;
40644
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
1030 } else if (control_info.status == PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER) {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
1031 if (g_get_monotonic_time() - control_info.lookup_time >
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
1032 300 * G_USEC_PER_SEC) {
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
1033 /* If we haven't had a successful UPnP discovery, check if 5 minutes
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
1034 * has elapsed since the last try, try again */
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
1035 purple_upnp_discover(do_port_mapping_cb, ar);
ac06f8981825 Use Gio in UPnP.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40412
diff changeset
1036 } else if (cb) {
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1037 /* Asynchronously trigger a failed response */
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 37489
diff changeset
1038 ar->tima = g_timeout_add(10, fire_port_mapping_failure_cb, ar);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1039 } else {
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1040 /* No need to do anything if nobody expects a response*/
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1041 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
1042 ar = NULL;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1043 }
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
1044 return ar;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1045 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1046
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12734
diff changeset
1047 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
1048 return ar;
11195
d84d542a04ac [gaim-migrate @ 13319]
Adam Warrington <awarring@users.sourceforge.net>
parents:
diff changeset
1049 }
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
1050
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
1051 static void
37489
cbf9ccc715ab Move everything in libpurple that was using the network-changed signal to use the gio one
Gary Kramlich <grim@reaperworld.com>
parents: 36257
diff changeset
1052 purple_upnp_network_config_changed_cb(GNetworkMonitor *monitor, gboolean available, gpointer data)
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
1053 {
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
1054 /* 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
1055 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
1056 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
1057 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
1058 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
1059 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
1060 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
1061 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
1062 }
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
1063
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
1064 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
1065 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
1066 {
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
1067 session = soup_session_new();
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
1068
37489
cbf9ccc715ab Move everything in libpurple that was using the network-changed signal to use the gio one
Gary Kramlich <grim@reaperworld.com>
parents: 36257
diff changeset
1069 g_signal_connect(g_network_monitor_get_default(),
cbf9ccc715ab Move everything in libpurple that was using the network-changed signal to use the gio one
Gary Kramlich <grim@reaperworld.com>
parents: 36257
diff changeset
1070 "network-changed",
cbf9ccc715ab Move everything in libpurple that was using the network-changed signal to use the gio one
Gary Kramlich <grim@reaperworld.com>
parents: 36257
diff changeset
1071 G_CALLBACK(purple_upnp_network_config_changed_cb),
cbf9ccc715ab Move everything in libpurple that was using the network-changed signal to use the gio one
Gary Kramlich <grim@reaperworld.com>
parents: 36257
diff changeset
1072 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
1073 }
40017
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
1074
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
1075 void
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
1076 purple_upnp_uninit(void)
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
1077 {
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
1078 soup_session_abort(session);
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
1079 g_clear_object(&session);
258b6fab7e79 Convert UPnP mappings to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
1080 }

mercurial