annotate libpurple/protocols/jabber/data.c @ 27546:70dcaa0b6fea

Various fixes to get BOSH working with Prosody 0.5. Prosody closes the TCP socket immediately after every reply, so is an extremely good test of that corner case.
author Paul Aurich <paul@darkrain42.org>
date Wed, 15 Jul 2009 05:49:30 +0000
parents a8537bbcfb79
children 8c991e09efcb bae447e1fa96
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 /*
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
2 * 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
3 * 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
4 * 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
5 * (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
6 *
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
7 * 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
8 * 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
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
10 * GNU Library 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
11 *
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
12 * 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
13 * along with this program; if not, write to the Free Software
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
14 * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
15 */
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24179
diff changeset
16
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
17 #include <stdlib.h>
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
18 #include <glib.h>
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
19 #include <string.h>
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
20
24060
0952f73a452c Patch from Phil Hannent fixing build on Windows
Marcus Lundblad <ml@update.uu.se>
parents: 24059
diff changeset
21 #include "internal.h"
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
22 #include "data.h"
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
23 #include "debug.h"
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
24 #include "xmlnode.h"
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
25 #include "util.h"
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
26 #include "iq.h"
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
27
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
28 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
29 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
30 static GHashTable *remote_data_by_cid = NULL;
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
31
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
32 JabberData *
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
33 jabber_data_create_from_data(gconstpointer rawdata, gsize size, const char *type,
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
34 JabberStream *js)
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
35 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
36 JabberData *data = g_new0(JabberData, 1);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
37 gchar *checksum = purple_util_get_image_checksum(rawdata, size);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
38 gchar cid[256];
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
39
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
40 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
41 g_free(checksum);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
42
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
43 data->cid = g_strdup(cid);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
44 data->type = g_strdup(type);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
45 data->size = size;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
46
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
47 data->data = g_memdup(rawdata, size);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
48
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
49 return data;
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
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
52 JabberData *
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
53 jabber_data_create_from_xml(xmlnode *tag)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
54 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
55 JabberData *data = g_new0(JabberData, 1);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
56 gsize size;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
57 gpointer raw_data = NULL;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
58
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
59 if (data == NULL) {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
60 purple_debug_error("jabber", "Could not allocate data object\n");
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
61 g_free(data);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
62 return NULL;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
63 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
64
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
65 /* check if this is a "data" tag */
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
66 if (strcmp(tag->name, "data") != 0) {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
67 purple_debug_error("jabber", "Invalid data element");
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
68 g_free(data);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
69 return NULL;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
70 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
71
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
72 data->cid = g_strdup(xmlnode_get_attrib(tag, "cid"));
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
73 data->type = g_strdup(xmlnode_get_attrib(tag, "type"));
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24179
diff changeset
74
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
75 raw_data = xmlnode_get_data(tag);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
76 data->data = purple_base64_decode(raw_data, &size);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
77 data->size = size;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
78
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
79 g_free(raw_data);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
80
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
81 return data;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
82 }
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
24179
2c6c9d72f54f A couple of compile warning fixes, a couple of memory leak plugs.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24061
diff changeset
85 static void
2c6c9d72f54f A couple of compile warning fixes, a couple of memory leak plugs.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24061
diff changeset
86 jabber_data_delete(gpointer cbdata)
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
87 {
24179
2c6c9d72f54f A couple of compile warning fixes, a couple of memory leak plugs.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24061
diff changeset
88 JabberData *data = cbdata;
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
89 g_free(data->cid);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
90 g_free(data->type);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
91 g_free(data->data);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
92 g_free(data);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
93 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
94
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
95 const char *
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
96 jabber_data_get_cid(const JabberData *data)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
97 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
98 return data->cid;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
99 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
100
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
101
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
102 const char *
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
103 jabber_data_get_type(const JabberData *data)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
104 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
105 return data->type;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
106 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
107
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
108 gsize
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
109 jabber_data_get_size(const JabberData *data)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
110 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
111 return data->size;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
112 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
113
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
114 gpointer
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
115 jabber_data_get_data(const JabberData *data)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
116 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
117 return data->data;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
118 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
119
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
120 xmlnode *
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
121 jabber_data_get_xml_definition(const JabberData *data)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
122 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
123 xmlnode *tag = xmlnode_new("data");
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
124 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
125
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
126 xmlnode_set_namespace(tag, XEP_0231_NAMESPACE);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
127 xmlnode_set_attrib(tag, "cid", data->cid);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
128 xmlnode_set_attrib(tag, "type", data->type);
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 xmlnode_insert_data(tag, base64data, -1);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
131
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
132 g_free(base64data);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
133
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
134 return tag;
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
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
137 xmlnode *
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
138 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
139 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
140 xmlnode *img = xmlnode_new("img");
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
141 char src[128];
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
142
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
143 xmlnode_set_attrib(img, "alt", alt);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
144 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
145 xmlnode_set_attrib(img, "src", src);
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 return img;
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
148 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
149
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
150 xmlnode *
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
151 jabber_data_get_xml_request(const gchar *cid)
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
152 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
153 xmlnode *tag = xmlnode_new("data");
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
154
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
155 xmlnode_set_namespace(tag, XEP_0231_NAMESPACE);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
156 xmlnode_set_attrib(tag, "cid", cid);
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 return tag;
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
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
161 const JabberData *
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
162 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
163 {
24061
fba7c73c8f02 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <ml@update.uu.se>
parents: 24060
diff changeset
164 purple_debug_info("jabber", "looking up local smiley 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
165 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
166 }
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 const JabberData *
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
169 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
170 {
24061
fba7c73c8f02 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <ml@update.uu.se>
parents: 24060
diff changeset
171 purple_debug_info("jabber", "lookup local smiley 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
172 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
173 }
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
174
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
175 const JabberData *
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
176 jabber_data_find_remote_by_cid(const gchar *cid)
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
177 {
24061
fba7c73c8f02 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <ml@update.uu.se>
parents: 24060
diff changeset
178 purple_debug_info("jabber", "lookup remote smiley 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
179
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
180 return g_hash_table_lookup(remote_data_by_cid, cid);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
181 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
182
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
183 void
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
184 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
185 {
24061
fba7c73c8f02 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <ml@update.uu.se>
parents: 24060
diff changeset
186 purple_debug_info("jabber", "associating local smiley\n alt = %s, cid = %s\n",
fba7c73c8f02 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <ml@update.uu.se>
parents: 24060
diff changeset
187 alt, 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
188 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
189 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
190 data);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
191 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
192
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
193 void
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
194 jabber_data_associate_remote(JabberData *data)
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
195 {
24061
fba7c73c8f02 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <ml@update.uu.se>
parents: 24060
diff changeset
196 purple_debug_info("jabber", "associating remote smiley, cid = %s\n",
fba7c73c8f02 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <ml@update.uu.se>
parents: 24060
diff changeset
197 jabber_data_get_cid(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
198 g_hash_table_insert(remote_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
199 data);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
200 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
201
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
202 void
25648
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
203 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
204 const char *id, xmlnode *data_node)
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
205 {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
206 JabberIq *result = NULL;
25648
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
207 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
208 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
209
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
210 if (!data) {
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
211 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
212
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
213 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
214 if (who)
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
215 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
216 xmlnode_set_attrib(result->node, "id", id);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
217 xmlnode_insert_child(result->node, item_not_found);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
218 } else {
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
219 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
220 if (who)
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25433
diff changeset
221 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
222 xmlnode_set_attrib(result->node, "id", id);
23780
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
223 xmlnode_insert_child(result->node,
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
224 jabber_data_get_xml_definition(data));
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
225 }
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
226 jabber_iq_send(result);
9d83ae2c1a4f New files used for custom smileys.
Marcus Lundblad <ml@update.uu.se>
parents:
diff changeset
227 }
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
228
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
229 void
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
230 jabber_data_init(void)
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
231 {
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
232 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
233 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
234 g_free, NULL);
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
235 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
236 g_free, jabber_data_delete);
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
237 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
238 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
239
26932
a8537bbcfb79 Remove trailing whitespace that has snuck in.
Paul Aurich <paul@darkrain42.org>
parents: 26487
diff changeset
240 jabber_iq_register_handler("data", XEP_0231_NAMESPACE, jabber_data_parse);
24058
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
241 }
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
242
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
243 void
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
244 jabber_data_uninit(void)
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
245 {
305fac6af8f9 Updated to use latest spec. in XEP-0231
Marcus Lundblad <ml@update.uu.se>
parents: 23780
diff changeset
246 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
247 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
248 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
249 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
250 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
251 }