libpurple/stun.c

Thu, 25 Aug 2022 23:25:12 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 25 Aug 2022 23:25:12 -0500
branch
gtk4
changeset 41598
2b34cd990c16
parent 40818
3891ef6e3b56
child 41840
fe350460fb1c
permissions
-rw-r--r--

Replace the style-updated signal with GtkIconTheme:changed

Testing Done:
Ran and make sure the `GWarning` went away.

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

20147
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
1 /* purple
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
2 *
11336
d2033b2756e2 [gaim-migrate @ 13549]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11300
diff changeset
3 * STUN implementation inspired by jstun [http://jstun.javawi.de/]
d2033b2756e2 [gaim-migrate @ 13549]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11300
diff changeset
4 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
7 * source distribution.
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
8 *
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
12 * (at your option) any later version.
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
13 *
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
17 * GNU General Public License for more details.
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
18 *
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
20 * 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: 19770
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
22 *
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
23 */
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
24
11898
a40601f1aed2 [gaim-migrate @ 14189]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11677
diff changeset
25 #include "internal.h"
a40601f1aed2 [gaim-migrate @ 14189]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11677
diff changeset
26
11364
d754cf40ec4b [gaim-migrate @ 13588]
Daniel Atallah <datallah@pidgin.im>
parents: 11354
diff changeset
27 #ifndef _WIN32
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
28 #include <net/if.h>
11364
d754cf40ec4b [gaim-migrate @ 13588]
Daniel Atallah <datallah@pidgin.im>
parents: 11354
diff changeset
29 #endif
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
30
37452
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
31 #include <gio/gio.h>
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
32
40818
3891ef6e3b56 Fix building on glib < 2.58.0 as we have a minimum of 2.52.0
Gary Kramlich <grim@reaperworld.com>
parents: 40773
diff changeset
33 #include "glibcompat.h"
3891ef6e3b56 Fix building on glib < 2.58.0 as we have a minimum of 2.52.0
Gary Kramlich <grim@reaperworld.com>
parents: 40773
diff changeset
34
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
35 #include "debug.h"
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
36 #include "account.h"
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
37 #include "network.h"
11429
3f7f01e88e77 [gaim-migrate @ 13666]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11425
diff changeset
38 #include "proxy.h"
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
39 #include "stun.h"
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
40 #include "prefs.h"
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
41
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
42 #define MSGTYPE_BINDINGREQUEST 0x0001
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
43 #define MSGTYPE_BINDINGRESPONSE 0x0101
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
44
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
45 #define ATTRIB_MAPPEDADDRESS 0x0001
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
46
12686
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
47 struct stun_header {
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
48 guint16 type;
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
49 guint16 len;
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
50 guint32 transid[4];
12686
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
51 };
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
52
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
53 struct stun_attrib {
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
54 guint16 type;
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
55 guint16 len;
12686
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
56 };
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
57
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
58 struct stun_conn {
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
59 GSocket *sock;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
60 GSocketAddress *addr;
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
61 int retry;
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
62 guint incb;
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
63 guint timeout;
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
64 struct stun_header *packet;
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
65 gsize packetsize;
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
66 };
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
67
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
68 static PurpleStunNatDiscovery nattype = {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
69 PURPLE_STUN_STATUS_UNDISCOVERED,
12877
aebd8924bc4b [gaim-migrate @ 15229]
Daniel Atallah <datallah@pidgin.im>
parents: 12757
diff changeset
70 "\0", NULL, 0};
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
71
12877
aebd8924bc4b [gaim-migrate @ 15229]
Daniel Atallah <datallah@pidgin.im>
parents: 12757
diff changeset
72 static GSList *callbacks = NULL;
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
73
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
74 static void close_stun_conn(struct stun_conn *sc) {
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
75 g_clear_object(&sc->sock);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
76 g_clear_object(&sc->addr);
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
77
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
78 if (sc->incb) {
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
79 g_source_remove(sc->incb);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
80 }
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
81
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
82 if (sc->timeout) {
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
83 g_source_remove(sc->timeout);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
84 }
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
85
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
86 g_clear_pointer(&sc->packet, g_free);
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
87 g_free(sc);
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
88 }
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
89
22104
56970903b8e9 Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents: 20147
diff changeset
90 static void do_callbacks(void) {
30704
a07bc8a6c401 Optimize just a teensy-tiny bit.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27497
diff changeset
91 while (callbacks) {
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35466
diff changeset
92 PurpleStunCallback cb = callbacks->data;
30704
a07bc8a6c401 Optimize just a teensy-tiny bit.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27497
diff changeset
93 if (cb)
11336
d2033b2756e2 [gaim-migrate @ 13549]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11300
diff changeset
94 cb(&nattype);
30704
a07bc8a6c401 Optimize just a teensy-tiny bit.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27497
diff changeset
95 callbacks = g_slist_delete_link(callbacks, callbacks);
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
96 }
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
97 }
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
98
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
99 static gboolean timeoutfunc(gpointer data) {
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
100 struct stun_conn *sc = data;
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
101 GError *error = NULL;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
102
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
103 if(sc->retry >= 2) {
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
104 guint id;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
105
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 26782
diff changeset
106 purple_debug_warning("stun", "request timed out, giving up.\n");
12686
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
107
11354
265f44ed44bc [gaim-migrate @ 13573]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11336
diff changeset
108 /* set unknown */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
109 nattype.status = PURPLE_STUN_STATUS_UNKNOWN;
11354
265f44ed44bc [gaim-migrate @ 13573]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11336
diff changeset
110
39822
2b8005b0a78c Use monotonic time for determining STUN restart.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39464
diff changeset
111 nattype.lookup_time = g_get_monotonic_time();
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
112
11354
265f44ed44bc [gaim-migrate @ 13573]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11336
diff changeset
113 /* callbacks */
265f44ed44bc [gaim-migrate @ 13573]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11336
diff changeset
114 do_callbacks();
265f44ed44bc [gaim-migrate @ 13573]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11336
diff changeset
115
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
116 /* we don't need to remove the timeout (returning FALSE), but
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
117 * we do need to remove the read callback, which will free the
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
118 * whole stun_conn. */
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
119 id = sc->incb;
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
120 sc->timeout = 0;
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
121 sc->incb = 0;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
122 g_source_remove(id);
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
123
11354
265f44ed44bc [gaim-migrate @ 13573]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11336
diff changeset
124 return FALSE;
265f44ed44bc [gaim-migrate @ 13573]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11336
diff changeset
125 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
126 purple_debug_info("stun", "request timed out, retrying.\n");
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
127 sc->retry++;
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
128 if (g_socket_send_to(sc->sock, sc->addr, (const gchar *)sc->packet,
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
129 sc->packetsize, NULL,
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
130 &error) != (gssize)sc->packetsize) {
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
131 purple_debug_warning("stun", "sendto failed: %s", error->message);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
132 g_clear_error(&error);
35991
e6937e52930b Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35968
diff changeset
133 return FALSE;
e6937e52930b Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35968
diff changeset
134 }
11354
265f44ed44bc [gaim-migrate @ 13573]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11336
diff changeset
135 return TRUE;
265f44ed44bc [gaim-migrate @ 13573]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11336
diff changeset
136 }
265f44ed44bc [gaim-migrate @ 13573]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11336
diff changeset
137
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
138 static gboolean
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
139 reply_cb(GSocket *socket, GIOCondition condition, gpointer data)
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
140 {
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
141 struct stun_conn *sc = data;
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
142 gchar buffer[65536];
40642
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
143 gchar *it;
36256
a437550a9308 Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 35991
diff changeset
144 gssize len;
35683
8b6b8a3b5039 Fix most of invalid alignment warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
145 struct stun_attrib attrib;
8b6b8a3b5039 Fix most of invalid alignment warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
146 struct stun_header hdr;
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
147 GError *error = NULL;
11431
60971f504319 [gaim-migrate @ 13668]
Daniel Atallah <datallah@pidgin.im>
parents: 11429
diff changeset
148
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
149 len = g_socket_receive(socket, buffer, sizeof(buffer) - 1, NULL, &error);
34304
faf0414a8b51 Fix most of libpurple warnings about -Wsign-compare
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 32983
diff changeset
150 if (len <= 0) {
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
151 purple_debug_warning("stun", "unable to read stun response: %s",
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
152 error->message);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
153 g_clear_error(&error);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
154 sc->incb = 0;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
155 return FALSE;
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
156 }
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
157 buffer[len] = '\0';
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
158
36256
a437550a9308 Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 35991
diff changeset
159 if ((gsize)len < sizeof(struct stun_header)) {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 26782
diff changeset
160 purple_debug_warning("stun", "got invalid response\n");
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
161 sc->incb = 0;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
162 return FALSE;
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
163 }
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
164
35683
8b6b8a3b5039 Fix most of invalid alignment warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
165 memcpy(&hdr, buffer, sizeof(hdr));
40642
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
166 if ((gsize)len != (g_ntohs(hdr.len) + sizeof(struct stun_header))) {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 26782
diff changeset
167 purple_debug_warning("stun", "got incomplete response\n");
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
168 sc->incb = 0;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
169 return FALSE;
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
170 }
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
171
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
172 /* wrong transaction */
35683
8b6b8a3b5039 Fix most of invalid alignment warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
173 if(hdr.transid[0] != sc->packet->transid[0]
8b6b8a3b5039 Fix most of invalid alignment warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
174 || hdr.transid[1] != sc->packet->transid[1]
8b6b8a3b5039 Fix most of invalid alignment warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
175 || hdr.transid[2] != sc->packet->transid[2]
8b6b8a3b5039 Fix most of invalid alignment warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35499
diff changeset
176 || hdr.transid[3] != sc->packet->transid[3]) {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 26782
diff changeset
177 purple_debug_warning("stun", "got wrong transid\n");
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
178 sc->incb = 0;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
179 return FALSE;
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
180 }
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
181
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
182 if (hdr.type != MSGTYPE_BINDINGRESPONSE) {
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
183 purple_debug_warning("stun", "Expected Binding Response, got %d",
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
184 hdr.type);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
185 sc->incb = 0;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
186 return FALSE;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
187 }
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
188
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
189 it = buffer + sizeof(struct stun_header);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
190 while ((buffer + len) > (it + sizeof(struct stun_attrib))) {
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
191 memcpy(&attrib, it, sizeof(attrib));
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
192 it += sizeof(struct stun_attrib);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
193
40642
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
194 if (!((buffer + len) > (it + g_ntohs(attrib.len)))) {
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
195 break;
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
196 }
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
197
40642
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
198 if (attrib.type == g_htons(ATTRIB_MAPPEDADDRESS) &&
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
199 g_ntohs(attrib.len) == 8) {
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
200 GInetAddress *inet_addr = NULL;
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
201 /* Skip the first unused byte,
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
202 * the family(1 byte), and the port(2 bytes);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
203 * then read the 4 byte IPv4 address */
40642
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
204 inet_addr = g_inet_address_new_from_bytes((const guint8 *)it + 4,
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
205 G_SOCKET_FAMILY_IPV4);
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
206 if (inet_addr) {
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
207 gchar *ip = g_inet_address_to_string(inet_addr);
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
208 g_strlcpy(nattype.publicip, ip, sizeof(nattype.publicip));
40642
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
209 g_free(ip);
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
210 g_object_unref(inet_addr);
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
211 }
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
212 }
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
213
40642
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
214 it += g_ntohs(attrib.len);
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
215 }
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
216 purple_debug_info("stun", "got public ip %s\n", nattype.publicip);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
217 nattype.status = PURPLE_STUN_STATUS_DISCOVERED;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
218 nattype.lookup_time = g_get_monotonic_time();
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
219
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
220 do_callbacks();
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
221
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
222 /* sc will be freed by the GSource destruction. */
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
223 sc->incb = 0;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
224 return FALSE;
11336
d2033b2756e2 [gaim-migrate @ 13549]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11300
diff changeset
225 }
11424
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
226
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
227 static void
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
228 hbn_cb(GObject *sender, GAsyncResult *res, gpointer data)
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
229 {
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
230 struct stun_conn *sc = NULL;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
231 GList *addresses = NULL;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
232 GSocketAddress *local_addr = NULL;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
233 GInetAddress *remote_addr = NULL;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
234 struct stun_header *hdr_data = NULL;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
235 GSource *read_source = NULL;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
236 GError *error = NULL;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12877
diff changeset
237
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
238 addresses =
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
239 g_resolver_lookup_by_name_finish(G_RESOLVER(sender), res, &error);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
240 if (error != NULL) {
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
241 nattype.status = PURPLE_STUN_STATUS_UNDISCOVERED;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
242 nattype.lookup_time = g_get_monotonic_time();
11425
668f93d8c3a2 [gaim-migrate @ 13662]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11424
diff changeset
243
11431
60971f504319 [gaim-migrate @ 13668]
Daniel Atallah <datallah@pidgin.im>
parents: 11429
diff changeset
244 do_callbacks();
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
245
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
246 g_clear_error(&error);
11424
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
247 return;
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
248 }
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
249
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
250 sc = g_new0(struct stun_conn, 1);
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
251 sc->sock = g_socket_new(G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_DATAGRAM,
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
252 G_SOCKET_PROTOCOL_DEFAULT, &error);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
253 if (sc->sock == NULL) {
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
254 purple_debug_error(
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
255 "stun", "Unable to create socket to connect to STUN server: %s",
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
256 error->message);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
257 nattype.status = PURPLE_STUN_STATUS_UNKNOWN;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
258 nattype.lookup_time = g_get_monotonic_time();
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
259
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
260 do_callbacks();
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
261
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
262 close_stun_conn(sc);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
263 g_resolver_free_addresses(addresses);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
264 g_clear_error(&error);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
265 return;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
266 }
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
267
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
268 local_addr = g_inet_socket_address_new_from_string("0.0.0.0", 0);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
269 remote_addr = G_INET_ADDRESS(addresses->data);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
270 sc->addr = g_inet_socket_address_new(remote_addr, GPOINTER_TO_INT(data));
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
271 g_resolver_free_addresses(addresses);
37452
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
272
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
273 g_socket_set_blocking(sc->sock, FALSE);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
274 if (!g_socket_bind(sc->sock, local_addr, TRUE, &error)) {
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
275 purple_debug_error(
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
276 "stun", "Unable to bind socket to connect to STUN server: %s",
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
277 error->message);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
278 nattype.status = PURPLE_STUN_STATUS_UNKNOWN;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
279 nattype.lookup_time = g_get_monotonic_time();
37465
2b3189543b1f Clean up some gross I forgot about
Gary Kramlich <grim@reaperworld.com>
parents: 37452
diff changeset
280
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
281 do_callbacks();
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
282
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
283 g_object_unref(local_addr);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
284 close_stun_conn(sc);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
285 g_clear_error(&error);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
286 return;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
287 }
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
288
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
289 g_object_unref(local_addr);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
290
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
291 read_source = g_socket_create_source(sc->sock, G_IO_IN, NULL);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
292 g_source_set_callback(read_source, G_SOURCE_FUNC(reply_cb), sc,
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
293 (GDestroyNotify)close_stun_conn);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
294 sc->incb = g_source_attach(read_source, NULL);
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
295 g_source_unref(read_source);
11431
60971f504319 [gaim-migrate @ 13668]
Daniel Atallah <datallah@pidgin.im>
parents: 11429
diff changeset
296
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
297 hdr_data = g_new0(struct stun_header, 1);
40642
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
298 hdr_data->type = g_htons(MSGTYPE_BINDINGREQUEST);
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
299 hdr_data->len = 0;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
300 hdr_data->transid[0] = g_random_int();
40642
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
301 hdr_data->transid[1] = g_ntohl(((int)'g' << 24) + ((int)'a' << 16) +
18050336a45f Cleanup some stun bits
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40611
diff changeset
302 ((int)'i' << 8) + (int)'m');
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
303 hdr_data->transid[2] = g_random_int();
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
304 hdr_data->transid[3] = g_random_int();
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
305 sc->packet = hdr_data;
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
306 sc->packetsize = sizeof(struct stun_header);
11431
60971f504319 [gaim-migrate @ 13668]
Daniel Atallah <datallah@pidgin.im>
parents: 11429
diff changeset
307
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
308 if (g_socket_send_to(sc->sock, sc->addr, (const gchar *)sc->packet,
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
309 sc->packetsize, NULL,
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
310 &error) < (gssize)sc->packetsize) {
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
311 purple_debug_warning("stun", "sendto failed: %s", error->message);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
312 nattype.status = PURPLE_STUN_STATUS_UNKNOWN;
39822
2b8005b0a78c Use monotonic time for determining STUN restart.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39464
diff changeset
313 nattype.lookup_time = g_get_monotonic_time();
11431
60971f504319 [gaim-migrate @ 13668]
Daniel Atallah <datallah@pidgin.im>
parents: 11429
diff changeset
314 do_callbacks();
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
315 close_stun_conn(sc);
11431
60971f504319 [gaim-migrate @ 13668]
Daniel Atallah <datallah@pidgin.im>
parents: 11429
diff changeset
316 return;
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
317 }
11429
3f7f01e88e77 [gaim-migrate @ 13666]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11425
diff changeset
318
40611
22d3e966281b Convert stun code to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 39822
diff changeset
319 sc->timeout = g_timeout_add(500, (GSourceFunc)timeoutfunc, sc);
37452
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
320 }
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
321
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
322 static void
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
323 do_test1(GObject *sender, GAsyncResult *res, gpointer data) {
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
324 GList *services = NULL;
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
325 GError *error = NULL;
37518
53c9ebedf2b7 Plug g_resolver_get_default() leaks
Mike Ruprecht <cmaiku@gmail.com>
parents: 37517
diff changeset
326 GResolver *resolver;
37452
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
327 const char *servername = data;
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
328 int port = 3478;
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
329
37517
a67be31f9c7e Use the GResolver which was passed to g_resolver_lookup_*_async()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37469
diff changeset
330 services = g_resolver_lookup_service_finish(G_RESOLVER(sender),
a67be31f9c7e Use the GResolver which was passed to g_resolver_lookup_*_async()
Mike Ruprecht <cmaiku@gmail.com>
parents: 37469
diff changeset
331 res, &error);
37452
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
332 if(error != NULL) {
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
333 purple_debug_info("stun", "Failed to look up srv record : %s\n", error->message);
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
334
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
335 g_error_free(error);
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
336 } else {
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
337 servername = g_srv_target_get_hostname((GSrvTarget *)services->data);
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
338 port = g_srv_target_get_port((GSrvTarget *)services->data);
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
339 }
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12877
diff changeset
340
37452
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
341 purple_debug_info("stun", "connecting to %s:%d\n", servername, port);
11431
60971f504319 [gaim-migrate @ 13668]
Daniel Atallah <datallah@pidgin.im>
parents: 11429
diff changeset
342
37518
53c9ebedf2b7 Plug g_resolver_get_default() leaks
Mike Ruprecht <cmaiku@gmail.com>
parents: 37517
diff changeset
343 resolver = g_resolver_get_default();
53c9ebedf2b7 Plug g_resolver_get_default() leaks
Mike Ruprecht <cmaiku@gmail.com>
parents: 37517
diff changeset
344 g_resolver_lookup_by_name_async(resolver,
37452
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
345 servername,
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
346 NULL,
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
347 hbn_cb,
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
348 GINT_TO_POINTER(port));
37518
53c9ebedf2b7 Plug g_resolver_get_default() leaks
Mike Ruprecht <cmaiku@gmail.com>
parents: 37517
diff changeset
349 g_object_unref(resolver);
11429
3f7f01e88e77 [gaim-migrate @ 13666]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11425
diff changeset
350
37452
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
351 g_resolver_free_targets(services);
11225
e888c207b994 [gaim-migrate @ 13361]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
352 }
11424
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
353
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
354 static gboolean call_callback(gpointer data) {
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35466
diff changeset
355 PurpleStunCallback cb = data;
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
356 cb(&nattype);
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
357 return FALSE;
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
358 }
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
359
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35466
diff changeset
360 PurpleStunNatDiscovery *purple_stun_discover(PurpleStunCallback cb) {
16478
19107605c565 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents: 15884
diff changeset
361 const char *servername = purple_prefs_get_string("/purple/network/stun_server");
37518
53c9ebedf2b7 Plug g_resolver_get_default() leaks
Mike Ruprecht <cmaiku@gmail.com>
parents: 37517
diff changeset
362 GResolver *resolver;
11424
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
363
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
364 purple_debug_info("stun", "using server %s\n", servername);
12686
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
365
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
366 if(nattype.status == PURPLE_STUN_STATUS_DISCOVERING) {
12686
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
367 if(cb)
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
368 callbacks = g_slist_append(callbacks, cb);
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
369 return &nattype;
11424
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
370 }
12686
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
371
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
372 if(nattype.status != PURPLE_STUN_STATUS_UNDISCOVERED) {
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
373 gboolean use_cached_result = TRUE;
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
374
35466
e259e75f1c6f Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
375 /* Deal with the server name having changed since we did the
e259e75f1c6f Fix some gtk-doc warnings till xmlnode.h
Ankit Vani <a@nevitus.org>
parents: 35454
diff changeset
376 lookup */
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
377 if (servername && strlen(servername) > 1
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 22104
diff changeset
378 && !purple_strequal(servername, nattype.servername)) {
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
379 use_cached_result = FALSE;
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
380 }
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
381
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
382 /* If we don't have a successful status and it has been 5
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
383 minutes since we last did a lookup, redo the lookup */
39822
2b8005b0a78c Use monotonic time for determining STUN restart.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39464
diff changeset
384 if (nattype.status != PURPLE_STUN_STATUS_DISCOVERED &&
2b8005b0a78c Use monotonic time for determining STUN restart.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39464
diff changeset
385 (g_get_monotonic_time() - nattype.lookup_time) >
2b8005b0a78c Use monotonic time for determining STUN restart.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39464
diff changeset
386 300 * G_USEC_PER_SEC) {
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
387 use_cached_result = FALSE;
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
388 }
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
389
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
390 if (use_cached_result) {
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
391 if(cb)
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 38380
diff changeset
392 g_timeout_add(10, call_callback, cb);
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
393 return &nattype;
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
394 }
11424
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
395 }
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
396
12686
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
397 if(!servername || (strlen(servername) < 2)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
398 nattype.status = PURPLE_STUN_STATUS_UNKNOWN;
39822
2b8005b0a78c Use monotonic time for determining STUN restart.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39464
diff changeset
399 nattype.lookup_time = g_get_monotonic_time();
12686
ec3e7c4ff045 [gaim-migrate @ 15029]
Richard Laager <rlaager@pidgin.im>
parents: 11898
diff changeset
400 if(cb)
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 38380
diff changeset
401 g_timeout_add(10, call_callback, cb);
11424
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
402 return &nattype;
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
403 }
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
404
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
405 nattype.status = PURPLE_STUN_STATUS_DISCOVERING;
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
406 nattype.publicip[0] = '\0';
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
407 g_free(nattype.servername);
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
408 nattype.servername = g_strdup(servername);
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
409
11424
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
410 callbacks = g_slist_append(callbacks, cb);
37452
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
411
37518
53c9ebedf2b7 Plug g_resolver_get_default() leaks
Mike Ruprecht <cmaiku@gmail.com>
parents: 37517
diff changeset
412 resolver = g_resolver_get_default();
53c9ebedf2b7 Plug g_resolver_get_default() leaks
Mike Ruprecht <cmaiku@gmail.com>
parents: 37517
diff changeset
413 g_resolver_lookup_service_async(resolver,
37452
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
414 "stun",
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
415 "udp",
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
416 servername,
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
417 NULL,
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
418 do_test1,
dafefd7bb115 This should do it for the libpurple dns stuff
Gary Kramlich <grim@reaperworld.com>
parents: 37227
diff changeset
419 (gpointer)servername);
37518
53c9ebedf2b7 Plug g_resolver_get_default() leaks
Mike Ruprecht <cmaiku@gmail.com>
parents: 37517
diff changeset
420 g_object_unref(resolver);
12756
b8df02e0c6e5 [gaim-migrate @ 15103]
Daniel Atallah <datallah@pidgin.im>
parents: 12700
diff changeset
421
11424
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
422 return &nattype;
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
423 }
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
424
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
425 void purple_stun_init() {
16478
19107605c565 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents: 15884
diff changeset
426 purple_prefs_add_string("/purple/network/stun_server", "");
11424
b0f8535daa74 [gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11371
diff changeset
427 }

mercurial