Fri, 18 Jan 2013 03:51:05 -0500
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 | 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 | 74 | union { |
| 75 | PurpleSrvCallback srv; | |
| 76 | PurpleTxtCallback txt; | |
| 77 | } cb; | |
| 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 | 114 | PurpleSrvResponse *a = (PurpleSrvResponse*)ar; |
| 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 838 | MyDnsQuery_UTF8 = (void*) wpurple_find_and_loadproc("dnsapi.dll", "DnsQuery_UTF8"); |
| 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 | 844 | if (!MyDnsQuery_UTF8 || !MyDnsRecordListFree) |
| 845 | query_data->error_message = g_strdup("System missing DNS API (Requires W2K+)\n"); | |
| 846 | else { | |
| 847 | query_data->resolver = g_thread_create(res_thread, query_data, FALSE, &err); | |
| 848 | if (query_data->resolver == NULL) { | |
| 849 | query_data->error_message = g_strdup_printf("SRV thread create failure: %s\n", (err && err->message) ? err->message : ""); | |
| 850 | g_error_free(err); | |
| 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 | 854 | /* The query isn't going to happen, so finish the SRV lookup now. |
| 855 | * Asynchronously call the callback since stuff may not expect | |
| 856 | * the callback to be called before this returns */ | |
| 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 | 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 | 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 | 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 | 975 | if (!MyDnsQuery_UTF8 || !MyDnsRecordListFree) |
| 976 | query_data->error_message = g_strdup("System missing DNS API (Requires W2K+)\n"); | |
| 977 | else { | |
| 978 | query_data->resolver = g_thread_create(res_thread, query_data, FALSE, &err); | |
| 979 | if (query_data->resolver == NULL) { | |
| 24744 | 980 | query_data->error_message = g_strdup_printf("TXT thread create failure: %s\n", (err && err->message) ? err->message : ""); |
| 15859 | 981 | g_error_free(err); |
| 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 | 986 | * Asynchronously call the callback since stuff may not expect |
| 987 | * the callback to be called before this returns */ | |
| 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | } |