annotate libpurple/protocols/jabber/data.c @ 30362:879baaf87aa2

Added an error handler for family_icq.c. So far it works for icq fullinfo and alias requests. This was originally motivated by me getting "Server rate limit exceeded" while testing authorization requests. This error completely prevented the authorization request dialog from showing up.
author ivan.komarov@soc.pidgin.im
date Sun, 30 May 2010 19:01:30 +0000
parents 7fbb7612e3dd
children 8cd8c26ea2f9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
1 /*
29884
7fbb7612e3dd Fix license to refer to GPLv2 in a files...
Marcus Lundblad <ml@update.uu.se>
parents: 29832
diff changeset
2 * purple - Jabber Service Discovery
7fbb7612e3dd Fix license to refer to GPLv2 in a files...
Marcus Lundblad <ml@update.uu.se>
parents: 29832
diff changeset
3 *
28047
8c991e09efcb Update various header copyrights thanks to licensecheck.
Paul Aurich <paul@darkrain42.org>
parents: 26932
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
8c991e09efcb Update various header copyrights thanks to licensecheck.
Paul Aurich <paul@darkrain42.org>
parents: 26932
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
8c991e09efcb Update various header copyrights thanks to licensecheck.
Paul Aurich <paul@darkrain42.org>
parents: 26932
diff changeset
6 * source distribution.
8c991e09efcb Update various header copyrights thanks to licensecheck.
Paul Aurich <paul@darkrain42.org>
parents: 26932
diff changeset
7 *
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
11 * (at your option) any later version.
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24179
diff changeset
12 *
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29884
7fbb7612e3dd Fix license to refer to GPLv2 in a files...
Marcus Lundblad <ml@update.uu.se>
parents: 29832
diff changeset
16 * GNU General Public License for more details.
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24179
diff changeset
17 *
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
28070
7921a53b94b3 Oops, Elliott correctly pointed out this was wrong...
Paul Aurich <paul@darkrain42.org>
parents: 28047
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
29884
7fbb7612e3dd Fix license to refer to GPLv2 in a files...
Marcus Lundblad <ml@update.uu.se>
parents: 29832
diff changeset
21 *
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
22 */
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24179
diff changeset
23
28647
f1437342cc0e Include 'internal.h' before all other headers to make some non-gcc compilers happy.
Paul Aurich <paul@darkrain42.org>
parents: 28645
diff changeset
24 #include "internal.h"
f1437342cc0e Include 'internal.h' before all other headers to make some non-gcc compilers happy.
Paul Aurich <paul@darkrain42.org>
parents: 28645
diff changeset
25
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
26 #include <stdlib.h>
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
27 #include <glib.h>
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
28 #include <string.h>
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
29
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
30 #include "data.h"
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
31 #include "debug.h"
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
32 #include "xmlnode.h"
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
33 #include "util.h"
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
34 #include "iq.h"
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
35
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
36 static GHashTable *local_data_by_alt = NULL;
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
37 static GHashTable *local_data_by_cid = NULL;
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
38 static GHashTable *remote_data_by_cid = NULL;
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
39
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
40 JabberData *
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
41 jabber_data_create_from_data(gconstpointer rawdata, gsize size, const char *type,
29786
b6dda7d483a2 Added an "ephemeral" argument when creating local data objects (given a CID).
Marcus Lundblad <ml@update.uu.se>
parents: 29785
diff changeset
42 gboolean ephemeral, JabberStream *js)
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
43 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
44 JabberData *data = g_new0(JabberData, 1);
29630
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
45 gchar *checksum = jabber_calculate_data_hash(rawdata, size, "sha1");
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
46 gchar cid[256];
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
47
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
48 g_snprintf(cid, sizeof(cid), "sha1+%s@bob.xmpp.org", checksum);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
49 g_free(checksum);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
50
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
51 data->cid = g_strdup(cid);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
52 data->type = g_strdup(type);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
53 data->size = size;
29786
b6dda7d483a2 Added an "ephemeral" argument when creating local data objects (given a CID).
Marcus Lundblad <ml@update.uu.se>
parents: 29785
diff changeset
54 data->ephemeral = ephemeral;
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
55
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
56 data->data = g_memdup(rawdata, size);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
57
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
58 return data;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
59 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
60
29630
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
61 static void
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
62 jabber_data_delete(gpointer cbdata)
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
63 {
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
64 JabberData *data = cbdata;
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
65 g_free(data->cid);
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
66 g_free(data->type);
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
67 g_free(data->data);
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
68 g_free(data);
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
69 }
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
70
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
71
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
72 JabberData *
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
73 jabber_data_create_from_xml(xmlnode *tag)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
74 {
28157
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
75 JabberData *data;
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
76 gchar *raw_data = NULL;
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
77 const gchar *cid, *type;
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
78
28157
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
79 /* check if this is a "data" tag */
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
80 if (strcmp(tag->name, "data") != 0) {
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
81 purple_debug_error("jabber", "Invalid data element\n");
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
82 return NULL;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
83 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
84
28157
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
85 cid = xmlnode_get_attrib(tag, "cid");
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
86 type = xmlnode_get_attrib(tag, "type");
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
87
28157
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
88 if (!cid || !type) {
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
89 purple_debug_error("jabber", "cid or type missing\n");
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
90 return NULL;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
91 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
92
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
93 raw_data = xmlnode_get_data(tag);
28156
191bb5bf2fc5 Don't crash when receiving an error iq response when trying fetch a custom
Marcus Lundblad <ml@update.uu.se>
parents: 28070
diff changeset
94
28160
40d8427d1813 Minor merge duplication.
Paul Aurich <paul@darkrain42.org>
parents: 28159
diff changeset
95 if (raw_data == NULL || *raw_data == '\0') {
28156
191bb5bf2fc5 Don't crash when receiving an error iq response when trying fetch a custom
Marcus Lundblad <ml@update.uu.se>
parents: 28070
diff changeset
96 purple_debug_error("jabber", "data element was empty");
28161
8aa7df246e13 Eighth^WNinth time's the charm...
Paul Aurich <paul@darkrain42.org>
parents: 28160
diff changeset
97 g_free(raw_data);
28156
191bb5bf2fc5 Don't crash when receiving an error iq response when trying fetch a custom
Marcus Lundblad <ml@update.uu.se>
parents: 28070
diff changeset
98 return NULL;
191bb5bf2fc5 Don't crash when receiving an error iq response when trying fetch a custom
Marcus Lundblad <ml@update.uu.se>
parents: 28070
diff changeset
99 }
191bb5bf2fc5 Don't crash when receiving an error iq response when trying fetch a custom
Marcus Lundblad <ml@update.uu.se>
parents: 28070
diff changeset
100
28157
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
101 data = g_new0(JabberData, 1);
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
102 data->data = purple_base64_decode(raw_data, &data->size);
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
103 g_free(raw_data);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
104
28157
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
105 if (data->data == NULL) {
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
106 purple_debug_error("jabber", "Malformed base64 data\n");
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
107 g_free(data);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
108 return NULL;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
109 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
110
28157
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
111 data->cid = g_strdup(cid);
7f447db0e03b jabber: Stricter parsing of a BoB data stanza
Paul Aurich <paul@darkrain42.org>
parents: 28070
diff changeset
112 data->type = g_strdup(type);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
113
29630
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 29627
diff changeset
114 return data;
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
115 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
116
29785
51bc0be83108 Added a function to destroy JabberData instances.
Marcus Lundblad <ml@update.uu.se>
parents: 29784
diff changeset
117 void
51bc0be83108 Added a function to destroy JabberData instances.
Marcus Lundblad <ml@update.uu.se>
parents: 29784
diff changeset
118 jabber_data_destroy(JabberData *data)
51bc0be83108 Added a function to destroy JabberData instances.
Marcus Lundblad <ml@update.uu.se>
parents: 29784
diff changeset
119 {
51bc0be83108 Added a function to destroy JabberData instances.
Marcus Lundblad <ml@update.uu.se>
parents: 29784
diff changeset
120 jabber_data_delete(data);
51bc0be83108 Added a function to destroy JabberData instances.
Marcus Lundblad <ml@update.uu.se>
parents: 29784
diff changeset
121 }
51bc0be83108 Added a function to destroy JabberData instances.
Marcus Lundblad <ml@update.uu.se>
parents: 29784
diff changeset
122
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
123 const char *
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
124 jabber_data_get_cid(const JabberData *data)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
125 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
126 return data->cid;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
127 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
128
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
129
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
130 const char *
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
131 jabber_data_get_type(const JabberData *data)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
132 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
133 return data->type;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
134 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
135
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
136 gsize
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
137 jabber_data_get_size(const JabberData *data)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
138 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
139 return data->size;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
140 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
141
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
142 gpointer
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
143 jabber_data_get_data(const JabberData *data)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
144 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
145 return data->data;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
146 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
147
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
148 xmlnode *
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
149 jabber_data_get_xml_definition(const JabberData *data)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
150 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
151 xmlnode *tag = xmlnode_new("data");
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
152 char *base64data = purple_base64_encode(data->data, data->size);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
153
28645
7b4ade7c6d8a jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <paul@darkrain42.org>
parents: 28161
diff changeset
154 xmlnode_set_namespace(tag, NS_BOB);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
155 xmlnode_set_attrib(tag, "cid", data->cid);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
156 xmlnode_set_attrib(tag, "type", data->type);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
157
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
158 xmlnode_insert_data(tag, base64data, -1);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
159
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
160 g_free(base64data);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
161
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
162 return tag;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
163 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
164
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
165 xmlnode *
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
166 jabber_data_get_xhtml_im(const JabberData *data, const gchar *alt)
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
167 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
168 xmlnode *img = xmlnode_new("img");
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
169 char src[128];
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
170
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
171 xmlnode_set_attrib(img, "alt", alt);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
172 g_snprintf(src, sizeof(src), "cid:%s", data->cid);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
173 xmlnode_set_attrib(img, "src", src);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
174
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
175 return img;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
176 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
177
29626
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
178 static xmlnode *
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
179 jabber_data_get_xml_request(const gchar *cid)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
180 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
181 xmlnode *tag = xmlnode_new("data");
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
182
28645
7b4ade7c6d8a jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <paul@darkrain42.org>
parents: 28161
diff changeset
183 xmlnode_set_namespace(tag, NS_BOB);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
184 xmlnode_set_attrib(tag, "cid", cid);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
185
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
186 return tag;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
187 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
188
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
189 static gboolean
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
190 jabber_data_has_valid_hash(const JabberData *data)
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
191 {
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
192 const gchar *cid = jabber_data_get_cid(data);
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
193 gchar **cid_parts = g_strsplit(cid, "@", -1);
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
194 guint num_cid_parts = 0;
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
195 gboolean ret = FALSE;
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
196
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
197 if (cid_parts)
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
198 num_cid_parts = g_strv_length(cid_parts);
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
199
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
200 if (num_cid_parts == 2 && purple_strequal(cid_parts[1], "bob.xmpp.org")) {
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
201 gchar **sub_parts = g_strsplit(cid_parts[0], "+", -1);
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
202 guint num_sub_parts = 0;
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
203
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
204 if (sub_parts)
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
205 num_sub_parts = g_strv_length(sub_parts);
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
206
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
207 if (num_sub_parts == 2) {
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
208 const gchar *hash_algo = sub_parts[0];
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
209 const gchar *hash_value = sub_parts[1];
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
210 gchar *digest =
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
211 jabber_calculate_data_hash(jabber_data_get_data(data),
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
212 jabber_data_get_size(data), hash_algo);
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
213
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
214 if (digest) {
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
215 ret = purple_strequal(digest, hash_value);
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
216
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
217 if (!ret)
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
218 purple_debug_warning("jabber", "Unable to validate BoB "
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
219 "hash; expecting %s, got %s\n",
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
220 cid, digest);
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
221
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
222 g_free(digest);
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
223 } else {
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
224 purple_debug_warning("jabber", "Unable to validate BoB hash; "
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
225 "unknown hash algorithm %s\n", hash_algo);
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
226 }
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
227 } else {
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
228 purple_debug_warning("jabber", "Malformed BoB CID\n");
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
229 }
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
230
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
231 g_strfreev(sub_parts);
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
232 }
29651
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
233
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
234 g_strfreev(cid_parts);
84ec9e3cbb6d jabber: Plug some leaks and make the success case quieter.
Paul Aurich <paul@darkrain42.org>
parents: 29633
diff changeset
235 return ret;
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
236 }
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
237
29626
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
238
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
239 typedef struct {
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
240 gpointer userdata;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
241 gchar *alt;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
242 gboolean ephemeral;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
243 JabberDataRequestCallback *cb;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
244 } JabberDataRequestData;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
245
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
246 static void
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
247 jabber_data_request_cb(JabberStream *js, const char *from,
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
248 JabberIqType type, const char *id, xmlnode *packet, gpointer data)
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
249 {
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
250 JabberDataRequestData *request_data = (JabberDataRequestData *) data;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
251 gpointer userdata = request_data->userdata;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
252 gchar *alt = request_data->alt;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
253 gboolean ephemeral = request_data->ephemeral;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
254 JabberDataRequestCallback *cb = request_data->cb;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
255
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
256 xmlnode *data_element = xmlnode_get_child(packet, "data");
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
257 xmlnode *item_not_found = xmlnode_get_child(packet, "item-not-found");
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
258
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
259 /* did we get a data element as result? */
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
260 if (data_element && type == JABBER_IQ_RESULT) {
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
261 JabberData *data = jabber_data_create_from_xml(data_element);
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
262
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
263 if (!ephemeral) {
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
264 jabber_data_associate_remote(js, from, data);
29626
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
265 }
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
266 cb(data, alt, userdata);
29626
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
267 } else if (item_not_found) {
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
268 purple_debug_info("jabber",
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
269 "Responder didn't recognize requested data\n");
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
270 cb(NULL, alt, userdata);
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
271 } else {
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
272 purple_debug_error("jabber", "Unknown response to data request\n");
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
273 cb(NULL, alt, userdata);
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
274 }
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
275
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
276 g_free(request_data);
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
277 }
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
278
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
279 void
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
280 jabber_data_request(JabberStream *js, const gchar *cid, const gchar *who,
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
281 gchar *alt, gboolean ephemeral, JabberDataRequestCallback cb,
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
282 gpointer userdata)
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
283 {
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
284 JabberIq *request = jabber_iq_new(js, JABBER_IQ_GET);
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
285 xmlnode *data_request = jabber_data_get_xml_request(cid);
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
286 JabberDataRequestData *data = g_new0(JabberDataRequestData, 1);
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
287
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
288 data->userdata = userdata;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
289 data->alt = alt;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
290 data->ephemeral = ephemeral;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
291 data->cb = cb;
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
292
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
293 xmlnode_set_attrib(request->node, "to", who);
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
294 jabber_iq_set_callback(request, jabber_data_request_cb, data);
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
295 xmlnode_insert_child(request->node, data_request);
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
296 jabber_iq_send(request);
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
297 }
fce17268c9ec jabber: Refactor BoB request code to reside inside data.c
Marcus Lundblad <ml@update.uu.se>
parents: 29554
diff changeset
298
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
299 const JabberData *
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
300 jabber_data_find_local_by_alt(const gchar *alt)
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
301 {
29789
4beb825ff4bc Change debug outputs to say "data object" instead of "smiley", since BoB is not
Marcus Lundblad <ml@update.uu.se>
parents: 29788
diff changeset
302 purple_debug_info("jabber", "looking up local data object with alt = %s\n", alt);
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
303 return g_hash_table_lookup(local_data_by_alt, alt);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
304 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
305
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
306 const JabberData *
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
307 jabber_data_find_local_by_cid(const gchar *cid)
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
308 {
29789
4beb825ff4bc Change debug outputs to say "data object" instead of "smiley", since BoB is not
Marcus Lundblad <ml@update.uu.se>
parents: 29788
diff changeset
309 purple_debug_info("jabber", "lookup local data object with cid = %s\n", cid);
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
310 return g_hash_table_lookup(local_data_by_cid, cid);
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
311 }
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
312
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
313 const JabberData *
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
314 jabber_data_find_remote_by_cid(JabberStream *js, const gchar *who,
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
315 const gchar *cid)
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
316 {
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
317 const JabberData *data = g_hash_table_lookup(remote_data_by_cid, cid);
29789
4beb825ff4bc Change debug outputs to say "data object" instead of "smiley", since BoB is not
Marcus Lundblad <ml@update.uu.se>
parents: 29788
diff changeset
318 purple_debug_info("jabber", "lookup remote data object with cid = %s\n", cid);
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24179
diff changeset
319
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
320 if (data == NULL) {
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
321 gchar *jid_cid =
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
322 g_strdup_printf("%s@%s/%s%s%s", js->user->node, js->user->domain,
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
323 js->user->resource, who, cid);
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
324 purple_debug_info("jabber",
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
325 "didn't find BoB object by pure CID, try including JIDs: %s\n",
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
326 jid_cid);
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
327 data = g_hash_table_lookup(remote_data_by_cid, jid_cid);
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
328 g_free(jid_cid);
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
329 }
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
330 return data;
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
331 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
332
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
333 void
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
334 jabber_data_associate_local(JabberData *data, const gchar *alt)
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
335 {
29789
4beb825ff4bc Change debug outputs to say "data object" instead of "smiley", since BoB is not
Marcus Lundblad <ml@update.uu.se>
parents: 29788
diff changeset
336 purple_debug_info("jabber", "associating local data object\n alt = %s, cid = %s\n",
4beb825ff4bc Change debug outputs to say "data object" instead of "smiley", since BoB is not
Marcus Lundblad <ml@update.uu.se>
parents: 29788
diff changeset
337 alt , jabber_data_get_cid(data));
29784
bae447e1fa96 Allow the "alt" property on a Bits of Binary object to be NULL (do not store
Marcus Lundblad <ml@update.uu.se>
parents: 26932
diff changeset
338 if (alt)
bae447e1fa96 Allow the "alt" property on a Bits of Binary object to be NULL (do not store
Marcus Lundblad <ml@update.uu.se>
parents: 26932
diff changeset
339 g_hash_table_insert(local_data_by_alt, g_strdup(alt), data);
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24179
diff changeset
340 g_hash_table_insert(local_data_by_cid, g_strdup(jabber_data_get_cid(data)),
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
341 data);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
342 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
343
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
344 void
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
345 jabber_data_associate_remote(JabberStream *js, const gchar *who, JabberData *data)
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
346 {
29633
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
347 gchar *cid;
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
348
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
349 if (jabber_data_has_valid_hash(data)) {
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
350 cid = g_strdup(jabber_data_get_cid(data));
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
351 } else {
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
352 cid = g_strdup_printf("%s@%s/%s%s%s", js->user->node, js->user->domain,
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
353 js->user->resource, who, jabber_data_get_cid(data));
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
354 }
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
355
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
356 purple_debug_info("jabber", "associating remote BoB object with cid = %s\n",
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
357 cid);
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
358
1bde873d1b94 jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <ml@update.uu.se>
parents: 29630
diff changeset
359 g_hash_table_insert(remote_data_by_cid, cid, data);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
360 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
361
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
362 void
25648
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
363 jabber_data_parse(JabberStream *js, const char *who, JabberIqType type,
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
364 const char *id, xmlnode *data_node)
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
365 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
366 JabberIq *result = NULL;
25648
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
367 const char *cid = xmlnode_get_attrib(data_node, "cid");
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
368 const JabberData *data = cid ? jabber_data_find_local_by_cid(cid) : NULL;
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
369
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
370 if (!data) {
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
371 xmlnode *item_not_found = xmlnode_new("item-not-found");
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
372
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
373 result = jabber_iq_new(js, JABBER_IQ_ERROR);
25648
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
374 if (who)
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
375 xmlnode_set_attrib(result->node, "to", who);
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
376 xmlnode_set_attrib(result->node, "id", id);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
377 xmlnode_insert_child(result->node, item_not_found);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
378 } else {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
379 result = jabber_iq_new(js, JABBER_IQ_RESULT);
25648
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
380 if (who)
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
381 xmlnode_set_attrib(result->node, "to", who);
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
382 xmlnode_set_attrib(result->node, "id", id);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
383 xmlnode_insert_child(result->node,
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
384 jabber_data_get_xml_definition(data));
29786
b6dda7d483a2 Added an "ephemeral" argument when creating local data objects (given a CID).
Marcus Lundblad <ml@update.uu.se>
parents: 29785
diff changeset
385 /* if the data object is temporary, destroy it and remove the references
b6dda7d483a2 Added an "ephemeral" argument when creating local data objects (given a CID).
Marcus Lundblad <ml@update.uu.se>
parents: 29785
diff changeset
386 to it */
b6dda7d483a2 Added an "ephemeral" argument when creating local data objects (given a CID).
Marcus Lundblad <ml@update.uu.se>
parents: 29785
diff changeset
387 if (data->ephemeral) {
b6dda7d483a2 Added an "ephemeral" argument when creating local data objects (given a CID).
Marcus Lundblad <ml@update.uu.se>
parents: 29785
diff changeset
388 g_hash_table_remove(local_data_by_cid, cid);
b6dda7d483a2 Added an "ephemeral" argument when creating local data objects (given a CID).
Marcus Lundblad <ml@update.uu.se>
parents: 29785
diff changeset
389 }
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
390 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
391 jabber_iq_send(result);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
392 }
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
393
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
394 void
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
395 jabber_data_init(void)
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
396 {
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
397 purple_debug_info("jabber", "creating hash tables for data objects\n");
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
398 local_data_by_alt = g_hash_table_new_full(g_str_hash, g_str_equal,
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
399 g_free, NULL);
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
400 local_data_by_cid = g_hash_table_new_full(g_str_hash, g_str_equal,
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
401 g_free, jabber_data_delete);
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
402 remote_data_by_cid = g_hash_table_new_full(g_str_hash, g_str_equal,
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
403 g_free, jabber_data_delete);
26482
457dca546b23 Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <paul@darkrain42.org>
parents: 25979
diff changeset
404
28645
7b4ade7c6d8a jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <paul@darkrain42.org>
parents: 28161
diff changeset
405 jabber_iq_register_handler("data", NS_BOB, jabber_data_parse);
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
406 }
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
407
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
408 void
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
409 jabber_data_uninit(void)
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
410 {
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
411 purple_debug_info("jabber", "destroying hash tables for data objects\n");
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
412 g_hash_table_destroy(local_data_by_alt);
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
413 g_hash_table_destroy(local_data_by_cid);
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
414 g_hash_table_destroy(remote_data_by_cid);
25167
860ebaf275ae Add more jabber plugin unloading functions to clean up more data structures
Paul Aurich <paul@darkrain42.org>
parents: 24179
diff changeset
415 local_data_by_alt = local_data_by_cid = remote_data_by_cid = NULL;
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
416 }