Mon, 10 Feb 2014 16:22:00 +0530
Merged default branch
| 7014 | 1 | /* |
| 15884 | 2 | * purple - Jabber Protocol Plugin |
| 7014 | 3 | * |
|
28322
ac8fec1d2234
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents:
28155
diff
changeset
|
4 | * Purple is the legal property of its developers, whose names are too numerous |
|
ac8fec1d2234
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents:
28155
diff
changeset
|
5 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
ac8fec1d2234
Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents:
28155
diff
changeset
|
6 | * source distribution. |
| 7014 | 7 | * |
| 8 | * This program is free software; you can redistribute it and/or modify | |
| 9 | * it under the terms of the GNU General Public License as published by | |
| 10 | * the Free Software Foundation; either version 2 of the License, or | |
| 11 | * (at your option) any later version. | |
| 12 | * | |
| 13 | * This program is distributed in the hope that it will be useful, | |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | * GNU General Public License for more details. | |
| 17 | * | |
| 18 | * You should have received a copy of the GNU General Public License | |
| 19 | * 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:
18443
diff
changeset
|
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 7014 | 21 | * |
| 22 | */ | |
| 23 | #include "internal.h" | |
|
18441
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
24 | #include "core.h" |
| 7014 | 25 | #include "debug.h" |
| 26 | #include "prefs.h" | |
| 10941 | 27 | #include "util.h" |
| 7014 | 28 | |
| 7395 | 29 | #include "buddy.h" |
| 8312 | 30 | #include "disco.h" |
|
29913
58f5122fbcd3
First shot at refactoring the Google-specific XMPP code.
Marcus Lundblad <malu@pidgin.im>
parents:
29399
diff
changeset
|
31 | #include "google/gmail.h" |
|
58f5122fbcd3
First shot at refactoring the Google-specific XMPP code.
Marcus Lundblad <malu@pidgin.im>
parents:
29399
diff
changeset
|
32 | #include "google/google.h" |
|
58f5122fbcd3
First shot at refactoring the Google-specific XMPP code.
Marcus Lundblad <malu@pidgin.im>
parents:
29399
diff
changeset
|
33 | #include "google/jingleinfo.h" |
|
58f5122fbcd3
First shot at refactoring the Google-specific XMPP code.
Marcus Lundblad <malu@pidgin.im>
parents:
29399
diff
changeset
|
34 | #include "google/google_session.h" |
| 7014 | 35 | #include "iq.h" |
|
26143
673b6665624d
Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents:
23754
diff
changeset
|
36 | #include "jingle/jingle.h" |
| 7170 | 37 | #include "oob.h" |
| 7014 | 38 | #include "roster.h" |
| 7395 | 39 | #include "si.h" |
|
17769
69d98a4da006
applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <am@adiumx.com>
parents:
15884
diff
changeset
|
40 | #include "ping.h" |
|
17805
5bd417a1c847
Implemented XEP-0050: Ad-Hoc Commands. Note that this XEP requires sending an initial command to the peer, which is not implemented in libpurple itself (since this requires a discovery browser or equivalent).
Andreas Monitzer <am@adiumx.com>
parents:
17769
diff
changeset
|
41 | #include "adhoccommands.h" |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23076
diff
changeset
|
42 | #include "data.h" |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
23076
diff
changeset
|
43 | #include "ibb.h" |
| 7014 | 44 | |
|
7058
c62db98b7a2a
[gaim-migrate @ 7621]
Herman Bloggs <herman@bluedigits.com>
parents:
7014
diff
changeset
|
45 | #ifdef _WIN32 |
|
c62db98b7a2a
[gaim-migrate @ 7621]
Herman Bloggs <herman@bluedigits.com>
parents:
7014
diff
changeset
|
46 | #include "utsname.h" |
|
c62db98b7a2a
[gaim-migrate @ 7621]
Herman Bloggs <herman@bluedigits.com>
parents:
7014
diff
changeset
|
47 | #endif |
| 7014 | 48 | |
|
29399
cce925ddb58a
These should be static
Paul Aurich <darkrain42@pidgin.im>
parents:
29359
diff
changeset
|
49 | static GHashTable *iq_handlers = NULL; |
|
cce925ddb58a
These should be static
Paul Aurich <darkrain42@pidgin.im>
parents:
29359
diff
changeset
|
50 | static GHashTable *signal_iq_handlers = NULL; |
| 14356 | 51 | |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
52 | struct _JabberIqCallbackData { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
53 | JabberIqCallback *callback; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
54 | gpointer data; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
55 | JabberID *to; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
56 | }; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
57 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
58 | void jabber_iq_callbackdata_free(JabberIqCallbackData *jcd) |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
59 | { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
60 | jabber_id_free(jcd->to); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
61 | g_free(jcd); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
62 | } |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
63 | |
| 7014 | 64 | JabberIq *jabber_iq_new(JabberStream *js, JabberIqType type) |
| 65 | { | |
| 66 | JabberIq *iq; | |
| 67 | ||
| 68 | iq = g_new0(JabberIq, 1); | |
| 69 | ||
| 70 | iq->type = type; | |
| 71 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
72 | iq->node = purple_xmlnode_new("iq"); |
| 7014 | 73 | switch(iq->type) { |
| 74 | case JABBER_IQ_SET: | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
75 | purple_xmlnode_set_attrib(iq->node, "type", "set"); |
| 7014 | 76 | break; |
| 77 | case JABBER_IQ_GET: | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
78 | purple_xmlnode_set_attrib(iq->node, "type", "get"); |
| 7014 | 79 | break; |
| 80 | case JABBER_IQ_ERROR: | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
81 | purple_xmlnode_set_attrib(iq->node, "type", "error"); |
| 7014 | 82 | break; |
| 83 | case JABBER_IQ_RESULT: | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
84 | purple_xmlnode_set_attrib(iq->node, "type", "result"); |
| 7014 | 85 | break; |
| 86 | case JABBER_IQ_NONE: | |
| 87 | /* this shouldn't ever happen */ | |
| 88 | break; | |
| 89 | } | |
| 90 | ||
| 91 | iq->js = js; | |
| 92 | ||
| 93 | if(type == JABBER_IQ_GET || type == JABBER_IQ_SET) { | |
| 94 | iq->id = jabber_get_next_id(js); | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
95 | purple_xmlnode_set_attrib(iq->node, "id", iq->id); |
| 7014 | 96 | } |
| 97 | ||
| 98 | return iq; | |
| 99 | } | |
| 100 | ||
| 101 | JabberIq *jabber_iq_new_query(JabberStream *js, JabberIqType type, | |
| 102 | const char *xmlns) | |
| 103 | { | |
| 104 | JabberIq *iq = jabber_iq_new(js, type); | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
105 | PurpleXmlNode *query; |
| 7014 | 106 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
107 | query = purple_xmlnode_new_child(iq->node, "query"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
108 | purple_xmlnode_set_namespace(query, xmlns); |
| 7014 | 109 | |
| 110 | return iq; | |
| 111 | } | |
| 112 | ||
| 7395 | 113 | void |
| 114 | jabber_iq_set_callback(JabberIq *iq, JabberIqCallback *callback, gpointer data) | |
| 7014 | 115 | { |
| 116 | iq->callback = callback; | |
| 7395 | 117 | iq->callback_data = data; |
| 7014 | 118 | } |
| 119 | ||
| 120 | void jabber_iq_set_id(JabberIq *iq, const char *id) | |
| 121 | { | |
|
24520
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
122 | g_free(iq->id); |
| 7014 | 123 | |
| 124 | if(id) { | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
125 | purple_xmlnode_set_attrib(iq->node, "id", id); |
| 7014 | 126 | iq->id = g_strdup(id); |
| 127 | } else { | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
128 | purple_xmlnode_remove_attrib(iq->node, "id"); |
| 7014 | 129 | iq->id = NULL; |
| 130 | } | |
| 131 | } | |
| 132 | ||
| 133 | void jabber_iq_send(JabberIq *iq) | |
| 134 | { | |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
135 | JabberIqCallbackData *jcd; |
| 7014 | 136 | g_return_if_fail(iq != NULL); |
| 137 | ||
| 138 | jabber_send(iq->js, iq->node); | |
| 139 | ||
| 7395 | 140 | if(iq->id && iq->callback) { |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
141 | jcd = g_new0(JabberIqCallbackData, 1); |
| 7395 | 142 | jcd->callback = iq->callback; |
| 143 | jcd->data = iq->callback_data; | |
|
35265
77664079d0f0
Merge with a fair number of conflicts. Nothing too crazy.
Mark Doliner <mark@kingant.net>
diff
changeset
|
144 | jcd->to = jabber_id_new(purple_xmlnode_get_attrib(iq->node, "to")); |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
145 | |
| 8312 | 146 | g_hash_table_insert(iq->js->iq_callbacks, g_strdup(iq->id), jcd); |
| 7395 | 147 | } |
| 7014 | 148 | |
| 149 | jabber_iq_free(iq); | |
| 150 | } | |
| 151 | ||
| 152 | void jabber_iq_free(JabberIq *iq) | |
| 153 | { | |
| 154 | g_return_if_fail(iq != NULL); | |
| 155 | ||
| 156 | g_free(iq->id); | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
157 | purple_xmlnode_free(iq->node); |
| 7014 | 158 | g_free(iq); |
| 159 | } | |
| 160 | ||
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
161 | static void jabber_iq_last_parse(JabberStream *js, const char *from, |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
162 | JabberIqType type, const char *id, |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
163 | PurpleXmlNode *packet) |
| 7014 | 164 | { |
| 165 | JabberIq *iq; | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
166 | PurpleXmlNode *query; |
|
14453
1cc75906700c
[gaim-migrate @ 17098]
Mark Doliner <markdoliner@pidgin.im>
parents:
14375
diff
changeset
|
167 | char *idle_time; |
| 7014 | 168 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
169 | if(type == JABBER_IQ_GET) { |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28980
diff
changeset
|
170 | iq = jabber_iq_new_query(js, JABBER_IQ_RESULT, NS_LAST_ACTIVITY); |
| 8006 | 171 | jabber_iq_set_id(iq, id); |
|
25818
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
172 | if (from) |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
173 | purple_xmlnode_set_attrib(iq->node, "to", from); |
| 7014 | 174 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
175 | query = purple_xmlnode_get_child(iq->node, "query"); |
| 7014 | 176 | |
|
14453
1cc75906700c
[gaim-migrate @ 17098]
Mark Doliner <markdoliner@pidgin.im>
parents:
14375
diff
changeset
|
177 | idle_time = g_strdup_printf("%ld", js->idle ? time(NULL) - js->idle : 0); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
178 | purple_xmlnode_set_attrib(query, "seconds", idle_time); |
|
14453
1cc75906700c
[gaim-migrate @ 17098]
Mark Doliner <markdoliner@pidgin.im>
parents:
14375
diff
changeset
|
179 | g_free(idle_time); |
| 7401 | 180 | |
| 8006 | 181 | jabber_iq_send(iq); |
| 182 | } | |
| 7014 | 183 | } |
| 184 | ||
|
27433
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
185 | static void jabber_time_parse(JabberStream *js, const char *from, |
|
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
186 | JabberIqType type, const char *id, |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
187 | PurpleXmlNode *child) |
| 7014 | 188 | { |
| 189 | JabberIq *iq; | |
| 190 | time_t now_t; | |
|
27433
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
191 | struct tm *tm; |
|
9722
c1072806bcae
[gaim-migrate @ 10583]
Mark Doliner <markdoliner@pidgin.im>
parents:
9709
diff
changeset
|
192 | |
| 7014 | 193 | time(&now_t); |
|
18317
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18194
diff
changeset
|
194 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
195 | if(type == JABBER_IQ_GET) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
196 | PurpleXmlNode *tzo, *utc; |
|
27433
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
197 | const char *date, *tz; |
| 7014 | 198 | |
|
25556
300d8959e04c
Fix the implementation of XEP-0202 (Entity Time) (thanks again to Marcus)
Paul Aurich <darkrain42@pidgin.im>
parents:
25554
diff
changeset
|
199 | iq = jabber_iq_new(js, JABBER_IQ_RESULT); |
| 8006 | 200 | jabber_iq_set_id(iq, id); |
|
25818
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
201 | if (from) |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
202 | purple_xmlnode_set_attrib(iq->node, "to", from); |
| 7014 | 203 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
204 | child = purple_xmlnode_new_child(iq->node, child->name); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
205 | purple_xmlnode_set_namespace(child, NS_ENTITY_TIME); |
| 10941 | 206 | |
|
27433
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
207 | /* <tzo>-06:00</tzo> */ |
|
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
208 | tm = localtime(&now_t); |
|
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
209 | tz = purple_get_tzoff_str(tm, TRUE); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
210 | tzo = purple_xmlnode_new_child(child, "tzo"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
211 | purple_xmlnode_insert_data(tzo, tz, -1); |
| 10941 | 212 | |
|
27433
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
213 | /* <utc>2006-12-19T17:58:35Z</utc> */ |
|
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
214 | tm = gmtime(&now_t); |
|
29020
ac6acf2722f3
jabber: Don't use C99 time formatters, which are apparently not available on Windows when using MSVC.
Florian Quèze <florian@instantbird.org>
parents:
28984
diff
changeset
|
215 | date = purple_utf8_strftime("%Y-%m-%dT%H:%M:%SZ", tm); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
216 | utc = purple_xmlnode_new_child(child, "utc"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
217 | purple_xmlnode_insert_data(utc, date, -1); |
| 7014 | 218 | |
| 8006 | 219 | jabber_iq_send(iq); |
|
27433
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
220 | } else { |
|
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
221 | /* TODO: Errors */ |
|
18181
736c6abf62f4
respond to XEP-0199 queries (XMPP ping)
Nathan Walp <nwalp@pidgin.im>
parents:
17753
diff
changeset
|
222 | } |
|
736c6abf62f4
respond to XEP-0199 queries (XMPP ping)
Nathan Walp <nwalp@pidgin.im>
parents:
17753
diff
changeset
|
223 | } |
|
736c6abf62f4
respond to XEP-0199 queries (XMPP ping)
Nathan Walp <nwalp@pidgin.im>
parents:
17753
diff
changeset
|
224 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
225 | static void jabber_iq_version_parse(JabberStream *js, const char *from, |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
226 | JabberIqType type, const char *id, |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
227 | PurpleXmlNode *packet) |
| 7014 | 228 | { |
| 229 | JabberIq *iq; | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
230 | PurpleXmlNode *query; |
| 7014 | 231 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
232 | if(type == JABBER_IQ_GET) { |
|
18441
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
233 | GHashTable *ui_info; |
|
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
234 | const char *ui_name = NULL, *ui_version = NULL; |
|
20116
9952c317df4c
applied changes from 8543caa9958f323a231c630bebd65c74dec3401f
Richard Laager <rlaager@pidgin.im>
parents:
19897
diff
changeset
|
235 | #if 0 |
|
20225
684334efdc19
applied changes from d4b316d73ebaf93803ca2642e78b8821c3b5d5c7
Luke Schierer <lschiere@pidgin.im>
parents:
20116
diff
changeset
|
236 | char *os = NULL; |
| 15884 | 237 | if(!purple_prefs_get_bool("/plugins/prpl/jabber/hide_os")) { |
| 8006 | 238 | struct utsname osinfo; |
| 7014 | 239 | |
| 8006 | 240 | uname(&osinfo); |
| 241 | os = g_strdup_printf("%s %s %s", osinfo.sysname, osinfo.release, | |
| 242 | osinfo.machine); | |
| 243 | } | |
|
20116
9952c317df4c
applied changes from 8543caa9958f323a231c630bebd65c74dec3401f
Richard Laager <rlaager@pidgin.im>
parents:
19897
diff
changeset
|
244 | #endif |
| 7014 | 245 | |
| 8006 | 246 | iq = jabber_iq_new_query(js, JABBER_IQ_RESULT, "jabber:iq:version"); |
|
25818
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
247 | if (from) |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
248 | purple_xmlnode_set_attrib(iq->node, "to", from); |
| 8006 | 249 | jabber_iq_set_id(iq, id); |
| 7014 | 250 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
251 | query = purple_xmlnode_get_child(iq->node, "query"); |
| 7014 | 252 | |
|
18441
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
253 | ui_info = purple_core_get_ui_info(); |
|
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
254 | |
|
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
255 | if(NULL != ui_info) { |
|
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
256 | ui_name = g_hash_table_lookup(ui_info, "name"); |
|
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
257 | ui_version = g_hash_table_lookup(ui_info, "version"); |
|
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
258 | } |
|
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
259 | |
|
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
260 | if(NULL != ui_name && NULL != ui_version) { |
| 18443 | 261 | char *version_complete = g_strdup_printf("%s (libpurple " VERSION ")", ui_version); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
262 | purple_xmlnode_insert_data(purple_xmlnode_new_child(query, "name"), ui_name, -1); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
263 | purple_xmlnode_insert_data(purple_xmlnode_new_child(query, "version"), version_complete, -1); |
| 18443 | 264 | g_free(version_complete); |
|
18441
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
265 | } else { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
266 | purple_xmlnode_insert_data(purple_xmlnode_new_child(query, "name"), "libpurple", -1); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
267 | purple_xmlnode_insert_data(purple_xmlnode_new_child(query, "version"), VERSION, -1); |
|
18441
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
268 | } |
|
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
269 | |
|
20225
684334efdc19
applied changes from d4b316d73ebaf93803ca2642e78b8821c3b5d5c7
Luke Schierer <lschiere@pidgin.im>
parents:
20116
diff
changeset
|
270 | #if 0 |
| 8006 | 271 | if(os) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
272 | purple_xmlnode_insert_data(purple_xmlnode_new_child(query, "os"), os, -1); |
| 8006 | 273 | g_free(os); |
| 274 | } | |
|
20225
684334efdc19
applied changes from d4b316d73ebaf93803ca2642e78b8821c3b5d5c7
Luke Schierer <lschiere@pidgin.im>
parents:
20116
diff
changeset
|
275 | #endif |
| 10941 | 276 | |
| 8006 | 277 | jabber_iq_send(iq); |
| 7014 | 278 | } |
| 279 | } | |
| 280 | ||
| 13794 | 281 | void jabber_iq_remove_callback_by_id(JabberStream *js, const char *id) |
| 282 | { | |
| 283 | g_hash_table_remove(js->iq_callbacks, id); | |
| 284 | } | |
| 285 | ||
|
35308
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
286 | /** |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
287 | * Verify that the 'from' attribute of an IQ reply is a valid match for |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
288 | * a given IQ request. The expected behavior is outlined in section |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
289 | * 8.1.2.1 of the XMPP CORE spec (RFC 6120). We consider the reply to |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
290 | * be a valid match if any of the following is true: |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
291 | * - Request 'to' matches reply 'from' (including the case where |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
292 | * neither are set). |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
293 | * - Request 'to' was empty and reply 'from' is server JID. |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
294 | * - Request 'to' was empty and reply 'from' is my JID. The spec says |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
295 | * we should only allow bare JID, but we also allow full JID for |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
296 | * compatibility with some servers. |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
297 | * |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
298 | * These rules should allow valid IQ replies while preventing spoofed |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
299 | * ones. |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
300 | * |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
301 | * For more discussion see the "Spoofing of iq ids and misbehaving |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
302 | * servers" email thread from January 2014 on the jdev and security |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
303 | * mailing lists. |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
304 | * |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
305 | * @return TRUE if this reply is valid for the given request. |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
306 | */ |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
307 | static gboolean does_reply_from_match_request_to(JabberStream *js, JabberID *to, JabberID *from) |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
308 | { |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
309 | if (jabber_id_equal(to, from)) { |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
310 | /* Request 'to' matches reply 'from' */ |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
311 | return TRUE; |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
312 | } |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
313 | |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
314 | if (!to && purple_strequal(from->domain, js->user->domain)) { |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
315 | /* Request 'to' is empty and reply 'from' domain matches our domain */ |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
316 | |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
317 | if (!from->node && !from->resource) { |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
318 | /* Reply 'from' is server bare JID */ |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
319 | return TRUE; |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
320 | } |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
321 | |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
322 | if (purple_strequal(from->node, js->user->node) |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
323 | && (!from->resource || purple_strequal(from->resource, js->user->resource))) { |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
324 | /* Reply 'from' is my full or bare JID */ |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
325 | return TRUE; |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
326 | } |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
327 | } |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
328 | |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
329 | return FALSE; |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
330 | } |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
331 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
332 | void jabber_iq_parse(JabberStream *js, PurpleXmlNode *packet) |
| 7014 | 333 | { |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
334 | JabberIqCallbackData *jcd; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
335 | PurpleXmlNode *child, *error, *x; |
| 7014 | 336 | const char *xmlns; |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
337 | const char *iq_type, *id, *from; |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
338 | JabberIqType type = JABBER_IQ_NONE; |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
339 | gboolean signal_return; |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
340 | JabberID *from_id; |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
341 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
342 | from = purple_xmlnode_get_attrib(packet, "from"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
343 | id = purple_xmlnode_get_attrib(packet, "id"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
344 | iq_type = purple_xmlnode_get_attrib(packet, "type"); |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
345 | |
|
25554
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
346 | /* |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
347 | * Ensure the 'from' attribute is valid. No point in handling a stanza |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
348 | * of which we don't understand where it came from. |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
349 | */ |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
350 | from_id = jabber_id_new(from); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
351 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
352 | if (from && !from_id) { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
353 | purple_debug_error("jabber", "Received an iq with an invalid from: %s\n", from); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
354 | return; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
355 | } |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
356 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
357 | /* |
|
25554
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
358 | * child will be either the first tag child or NULL if there is no child. |
|
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
359 | * Historically, we used just the 'query' subchild, but newer XEPs use |
|
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
360 | * differently named children. Grabbing the first child is (for the time |
|
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
361 | * being) sufficient. |
|
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
362 | */ |
|
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
363 | for (child = packet->child; child; child = child->next) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
364 | if (child->type == PURPLE_XMLNODE_TYPE_TAG) |
|
25813
2e5e39a3107c
This is shorter and easier to read.
Paul Aurich <darkrain42@pidgin.im>
parents:
25557
diff
changeset
|
365 | break; |
|
25554
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
366 | } |
|
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
367 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
368 | if (iq_type) { |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
369 | if (!strcmp(iq_type, "get")) |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
370 | type = JABBER_IQ_GET; |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
371 | else if (!strcmp(iq_type, "set")) |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
372 | type = JABBER_IQ_SET; |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
373 | else if (!strcmp(iq_type, "result")) |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
374 | type = JABBER_IQ_RESULT; |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
375 | else if (!strcmp(iq_type, "error")) |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
376 | type = JABBER_IQ_ERROR; |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
377 | } |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
378 | |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
379 | if (type == JABBER_IQ_NONE) { |
|
24520
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
380 | purple_debug_error("jabber", "IQ with invalid type ('%s') - ignoring.\n", |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
381 | iq_type ? iq_type : "(null)"); |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
382 | jabber_id_free(from_id); |
|
24520
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
383 | return; |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
384 | } |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
385 | |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
386 | /* All IQs must have an ID, so send an error for a set/get that doesn't */ |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
387 | if(!id || !*id) { |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
388 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
389 | if(type == JABBER_IQ_SET || type == JABBER_IQ_GET) { |
|
24520
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
390 | JabberIq *iq = jabber_iq_new(js, JABBER_IQ_ERROR); |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
391 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
392 | purple_xmlnode_free(iq->node); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
393 | iq->node = purple_xmlnode_copy(packet); |
|
25818
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
394 | if (from) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
395 | purple_xmlnode_set_attrib(iq->node, "to", from); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
396 | purple_xmlnode_remove_attrib(iq->node, "from"); |
|
25818
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
397 | } |
|
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
398 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
399 | purple_xmlnode_set_attrib(iq->node, "type", "error"); |
|
24520
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
400 | /* This id is clearly not useful, but we must put something there for a valid stanza */ |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
401 | iq->id = jabber_get_next_id(js); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
402 | purple_xmlnode_set_attrib(iq->node, "id", iq->id); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
403 | error = purple_xmlnode_new_child(iq->node, "error"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
404 | purple_xmlnode_set_attrib(error, "type", "modify"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
405 | x = purple_xmlnode_new_child(error, "bad-request"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
406 | purple_xmlnode_set_namespace(x, NS_XMPP_STANZAS); |
|
24520
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
407 | |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
408 | jabber_iq_send(iq); |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
409 | } else |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
410 | purple_debug_error("jabber", "IQ of type '%s' missing id - ignoring.\n", |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
411 | iq_type); |
|
24520
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
412 | |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
413 | jabber_id_free(from_id); |
|
24520
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
414 | return; |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
415 | } |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
416 | |
|
36623
caaadef03507
Renamed purple_connection_get_protocol_info() to purple_connection_get_protocol()
Ankit Vani <a@nevitus.org>
parents:
36362
diff
changeset
|
417 | signal_return = GPOINTER_TO_INT(purple_signal_emit_return_1(purple_connection_get_protocol(js->gc), |
|
28155
de9b298ef02e
jabber: Emit jabber-receiving-iq after we've ensured id is !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
27433
diff
changeset
|
418 | "jabber-receiving-iq", js->gc, iq_type, id, from, packet)); |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
419 | if (signal_return) { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
420 | jabber_id_free(from_id); |
|
28155
de9b298ef02e
jabber: Emit jabber-receiving-iq after we've ensured id is !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
27433
diff
changeset
|
421 | return; |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
422 | } |
|
28155
de9b298ef02e
jabber: Emit jabber-receiving-iq after we've ensured id is !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
27433
diff
changeset
|
423 | |
| 8312 | 424 | /* First, lets see if a special callback got registered */ |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
425 | if(type == JABBER_IQ_RESULT || type == JABBER_IQ_ERROR) { |
|
35308
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
426 | jcd = g_hash_table_lookup(js->iq_callbacks, id); |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
427 | if (jcd) { |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
428 | if (does_reply_from_match_request_to(js, jcd->to, from_id)) { |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
429 | jcd->callback(js, from, type, id, packet, jcd->data); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
430 | jabber_iq_remove_callback_by_id(js, id); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
431 | jabber_id_free(from_id); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
432 | return; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
433 | } else { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
434 | char *expected_to; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
435 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
436 | if (jcd->to) { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
437 | expected_to = jabber_id_get_full_jid(jcd->to); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
438 | } else { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
439 | expected_to = jabber_id_get_bare_jid(js->user); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
440 | } |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
441 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
442 | purple_debug_error("jabber", "Got a result iq with id %s from %s instead of expected %s!\n", id, from ? from : "(null)", expected_to); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
443 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
444 | g_free(expected_to); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
445 | } |
| 8312 | 446 | } |
| 447 | } | |
| 448 | ||
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
449 | /* |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
450 | * Apparently not, so let's see if we have a pre-defined handler |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
451 | * or if an outside plugin is interested. |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
452 | */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
453 | if(child && (xmlns = purple_xmlnode_get_namespace(child))) { |
|
25820
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
454 | char *key = g_strdup_printf("%s %s", child->name, xmlns); |
|
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
455 | JabberIqHandler *jih = g_hash_table_lookup(iq_handlers, key); |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
456 | int signal_ref = GPOINTER_TO_INT(g_hash_table_lookup(signal_iq_handlers, key)); |
|
25820
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
457 | g_free(key); |
| 7014 | 458 | |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
459 | if (signal_ref > 0) { |
|
36623
caaadef03507
Renamed purple_connection_get_protocol_info() to purple_connection_get_protocol()
Ankit Vani <a@nevitus.org>
parents:
36362
diff
changeset
|
460 | signal_return = GPOINTER_TO_INT(purple_signal_emit_return_1(purple_connection_get_protocol(js->gc), "jabber-watched-iq", |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
461 | js->gc, iq_type, id, from, child)); |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
462 | if (signal_return) { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
463 | jabber_id_free(from_id); |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
464 | return; |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
465 | } |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
466 | } |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
467 | |
|
25820
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
468 | if(jih) { |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
469 | jih(js, from, type, id, child); |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
470 | jabber_id_free(from_id); |
| 8262 | 471 | return; |
| 472 | } | |
| 7395 | 473 | } |
|
26454
94130b583e0b
Clean up usage of USE_VV in the XMPP protocol.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
474 | |
|
29359
cec28224afd4
jabber: Log a more useful message on unhandled IQs
Paul Aurich <darkrain42@pidgin.im>
parents:
29020
diff
changeset
|
475 | purple_debug_misc("jabber", "Unhandled IQ with id %s\n", id); |
|
17769
69d98a4da006
applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <am@adiumx.com>
parents:
15884
diff
changeset
|
476 | |
| 8312 | 477 | /* If we get here, send the default error reply mandated by XMPP-CORE */ |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
478 | if(type == JABBER_IQ_SET || type == JABBER_IQ_GET) { |
| 8315 | 479 | JabberIq *iq = jabber_iq_new(js, JABBER_IQ_ERROR); |
| 8135 | 480 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
481 | purple_xmlnode_free(iq->node); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
482 | iq->node = purple_xmlnode_copy(packet); |
|
25818
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
483 | if (from) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
484 | purple_xmlnode_set_attrib(iq->node, "to", from); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
485 | purple_xmlnode_remove_attrib(iq->node, "from"); |
|
25818
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
486 | } |
|
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
487 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
488 | purple_xmlnode_set_attrib(iq->node, "type", "error"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
489 | error = purple_xmlnode_new_child(iq->node, "error"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
490 | purple_xmlnode_set_attrib(error, "type", "cancel"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
491 | purple_xmlnode_set_attrib(error, "code", "501"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
492 | x = purple_xmlnode_new_child(error, "feature-not-implemented"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
493 | purple_xmlnode_set_namespace(x, NS_XMPP_STANZAS); |
| 8169 | 494 | |
| 8315 | 495 | jabber_iq_send(iq); |
| 496 | } | |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
497 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
498 | jabber_id_free(from_id); |
| 7014 | 499 | } |
| 500 | ||
|
25820
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
501 | void jabber_iq_register_handler(const char *node, const char *xmlns, JabberIqHandler *handlerfunc) |
| 14356 | 502 | { |
|
25820
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
503 | /* |
|
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
504 | * This is valid because nodes nor namespaces cannot have spaces in them |
|
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
505 | * (see http://www.w3.org/TR/2006/REC-xml-20060816/ and |
|
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
506 | * http://www.w3.org/TR/REC-xml-names/) |
|
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
507 | */ |
|
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
508 | char *key = g_strdup_printf("%s %s", node, xmlns); |
|
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
509 | g_hash_table_replace(iq_handlers, key, handlerfunc); |
| 14356 | 510 | } |
| 511 | ||
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
512 | void jabber_iq_signal_register(const gchar *node, const gchar *xmlns) |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
513 | { |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
514 | gchar *key; |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
515 | int ref; |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
516 | |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
517 | g_return_if_fail(node != NULL && *node != '\0'); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
518 | g_return_if_fail(xmlns != NULL && *xmlns != '\0'); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
519 | |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
520 | key = g_strdup_printf("%s %s", node, xmlns); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
521 | ref = GPOINTER_TO_INT(g_hash_table_lookup(signal_iq_handlers, key)); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
522 | if (ref == 0) { |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
523 | g_hash_table_insert(signal_iq_handlers, key, GINT_TO_POINTER(1)); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
524 | } else { |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
525 | g_hash_table_insert(signal_iq_handlers, key, GINT_TO_POINTER(ref + 1)); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
526 | g_free(key); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
527 | } |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
528 | } |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
529 | |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
530 | void jabber_iq_signal_unregister(const gchar *node, const gchar *xmlns) |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
531 | { |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
532 | gchar *key; |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
533 | int ref; |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
534 | |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
535 | g_return_if_fail(node != NULL && *node != '\0'); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
536 | g_return_if_fail(xmlns != NULL && *xmlns != '\0'); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
537 | |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
538 | key = g_strdup_printf("%s %s", node, xmlns); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
539 | ref = GPOINTER_TO_INT(g_hash_table_lookup(signal_iq_handlers, key)); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
540 | |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
541 | if (ref == 1) { |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
542 | g_hash_table_remove(signal_iq_handlers, key); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
543 | } else if (ref > 1) { |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
544 | g_hash_table_insert(signal_iq_handlers, key, GINT_TO_POINTER(ref - 1)); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
545 | } |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
546 | |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
547 | g_free(key); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
548 | } |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
549 | |
| 14356 | 550 | void jabber_iq_init(void) |
| 551 | { | |
| 552 | iq_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); | |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
553 | signal_iq_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); |
| 14356 | 554 | |
|
26704
e6dba3759625
Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents:
26701
diff
changeset
|
555 | jabber_iq_register_handler("jingle", JINGLE, jingle_parse); |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28980
diff
changeset
|
556 | jabber_iq_register_handler("mailbox", NS_GOOGLE_MAIL_NOTIFY, |
|
26704
e6dba3759625
Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents:
26701
diff
changeset
|
557 | jabber_gmail_poke); |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28980
diff
changeset
|
558 | jabber_iq_register_handler("new-mail", NS_GOOGLE_MAIL_NOTIFY, |
|
26704
e6dba3759625
Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents:
26701
diff
changeset
|
559 | jabber_gmail_poke); |
|
28979
191942cc7747
jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <darkrain42@pidgin.im>
parents:
28832
diff
changeset
|
560 | jabber_iq_register_handler("ping", NS_PING, jabber_ping_parse); |
|
191942cc7747
jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <darkrain42@pidgin.im>
parents:
28832
diff
changeset
|
561 | jabber_iq_register_handler("query", NS_GOOGLE_JINGLE_INFO, |
|
26704
e6dba3759625
Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents:
26701
diff
changeset
|
562 | jabber_google_handle_jingle_info); |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28980
diff
changeset
|
563 | jabber_iq_register_handler("query", NS_BYTESTREAMS, |
|
26704
e6dba3759625
Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents:
26701
diff
changeset
|
564 | jabber_bytestreams_parse); |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28980
diff
changeset
|
565 | jabber_iq_register_handler("query", NS_DISCO_INFO, jabber_disco_info_parse); |
|
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28980
diff
changeset
|
566 | jabber_iq_register_handler("query", NS_DISCO_ITEMS, jabber_disco_items_parse); |
|
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28980
diff
changeset
|
567 | jabber_iq_register_handler("query", NS_LAST_ACTIVITY, jabber_iq_last_parse); |
|
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28980
diff
changeset
|
568 | jabber_iq_register_handler("query", NS_OOB_IQ_DATA, jabber_oob_parse); |
|
26704
e6dba3759625
Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents:
26701
diff
changeset
|
569 | jabber_iq_register_handler("query", "jabber:iq:register", |
|
e6dba3759625
Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents:
26701
diff
changeset
|
570 | jabber_register_parse); |
|
e6dba3759625
Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents:
26701
diff
changeset
|
571 | jabber_iq_register_handler("query", "jabber:iq:roster", |
|
e6dba3759625
Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents:
26701
diff
changeset
|
572 | jabber_roster_parse); |
|
e6dba3759625
Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents:
26701
diff
changeset
|
573 | jabber_iq_register_handler("query", "jabber:iq:version", |
|
e6dba3759625
Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents:
26701
diff
changeset
|
574 | jabber_iq_version_parse); |
|
26697
2f086177af37
Fix-up the merge some more (*sigh*), readding <session/> handler
Paul Aurich <darkrain42@pidgin.im>
parents:
26695
diff
changeset
|
575 | #ifdef USE_VV |
|
28980
4a0f7340b539
jabber: Add the missing file and fix up the Google session namespaces
Paul Aurich <darkrain42@pidgin.im>
parents:
28979
diff
changeset
|
576 | jabber_iq_register_handler("session", NS_GOOGLE_SESSION, |
|
26697
2f086177af37
Fix-up the merge some more (*sigh*), readding <session/> handler
Paul Aurich <darkrain42@pidgin.im>
parents:
26695
diff
changeset
|
577 | jabber_google_session_parse); |
|
2f086177af37
Fix-up the merge some more (*sigh*), readding <session/> handler
Paul Aurich <darkrain42@pidgin.im>
parents:
26695
diff
changeset
|
578 | #endif |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28980
diff
changeset
|
579 | jabber_iq_register_handler("block", NS_SIMPLE_BLOCKING, jabber_blocklist_parse_push); |
|
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28980
diff
changeset
|
580 | jabber_iq_register_handler("unblock", NS_SIMPLE_BLOCKING, jabber_blocklist_parse_push); |
|
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28980
diff
changeset
|
581 | jabber_iq_register_handler("time", NS_ENTITY_TIME, jabber_time_parse); |
|
26704
e6dba3759625
Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents:
26701
diff
changeset
|
582 | |
| 14356 | 583 | } |
| 584 | ||
| 585 | void jabber_iq_uninit(void) | |
| 586 | { | |
| 587 | g_hash_table_destroy(iq_handlers); | |
|
27103
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
588 | g_hash_table_destroy(signal_iq_handlers); |
|
815af6acd59b
Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents:
26704
diff
changeset
|
589 | iq_handlers = signal_iq_handlers = NULL; |
| 14356 | 590 | } |