Tue, 19 May 2020 10:29:23 +0000
Merged in default (pull request #697)
simple: Fix search for message headers
Approved-by: Gary Kramlich
| 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" | |
|
40358
e6fe6fc1f516
move all protocols, purple plugins, and purple tests to use purple.h instead of including files individually
Gary Kramlich <grim@reaperworld.com>
parents:
40312
diff
changeset
|
24 | #include <purple.h> |
| 7014 | 25 | |
| 7395 | 26 | #include "buddy.h" |
| 8312 | 27 | #include "disco.h" |
|
29913
58f5122fbcd3
First shot at refactoring the Google-specific XMPP code.
Marcus Lundblad <malu@pidgin.im>
parents:
29399
diff
changeset
|
28 | #include "google/gmail.h" |
|
58f5122fbcd3
First shot at refactoring the Google-specific XMPP code.
Marcus Lundblad <malu@pidgin.im>
parents:
29399
diff
changeset
|
29 | #include "google/google.h" |
|
58f5122fbcd3
First shot at refactoring the Google-specific XMPP code.
Marcus Lundblad <malu@pidgin.im>
parents:
29399
diff
changeset
|
30 | #include "google/jingleinfo.h" |
|
58f5122fbcd3
First shot at refactoring the Google-specific XMPP code.
Marcus Lundblad <malu@pidgin.im>
parents:
29399
diff
changeset
|
31 | #include "google/google_session.h" |
| 7014 | 32 | #include "iq.h" |
|
26143
673b6665624d
Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents:
23754
diff
changeset
|
33 | #include "jingle/jingle.h" |
| 7170 | 34 | #include "oob.h" |
| 7014 | 35 | #include "roster.h" |
| 7395 | 36 | #include "si.h" |
|
17769
69d98a4da006
applied patch for supporting XEP-0199: XMPP Ping
Andreas Monitzer <am@adiumx.com>
parents:
15884
diff
changeset
|
37 | #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
|
38 | #include "adhoccommands.h" |
|
23626
e21afec2f485
Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents:
23076
diff
changeset
|
39 | #include "data.h" |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
23076
diff
changeset
|
40 | #include "ibb.h" |
| 7014 | 41 | |
|
29399
cce925ddb58a
These should be static
Paul Aurich <darkrain42@pidgin.im>
parents:
29359
diff
changeset
|
42 | static GHashTable *iq_handlers = NULL; |
|
cce925ddb58a
These should be static
Paul Aurich <darkrain42@pidgin.im>
parents:
29359
diff
changeset
|
43 | static GHashTable *signal_iq_handlers = NULL; |
| 14356 | 44 | |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
45 | struct _JabberIqCallbackData { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
46 | JabberIqCallback *callback; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
47 | gpointer data; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
48 | JabberID *to; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
49 | }; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
50 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
51 | 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
|
52 | { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
53 | 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
|
54 | g_free(jcd); |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
55 | } |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
56 | |
| 7014 | 57 | JabberIq *jabber_iq_new(JabberStream *js, JabberIqType type) |
| 58 | { | |
| 59 | JabberIq *iq; | |
| 60 | ||
| 61 | iq = g_new0(JabberIq, 1); | |
| 62 | ||
| 63 | iq->type = type; | |
| 64 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
65 | iq->node = purple_xmlnode_new("iq"); |
| 7014 | 66 | switch(iq->type) { |
| 67 | 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
|
68 | purple_xmlnode_set_attrib(iq->node, "type", "set"); |
| 7014 | 69 | break; |
| 70 | 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
|
71 | purple_xmlnode_set_attrib(iq->node, "type", "get"); |
| 7014 | 72 | break; |
| 73 | 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
|
74 | purple_xmlnode_set_attrib(iq->node, "type", "error"); |
| 7014 | 75 | break; |
| 76 | 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
|
77 | purple_xmlnode_set_attrib(iq->node, "type", "result"); |
| 7014 | 78 | break; |
| 79 | case JABBER_IQ_NONE: | |
| 80 | /* this shouldn't ever happen */ | |
| 81 | break; | |
| 82 | } | |
| 83 | ||
| 84 | iq->js = js; | |
| 85 | ||
| 86 | if(type == JABBER_IQ_GET || type == JABBER_IQ_SET) { | |
| 87 | 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
|
88 | purple_xmlnode_set_attrib(iq->node, "id", iq->id); |
| 7014 | 89 | } |
| 90 | ||
| 91 | return iq; | |
| 92 | } | |
| 93 | ||
| 94 | JabberIq *jabber_iq_new_query(JabberStream *js, JabberIqType type, | |
| 95 | const char *xmlns) | |
| 96 | { | |
| 97 | 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
|
98 | PurpleXmlNode *query; |
| 7014 | 99 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
100 | 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
|
101 | purple_xmlnode_set_namespace(query, xmlns); |
| 7014 | 102 | |
| 103 | return iq; | |
| 104 | } | |
| 105 | ||
| 7395 | 106 | void |
| 107 | jabber_iq_set_callback(JabberIq *iq, JabberIqCallback *callback, gpointer data) | |
| 7014 | 108 | { |
| 109 | iq->callback = callback; | |
| 7395 | 110 | iq->callback_data = data; |
| 7014 | 111 | } |
| 112 | ||
| 113 | void jabber_iq_set_id(JabberIq *iq, const char *id) | |
| 114 | { | |
|
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
|
115 | g_free(iq->id); |
| 7014 | 116 | |
| 117 | if(id) { | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
118 | purple_xmlnode_set_attrib(iq->node, "id", id); |
| 7014 | 119 | iq->id = g_strdup(id); |
| 120 | } else { | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
121 | purple_xmlnode_remove_attrib(iq->node, "id"); |
| 7014 | 122 | iq->id = NULL; |
| 123 | } | |
| 124 | } | |
| 125 | ||
| 126 | void jabber_iq_send(JabberIq *iq) | |
| 127 | { | |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
128 | JabberIqCallbackData *jcd; |
| 7014 | 129 | g_return_if_fail(iq != NULL); |
| 130 | ||
| 131 | jabber_send(iq->js, iq->node); | |
| 132 | ||
| 7395 | 133 | 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
|
134 | jcd = g_new0(JabberIqCallbackData, 1); |
| 7395 | 135 | jcd->callback = iq->callback; |
| 136 | jcd->data = iq->callback_data; | |
|
35265
77664079d0f0
Merge with a fair number of conflicts. Nothing too crazy.
Mark Doliner <mark@kingant.net>
diff
changeset
|
137 | 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
|
138 | |
| 8312 | 139 | g_hash_table_insert(iq->js->iq_callbacks, g_strdup(iq->id), jcd); |
| 7395 | 140 | } |
| 7014 | 141 | |
| 142 | jabber_iq_free(iq); | |
| 143 | } | |
| 144 | ||
| 145 | void jabber_iq_free(JabberIq *iq) | |
| 146 | { | |
| 147 | g_return_if_fail(iq != NULL); | |
| 148 | ||
| 149 | 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
|
150 | purple_xmlnode_free(iq->node); |
| 7014 | 151 | g_free(iq); |
| 152 | } | |
| 153 | ||
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
154 | 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
|
155 | 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
|
156 | PurpleXmlNode *packet) |
| 7014 | 157 | { |
| 158 | JabberIq *iq; | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
159 | PurpleXmlNode *query; |
|
14453
1cc75906700c
[gaim-migrate @ 17098]
Mark Doliner <markdoliner@pidgin.im>
parents:
14375
diff
changeset
|
160 | char *idle_time; |
| 7014 | 161 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
162 | 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
|
163 | iq = jabber_iq_new_query(js, JABBER_IQ_RESULT, NS_LAST_ACTIVITY); |
| 8006 | 164 | jabber_iq_set_id(iq, id); |
|
25818
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
165 | if (from) |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
166 | purple_xmlnode_set_attrib(iq->node, "to", from); |
| 7014 | 167 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
168 | query = purple_xmlnode_get_child(iq->node, "query"); |
| 7014 | 169 | |
|
14453
1cc75906700c
[gaim-migrate @ 17098]
Mark Doliner <markdoliner@pidgin.im>
parents:
14375
diff
changeset
|
170 | 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
|
171 | purple_xmlnode_set_attrib(query, "seconds", idle_time); |
|
14453
1cc75906700c
[gaim-migrate @ 17098]
Mark Doliner <markdoliner@pidgin.im>
parents:
14375
diff
changeset
|
172 | g_free(idle_time); |
| 7401 | 173 | |
| 8006 | 174 | jabber_iq_send(iq); |
| 175 | } | |
| 7014 | 176 | } |
| 177 | ||
|
27433
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
178 | 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
|
179 | 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
|
180 | PurpleXmlNode *child) |
| 7014 | 181 | { |
| 182 | JabberIq *iq; | |
|
18317
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18194
diff
changeset
|
183 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
184 | 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
|
185 | PurpleXmlNode *tzo, *utc; |
|
39015
bb929248da3d
jabber: Port purple_get_tzoff_str() to GDateTime functions
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
186 | GDateTime *now, *now_utc; |
|
bb929248da3d
jabber: Port purple_get_tzoff_str() to GDateTime functions
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
187 | gchar *date, *tz; |
| 7014 | 188 | |
|
25556
300d8959e04c
Fix the implementation of XEP-0202 (Entity Time) (thanks again to Marcus)
Paul Aurich <darkrain42@pidgin.im>
parents:
25554
diff
changeset
|
189 | iq = jabber_iq_new(js, JABBER_IQ_RESULT); |
| 8006 | 190 | jabber_iq_set_id(iq, id); |
|
25818
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
191 | if (from) |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
192 | purple_xmlnode_set_attrib(iq->node, "to", from); |
| 7014 | 193 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
194 | 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
|
195 | purple_xmlnode_set_namespace(child, NS_ENTITY_TIME); |
| 10941 | 196 | |
|
27433
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
197 | /* <tzo>-06:00</tzo> */ |
|
39015
bb929248da3d
jabber: Port purple_get_tzoff_str() to GDateTime functions
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
198 | now = g_date_time_new_now_local(); |
|
bb929248da3d
jabber: Port purple_get_tzoff_str() to GDateTime functions
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
199 | tz = g_date_time_format(now, "%:z"); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
200 | 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
|
201 | purple_xmlnode_insert_data(tzo, tz, -1); |
|
39015
bb929248da3d
jabber: Port purple_get_tzoff_str() to GDateTime functions
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
202 | g_free(tz); |
| 10941 | 203 | |
|
27433
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
204 | /* <utc>2006-12-19T17:58:35Z</utc> */ |
|
39015
bb929248da3d
jabber: Port purple_get_tzoff_str() to GDateTime functions
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
205 | now_utc = g_date_time_to_utc(now); |
|
bb929248da3d
jabber: Port purple_get_tzoff_str() to GDateTime functions
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
206 | date = g_date_time_format(now_utc, "%FT%TZ"); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
207 | 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
|
208 | purple_xmlnode_insert_data(utc, date, -1); |
|
39015
bb929248da3d
jabber: Port purple_get_tzoff_str() to GDateTime functions
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
209 | g_free(date); |
|
bb929248da3d
jabber: Port purple_get_tzoff_str() to GDateTime functions
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
210 | |
|
bb929248da3d
jabber: Port purple_get_tzoff_str() to GDateTime functions
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
211 | g_date_time_unref(now); |
|
bb929248da3d
jabber: Port purple_get_tzoff_str() to GDateTime functions
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
212 | g_date_time_unref(now_utc); |
| 7014 | 213 | |
| 8006 | 214 | jabber_iq_send(iq); |
|
27433
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
215 | } else { |
|
8eaac1cf4214
Remove obsoleted XEP-0090 (Legacy Entity Time)
Paul Aurich <darkrain42@pidgin.im>
parents:
27175
diff
changeset
|
216 | /* TODO: Errors */ |
|
18181
736c6abf62f4
respond to XEP-0199 queries (XMPP ping)
Nathan Walp <nwalp@pidgin.im>
parents:
17753
diff
changeset
|
217 | } |
|
736c6abf62f4
respond to XEP-0199 queries (XMPP ping)
Nathan Walp <nwalp@pidgin.im>
parents:
17753
diff
changeset
|
218 | } |
|
736c6abf62f4
respond to XEP-0199 queries (XMPP ping)
Nathan Walp <nwalp@pidgin.im>
parents:
17753
diff
changeset
|
219 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
220 | 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
|
221 | 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
|
222 | PurpleXmlNode *packet) |
| 7014 | 223 | { |
| 224 | JabberIq *iq; | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
225 | PurpleXmlNode *query; |
| 7014 | 226 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
227 | if(type == JABBER_IQ_GET) { |
|
40312
956745ff3ee8
Replace the ui info GHashTable with a gobject.
Gary Kramlich <grim@reaperworld.com>
parents:
39015
diff
changeset
|
228 | PurpleUiInfo *ui_info; |
|
18441
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
229 | const char *ui_name = NULL, *ui_version = NULL; |
| 7014 | 230 | |
| 8006 | 231 | 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
|
232 | if (from) |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
233 | purple_xmlnode_set_attrib(iq->node, "to", from); |
| 8006 | 234 | jabber_iq_set_id(iq, id); |
| 7014 | 235 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
236 | query = purple_xmlnode_get_child(iq->node, "query"); |
| 7014 | 237 | |
|
18441
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
238 | 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
|
239 | |
|
40312
956745ff3ee8
Replace the ui info GHashTable with a gobject.
Gary Kramlich <grim@reaperworld.com>
parents:
39015
diff
changeset
|
240 | if(PURPLE_IS_UI_INFO(ui_info)) { |
|
956745ff3ee8
Replace the ui info GHashTable with a gobject.
Gary Kramlich <grim@reaperworld.com>
parents:
39015
diff
changeset
|
241 | ui_name = purple_ui_info_get_name(ui_info); |
|
956745ff3ee8
Replace the ui info GHashTable with a gobject.
Gary Kramlich <grim@reaperworld.com>
parents:
39015
diff
changeset
|
242 | ui_version = purple_ui_info_get_version(ui_info); |
|
18441
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
243 | } |
|
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
244 | |
|
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
245 | if(NULL != ui_name && NULL != ui_version) { |
| 18443 | 246 | 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
|
247 | 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
|
248 | purple_xmlnode_insert_data(purple_xmlnode_new_child(query, "version"), version_complete, -1); |
| 18443 | 249 | 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
|
250 | } else { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
251 | 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
|
252 | 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
|
253 | } |
|
d255d04c0aa1
core support for UI info...now to do the UI piece
Nathan Walp <nwalp@pidgin.im>
parents:
18317
diff
changeset
|
254 | |
| 8006 | 255 | jabber_iq_send(iq); |
|
40312
956745ff3ee8
Replace the ui info GHashTable with a gobject.
Gary Kramlich <grim@reaperworld.com>
parents:
39015
diff
changeset
|
256 | |
|
956745ff3ee8
Replace the ui info GHashTable with a gobject.
Gary Kramlich <grim@reaperworld.com>
parents:
39015
diff
changeset
|
257 | if(PURPLE_IS_UI_INFO(ui_info)) { |
|
956745ff3ee8
Replace the ui info GHashTable with a gobject.
Gary Kramlich <grim@reaperworld.com>
parents:
39015
diff
changeset
|
258 | g_object_unref(G_OBJECT(ui_info)); |
|
956745ff3ee8
Replace the ui info GHashTable with a gobject.
Gary Kramlich <grim@reaperworld.com>
parents:
39015
diff
changeset
|
259 | } |
| 7014 | 260 | } |
| 261 | } | |
| 262 | ||
| 13794 | 263 | void jabber_iq_remove_callback_by_id(JabberStream *js, const char *id) |
| 264 | { | |
| 265 | g_hash_table_remove(js->iq_callbacks, id); | |
| 266 | } | |
| 267 | ||
|
35308
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
268 | /** |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
269 | * 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
|
270 | * 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
|
271 | * 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
|
272 | * 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
|
273 | * - 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
|
274 | * neither are set). |
|
36131
c6926e608dc4
Allow incoming IQ stanzas with an empty 'from' if they're in response to
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
275 | * - Request 'to' was my JID (bare or full) and reply 'from' is empty. |
|
35308
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
276 | * - 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
|
277 | * 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
|
278 | * compatibility with some servers. |
|
36131
c6926e608dc4
Allow incoming IQ stanzas with an empty 'from' if they're in response to
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
279 | * - Request 'to' was empty and reply 'from' is server JID. Not allowed by |
|
c6926e608dc4
Allow incoming IQ stanzas with an empty 'from' if they're in response to
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
280 | * any spec, but for compatibility with some servers. |
|
35308
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
281 | * |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
282 | * 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
|
283 | * ones. |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
284 | * |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
285 | * 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
|
286 | * servers" email thread from January 2014 on the jdev and security |
|
36131
c6926e608dc4
Allow incoming IQ stanzas with an empty 'from' if they're in response to
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
287 | * mailing lists. Also see https://developer.pidgin.im/ticket/15879 |
|
35308
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
288 | * |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
289 | * @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
|
290 | */ |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
291 | 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
|
292 | { |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
293 | 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
|
294 | /* 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
|
295 | return TRUE; |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
296 | } |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
297 | |
|
36131
c6926e608dc4
Allow incoming IQ stanzas with an empty 'from' if they're in response to
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
298 | if (!from && purple_strequal(to->node, js->user->node) |
|
c6926e608dc4
Allow incoming IQ stanzas with an empty 'from' if they're in response to
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
299 | && purple_strequal(to->domain, js->user->domain)) { |
|
c6926e608dc4
Allow incoming IQ stanzas with an empty 'from' if they're in response to
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
300 | /* Request 'to' was my JID (bare or full) and reply 'from' is empty */ |
|
c6926e608dc4
Allow incoming IQ stanzas with an empty 'from' if they're in response to
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
301 | return TRUE; |
|
c6926e608dc4
Allow incoming IQ stanzas with an empty 'from' if they're in response to
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
302 | } |
|
c6926e608dc4
Allow incoming IQ stanzas with an empty 'from' if they're in response to
Mark Doliner <mark@kingant.net>
parents:
35308
diff
changeset
|
303 | |
|
35308
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
304 | 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
|
305 | /* 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
|
306 | |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
307 | 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
|
308 | /* 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
|
309 | return TRUE; |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
310 | } |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
311 | |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
312 | 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
|
313 | && (!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
|
314 | /* 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
|
315 | return TRUE; |
|
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 | } |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
318 | |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
319 | return FALSE; |
|
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 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
322 | void jabber_iq_parse(JabberStream *js, PurpleXmlNode *packet) |
| 7014 | 323 | { |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
324 | JabberIqCallbackData *jcd; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
325 | PurpleXmlNode *child, *error, *x; |
| 7014 | 326 | const char *xmlns; |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
327 | 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
|
328 | 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
|
329 | 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
|
330 | 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
|
331 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
332 | 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
|
333 | 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
|
334 | 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
|
335 | |
|
25554
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
336 | /* |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
337 | * 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
|
338 | * 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
|
339 | */ |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
340 | 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
|
341 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
342 | 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
|
343 | 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
|
344 | return; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
345 | } |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
346 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
347 | /* |
|
25554
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
348 | * 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
|
349 | * 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
|
350 | * 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
|
351 | * being) sufficient. |
|
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
352 | */ |
|
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
353 | 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
|
354 | 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
|
355 | break; |
|
25554
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
356 | } |
|
53e161fc0658
Jabber IQ handlers should handle non-query child nodes
Paul Aurich <darkrain42@pidgin.im>
parents:
24520
diff
changeset
|
357 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
358 | if (iq_type) { |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
36131
diff
changeset
|
359 | if (purple_strequal(iq_type, "get")) |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
360 | type = JABBER_IQ_GET; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
36131
diff
changeset
|
361 | else if (purple_strequal(iq_type, "set")) |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
362 | type = JABBER_IQ_SET; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
36131
diff
changeset
|
363 | else if (purple_strequal(iq_type, "result")) |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
364 | type = JABBER_IQ_RESULT; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
36131
diff
changeset
|
365 | else if (purple_strequal(iq_type, "error")) |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
366 | type = JABBER_IQ_ERROR; |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
367 | } |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
368 | |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
369 | 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
|
370 | 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
|
371 | 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
|
372 | 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
|
373 | 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
|
374 | } |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
375 | |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
376 | /* 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
|
377 | 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
|
378 | |
|
25817
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_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
|
380 | 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
|
381 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
382 | 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
|
383 | iq->node = purple_xmlnode_copy(packet); |
|
25818
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
384 | if (from) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
385 | 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
|
386 | 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
|
387 | } |
|
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
388 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
389 | 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
|
390 | /* 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
|
391 | 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
|
392 | 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
|
393 | 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
|
394 | 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
|
395 | 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
|
396 | 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
|
397 | |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
398 | 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
|
399 | } else |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
400 | 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
|
401 | 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
|
402 | |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
403 | 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
|
404 | 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
|
405 | } |
|
726138a1c69b
Perform some sanity checking on inbound IQs and send an error / drop as needed.
Daniel Atallah <datallah@pidgin.im>
parents:
24254
diff
changeset
|
406 | |
|
36623
caaadef03507
Renamed purple_connection_get_protocol_info() to purple_connection_get_protocol()
Ankit Vani <a@nevitus.org>
parents:
36362
diff
changeset
|
407 | 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
|
408 | "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
|
409 | if (signal_return) { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
410 | 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
|
411 | return; |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
412 | } |
|
28155
de9b298ef02e
jabber: Emit jabber-receiving-iq after we've ensured id is !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
27433
diff
changeset
|
413 | |
| 8312 | 414 | /* 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
|
415 | 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
|
416 | 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
|
417 | if (jcd) { |
|
b8e2a5fbffd3
Fix problems logging into some servers including jabber.org and
Mark Doliner <mark@kingant.net>
parents:
35235
diff
changeset
|
418 | 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
|
419 | 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
|
420 | 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
|
421 | 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
|
422 | return; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
423 | } else { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
424 | char *expected_to; |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
425 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
426 | if (jcd->to) { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
427 | 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
|
428 | } else { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
429 | 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
|
430 | } |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
431 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
432 | 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
|
433 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
434 | 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
|
435 | } |
| 8312 | 436 | } |
| 437 | } | |
| 438 | ||
|
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
|
439 | /* |
|
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
|
440 | * 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
|
441 | * 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
|
442 | */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
443 | 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
|
444 | 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
|
445 | 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
|
446 | 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
|
447 | g_free(key); |
| 7014 | 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 | 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
|
450 | 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
|
451 | 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
|
452 | if (signal_return) { |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
453 | 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
|
454 | return; |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
455 | } |
|
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 | } |
|
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
|
457 | |
|
25820
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
458 | if(jih) { |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25815
diff
changeset
|
459 | 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
|
460 | jabber_id_free(from_id); |
| 8262 | 461 | return; |
| 462 | } | |
| 7395 | 463 | } |
|
26454
94130b583e0b
Clean up usage of USE_VV in the XMPP protocol.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
464 | |
|
29359
cec28224afd4
jabber: Log a more useful message on unhandled IQs
Paul Aurich <darkrain42@pidgin.im>
parents:
29020
diff
changeset
|
465 | 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
|
466 | |
| 8312 | 467 | /* 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
|
468 | if(type == JABBER_IQ_SET || type == JABBER_IQ_GET) { |
| 8315 | 469 | JabberIq *iq = jabber_iq_new(js, JABBER_IQ_ERROR); |
| 8135 | 470 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
471 | 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
|
472 | iq->node = purple_xmlnode_copy(packet); |
|
25818
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
473 | if (from) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
474 | 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
|
475 | 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
|
476 | } |
|
d087a2754595
Avoid assertion failures on NULL 'from' attributes
Paul Aurich <darkrain42@pidgin.im>
parents:
25817
diff
changeset
|
477 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
29913
diff
changeset
|
478 | 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
|
479 | 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
|
480 | 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
|
481 | 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
|
482 | 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
|
483 | purple_xmlnode_set_namespace(x, NS_XMPP_STANZAS); |
| 8169 | 484 | |
| 8315 | 485 | jabber_iq_send(iq); |
| 486 | } | |
|
35235
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
487 | |
|
93d4bff19574
Prevent spoofing of iq replies by verifying that the 'from' address
Mark Doliner <mark@kingant.net>
parents:
29913
diff
changeset
|
488 | jabber_id_free(from_id); |
| 7014 | 489 | } |
| 490 | ||
|
25820
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
491 | void jabber_iq_register_handler(const char *node, const char *xmlns, JabberIqHandler *handlerfunc) |
| 14356 | 492 | { |
|
25820
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
493 | /* |
|
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
494 | * 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
|
495 | * (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
|
496 | * 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
|
497 | */ |
|
c0ebe6bd49aa
Track the node name in addition to the namespace for handlers (try #2)
Paul Aurich <darkrain42@pidgin.im>
parents:
25814
diff
changeset
|
498 | 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
|
499 | g_hash_table_replace(iq_handlers, key, handlerfunc); |
| 14356 | 500 | } |
| 501 | ||
|
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
|
502 | 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
|
503 | { |
|
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
|
504 | 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
|
505 | 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
|
506 | |
|
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
|
507 | 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
|
508 | 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
|
509 | |
|
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
|
510 | 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
|
511 | 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
|
512 | 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
|
513 | 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
|
514 | } 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
|
515 | 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
|
516 | 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
|
517 | } |
|
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 | } |
|
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 | 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
|
521 | { |
|
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 | 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
|
523 | 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
|
524 | |
|
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_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
|
526 | 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
|
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 | 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
|
529 | 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
|
530 | |
|
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 | 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
|
532 | 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
|
533 | } 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
|
534 | 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
|
535 | } |
|
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 | |
|
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 | 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
|
538 | } |
|
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 | |
| 14356 | 540 | void jabber_iq_init(void) |
| 541 | { | |
| 542 | 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
|
543 | signal_iq_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); |
| 14356 | 544 | |
|
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
|
545 | 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
|
546 | 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
|
547 | 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
|
548 | 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
|
549 | 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
|
550 | 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
|
551 | 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
|
552 | 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
|
553 | 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
|
554 | 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
|
555 | 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
|
556 | 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
|
557 | 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
|
558 | 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
|
559 | 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
|
560 | 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
|
561 | 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
|
562 | 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
|
563 | 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
|
564 | 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
|
565 | #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
|
566 | 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
|
567 | jabber_google_session_parse); |
|
2f086177af37
Fix-up the merge some more (*sigh*), readding <session/> handler
Paul Aurich <darkrain42@pidgin.im>
parents:
26695
diff
changeset
|
568 | #endif |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28980
diff
changeset
|
569 | 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
|
570 | 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
|
571 | 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
|
572 | |
| 14356 | 573 | } |
| 574 | ||
| 575 | void jabber_iq_uninit(void) | |
| 576 | { | |
| 577 | 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
|
578 | 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
|
579 | iq_handlers = signal_iq_handlers = NULL; |
| 14356 | 580 | } |