libpurple/dnssrv.c

Fri, 18 Jan 2013 03:51:05 -0500

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Fri, 18 Jan 2013 03:51:05 -0500
changeset 33643
6f7deddb8850
parent 32300
59a31f9f67fc
child 33880
2f2dd47bf56b
permissions
-rw-r--r--

Move blist loading into purple_core_init.

The comments say we want to move this into purple_blist_init, but that
seems like it would be problematic. We need the UI ops to be set, which
moves blist init after UI init. But stuff needs blist signals to be
registered before UI init, etc., etc. It seemed like a pain to work that
all out. I made purple_blist_boot for purple_core_init to call after the
UI init happened. It could have been called _load, but I didn't want
people to accidentally continue calling it.

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
20330
650a7af9c238 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents: 19859
diff changeset
3 */
650a7af9c238 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents: 19859
diff changeset
4
650a7af9c238 remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents: 19859
diff changeset
5 /* purple
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
6 *
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
7 * Copyright (C) 2005 Thomas Butter <butter@uni-mannheim.de>
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
8 *
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
9 * 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
10 * 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
11 * the Free Software Foundation; either version 2 of the License, or
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
12 * (at your option) any later version.
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
13 *
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
14 * 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
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
17 * GNU General Public License for more details.
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
18 *
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
19 * 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
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: 18555
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
22 */
31738
c0a7971ce0d2 purple: Fix some compiler warnings related to new API and missing prototypes.
Paul Aurich <darkrain42@pidgin.im>
parents: 31678
diff changeset
23 #define _PURPLE_DNSSRV_C_
11898
a40601f1aed2 [gaim-migrate @ 14189]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11630
diff changeset
24
a40601f1aed2 [gaim-migrate @ 14189]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11630
diff changeset
25 #include "internal.h"
15718
216ce4a9db5b Include util.h to fix a warning I introduced
Evan Schoenberg <evands@pidgin.im>
parents: 15707
diff changeset
26 #include "util.h"
11898
a40601f1aed2 [gaim-migrate @ 14189]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11630
diff changeset
27
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
28 #ifndef _WIN32
23352
9714223ca7a7 A patch from Peter O'Gorman at The Written Word, Inc. to fix various
Peter O'Gorman <pogma@thewrittenword.com>
parents: 22351
diff changeset
29 #include <arpa/nameser.h>
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
30 #include <resolv.h>
12568
717c7d5cbb77 [gaim-migrate @ 14887]
Richard Laager <rlaager@pidgin.im>
parents: 12451
diff changeset
31 #ifdef HAVE_ARPA_NAMESER_COMPAT_H
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
32 #include <arpa/nameser_compat.h>
12568
717c7d5cbb77 [gaim-migrate @ 14887]
Richard Laager <rlaager@pidgin.im>
parents: 12451
diff changeset
33 #endif
24743
4762054cf996 dnssrv.c:
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
34 #else /* WIN32 */
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
35 #include <windns.h>
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
36 /* Missing from the mingw headers */
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
37 #ifndef DNS_TYPE_SRV
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
38 # define DNS_TYPE_SRV PurpleDnsTypeSrv
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
39 #endif
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
40 #ifndef DNS_TYPE_TXT
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
41 # define DNS_TYPE_TXT PurpleDnsTypeTxt
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
42 #endif
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
43 #endif
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
44
31676
cb214cdd8a59 The T_SRV and T_TXT defines are needed on WIN32 too.
Daniel Atallah <datallah@pidgin.im>
parents: 31640
diff changeset
45 #ifndef T_SRV
cb214cdd8a59 The T_SRV and T_TXT defines are needed on WIN32 too.
Daniel Atallah <datallah@pidgin.im>
parents: 31640
diff changeset
46 #define T_SRV PurpleDnsTypeSrv
cb214cdd8a59 The T_SRV and T_TXT defines are needed on WIN32 too.
Daniel Atallah <datallah@pidgin.im>
parents: 31640
diff changeset
47 #endif
cb214cdd8a59 The T_SRV and T_TXT defines are needed on WIN32 too.
Daniel Atallah <datallah@pidgin.im>
parents: 31640
diff changeset
48 #ifndef T_TXT
cb214cdd8a59 The T_SRV and T_TXT defines are needed on WIN32 too.
Daniel Atallah <datallah@pidgin.im>
parents: 31640
diff changeset
49 #define T_TXT PurpleDnsTypeTxt
cb214cdd8a59 The T_SRV and T_TXT defines are needed on WIN32 too.
Daniel Atallah <datallah@pidgin.im>
parents: 31640
diff changeset
50 #endif
cb214cdd8a59 The T_SRV and T_TXT defines are needed on WIN32 too.
Daniel Atallah <datallah@pidgin.im>
parents: 31640
diff changeset
51
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
52 #include "debug.h"
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
53 #include "dnssrv.h"
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
54 #include "eventloop.h"
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
55 #include "network.h"
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
56
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
57 static PurpleSrvTxtQueryUiOps *srv_txt_query_ui_ops = NULL;
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
58
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
59 #ifndef _WIN32
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
60 typedef union {
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
61 HEADER hdr;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
62 u_char buf[1024];
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
63 } queryans;
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
64 #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
65 static DNS_STATUS (WINAPI *MyDnsQuery_UTF8) (
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
66 PCSTR lpstrName, WORD wType, DWORD fOptions,
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
67 PIP4_ARRAY aipServers, PDNS_RECORD* ppQueryResultsSet,
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
68 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
69 static void (WINAPI *MyDnsRecordListFree) (PDNS_RECORD pRecordList,
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
70 DNS_FREE_TYPE FreeType) = NULL;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
71 #endif
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
72
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
73 struct _PurpleSrvTxtQueryData {
24743
4762054cf996 dnssrv.c:
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
74 union {
4762054cf996 dnssrv.c:
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
75 PurpleSrvCallback srv;
4762054cf996 dnssrv.c:
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
76 PurpleTxtCallback txt;
4762054cf996 dnssrv.c:
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
77 } cb;
4762054cf996 dnssrv.c:
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
78
11382
4458ab177b10 [gaim-migrate @ 13609]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11381
diff changeset
79 gpointer extradata;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
80 guint handle;
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
81 int type;
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
82 char *query;
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
83 #ifdef _WIN32
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
84 GThread *resolver;
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
85 char *error_message;
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
86 GList *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
87 #else
20128
272326eb883e applied changes from 31d62e1a78974a0239e86bfeb42b29ab75216114
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
88 int fd_in, fd_out;
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
89 pid_t pid;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
90 #endif
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
91 };
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
92
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
93 typedef struct _PurpleSrvInternalQuery {
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
94 int type;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
95 char query[256];
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
96 } PurpleSrvInternalQuery;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
97
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
98 typedef struct _PurpleSrvResponseContainer {
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
99 PurpleSrvResponse *response;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
100 int sum;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
101 } PurpleSrvResponseContainer;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
102
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
103 static gboolean purple_srv_txt_query_ui_resolve(PurpleSrvTxtQueryData *query_data);
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
104
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
105 /**
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
106 * Sort by priority, then by weight. Strictly numerically--no
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
107 * randomness. Technically we only need to sort by pref and then
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
108 * make sure any records with weight 0 are at the beginning of
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
109 * their group, but it's just as easy to sort by weight.
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
110 */
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
111 static gint
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
112 responsecompare(gconstpointer ar, gconstpointer br)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
113 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
114 PurpleSrvResponse *a = (PurpleSrvResponse*)ar;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
115 PurpleSrvResponse *b = (PurpleSrvResponse*)br;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
116
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
117 if(a->pref == b->pref) {
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
118 if(a->weight == b->weight)
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
119 return 0;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
120 if(a->weight < b->weight)
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
121 return -1;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
122 return 1;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
123 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
124 if(a->pref < b->pref)
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
125 return -1;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
126 return 1;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
127 }
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
128
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
129 /**
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
130 * Iterate over a list of PurpleSrvResponseContainer making the sum
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
131 * the running total of the sums. Select a random integer in the range
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
132 * (1, sum+1), then find the first element greater than or equal to the
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
133 * number selected. From RFC 2782.
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
134 *
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
135 * @param list The list of PurpleSrvResponseContainer. This function
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
136 * removes a node from this list and returns the new list.
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
137 * @param container_ptr The PurpleSrvResponseContainer that was chosen
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
138 * will be returned here.
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
139 */
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
140 static GList *
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
141 select_random_response(GList *list, PurpleSrvResponseContainer **container_ptr)
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
142 {
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
143 GList *cur;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
144 size_t runningtotal;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
145 int r;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
146
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
147 runningtotal = 0;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
148 cur = list;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
149
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
150 while (cur) {
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
151 PurpleSrvResponseContainer *container = cur->data;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
152 runningtotal += container->response->weight;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
153 container->sum = runningtotal;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
154 cur = cur->next;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
155 }
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
156
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
157 /*
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
158 * If the running total is greater than 0, pick a number between
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
159 * 1 and the runningtotal inclusive. (This is not precisely what
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
160 * the RFC algorithm describes, but we wish to deal with integers
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
161 * and avoid floats. This is functionally equivalent.)
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
162 * If running total is 0, then choose r = 0.
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
163 */
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
164 r = runningtotal ? g_random_int_range(1, runningtotal + 1) : 0;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
165 cur = list;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
166 while (r > ((PurpleSrvResponseContainer *)cur->data)->sum) {
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
167 cur = cur->next;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
168 }
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
169
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
170 /* Set the return parameter and remove cur from the list */
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
171 *container_ptr = cur->data;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
172 return g_list_delete_link(list, cur);
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
173 }
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
174
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
175 /**
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
176 * Reorder a GList of PurpleSrvResponses that have the same priority
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
177 * (aka "pref").
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
178 */
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
179 static void
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
180 srv_reorder(GList *list, int num)
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
181 {
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
182 int i;
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
183 GList *cur, *container_list = NULL;
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
184 PurpleSrvResponseContainer *container;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
185
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
186 if (num < 2)
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
187 /* Nothing to sort */
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
188 return;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
189
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
190 /* First build a list of container structs */
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
191 for (i = 0, cur = list; i < num; i++, cur = cur->next) {
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
192 container = g_new(PurpleSrvResponseContainer, 1);
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
193 container->response = cur->data;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
194 container_list = g_list_prepend(container_list, container);
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
195 }
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
196 container_list = g_list_reverse(container_list);
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
197
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
198 /*
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
199 * Re-order the list that was passed in as a parameter. We leave
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
200 * the list nodes in place, but replace their data pointers.
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
201 */
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
202 cur = list;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
203 while (container_list) {
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
204 container_list = select_random_response(container_list, &container);
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
205 cur->data = container->response;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
206 g_free(container);
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
207 cur = cur->next;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
208 }
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
209 }
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
210
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
211 /**
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
212 * Sorts a GList of PurpleSrvResponses according to the
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
213 * algorithm described in RFC 2782.
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
214 *
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
215 * @param response GList of PurpleSrvResponse's
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
216 * @param The original list, resorted
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
217 */
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
218 static GList *
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
219 purple_srv_sort(GList *list)
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
220 {
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
221 int pref, count;
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
222 GList *cur, *start;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
223
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
224 if (!list || !list->next) {
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
225 /* Nothing to sort */
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
226 return list;
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
227 }
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
228
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
229 list = g_list_sort(list, responsecompare);
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
230
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
231 start = cur = list;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
232 count = 1;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
233 while (cur) {
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
234 PurpleSrvResponse *next_response;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
235 pref = ((PurpleSrvResponse *)cur->data)->pref;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
236 next_response = cur->next ? cur->next->data : NULL;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
237 if (!next_response || next_response->pref != pref) {
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
238 /*
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
239 * The 'count' records starting at 'start' all have the same
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
240 * priority. Sort them by weight.
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
241 */
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
242 srv_reorder(start, count);
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
243 start = cur->next;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
244 count = 0;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
245 }
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
246 count++;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
247 cur = cur->next;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
248 }
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
249
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
250 return list;
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
251 }
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
252
31976
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
253 static PurpleSrvTxtQueryData *
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
254 query_data_new(int type, gchar *query, gpointer extradata)
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
255 {
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
256 PurpleSrvTxtQueryData *query_data = g_new0(PurpleSrvTxtQueryData, 1);
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
257 query_data->type = type;
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
258 query_data->extradata = extradata;
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
259 query_data->query = query;
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
260 #ifndef _WIN32
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
261 query_data->fd_in = -1;
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
262 query_data->fd_out = -1;
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
263 #endif
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
264 return query_data;
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
265 }
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
266
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
267 void
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
268 purple_srv_txt_query_destroy(PurpleSrvTxtQueryData *query_data)
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
269 {
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
270 PurpleSrvTxtQueryUiOps *ops = purple_srv_txt_query_get_ui_ops();
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
271
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
272 if (ops && ops->destroy)
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
273 ops->destroy(query_data);
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
274
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
275 if (query_data->handle > 0)
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
276 purple_input_remove(query_data->handle);
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
277 #ifdef _WIN32
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
278 if (query_data->resolver != NULL)
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
279 {
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
280 /*
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
281 * It's not really possible to kill a thread. So instead we
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
282 * just set the callback to NULL and let the DNS lookup
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
283 * finish.
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
284 */
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
285 query_data->cb.srv = NULL;
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
286 return;
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
287 }
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
288 g_free(query_data->error_message);
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
289 #else
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
290 if (query_data->fd_out != -1)
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
291 close(query_data->fd_out);
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
292 if (query_data->fd_in != -1)
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
293 close(query_data->fd_in);
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
294 #endif
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
295 g_free(query_data->query);
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
296 g_free(query_data);
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
297 }
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
298
28784
0344b94dba21 dns: Avoid two warnings when building with --disable-idn.
Paul Aurich <darkrain42@pidgin.im>
parents: 28675
diff changeset
299 #ifdef USE_IDN
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
300 static gboolean
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
301 dns_str_is_ascii(const char *name)
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
302 {
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
303 guchar *c;
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
304 for (c = (guchar *)name; c && *c; ++c) {
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
305 if (*c > 0x7f)
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
306 return FALSE;
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
307 }
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
308
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
309 return TRUE;
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
310 }
28784
0344b94dba21 dns: Avoid two warnings when building with --disable-idn.
Paul Aurich <darkrain42@pidgin.im>
parents: 28675
diff changeset
311 #endif
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
312
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
313 #ifndef _WIN32
28792
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
314 static void
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
315 write_to_parent(int in, int out, gconstpointer data, gsize size)
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
316 {
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
317 const guchar *buf = data;
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
318 gssize w;
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
319
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
320 do {
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
321 w = write(out, buf, size);
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
322 if (w > 0) {
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
323 buf += w;
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
324 size -= w;
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
325 } else if (w < 0 && errno == EINTR) {
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
326 /* Let's try some more; */
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
327 w = 1;
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
328 }
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
329 } while (size > 0 && w > 0);
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
330
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
331 if (size != 0) {
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
332 /* An error occurred */
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
333 close(out);
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
334 close(in);
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
335 _exit(0);
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
336 }
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
337 }
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
338
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
339 /* Read size bytes to data. Dies if an error occurs. */
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
340 static void
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
341 read_from_parent(int in, int out, gpointer data, gsize size)
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
342 {
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
343 guchar *buf = data;
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
344 gssize r;
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
345
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
346 do {
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
347 r = read(in, data, size);
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
348 if (r > 0) {
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
349 buf += r;
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
350 size -= r;
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
351 } else if (r < 0 && errno == EINTR) {
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
352 /* Let's try some more; */
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
353 r = 1;
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
354 }
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
355 } while (size > 0 && r > 0);
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
356
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
357 if (size != 0) {
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
358 /* An error occurred */
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
359 close(out);
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
360 close(in);
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
361 _exit(0);
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
362 }
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
363 }
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
364
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
365
16701
0b41f23396cc Mark two functions as "noreturn"
Mark Doliner <markdoliner@pidgin.im>
parents: 15890
diff changeset
366 G_GNUC_NORETURN static void
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
367 resolve(int in, int out)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
368 {
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
369 GList *ret = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
370 PurpleSrvResponse *srvres;
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
371 PurpleTxtResponse *txtres;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
372 queryans answer;
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
373 int size, qdcount, ancount;
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
374 guchar *end, *cp;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
375 gchar name[256];
13127
0adfbecc67ac [gaim-migrate @ 15488]
Mark Doliner <markdoliner@pidgin.im>
parents: 12847
diff changeset
376 guint16 type, dlen, pref, weight, port;
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
377 PurpleSrvInternalQuery query;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
378
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
379 #ifdef HAVE_SIGNAL_H
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
380 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
381 #endif
15859
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
382
28792
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
383 read_from_parent(in, out, &query, sizeof(query));
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
384
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
385 size = res_query( query.query, C_IN, query.type, (u_char*)&answer, sizeof( answer));
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
386 if (size == -1) {
28792
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
387 write_to_parent(in, out, &(query.type), sizeof(query.type));
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
388 write_to_parent(in, out, &size, sizeof(size));
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
389 close(out);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
390 close(in);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
391 _exit(0);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
392 }
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
393
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
394 qdcount = ntohs(answer.hdr.qdcount);
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
395 ancount = ntohs(answer.hdr.ancount);
11381
d3d53604fe0f [gaim-migrate @ 13608]
Mark Doliner <markdoliner@pidgin.im>
parents: 11379
diff changeset
396 cp = (guchar*)&answer + sizeof(HEADER);
d3d53604fe0f [gaim-migrate @ 13608]
Mark Doliner <markdoliner@pidgin.im>
parents: 11379
diff changeset
397 end = (guchar*)&answer + size;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
398
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
399 /* skip over unwanted stuff */
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
400 while (qdcount-- > 0 && cp < end) {
11381
d3d53604fe0f [gaim-migrate @ 13608]
Mark Doliner <markdoliner@pidgin.im>
parents: 11379
diff changeset
401 size = dn_expand( (unsigned char*)&answer, end, cp, name, 256);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
402 if(size < 0) goto end;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
403 cp += size + QFIXEDSZ;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
404 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
405
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
406 while (ancount-- > 0 && cp < end) {
11381
d3d53604fe0f [gaim-migrate @ 13608]
Mark Doliner <markdoliner@pidgin.im>
parents: 11379
diff changeset
407 size = dn_expand((unsigned char*)&answer, end, cp, name, 256);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
408 if(size < 0)
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
409 goto end;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
410 cp += size;
13143
d0a29ff182c8 [gaim-migrate @ 15505]
Mark Doliner <markdoliner@pidgin.im>
parents: 13127
diff changeset
411 GETSHORT(type,cp);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
412
13127
0adfbecc67ac [gaim-migrate @ 15488]
Mark Doliner <markdoliner@pidgin.im>
parents: 12847
diff changeset
413 /* skip ttl and class since we already know it */
0adfbecc67ac [gaim-migrate @ 15488]
Mark Doliner <markdoliner@pidgin.im>
parents: 12847
diff changeset
414 cp += 6;
0adfbecc67ac [gaim-migrate @ 15488]
Mark Doliner <markdoliner@pidgin.im>
parents: 12847
diff changeset
415
13143
d0a29ff182c8 [gaim-migrate @ 15505]
Mark Doliner <markdoliner@pidgin.im>
parents: 13127
diff changeset
416 GETSHORT(dlen,cp);
29253
4621bf356c67 We should be using the type listed in the response, not in the
Mark Doliner <markdoliner@pidgin.im>
parents: 28792
diff changeset
417 if (type == T_SRV) {
13143
d0a29ff182c8 [gaim-migrate @ 15505]
Mark Doliner <markdoliner@pidgin.im>
parents: 13127
diff changeset
418 GETSHORT(pref,cp);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
419
13143
d0a29ff182c8 [gaim-migrate @ 15505]
Mark Doliner <markdoliner@pidgin.im>
parents: 13127
diff changeset
420 GETSHORT(weight,cp);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
421
13143
d0a29ff182c8 [gaim-migrate @ 15505]
Mark Doliner <markdoliner@pidgin.im>
parents: 13127
diff changeset
422 GETSHORT(port,cp);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
423
11381
d3d53604fe0f [gaim-migrate @ 13608]
Mark Doliner <markdoliner@pidgin.im>
parents: 11379
diff changeset
424 size = dn_expand( (unsigned char*)&answer, end, cp, name, 256);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
425 if(size < 0 )
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
426 goto end;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
427
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
428 cp += size;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
429
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
430 srvres = g_new0(PurpleSrvResponse, 1);
32004
4f4a9244be96 Bounds check hostname lengths for DNS SRV lookups. (EFF)
Ethan Blanton <elb@pidgin.im>
parents: 31977
diff changeset
431 if (strlen(name) > sizeof(srvres->hostname) - 1) {
4f4a9244be96 Bounds check hostname lengths for DNS SRV lookups. (EFF)
Ethan Blanton <elb@pidgin.im>
parents: 31977
diff changeset
432 purple_debug_error("dnssrv", "hostname is longer than available buffer ('%s', %zd bytes)!",
4f4a9244be96 Bounds check hostname lengths for DNS SRV lookups. (EFF)
Ethan Blanton <elb@pidgin.im>
parents: 31977
diff changeset
433 name, strlen(name));
4f4a9244be96 Bounds check hostname lengths for DNS SRV lookups. (EFF)
Ethan Blanton <elb@pidgin.im>
parents: 31977
diff changeset
434 }
4f4a9244be96 Bounds check hostname lengths for DNS SRV lookups. (EFF)
Ethan Blanton <elb@pidgin.im>
parents: 31977
diff changeset
435 g_strlcpy(srvres->hostname, name, sizeof(srvres->hostname));
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
436 srvres->pref = pref;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
437 srvres->port = port;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
438 srvres->weight = weight;
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
439
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
440 ret = g_list_prepend(ret, srvres);
29253
4621bf356c67 We should be using the type listed in the response, not in the
Mark Doliner <markdoliner@pidgin.im>
parents: 28792
diff changeset
441 } else if (type == T_TXT) {
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
442 txtres = g_new0(PurpleTxtResponse, 1);
26765
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
443 txtres->content = g_strndup((gchar*)(++cp), dlen-1);
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
444 ret = g_list_append(ret, txtres);
23606
5e648a57bb76 * some further bugfixing, BIND's libresolv does so much for the programmer, just happy it exists
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23605
diff changeset
445 cp += dlen - 1;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
446 } else {
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
447 cp += dlen;
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
448 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
449 }
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
450
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
451 end:
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
452 size = g_list_length(ret);
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
453
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
454 if (query.type == T_SRV)
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
455 ret = purple_srv_sort(ret);
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
456
28792
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
457 write_to_parent(in, out, &(query.type), sizeof(query.type));
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
458 write_to_parent(in, out, &size, sizeof(size));
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
459 while (ret != NULL)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
460 {
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
461 if (query.type == T_SRV)
28792
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
462 write_to_parent(in, out, ret->data, sizeof(PurpleSrvResponse));
28674
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
463 if (query.type == T_TXT) {
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
464 PurpleTxtResponse *response = ret->data;
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
465 gsize l = strlen(response->content) + 1 /* null byte */;
28792
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
466 write_to_parent(in, out, &l, sizeof(l));
77214d07508f dns: Check read/write return value to silence a bunch of warnings.
Paul Aurich <darkrain42@pidgin.im>
parents: 28784
diff changeset
467 write_to_parent(in, out, response->content, l);
28674
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
468 }
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
469
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
470 g_free(ret->data);
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
471 ret = g_list_remove(ret, ret->data);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
472 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
473
20128
272326eb883e applied changes from 31d62e1a78974a0239e86bfeb42b29ab75216114
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
474 close(out);
272326eb883e applied changes from 31d62e1a78974a0239e86bfeb42b29ab75216114
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
475 close(in);
272326eb883e applied changes from 31d62e1a78974a0239e86bfeb42b29ab75216114
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
476
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
477 _exit(0);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
478 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
479
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
480 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
481 resolved(gpointer data, gint source, PurpleInputCondition cond)
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
482 {
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
483 int size;
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
484 int type;
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
485 PurpleSrvTxtQueryData *query_data = (PurpleSrvTxtQueryData*)data;
11426
46f761f5c7ad [gaim-migrate @ 13663]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11395
diff changeset
486 int i;
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
487 int status;
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
488
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
489 if (read(source, &type, sizeof(type)) == sizeof(type)) {
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
490 if (read(source, &size, sizeof(size)) == sizeof(size)) {
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
491 if (size == -1 || size == 0) {
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
492 if (size == -1) {
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
493 purple_debug_warning("dnssrv", "res_query returned an error\n");
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
494 /* Re-read resolv.conf and friends in case DNS servers have changed */
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
495 res_init();
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
496 } else
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
497 purple_debug_info("dnssrv", "Found 0 entries, errno is %i\n", errno);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
498
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
499 if (type == T_SRV) {
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
500 PurpleSrvCallback cb = query_data->cb.srv;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
501 cb(NULL, 0, query_data->extradata);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
502 } else if (type == T_TXT) {
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
503 PurpleTxtCallback cb = query_data->cb.txt;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
504 cb(NULL, query_data->extradata);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
505 } else {
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
506 purple_debug_error("dnssrv", "type unknown of DNS result entry; errno is %i\n", errno);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
507 }
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
508
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
509 } else if (size) {
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
510 if (type == T_SRV) {
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
511 PurpleSrvResponse *res;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
512 PurpleSrvResponse *tmp;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
513 PurpleSrvCallback cb = query_data->cb.srv;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
514 ssize_t red;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
515 purple_debug_info("dnssrv","found %d SRV entries\n", size);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
516 tmp = res = g_new0(PurpleSrvResponse, size);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
517 for (i = 0; i < size; i++) {
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
518 red = read(source, tmp++, sizeof(PurpleSrvResponse));
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
519 if (red != sizeof(PurpleSrvResponse)) {
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
520 purple_debug_error("dnssrv","unable to read srv "
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
521 "response: %s\n", g_strerror(errno));
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
522 size = 0;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
523 g_free(res);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
524 res = NULL;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
525 }
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
526 }
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
527
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
528 cb(res, size, query_data->extradata);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
529 } else if (type == T_TXT) {
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
530 GList *responses = NULL;
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
531 PurpleTxtResponse *res;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
532 PurpleTxtCallback cb = query_data->cb.txt;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
533 ssize_t red;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
534 purple_debug_info("dnssrv","found %d TXT entries\n", size);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
535 for (i = 0; i < size; i++) {
28674
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
536 gsize len;
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
537
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
538 red = read(source, &len, sizeof(len));
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
539 if (red != sizeof(len)) {
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
540 purple_debug_error("dnssrv","unable to read txt "
28674
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
541 "response length: %s\n", g_strerror(errno));
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
542 size = 0;
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
543 g_list_foreach(responses, (GFunc)purple_txt_response_destroy, NULL);
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
544 g_list_free(responses);
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
545 responses = NULL;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
546 break;
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
547 }
28674
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
548
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
549 res = g_new0(PurpleTxtResponse, 1);
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
550 res->content = g_new0(gchar, len);
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
551
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
552 red = read(source, res->content, len);
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
553 if (red != len) {
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
554 purple_debug_error("dnssrv","unable to read txt "
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
555 "response: %s\n", g_strerror(errno));
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
556 size = 0;
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
557 purple_txt_response_destroy(res);
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
558 g_list_foreach(responses, (GFunc)purple_txt_response_destroy, NULL);
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
559 g_list_free(responses);
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
560 responses = NULL;
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
561 break;
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
562 }
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
563 responses = g_list_prepend(responses, res);
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
564 }
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
565
28674
43442ff173dc Fix the code dealing with writing a TXT lookup response from child to parent.
Paul Aurich <darkrain42@pidgin.im>
parents: 28612
diff changeset
566 responses = g_list_reverse(responses);
27157
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
567 cb(responses, query_data->extradata);
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
568 } else {
609f187d0ac7 Call res_init() when DNS queries fail in case the failure indicates a timeout
Paul Aurich <darkrain42@pidgin.im>
parents: 26970
diff changeset
569 purple_debug_error("dnssrv", "type unknown of DNS result entry; errno is %i\n", errno);
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
570 }
22234
4d54e1c5c696 More compiler warning fixes from o_sukhodolsky (with additions by me).
Mark Doliner <markdoliner@pidgin.im>
parents: 20679
diff changeset
571 }
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
572 }
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
573 }
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
574
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
575 waitpid(query_data->pid, &status, 0);
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
576 purple_srv_txt_query_destroy(query_data);
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
577 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
578
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
579 #else /* _WIN32 */
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
580
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
581 /** The Jabber Server code was inspiration for parts of this. */
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
582
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
583 static gboolean
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
584 res_main_thread_cb(gpointer data)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
585 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
586 PurpleSrvResponse *srvres = NULL;
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
587 PurpleSrvTxtQueryData *query_data = data;
28291
a342ad3611b0 Fix not calling the SRV timeout on the win32 code. Closes #9956.
Paul Aurich <darkrain42@pidgin.im>
parents: 27898
diff changeset
588 if(query_data->error_message != NULL) {
30792
155b65d26118 Fix some cases where an arbitrary string was being specified as a printf format.
Daniel Atallah <datallah@pidgin.im>
parents: 29253
diff changeset
589 purple_debug_error("dnssrv", "%s", query_data->error_message);
28291
a342ad3611b0 Fix not calling the SRV timeout on the win32 code. Closes #9956.
Paul Aurich <darkrain42@pidgin.im>
parents: 27898
diff changeset
590 if (query_data->type == DNS_TYPE_SRV) {
a342ad3611b0 Fix not calling the SRV timeout on the win32 code. Closes #9956.
Paul Aurich <darkrain42@pidgin.im>
parents: 27898
diff changeset
591 if (query_data->cb.srv)
a342ad3611b0 Fix not calling the SRV timeout on the win32 code. Closes #9956.
Paul Aurich <darkrain42@pidgin.im>
parents: 27898
diff changeset
592 query_data->cb.srv(srvres, 0, query_data->extradata);
a342ad3611b0 Fix not calling the SRV timeout on the win32 code. Closes #9956.
Paul Aurich <darkrain42@pidgin.im>
parents: 27898
diff changeset
593 } else if (query_data->type == DNS_TYPE_TXT) {
a342ad3611b0 Fix not calling the SRV timeout on the win32 code. Closes #9956.
Paul Aurich <darkrain42@pidgin.im>
parents: 27898
diff changeset
594 if (query_data->cb.txt)
a342ad3611b0 Fix not calling the SRV timeout on the win32 code. Closes #9956.
Paul Aurich <darkrain42@pidgin.im>
parents: 27898
diff changeset
595 query_data->cb.txt(NULL, query_data->extradata);
a342ad3611b0 Fix not calling the SRV timeout on the win32 code. Closes #9956.
Paul Aurich <darkrain42@pidgin.im>
parents: 27898
diff changeset
596 }
a342ad3611b0 Fix not calling the SRV timeout on the win32 code. Closes #9956.
Paul Aurich <darkrain42@pidgin.im>
parents: 27898
diff changeset
597 } else {
26968
0527c5cc906b Build error/warning fixes. Still not tested because libxmpp.dll won't load.
Paul Aurich <darkrain42@pidgin.im>
parents: 26766
diff changeset
598 if (query_data->type == DNS_TYPE_SRV) {
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
599 PurpleSrvResponse *srvres_tmp = NULL;
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
600 GList *lst = query_data->results;
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
601 int size = g_list_length(lst);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
602
24743
4762054cf996 dnssrv.c:
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
603 if(query_data->cb.srv && size > 0)
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
604 srvres_tmp = srvres = g_new0(PurpleSrvResponse, size);
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
605 while (lst) {
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
606 PurpleSrvResponse *lstdata = lst->data;
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
607 lst = g_list_delete_link(lst, lst);
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
608
24743
4762054cf996 dnssrv.c:
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
609 if(query_data->cb.srv)
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
610 memcpy(srvres_tmp++, lstdata, sizeof(PurpleSrvResponse));
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
611 g_free(lstdata);
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
612 }
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
613
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
614 query_data->results = NULL;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
615
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
616 purple_debug_info("dnssrv", "found %d SRV entries\n", size);
27454
e950ec66bb5e Strip trailing whitespace and spaces to tab
Mark Doliner <markdoliner@pidgin.im>
parents: 27157
diff changeset
617
24743
4762054cf996 dnssrv.c:
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
618 if(query_data->cb.srv) query_data->cb.srv(srvres, size, query_data->extradata);
26968
0527c5cc906b Build error/warning fixes. Still not tested because libxmpp.dll won't load.
Paul Aurich <darkrain42@pidgin.im>
parents: 26766
diff changeset
619 } else if (query_data->type == DNS_TYPE_TXT) {
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
620 GList *lst = query_data->results;
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
621
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
622 purple_debug_info("dnssrv", "found %d TXT entries\n", g_list_length(lst));
27454
e950ec66bb5e Strip trailing whitespace and spaces to tab
Mark Doliner <markdoliner@pidgin.im>
parents: 27157
diff changeset
623
26766
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
624 if (query_data->cb.txt) {
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
625 query_data->results = NULL;
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
626 query_data->cb.txt(lst, query_data->extradata);
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
627 }
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
628 } else {
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
629 purple_debug_error("dnssrv", "unknown query type");
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
630 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
631 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
632
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
633 query_data->resolver = NULL;
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
634 query_data->handle = 0;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
635
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
636 purple_srv_txt_query_destroy(query_data);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
637
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
638 return FALSE;
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
639 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
640
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
641 static gpointer
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
642 res_thread(gpointer data)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
643 {
12451
d9feea46dac4 [gaim-migrate @ 14760]
Daniel Atallah <datallah@pidgin.im>
parents: 12439
diff changeset
644 PDNS_RECORD dr = NULL;
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
645 int type;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
646 DNS_STATUS ds;
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
647 PurpleSrvTxtQueryData *query_data = data;
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
648 type = query_data->type;
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
649 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
650 if (ds != ERROR_SUCCESS) {
12691
4c178bccdba7 [gaim-migrate @ 15034]
Daniel Atallah <datallah@pidgin.im>
parents: 12686
diff changeset
651 gchar *msg = g_win32_error_message(ds);
24743
4762054cf996 dnssrv.c:
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
652 if (type == DNS_TYPE_SRV) {
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
653 query_data->error_message = g_strdup_printf("Couldn't look up SRV record. %s (%lu).\n", msg, ds);
24743
4762054cf996 dnssrv.c:
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
654 } else if (type == DNS_TYPE_TXT) {
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
655 query_data->error_message = g_strdup_printf("Couldn't look up TXT record. %s (%lu).\n", msg, ds);
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
656 }
12691
4c178bccdba7 [gaim-migrate @ 15034]
Daniel Atallah <datallah@pidgin.im>
parents: 12686
diff changeset
657 g_free(msg);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
658 } else {
24743
4762054cf996 dnssrv.c:
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
659 if (type == DNS_TYPE_SRV) {
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
660 PDNS_RECORD dr_tmp;
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
661 GList *lst = NULL;
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
662 DNS_SRV_DATA *srv_data;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
663 PurpleSrvResponse *srvres;
27454
e950ec66bb5e Strip trailing whitespace and spaces to tab
Mark Doliner <markdoliner@pidgin.im>
parents: 27157
diff changeset
664
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
665 for (dr_tmp = dr; dr_tmp != NULL; dr_tmp = dr_tmp->pNext) {
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
666 /* Discard any incorrect entries. I'm not sure if this is necessary */
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
667 if (dr_tmp->wType != type || strcmp(dr_tmp->pName, query_data->query) != 0) {
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
668 continue;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
669 }
12451
d9feea46dac4 [gaim-migrate @ 14760]
Daniel Atallah <datallah@pidgin.im>
parents: 12439
diff changeset
670
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
671 srv_data = &dr_tmp->Data.SRV;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
672 srvres = g_new0(PurpleSrvResponse, 1);
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
673 strncpy(srvres->hostname, srv_data->pNameTarget, 255);
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
674 srvres->hostname[255] = '\0';
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
675 srvres->pref = srv_data->wPriority;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
676 srvres->port = srv_data->wPort;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
677 srvres->weight = srv_data->wWeight;
27454
e950ec66bb5e Strip trailing whitespace and spaces to tab
Mark Doliner <markdoliner@pidgin.im>
parents: 27157
diff changeset
678
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
679 lst = g_list_prepend(lst, srvres);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
680 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
681
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
682 MyDnsRecordListFree(dr, DnsFreeRecordList);
27456
4f0bc5271712 Changes to our DNS SRV record sorting, care of Vijay Vijay Raghunathan
Mark Doliner <markdoliner@pidgin.im>
parents: 27454
diff changeset
683 query_data->results = purple_srv_sort(lst);
26970
b3dfce2dc9d3 Missed one (copying changes manually between computers is clearly an error-ful
Paul Aurich <darkrain42@pidgin.im>
parents: 26968
diff changeset
684 } else if (type == DNS_TYPE_TXT) {
26765
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
685 PDNS_RECORD dr_tmp;
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
686 GList *lst = NULL;
26765
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
687 DNS_TXT_DATA *txt_data;
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
688 PurpleTxtResponse *txtres;
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
689
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
690 for (dr_tmp = dr; dr_tmp != NULL; dr_tmp = dr_tmp->pNext) {
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
691 GString *s;
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
692 int i;
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
693
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
694 /* Discard any incorrect entries. I'm not sure if this is necessary */
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
695 if (dr_tmp->wType != type || strcmp(dr_tmp->pName, query_data->query) != 0) {
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
696 continue;
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
697 }
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
698
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
699 txt_data = &dr_tmp->Data.TXT;
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
700 txtres = g_new0(PurpleTxtResponse, 1);
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
701
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
702 s = g_string_new("");
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
703 for (i = 0; i < txt_data->dwStringCount; ++i)
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
704 s = g_string_append(s, txt_data->pStringArray[i]);
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
705 txtres->content = g_string_free(s, FALSE);
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
706
27604
15e124d441cd I was seeing some crashes when connecting to Google Talk on my work laptop.
Etan Reisner <deryni@pidgin.im>
parents: 27456
diff changeset
707 lst = g_list_append(lst, txtres);
26765
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
708 }
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
709
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
710 MyDnsRecordListFree(dr, DnsFreeRecordList);
fc156c427d59 First crack at Win32 TXT DNS query code and don't leak the PurpleTxtResponses
Paul Aurich <darkrain42@pidgin.im>
parents: 26531
diff changeset
711 query_data->results = lst;
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
712 } else {
27454
e950ec66bb5e Strip trailing whitespace and spaces to tab
Mark Doliner <markdoliner@pidgin.im>
parents: 27157
diff changeset
713
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
714 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
715 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
716
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
717 /* back to main thread */
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
718 /* Note: this should *not* be attached to query_data->handle - it will cause leakage */
22351
6ca0640b3d31 Change some g_idle_add(...) calls in libpurple to purple_timeout_add(0, ...)
Mark Doliner <markdoliner@pidgin.im>
parents: 22249
diff changeset
719 purple_timeout_add(0, res_main_thread_cb, query_data);
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
720
12691
4c178bccdba7 [gaim-migrate @ 15034]
Daniel Atallah <datallah@pidgin.im>
parents: 12686
diff changeset
721 g_thread_exit(NULL);
4c178bccdba7 [gaim-migrate @ 15034]
Daniel Atallah <datallah@pidgin.im>
parents: 12686
diff changeset
722 return NULL;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
723 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
724
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
725 #endif
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
726
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
727 PurpleSrvTxtQueryData *
32300
59a31f9f67fc Clean up SRV/TXT query functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32141
diff changeset
728 purple_srv_resolve(PurpleAccount *account, const char *protocol,
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
729 const char *transport, const char *domain, PurpleSrvCallback cb,
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
730 gpointer extradata)
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
731 {
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
732 char *query;
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
733 char *hostname;
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
734 PurpleSrvTxtQueryData *query_data;
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
735 PurpleProxyType proxy_type;
26968
0527c5cc906b Build error/warning fixes. Still not tested because libxmpp.dll won't load.
Paul Aurich <darkrain42@pidgin.im>
parents: 26766
diff changeset
736 #ifndef _WIN32
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
737 PurpleSrvInternalQuery internal_query;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
738 int in[2], out[2];
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
739 int pid;
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
740 #else
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
741 GError* err = NULL;
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
742 static gboolean initialized = FALSE;
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
743 #endif
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
744
25180
3aecff7754d5 Fix a crash in DNS SRV resolution when one of the required parameters is NULL.
Florian Quèze <florian@instantbird.org>
parents: 24672
diff changeset
745 if (!protocol || !*protocol || !transport || !*transport || !domain || !*domain) {
3aecff7754d5 Fix a crash in DNS SRV resolution when one of the required parameters is NULL.
Florian Quèze <florian@instantbird.org>
parents: 24672
diff changeset
746 purple_debug_error("dnssrv", "Wrong arguments\n");
3aecff7754d5 Fix a crash in DNS SRV resolution when one of the required parameters is NULL.
Florian Quèze <florian@instantbird.org>
parents: 24672
diff changeset
747 cb(NULL, 0, extradata);
3aecff7754d5 Fix a crash in DNS SRV resolution when one of the required parameters is NULL.
Florian Quèze <florian@instantbird.org>
parents: 24672
diff changeset
748 g_return_val_if_reached(NULL);
3aecff7754d5 Fix a crash in DNS SRV resolution when one of the required parameters is NULL.
Florian Quèze <florian@instantbird.org>
parents: 24672
diff changeset
749 }
3aecff7754d5 Fix a crash in DNS SRV resolution when one of the required parameters is NULL.
Florian Quèze <florian@instantbird.org>
parents: 24672
diff changeset
750
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
751 proxy_type = purple_proxy_info_get_type(
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
752 purple_proxy_get_setup(account));
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
753 if (proxy_type == PURPLE_PROXY_TOR) {
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
754 purple_debug_info("dnssrv", "Aborting SRV lookup in Tor Proxy mode.");
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
755 cb(NULL, 0, extradata);
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
756 return NULL;
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
757 }
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
758
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
759 #ifdef USE_IDN
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
760 if (!dns_str_is_ascii(domain)) {
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
761 int ret = purple_network_convert_idn_to_ascii(domain, &hostname);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
762 if (ret != 0) {
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
763 purple_debug_error("dnssrv", "IDNA ToASCII failed\n");
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
764 cb(NULL, 0, extradata);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
765 return NULL;
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
766 }
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
767 } else /* Fallthru is intentional */
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
768 #endif
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
769 hostname = g_strdup(domain);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
770
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
771 query = g_strdup_printf("_%s._%s.%s", protocol, transport, hostname);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
772 purple_debug_info("dnssrv","querying SRV record for %s: %s\n", domain,
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
773 query);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
774 g_free(hostname);
31970
bb77d18e9293 Whitespace changes
Paul Aurich <darkrain42@pidgin.im>
parents: 31969
diff changeset
775
31977
da742b7e1303 dnssrv: Hmph, this is what I get for swapping the argument order around and not paying attention
Paul Aurich <darkrain42@pidgin.im>
parents: 31976
diff changeset
776 query_data = query_data_new(PurpleDnsTypeSrv, query, extradata);
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
777 query_data->cb.srv = cb;
31970
bb77d18e9293 Whitespace changes
Paul Aurich <darkrain42@pidgin.im>
parents: 31969
diff changeset
778
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
779 if (purple_srv_txt_query_ui_resolve(query_data))
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
780 {
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
781 return query_data;
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
782 }
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
783
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
784 #ifndef _WIN32
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
785 if(pipe(in) || pipe(out)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
786 purple_debug_error("dnssrv", "Could not create pipe\n");
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
787 g_free(query);
31972
814e7451ef09 dnssrv: Proper memory management here, which stops random crashes elsewhere.
Paul Aurich <darkrain42@pidgin.im>
parents: 31971
diff changeset
788 g_free(query_data);
11382
4458ab177b10 [gaim-migrate @ 13609]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11381
diff changeset
789 cb(NULL, 0, extradata);
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
790 return NULL;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
791 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
792
32141
6d31ebf649f7 A while ago I noticed that we don't have enforce a max on the
Mark Doliner <markdoliner@pidgin.im>
parents: 32004
diff changeset
793 /*
6d31ebf649f7 A while ago I noticed that we don't have enforce a max on the
Mark Doliner <markdoliner@pidgin.im>
parents: 32004
diff changeset
794 * TODO: We should put a cap on the number of forked processes that we
6d31ebf649f7 A while ago I noticed that we don't have enforce a max on the
Mark Doliner <markdoliner@pidgin.im>
parents: 32004
diff changeset
795 * allow at any given time. If we get too many requests they
6d31ebf649f7 A while ago I noticed that we don't have enforce a max on the
Mark Doliner <markdoliner@pidgin.im>
parents: 32004
diff changeset
796 * should be put into a queue and handled later. (This is what
6d31ebf649f7 A while ago I noticed that we don't have enforce a max on the
Mark Doliner <markdoliner@pidgin.im>
parents: 32004
diff changeset
797 * we do for A record lookups.)
6d31ebf649f7 A while ago I noticed that we don't have enforce a max on the
Mark Doliner <markdoliner@pidgin.im>
parents: 32004
diff changeset
798 */
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
799 pid = fork();
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
800 if (pid == -1) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
801 purple_debug_error("dnssrv", "Could not create process!\n");
31972
814e7451ef09 dnssrv: Proper memory management here, which stops random crashes elsewhere.
Paul Aurich <darkrain42@pidgin.im>
parents: 31971
diff changeset
802 g_free(query);
814e7451ef09 dnssrv: Proper memory management here, which stops random crashes elsewhere.
Paul Aurich <darkrain42@pidgin.im>
parents: 31971
diff changeset
803 g_free(query_data);
11382
4458ab177b10 [gaim-migrate @ 13609]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11381
diff changeset
804 cb(NULL, 0, extradata);
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
805 return NULL;
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
806 }
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
807
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
808 /* Child */
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
809 if (pid == 0)
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
810 {
22249
18041843e873 Fix a memleak that doesn't matter because it's in a child process
Mark Doliner <markdoliner@pidgin.im>
parents: 22234
diff changeset
811 g_free(query);
31972
814e7451ef09 dnssrv: Proper memory management here, which stops random crashes elsewhere.
Paul Aurich <darkrain42@pidgin.im>
parents: 31971
diff changeset
812 g_free(query_data);
22249
18041843e873 Fix a memleak that doesn't matter because it's in a child process
Mark Doliner <markdoliner@pidgin.im>
parents: 22234
diff changeset
813
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
814 close(out[0]);
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
815 close(in[1]);
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
816 resolve(in[0], out[1]);
22249
18041843e873 Fix a memleak that doesn't matter because it's in a child process
Mark Doliner <markdoliner@pidgin.im>
parents: 22234
diff changeset
817 /* resolve() does not return */
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
818 }
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
819
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
820 close(out[1]);
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
821 close(in[0]);
11395
1b19bd77adf6 [gaim-migrate @ 13626]
Daniel Atallah <datallah@pidgin.im>
parents: 11382
diff changeset
822
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
823 internal_query.type = T_SRV;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
824 strncpy(internal_query.query, query, 255);
28612
5f60e92c2f49 Null-terminate this string explicitly to avoid valgrind complaining.
Paul Aurich <darkrain42@pidgin.im>
parents: 28291
diff changeset
825 internal_query.query[255] = '\0';
27454
e950ec66bb5e Strip trailing whitespace and spaces to tab
Mark Doliner <markdoliner@pidgin.im>
parents: 27157
diff changeset
826
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
827 if (write(in[1], &internal_query, sizeof(internal_query)) < 0)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
828 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
829
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
830 query_data->pid = pid;
20128
272326eb883e applied changes from 31d62e1a78974a0239e86bfeb42b29ab75216114
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
831 query_data->fd_out = out[0];
272326eb883e applied changes from 31d62e1a78974a0239e86bfeb42b29ab75216114
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
832 query_data->fd_in = in[1];
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
833 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
834
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
835 return query_data;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
836 #else
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
837 if (!initialized) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15776
diff changeset
838 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
839 MyDnsRecordListFree = (void*) wpurple_find_and_loadproc(
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
840 "dnsapi.dll", "DnsRecordListFree");
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
841 initialized = TRUE;
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
842 }
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
843
15859
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
844 if (!MyDnsQuery_UTF8 || !MyDnsRecordListFree)
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
845 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
846 else {
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
847 query_data->resolver = g_thread_create(res_thread, query_data, FALSE, &err);
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
848 if (query_data->resolver == NULL) {
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
849 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
850 g_error_free(err);
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
851 }
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
852 }
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
853
15859
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
854 /* 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
855 * Asynchronously call the callback since stuff may not expect
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
856 * the callback to be called before this returns */
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
857 if (query_data->error_message != NULL)
22351
6ca0640b3d31 Change some g_idle_add(...) calls in libpurple to purple_timeout_add(0, ...)
Mark Doliner <markdoliner@pidgin.im>
parents: 22249
diff changeset
858 query_data->handle = purple_timeout_add(0, res_main_thread_cb, query_data);
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
859
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
860 return query_data;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
861 #endif
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
862 }
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
863
32300
59a31f9f67fc Clean up SRV/TXT query functions.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32141
diff changeset
864 PurpleSrvTxtQueryData *purple_txt_resolve(PurpleAccount *account,
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
865 const char *owner, const char *domain, PurpleTxtCallback cb,
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
866 gpointer extradata)
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
867 {
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
868 char *query;
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
869 char *hostname;
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
870 PurpleSrvTxtQueryData *query_data;
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
871 PurpleProxyType proxy_type;
26968
0527c5cc906b Build error/warning fixes. Still not tested because libxmpp.dll won't load.
Paul Aurich <darkrain42@pidgin.im>
parents: 26766
diff changeset
872 #ifndef _WIN32
23605
8d2e64e9208e * fixing some bugs, finishing support for TXT queries
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23604
diff changeset
873 PurpleSrvInternalQuery internal_query;
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
874 int in[2], out[2];
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
875 int pid;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
876 #else
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
877 GError* err = NULL;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
878 static gboolean initialized = FALSE;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
879 #endif
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
880
31678
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
881 proxy_type = purple_proxy_info_get_type(
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
882 purple_proxy_get_setup(account));
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
883 if (proxy_type == PURPLE_PROXY_TOR) {
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
884 purple_debug_info("dnssrv", "Aborting TXT lookup in Tor Proxy mode.");
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
885 cb(NULL, extradata);
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
886 return NULL;
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
887 }
ad8a9a266b05 Add new DNS-related API to perform lookups in the context of an account.
Daniel Atallah <datallah@pidgin.im>
parents: 31676
diff changeset
888
27898
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
889 #ifdef USE_IDN
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
890 if (!dns_str_is_ascii(domain)) {
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
891 int ret = purple_network_convert_idn_to_ascii(domain, &hostname);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
892 if (ret != 0) {
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
893 purple_debug_error("dnssrv", "IDNA ToASCII failed\n");
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
894 cb(NULL, extradata);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
895 return NULL;
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
896 }
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
897 } else /* fallthru is intentional */
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
898 #endif
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
899 hostname = g_strdup(domain);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
900
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
901 query = g_strdup_printf("%s.%s", owner, hostname);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
902 purple_debug_info("dnssrv","querying TXT record for %s: %s\n", domain,
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
903 query);
4a6450d92e11 Move the IDN support into the DNS routines.
Paul Aurich <darkrain42@pidgin.im>
parents: 27604
diff changeset
904 g_free(hostname);
31970
bb77d18e9293 Whitespace changes
Paul Aurich <darkrain42@pidgin.im>
parents: 31969
diff changeset
905
31976
5b5accfbac20 dnssrv: Refactor to reduce code duplication
Paul Aurich <darkrain42@pidgin.im>
parents: 31975
diff changeset
906 query_data = query_data_new(PurpleDnsTypeTxt, query, extradata);
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
907 query_data->cb.txt = cb;
31970
bb77d18e9293 Whitespace changes
Paul Aurich <darkrain42@pidgin.im>
parents: 31969
diff changeset
908
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
909 if (purple_srv_txt_query_ui_resolve(query_data)) {
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
910 /* query intentionally not freed
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
911 */
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
912 return query_data;
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
913 }
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
914
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
915 #ifndef _WIN32
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
916 if(pipe(in) || pipe(out)) {
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
917 purple_debug_error("dnssrv", "Could not create pipe\n");
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
918 g_free(query);
31972
814e7451ef09 dnssrv: Proper memory management here, which stops random crashes elsewhere.
Paul Aurich <darkrain42@pidgin.im>
parents: 31971
diff changeset
919 g_free(query_data);
26766
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
920 cb(NULL, extradata);
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
921 return NULL;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
922 }
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
923
32141
6d31ebf649f7 A while ago I noticed that we don't have enforce a max on the
Mark Doliner <markdoliner@pidgin.im>
parents: 32004
diff changeset
924 /*
6d31ebf649f7 A while ago I noticed that we don't have enforce a max on the
Mark Doliner <markdoliner@pidgin.im>
parents: 32004
diff changeset
925 * TODO: We should put a cap on the number of forked processes that we
6d31ebf649f7 A while ago I noticed that we don't have enforce a max on the
Mark Doliner <markdoliner@pidgin.im>
parents: 32004
diff changeset
926 * allow at any given time. If we get too many requests they
6d31ebf649f7 A while ago I noticed that we don't have enforce a max on the
Mark Doliner <markdoliner@pidgin.im>
parents: 32004
diff changeset
927 * should be put into a queue and handled later. (This is what
6d31ebf649f7 A while ago I noticed that we don't have enforce a max on the
Mark Doliner <markdoliner@pidgin.im>
parents: 32004
diff changeset
928 * we do for A record lookups.)
6d31ebf649f7 A while ago I noticed that we don't have enforce a max on the
Mark Doliner <markdoliner@pidgin.im>
parents: 32004
diff changeset
929 */
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
930 pid = fork();
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
931 if (pid == -1) {
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
932 purple_debug_error("dnssrv", "Could not create process!\n");
31972
814e7451ef09 dnssrv: Proper memory management here, which stops random crashes elsewhere.
Paul Aurich <darkrain42@pidgin.im>
parents: 31971
diff changeset
933 g_free(query);
814e7451ef09 dnssrv: Proper memory management here, which stops random crashes elsewhere.
Paul Aurich <darkrain42@pidgin.im>
parents: 31971
diff changeset
934 g_free(query_data);
26766
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
935 cb(NULL, extradata);
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
936 return NULL;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
937 }
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
938
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
939 /* Child */
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
940 if (pid == 0)
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
941 {
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
942 g_free(query);
31972
814e7451ef09 dnssrv: Proper memory management here, which stops random crashes elsewhere.
Paul Aurich <darkrain42@pidgin.im>
parents: 31971
diff changeset
943 g_free(query_data);
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
944
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
945 close(out[0]);
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
946 close(in[1]);
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
947 resolve(in[0], out[1]);
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
948 /* resolve() does not return */
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
949 }
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
950
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
951 close(out[1]);
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
952 close(in[0]);
27454
e950ec66bb5e Strip trailing whitespace and spaces to tab
Mark Doliner <markdoliner@pidgin.im>
parents: 27157
diff changeset
953
23605
8d2e64e9208e * fixing some bugs, finishing support for TXT queries
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23604
diff changeset
954 internal_query.type = T_TXT;
8d2e64e9208e * fixing some bugs, finishing support for TXT queries
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23604
diff changeset
955 strncpy(internal_query.query, query, 255);
28675
88bea0ad71ad Shut up valgrind ("unitialized bytes(s)...") and changelog.
Paul Aurich <darkrain42@pidgin.im>
parents: 28674
diff changeset
956 internal_query.query[255] = '\0';
27454
e950ec66bb5e Strip trailing whitespace and spaces to tab
Mark Doliner <markdoliner@pidgin.im>
parents: 27157
diff changeset
957
23605
8d2e64e9208e * fixing some bugs, finishing support for TXT queries
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23604
diff changeset
958 if (write(in[1], &internal_query, sizeof(internal_query)) < 0)
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
959 purple_debug_error("dnssrv", "Could not write to TXT resolver\n");
31970
bb77d18e9293 Whitespace changes
Paul Aurich <darkrain42@pidgin.im>
parents: 31969
diff changeset
960
23604
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
961 query_data->pid = pid;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
962 query_data->fd_out = out[0];
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
963 query_data->fd_in = in[1];
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
964 query_data->handle = purple_input_add(out[0], PURPLE_INPUT_READ, resolved, query_data);
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
965
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
966 return query_data;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
967 #else
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
968 if (!initialized) {
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
969 MyDnsQuery_UTF8 = (void*) wpurple_find_and_loadproc("dnsapi.dll", "DnsQuery_UTF8");
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
970 MyDnsRecordListFree = (void*) wpurple_find_and_loadproc(
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
971 "dnsapi.dll", "DnsRecordListFree");
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
972 initialized = TRUE;
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
973 }
f34d41640be2 * some code style adjustments in caps.c
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23352
diff changeset
974
15859
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
975 if (!MyDnsQuery_UTF8 || !MyDnsRecordListFree)
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
976 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
977 else {
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
978 query_data->resolver = g_thread_create(res_thread, query_data, FALSE, &err);
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
979 if (query_data->resolver == NULL) {
24744
cc73361014f6 Cut-n-paste typo
Paul Aurich <darkrain42@pidgin.im>
parents: 24743
diff changeset
980 query_data->error_message = g_strdup_printf("TXT thread create failure: %s\n", (err && err->message) ? err->message : "");
15859
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
981 g_error_free(err);
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
982 }
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
983 }
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
984
26766
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
985 /* The query isn't going to happen, so finish the TXT lookup now.
15859
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
986 * Asynchronously call the callback since stuff may not expect
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
987 * the callback to be called before this returns */
98b7f9bf8e28 Minor cleanup.
Daniel Atallah <datallah@pidgin.im>
parents: 15776
diff changeset
988 if (query_data->error_message != NULL)
22351
6ca0640b3d31 Change some g_idle_add(...) calls in libpurple to purple_timeout_add(0, ...)
Mark Doliner <markdoliner@pidgin.im>
parents: 22249
diff changeset
989 query_data->handle = purple_timeout_add(0, res_main_thread_cb, query_data);
14374
a93eedc7aa6b [gaim-migrate @ 17002]
Daniel Atallah <datallah@pidgin.im>
parents: 14370
diff changeset
990
14370
12ef3d4096ee [gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
991 return query_data;
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
992 #endif
11373
80fd6df6fbe0 [gaim-migrate @ 13598]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff changeset
993 }
11379
a5a66b0e8b6e [gaim-migrate @ 13605]
Daniel Atallah <datallah@pidgin.im>
parents: 11373
diff changeset
994
26766
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
995 const gchar *
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
996 purple_txt_response_get_content(PurpleTxtResponse *resp)
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
997 {
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
998 g_return_val_if_fail(resp != NULL, NULL);
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
999
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
1000 return resp->content;
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
1001 }
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
1002
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
1003 void purple_txt_response_destroy(PurpleTxtResponse *resp)
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
1004 {
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
1005 g_return_if_fail(resp != NULL);
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
1006
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
1007 g_free(resp->content);
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
1008 g_free(resp);
854a2eaa3862 Hide PurpleTxtResponse and use a more purple API
Paul Aurich <darkrain42@pidgin.im>
parents: 26765
diff changeset
1009 }
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1010
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1011 /*
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1012 * Only used as the callback for the ui ops.
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1013 */
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1014 static void
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1015 purple_srv_query_resolved(PurpleSrvTxtQueryData *query_data, GList *records)
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1016 {
31971
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1017 GList *l;
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1018 PurpleSrvResponse *records_array;
31971
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1019 int i = 0, length;
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1020
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1021 g_return_if_fail(records != NULL);
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1022
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1023 if (query_data->cb.srv == NULL) {
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1024 purple_srv_txt_query_destroy(query_data);
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1025
31971
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1026 while (records) {
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1027 g_free(records->data);
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1028 records = g_list_delete_link(records, records);
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1029 }
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1030 return;
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1031 }
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1032
31971
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1033 records = purple_srv_sort(records);
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1034 length = g_list_length(records);
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1035
31971
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1036 purple_debug_info("dnssrv", "SRV records resolved for %s, count: %d\n",
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1037 query_data->query, length);
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1038
31971
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1039 records_array = g_new(PurpleSrvResponse, length);
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1040 for (l = records; l; l = l->next, i++) {
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1041 records_array[i] = *(PurpleSrvResponse *)l->data;
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1042 }
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1043
31971
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1044 query_data->cb.srv(records_array, length, query_data->extradata);
31970
bb77d18e9293 Whitespace changes
Paul Aurich <darkrain42@pidgin.im>
parents: 31969
diff changeset
1045
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1046 purple_srv_txt_query_destroy(query_data);
31970
bb77d18e9293 Whitespace changes
Paul Aurich <darkrain42@pidgin.im>
parents: 31969
diff changeset
1047
31971
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1048 while (records) {
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1049 g_free(records->data);
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1050 records = g_list_delete_link(records, records);
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1051 }
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1052 }
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1053
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1054 /*
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1055 * Only used as the callback for the ui ops.
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1056 */
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1057 static void
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1058 purple_txt_query_resolved(PurpleSrvTxtQueryData *query_data, GList *entries)
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1059 {
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1060 g_return_if_fail(entries != NULL);
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1061
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1062 purple_debug_info("dnssrv", "TXT entries resolved for %s, count: %d\n", query_data->query, g_list_length(entries));
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1063
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1064 /* the callback should g_free the entries.
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1065 */
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1066 if (query_data->cb.txt != NULL)
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1067 query_data->cb.txt(entries, query_data->extradata);
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1068 else {
31971
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1069 while (entries) {
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1070 g_free(entries->data);
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1071 entries = g_list_delete_link(entries, entries);
8a6873e1920c dnssrv: Avoid a few extraneous iterations through the list. Refs #12647
Paul Aurich <darkrain42@pidgin.im>
parents: 31970
diff changeset
1072 }
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1073 }
31970
bb77d18e9293 Whitespace changes
Paul Aurich <darkrain42@pidgin.im>
parents: 31969
diff changeset
1074
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1075 purple_srv_txt_query_destroy(query_data);
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1076 }
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1077
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1078 static void
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1079 purple_srv_query_failed(PurpleSrvTxtQueryData *query_data, const gchar *error_message)
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1080 {
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1081 purple_debug_error("dnssrv", "%s\n", error_message);
31970
bb77d18e9293 Whitespace changes
Paul Aurich <darkrain42@pidgin.im>
parents: 31969
diff changeset
1082
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1083 if (query_data->cb.srv != NULL)
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1084 query_data->cb.srv(NULL, 0, query_data->extradata);
31970
bb77d18e9293 Whitespace changes
Paul Aurich <darkrain42@pidgin.im>
parents: 31969
diff changeset
1085
31969
82e51b0825bc Fixes to the PurpleSrvTxtQueryUiOps code. Refs #12647
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 31738
diff changeset
1086 purple_srv_txt_query_destroy(query_data);
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1087 }
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1088
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1089 static gboolean
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1090 purple_srv_txt_query_ui_resolve(PurpleSrvTxtQueryData *query_data)
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1091 {
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1092 PurpleSrvTxtQueryUiOps *ops = purple_srv_txt_query_get_ui_ops();
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1093
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1094 if (ops && ops->resolve)
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1095 return ops->resolve(query_data, (query_data->type == T_SRV ? purple_srv_query_resolved : purple_txt_query_resolved), purple_srv_query_failed);
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1096
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1097 return FALSE;
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1098 }
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1099
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1100 void
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1101 purple_srv_txt_query_set_ui_ops(PurpleSrvTxtQueryUiOps *ops)
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1102 {
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1103 srv_txt_query_ui_ops = ops;
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1104 }
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1105
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1106 PurpleSrvTxtQueryUiOps *
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1107 purple_srv_txt_query_get_ui_ops(void)
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1108 {
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1109 /* It is perfectly acceptable for srv_txt_query_ui_ops to be NULL; this just
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1110 * means that the default platform-specific implementation will be used.
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1111 */
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1112 return srv_txt_query_ui_ops;
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1113 }
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1114
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1115 char *
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1116 purple_srv_txt_query_get_query(PurpleSrvTxtQueryData *query_data)
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1117 {
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1118 g_return_val_if_fail(query_data != NULL, NULL);
31970
bb77d18e9293 Whitespace changes
Paul Aurich <darkrain42@pidgin.im>
parents: 31969
diff changeset
1119
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1120 return query_data->query;
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1121 }
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1122
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1123
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1124 int
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1125 purple_srv_txt_query_get_type(PurpleSrvTxtQueryData *query_data)
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1126 {
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1127 g_return_val_if_fail(query_data != NULL, 0);
31970
bb77d18e9293 Whitespace changes
Paul Aurich <darkrain42@pidgin.im>
parents: 31969
diff changeset
1128
31625
1097ed538036 Added PurpleSrvTxtQueryUiOps which allow UIs to specify their own mechanisms
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30792
diff changeset
1129 return query_data->type;
31676
cb214cdd8a59 The T_SRV and T_TXT defines are needed on WIN32 too.
Daniel Atallah <datallah@pidgin.im>
parents: 31640
diff changeset
1130 }

mercurial