libpurple/dnssrv.c

Wed, 05 Sep 2007 22:32:14 +0000

author
Andreas Monitzer <am@adiumx.com>
date
Wed, 05 Sep 2007 22:32:14 +0000
branch
soc.2007.xmpp
changeset 19895
158490a51f8b
parent 18555
ececd1bd99e3
child 19859
71d37b57eff2
permissions
-rw-r--r--

propagate from branch 'im.pidgin.pidgin' (head 0853a065e5c3fcb5a6bb13fc23bec44ecf510ecd)
to branch 'im.pidgin.soc.2007.xmpp' (head b273d0db2bdd4a80d0fb22d32fe186e1f496933f)

11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
1 /**
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
2 * @file dnssrv.c
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
4 * purple
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
5 *
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
6 * Copyright (C) 2005 Thomas Butter <butter@uni-mannheim.de>
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
7 *
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
11 * (at your option) any later version.
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
12 *
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
16 * GNU General Public License for more details.
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
17 *
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
21 */
11898
a40601f1aed2 [gaim-migrate @ 14189]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11630
diff changeset
22
a40601f1aed2 [gaim-migrate @ 14189]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11630
diff changeset
23 #include "internal.h"
15718
216ce4a9db5b Include util.h to fix a warning I introduced
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
24 #include "util.h"
11898
a40601f1aed2 [gaim-migrate @ 14189]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11630
diff changeset
25
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
26 #ifndef _WIN32
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
27 #include <resolv.h>
11630
a6eaa6f5cbd2 [gaim-migrate @ 13905]
Mark Doliner <markdoliner@pidgin.im>
parents: 11444
diff changeset
28 #include <arpa/nameser.h>
12568
717c7d5cbb77 [gaim-migrate @ 14887]
Richard Laager <rlaager@pidgin.im>
parents: 12451
diff changeset
29 #ifdef HAVE_ARPA_NAMESER_COMPAT_H
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
30 #include <arpa/nameser_compat.h>
12568
717c7d5cbb77 [gaim-migrate @ 14887]
Richard Laager <rlaager@pidgin.im>
parents: 12451
diff changeset
31 #endif
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
32 #ifndef T_SRV
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
33 #define T_SRV 33
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
34 #endif
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
35 #else
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
36 #include <windns.h>
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
37 /* Missing from the mingw headers */
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
38 #ifndef DNS_TYPE_SRV
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
39 # define DNS_TYPE_SRV 33
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
40 #endif
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
41 #endif
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
42
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
43 #include "dnssrv.h"
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
44 #include "eventloop.h"
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
45 #include "debug.h"
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
46
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
47 #ifndef _WIN32
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
48 typedef union {
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
49 HEADER hdr;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
50 u_char buf[1024];
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
51 } queryans;
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
52 #else
18555
ececd1bd99e3 Fix up some linkage to compile on Visual Studio. He claims this doesn't
Nick Hebner <hebnern@gmail.com>
parents: 16957
diff changeset
53 static DNS_STATUS (WINAPI *MyDnsQuery_UTF8) (
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
54 PCSTR lpstrName, WORD wType, DWORD fOptions,
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
55 PIP4_ARRAY aipServers, PDNS_RECORD* ppQueryResultsSet,
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
56 PVOID* pReserved) = NULL;
18555
ececd1bd99e3 Fix up some linkage to compile on Visual Studio. He claims this doesn't
Nick Hebner <hebnern@gmail.com>
parents: 16957
diff changeset
57 static void (WINAPI *MyDnsRecordListFree) (PDNS_RECORD pRecordList,
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
58 DNS_FREE_TYPE FreeType) = NULL;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
59 #endif
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
60
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
61 struct _PurpleSrvQueryData {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
62 PurpleSrvCallback cb;
11382
4458ab177b10 [gaim-migrate @ 13609]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11381
diff changeset
63 gpointer extradata;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
64 guint handle;
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
65 #ifdef _WIN32
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
66 GThread *resolver;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
67 char *query;
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
68 char *error_message;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
69 GSList *results;
15776
cba54f9d2e51 Patch from Graham Booker which ensures that a process forked by dnsserv cleans up afterwards, calling waitpid() to make sure no zombies are left over.
Evan Schoenberg <evands@pidgin.im>
parents: 15718
diff changeset
70 #else
cba54f9d2e51 Patch from Graham Booker which ensures that a process forked by dnsserv cleans up afterwards, calling waitpid() to make sure no zombies are left over.
Evan Schoenberg <evands@pidgin.im>
parents: 15718
diff changeset
71 pid_t pid;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
72 #endif
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
73 };
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
74
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
75 static gint
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
76 responsecompare(gconstpointer ar, gconstpointer br)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
77 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
78 PurpleSrvResponse *a = (PurpleSrvResponse*)ar;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
79 PurpleSrvResponse *b = (PurpleSrvResponse*)br;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
80
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
81 if(a->pref == b->pref) {
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
82 if(a->weight == b->weight)
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
83 return 0;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
84 if(a->weight < b->weight)
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
85 return -1;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
86 return 1;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
87 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
88 if(a->pref < b->pref)
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
89 return -1;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
90 return 1;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
91 }
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
92
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
93 #ifndef _WIN32
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
94
16701
0b41f23396cc Mark two functions as "noreturn"
Mark Doliner <markdoliner@pidgin.im>
parents: 15890
diff changeset
95 G_GNUC_NORETURN static void
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
96 resolve(int in, int out)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
97 {
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
98 GList *ret = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
99 PurpleSrvResponse *srvres;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
100 queryans answer;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
101 int size;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
102 int qdcount;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
103 int ancount;
11381
d3d53604fe0f [gaim-migrate @ 13608]
Mark Doliner <markdoliner@pidgin.im>
parents: 11379
diff changeset
104 guchar *end;
d3d53604fe0f [gaim-migrate @ 13608]
Mark Doliner <markdoliner@pidgin.im>
parents: 11379
diff changeset
105 guchar *cp;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
106 gchar name[256];
13127
0adfbecc67ac [gaim-migrate @ 15488]
Mark Doliner <markdoliner@pidgin.im>
parents: 12847
diff changeset
107 guint16 type, dlen, pref, weight, port;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
108 gchar query[256];
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
109
15707
e9d3280caf69 Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evands@pidgin.im>
parents: 15435
diff changeset
110 #ifdef HAVE_SIGNAL_H
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
111 purple_restore_default_signal_handlers();
15707
e9d3280caf69 Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evands@pidgin.im>
parents: 15435
diff changeset
112 #endif
15859
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
113
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
114 if (read(in, query, 256) <= 0)
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
115 _exit(0);
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
116
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
117 size = res_query( query, C_IN, T_SRV, (u_char*)&answer, sizeof( answer));
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
118
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
119 qdcount = ntohs(answer.hdr.qdcount);
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
120 ancount = ntohs(answer.hdr.ancount);
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
121
11381
d3d53604fe0f [gaim-migrate @ 13608]
Mark Doliner <markdoliner@pidgin.im>
parents: 11379
diff changeset
122 cp = (guchar*)&answer + sizeof(HEADER);
d3d53604fe0f [gaim-migrate @ 13608]
Mark Doliner <markdoliner@pidgin.im>
parents: 11379
diff changeset
123 end = (guchar*)&answer + size;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
124
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
125 /* skip over unwanted stuff */
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
126 while (qdcount-- > 0 && cp < end) {
11381
d3d53604fe0f [gaim-migrate @ 13608]
Mark Doliner <markdoliner@pidgin.im>
parents: 11379
diff changeset
127 size = dn_expand( (unsigned char*)&answer, end, cp, name, 256);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
128 if(size < 0) goto end;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
129 cp += size + QFIXEDSZ;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
130 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
131
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
132 while (ancount-- > 0 && cp < end) {
11381
d3d53604fe0f [gaim-migrate @ 13608]
Mark Doliner <markdoliner@pidgin.im>
parents: 11379
diff changeset
133 size = dn_expand((unsigned char*)&answer, end, cp, name, 256);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
134 if(size < 0)
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
135 goto end;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
136
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
137 cp += size;
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
138
13143
d0a29ff182c8 [gaim-migrate @ 15505]
Mark Doliner <markdoliner@pidgin.im>
parents: 13127
diff changeset
139 GETSHORT(type,cp);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
140
13127
0adfbecc67ac [gaim-migrate @ 15488]
Mark Doliner <markdoliner@pidgin.im>
parents: 12847
diff changeset
141 /* skip ttl and class since we already know it */
0adfbecc67ac [gaim-migrate @ 15488]
Mark Doliner <markdoliner@pidgin.im>
parents: 12847
diff changeset
142 cp += 6;
0adfbecc67ac [gaim-migrate @ 15488]
Mark Doliner <markdoliner@pidgin.im>
parents: 12847
diff changeset
143
13143
d0a29ff182c8 [gaim-migrate @ 15505]
Mark Doliner <markdoliner@pidgin.im>
parents: 13127
diff changeset
144 GETSHORT(dlen,cp);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
145
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
146 if (type == T_SRV) {
13143
d0a29ff182c8 [gaim-migrate @ 15505]
Mark Doliner <markdoliner@pidgin.im>
parents: 13127
diff changeset
147 GETSHORT(pref,cp);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
148
13143
d0a29ff182c8 [gaim-migrate @ 15505]
Mark Doliner <markdoliner@pidgin.im>
parents: 13127
diff changeset
149 GETSHORT(weight,cp);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
150
13143
d0a29ff182c8 [gaim-migrate @ 15505]
Mark Doliner <markdoliner@pidgin.im>
parents: 13127
diff changeset
151 GETSHORT(port,cp);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
152
11381
d3d53604fe0f [gaim-migrate @ 13608]
Mark Doliner <markdoliner@pidgin.im>
parents: 11379
diff changeset
153 size = dn_expand( (unsigned char*)&answer, end, cp, name, 256);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
154 if(size < 0 )
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
155 goto end;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
156
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
157 cp += size;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
158
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
159 srvres = g_new0(PurpleSrvResponse, 1);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
160 strcpy(srvres->hostname, name);
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
161 srvres->pref = pref;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
162 srvres->port = port;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
163 srvres->weight = weight;
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
164
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
165 ret = g_list_insert_sorted(ret, srvres, responsecompare);
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
166 } else {
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
167 cp += dlen;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
168 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
169 }
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
170
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
171 end:
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
172 size = g_list_length(ret);
11430
a532570de9d6 [gaim-migrate @ 13667]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11426
diff changeset
173 write(out, &size, sizeof(int));
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
174 while (ret != NULL)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
175 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
176 write(out, ret->data, sizeof(PurpleSrvResponse));
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
177 g_free(ret->data);
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
178 ret = g_list_remove(ret, ret->data);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
179 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
180
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
181 _exit(0);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
182 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
183
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
184 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
185 resolved(gpointer data, gint source, PurpleInputCondition cond)
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
186 {
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
187 int size;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
188 PurpleSrvQueryData *query_data = (PurpleSrvQueryData*)data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
189 PurpleSrvResponse *res;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
190 PurpleSrvResponse *tmp;
11426
46f761f5c7ad [gaim-migrate @ 13663]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11395
diff changeset
191 int i;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
192 PurpleSrvCallback cb = query_data->cb;
15776
cba54f9d2e51 Patch from Graham Booker which ensures that a process forked by dnsserv cleans up afterwards, calling waitpid() to make sure no zombies are left over.
Evan Schoenberg <evands@pidgin.im>
parents: 15718
diff changeset
193 int status;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
194
16957
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
195 if (read(source, &size, sizeof(int)) > 0)
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
196 {
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
197 purple_debug_info("dnssrv","found %d SRV entries\n", size);
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
198 tmp = res = g_new0(PurpleSrvResponse, size);
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
199 for (i = 0; i < size; i++) {
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
200 read(source, tmp++, sizeof(PurpleSrvResponse));
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
201 }
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
202 }
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
203 else
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
204 {
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
205 purple_debug_info("dnssrv","found 0 SRV entries; errno is %i\n", errno);
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
206 size = 0;
b74ce411bea8 If the read() in resolved() fails, we should detect the failure and set size (which it would otherwise set, since it is passed by reference) to 0 and res to NULL. This ''may'' fix a rather odd crash described in Adium Trac #6623 (http://trac.adiumx.com/ticket/6623), and it is certainly good sanity checking.
Evan Schoenberg <evands@pidgin.im>
parents: 16701
diff changeset
207 res = NULL;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
208 }
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
209
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
210 cb(res, size, query_data->extradata);
15776
cba54f9d2e51 Patch from Graham Booker which ensures that a process forked by dnsserv cleans up afterwards, calling waitpid() to make sure no zombies are left over.
Evan Schoenberg <evands@pidgin.im>
parents: 15718
diff changeset
211 waitpid(query_data->pid, &status, 0);
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
212
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
213 purple_srv_cancel(query_data);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
214 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
215
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
216 #else /* _WIN32 */
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
217
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
218 /** The Jabber Server code was inspiration for parts of this. */
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
219
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
220 static gboolean
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
221 res_main_thread_cb(gpointer data)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
222 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
223 PurpleSrvResponse *srvres = NULL;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
224 int size = 0;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
225 PurpleSrvQueryData *query_data = data;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
226
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
227 if(query_data->error_message != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
228 purple_debug_error("dnssrv", query_data->error_message);
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
229 else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
230 PurpleSrvResponse *srvres_tmp = NULL;
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
231 GSList *lst = query_data->results;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
232
15859
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
233 size = g_slist_length(lst);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
234
15859
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
235 if(query_data->cb && size > 0)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
236 srvres_tmp = srvres = g_new0(PurpleSrvResponse, size);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
237 while (lst) {
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
238 if(query_data->cb)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
239 memcpy(srvres_tmp++, lst->data, sizeof(PurpleSrvResponse));
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
240 g_free(lst->data);
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
241 lst = g_slist_remove(lst, lst->data);
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
242 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
243
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
244 query_data->results = NULL;
15859
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
245
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
246 purple_debug_info("dnssrv", "found %d SRV entries\n", size);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
247 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
248
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
249 if(query_data->cb)
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
250 query_data->cb(srvres, size, query_data->extradata);
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
251
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
252 query_data->resolver = NULL;
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
253 query_data->handle = 0;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
254
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
255 purple_srv_cancel(query_data);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
256
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
257 return FALSE;
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
258 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
259
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
260 static gpointer
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
261 res_thread(gpointer data)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
262 {
12451
d9feea46dac4 [gaim-migrate @ 14760]
Daniel Atallah <datallah@pidgin.im>
parents: 12439
diff changeset
263 PDNS_RECORD dr = NULL;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
264 int type = DNS_TYPE_SRV;
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
265 DNS_STATUS ds;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
266 PurpleSrvQueryData *query_data = data;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
267
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
268 ds = MyDnsQuery_UTF8(query_data->query, type, DNS_QUERY_STANDARD, NULL, &dr, NULL);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
269 if (ds != ERROR_SUCCESS) {
12691
4c178bccdba7 [gaim-migrate @ 15034]
Daniel Atallah <datallah@pidgin.im>
parents: 12686
diff changeset
270 gchar *msg = g_win32_error_message(ds);
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
271 query_data->error_message = g_strdup_printf("Couldn't look up SRV record. %s (%lu).\n", msg, ds);
12691
4c178bccdba7 [gaim-migrate @ 15034]
Daniel Atallah <datallah@pidgin.im>
parents: 12686
diff changeset
272 g_free(msg);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
273 } else {
12451
d9feea46dac4 [gaim-migrate @ 14760]
Daniel Atallah <datallah@pidgin.im>
parents: 12439
diff changeset
274 PDNS_RECORD dr_tmp;
d9feea46dac4 [gaim-migrate @ 14760]
Daniel Atallah <datallah@pidgin.im>
parents: 12439
diff changeset
275 GSList *lst = NULL;
d9feea46dac4 [gaim-migrate @ 14760]
Daniel Atallah <datallah@pidgin.im>
parents: 12439
diff changeset
276 DNS_SRV_DATA *srv_data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
277 PurpleSrvResponse *srvres;
12451
d9feea46dac4 [gaim-migrate @ 14760]
Daniel Atallah <datallah@pidgin.im>
parents: 12439
diff changeset
278
d9feea46dac4 [gaim-migrate @ 14760]
Daniel Atallah <datallah@pidgin.im>
parents: 12439
diff changeset
279 for (dr_tmp = dr; dr_tmp != NULL; dr_tmp = dr_tmp->pNext) {
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
280 /* Discard any incorrect entries. I'm not sure if this is necessary */
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
281 if (dr_tmp->wType != type || strcmp(dr_tmp->pName, query_data->query) != 0) {
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
282 continue;
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
283 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
284
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
285 srv_data = &dr_tmp->Data.SRV;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
286 srvres = g_new0(PurpleSrvResponse, 1);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
287 strncpy(srvres->hostname, srv_data->pNameTarget, 255);
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
288 srvres->hostname[255] = '\0';
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
289 srvres->pref = srv_data->wPriority;
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
290 srvres->port = srv_data->wPort;
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
291 srvres->weight = srv_data->wWeight;
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
292
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
293 lst = g_slist_insert_sorted(lst, srvres, responsecompare);
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
294 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
295
12451
d9feea46dac4 [gaim-migrate @ 14760]
Daniel Atallah <datallah@pidgin.im>
parents: 12439
diff changeset
296 MyDnsRecordListFree(dr, DnsFreeRecordList);
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
297 query_data->results = lst;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
298 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
299
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
300 /* back to main thread */
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
301 /* Note: this should *not* be attached to query_data->handle - it will cause leakage */
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
302 g_idle_add(res_main_thread_cb, query_data);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
303
12691
4c178bccdba7 [gaim-migrate @ 15034]
Daniel Atallah <datallah@pidgin.im>
parents: 12686
diff changeset
304 g_thread_exit(NULL);
4c178bccdba7 [gaim-migrate @ 15034]
Daniel Atallah <datallah@pidgin.im>
parents: 12686
diff changeset
305 return NULL;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
306 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
307
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
308 #endif
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
309
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
310 PurpleSrvQueryData *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
311 purple_srv_resolve(const char *protocol, const char *transport, const char *domain, PurpleSrvCallback cb, gpointer extradata)
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
312 {
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
313 char *query;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
314 PurpleSrvQueryData *query_data;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
315 #ifndef _WIN32
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
316 int in[2], out[2];
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
317 int pid;
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
318 #else
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
319 GError* err = NULL;
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
320 static gboolean initialized = FALSE;
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
321 #endif
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
322
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
323 query = g_strdup_printf("_%s._%s.%s", protocol, transport, domain);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
324 purple_debug_info("dnssrv","querying SRV record for %s\n", query);
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
325
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
326 #ifndef _WIN32
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
327 if(pipe(in) || pipe(out)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
328 purple_debug_error("dnssrv", "Could not create pipe\n");
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
329 g_free(query);
11382
4458ab177b10 [gaim-migrate @ 13609]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11381
diff changeset
330 cb(NULL, 0, extradata);
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
331 return NULL;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
332 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
333
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
334 pid = fork();
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
335 if (pid == -1) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
336 purple_debug_error("dnssrv", "Could not create process!\n");
11382
4458ab177b10 [gaim-migrate @ 13609]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11381
diff changeset
337 cb(NULL, 0, extradata);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
338 g_free(query);
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
339 return NULL;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
340 }
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
341
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
342 /* Child */
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
343 if (pid == 0)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
344 {
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
345 close(out[0]);
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
346 close(in[1]);
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
347 resolve(in[0], out[1]);
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
348 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
349
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
350 close(out[1]);
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
351 close(in[0]);
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
352
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
353 if (write(in[1], query, strlen(query)+1) < 0)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
354 purple_debug_error("dnssrv", "Could not write to SRV resolver\n");
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
355
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
356 query_data = g_new0(PurpleSrvQueryData, 1);
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
357 query_data->cb = cb;
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
358 query_data->extradata = extradata;
15776
cba54f9d2e51 Patch from Graham Booker which ensures that a process forked by dnsserv cleans up afterwards, calling waitpid() to make sure no zombies are left over.
Evan Schoenberg <evands@pidgin.im>
parents: 15718
diff changeset
359 query_data->pid = pid;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
360 query_data->handle = purple_input_add(out[0], PURPLE_INPUT_READ, resolved, query_data);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
361
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
362 g_free(query);
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
363
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
364 return query_data;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
365 #else
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
366 if (!initialized) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
367 MyDnsQuery_UTF8 = (void*) wpurple_find_and_loadproc("dnsapi.dll", "DnsQuery_UTF8");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
368 MyDnsRecordListFree = (void*) wpurple_find_and_loadproc(
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
369 "dnsapi.dll", "DnsRecordListFree");
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
370 initialized = TRUE;
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
371 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
372
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
373 query_data = g_new0(PurpleSrvQueryData, 1);
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
374 query_data->cb = cb;
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
375 query_data->query = query;
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
376 query_data->extradata = extradata;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
377
15859
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
378 if (!MyDnsQuery_UTF8 || !MyDnsRecordListFree)
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
379 query_data->error_message = g_strdup("System missing DNS API (Requires W2K+)\n");
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
380 else {
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
381 query_data->resolver = g_thread_create(res_thread, query_data, FALSE, &err);
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
382 if (query_data->resolver == NULL) {
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
383 query_data->error_message = g_strdup_printf("SRV thread create failure: %s\n", (err && err->message) ? err->message : "");
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
384 g_error_free(err);
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
385 }
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
386 }
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
387
15859
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
388 /* The query isn't going to happen, so finish the SRV lookup now.
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
389 * Asynchronously call the callback since stuff may not expect
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
390 * the callback to be called before this returns */
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
391 if (query_data->error_message != NULL)
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
392 query_data->handle = g_idle_add(res_main_thread_cb, query_data);
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
393
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
394 return query_data;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
395 #endif
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
396 }
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
397
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
398 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
399 purple_srv_cancel(PurpleSrvQueryData *query_data)
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
400 {
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
401 if (query_data->handle > 0)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
402 purple_input_remove(query_data->handle);
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
403 #ifdef _WIN32
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
404 if (query_data->resolver != NULL)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
405 {
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
406 /*
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
407 * It's not really possible to kill a thread. So instead we
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
408 * just set the callback to NULL and let the DNS lookup
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
409 * finish.
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
410 */
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
411 query_data->cb = NULL;
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
412 return;
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
413 }
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
414 g_free(query_data->query);
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
415 g_free(query_data->error_message);
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
416 #endif
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
417 g_free(query_data);
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
418 }

mercurial