libpurple/protocols/jabber/data.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 26707
a4f7c5d5e5ae
child 27155
53502d71efdd
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
1 /*
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
2 * This program is free software; you can redistribute it and/or modify
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
3 * it under the terms of the GNU General Public License as published by
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
4 * the Free Software Foundation; either version 2 of the License, or
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
5 * (at your option) any later version.
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24386
diff changeset
6 *
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
7 * This program is distributed in the hope that it will be useful,
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
10 * GNU Library General Public License for more details.
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24386
diff changeset
11 *
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
12 * You should have received a copy of the GNU General Public License
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
13 * along with this program; if not, write to the Free Software
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
14 * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
15 */
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24386
diff changeset
16
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
17 #include <stdlib.h>
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
18 #include <glib.h>
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
19 #include <string.h>
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
20
24256
8194badc275d Patch from Phil Hannent fixing build on Windows
Marcus Lundblad <malu@pidgin.im>
parents: 24255
diff changeset
21 #include "internal.h"
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
22 #include "data.h"
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
23 #include "debug.h"
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
24 #include "xmlnode.h"
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
25 #include "util.h"
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
26 #include "iq.h"
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
27
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
28 static GHashTable *local_data_by_alt = NULL;
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
29 static GHashTable *local_data_by_cid = NULL;
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
30 static GHashTable *remote_data_by_cid = NULL;
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
31
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
32 JabberData *
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
33 jabber_data_create_from_data(gconstpointer rawdata, gsize size, const char *type,
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
34 JabberStream *js)
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
35 {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
36 JabberData *data = g_new0(JabberData, 1);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
37 gchar *checksum = purple_util_get_image_checksum(rawdata, size);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
38 gchar cid[256];
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
39
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
40 g_snprintf(cid, sizeof(cid), "sha1+%s@bob.xmpp.org", checksum);
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
41 g_free(checksum);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
42
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
43 data->cid = g_strdup(cid);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
44 data->type = g_strdup(type);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
45 data->size = size;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
46
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
47 data->data = g_memdup(rawdata, size);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
48
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
49 return data;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
50 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
51
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
52 JabberData *
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
53 jabber_data_create_from_xml(xmlnode *tag)
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
54 {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
55 JabberData *data = g_new0(JabberData, 1);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
56 gsize size;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
57 gpointer raw_data = NULL;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
58
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
59 if (data == NULL) {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
60 purple_debug_error("jabber", "Could not allocate data object\n");
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
61 g_free(data);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
62 return NULL;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
63 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
64
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
65 /* check if this is a "data" tag */
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
66 if (strcmp(tag->name, "data") != 0) {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
67 purple_debug_error("jabber", "Invalid data element");
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
68 g_free(data);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
69 return NULL;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
70 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
71
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
72 data->cid = g_strdup(xmlnode_get_attrib(tag, "cid"));
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
73 data->type = g_strdup(xmlnode_get_attrib(tag, "type"));
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24386
diff changeset
74
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
75 raw_data = xmlnode_get_data(tag);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
76 data->data = purple_base64_decode(raw_data, &size);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
77 data->size = size;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
78
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
79 g_free(raw_data);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
80
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
81 return data;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
82 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
83
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
84
24386
0710eb7a41c5 A couple of compile warning fixes, a couple of memory leak plugs.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24257
diff changeset
85 static void
0710eb7a41c5 A couple of compile warning fixes, a couple of memory leak plugs.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24257
diff changeset
86 jabber_data_delete(gpointer cbdata)
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
87 {
24386
0710eb7a41c5 A couple of compile warning fixes, a couple of memory leak plugs.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24257
diff changeset
88 JabberData *data = cbdata;
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
89 g_free(data->cid);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
90 g_free(data->type);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
91 g_free(data->data);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
92 g_free(data);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
93 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
94
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
95 const char *
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
96 jabber_data_get_cid(const JabberData *data)
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
97 {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
98 return data->cid;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
99 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
100
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
101
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
102 const char *
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
103 jabber_data_get_type(const JabberData *data)
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
104 {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
105 return data->type;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
106 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
107
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
108 gsize
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
109 jabber_data_get_size(const JabberData *data)
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
110 {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
111 return data->size;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
112 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
113
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
114 gpointer
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
115 jabber_data_get_data(const JabberData *data)
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
116 {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
117 return data->data;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
118 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
119
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
120 xmlnode *
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
121 jabber_data_get_xml_definition(const JabberData *data)
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
122 {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
123 xmlnode *tag = xmlnode_new("data");
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
124 char *base64data = purple_base64_encode(data->data, data->size);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
125
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
126 xmlnode_set_namespace(tag, XEP_0231_NAMESPACE);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
127 xmlnode_set_attrib(tag, "cid", data->cid);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
128 xmlnode_set_attrib(tag, "type", data->type);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
129
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
130 xmlnode_insert_data(tag, base64data, -1);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
131
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
132 g_free(base64data);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
133
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
134 return tag;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
135 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
136
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
137 xmlnode *
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
138 jabber_data_get_xhtml_im(const JabberData *data, const gchar *alt)
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
139 {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
140 xmlnode *img = xmlnode_new("img");
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
141 char src[128];
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
142
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
143 xmlnode_set_attrib(img, "alt", alt);
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
144 g_snprintf(src, sizeof(src), "cid:%s", data->cid);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
145 xmlnode_set_attrib(img, "src", src);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
146
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
147 return img;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
148 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
149
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
150 xmlnode *
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
151 jabber_data_get_xml_request(const gchar *cid)
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
152 {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
153 xmlnode *tag = xmlnode_new("data");
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
154
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
155 xmlnode_set_namespace(tag, XEP_0231_NAMESPACE);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
156 xmlnode_set_attrib(tag, "cid", cid);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
157
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
158 return tag;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
159 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
160
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
161 const JabberData *
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
162 jabber_data_find_local_by_alt(const gchar *alt)
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
163 {
24257
d6402f066933 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <malu@pidgin.im>
parents: 24256
diff changeset
164 purple_debug_info("jabber", "looking up local smiley with alt = %s\n", alt);
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
165 return g_hash_table_lookup(local_data_by_alt, alt);
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
166 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
167
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
168 const JabberData *
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
169 jabber_data_find_local_by_cid(const gchar *cid)
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
170 {
24257
d6402f066933 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <malu@pidgin.im>
parents: 24256
diff changeset
171 purple_debug_info("jabber", "lookup local smiley with cid = %s\n", cid);
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
172 return g_hash_table_lookup(local_data_by_cid, cid);
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
173 }
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
174
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
175 const JabberData *
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
176 jabber_data_find_remote_by_cid(const gchar *cid)
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
177 {
24257
d6402f066933 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <malu@pidgin.im>
parents: 24256
diff changeset
178 purple_debug_info("jabber", "lookup remote smiley with cid = %s\n", cid);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24386
diff changeset
179
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
180 return g_hash_table_lookup(remote_data_by_cid, cid);
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
181 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
182
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
183 void
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
184 jabber_data_associate_local(JabberData *data, const gchar *alt)
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
185 {
24257
d6402f066933 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <malu@pidgin.im>
parents: 24256
diff changeset
186 purple_debug_info("jabber", "associating local smiley\n alt = %s, cid = %s\n",
d6402f066933 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <malu@pidgin.im>
parents: 24256
diff changeset
187 alt, jabber_data_get_cid(data));
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
188 g_hash_table_insert(local_data_by_alt, g_strdup(alt), data);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24386
diff changeset
189 g_hash_table_insert(local_data_by_cid, g_strdup(jabber_data_get_cid(data)),
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
190 data);
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
191 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
192
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
193 void
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
194 jabber_data_associate_remote(JabberData *data)
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
195 {
24257
d6402f066933 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <malu@pidgin.im>
parents: 24256
diff changeset
196 purple_debug_info("jabber", "associating remote smiley, cid = %s\n",
d6402f066933 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <malu@pidgin.im>
parents: 24256
diff changeset
197 jabber_data_get_cid(data));
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24386
diff changeset
198 g_hash_table_insert(remote_data_by_cid, g_strdup(jabber_data_get_cid(data)),
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
199 data);
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
200 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
201
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
202 void
25817
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25566
diff changeset
203 jabber_data_parse(JabberStream *js, const char *who, JabberIqType type,
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25566
diff changeset
204 const char *id, xmlnode *data_node)
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
205 {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
206 JabberIq *result = NULL;
25817
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25566
diff changeset
207 const char *cid = xmlnode_get_attrib(data_node, "cid");
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25566
diff changeset
208 const JabberData *data = cid ? jabber_data_find_local_by_cid(cid) : NULL;
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
209
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
210 if (!data) {
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
211 xmlnode *item_not_found = xmlnode_new("item-not-found");
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
212
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
213 result = jabber_iq_new(js, JABBER_IQ_ERROR);
25817
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25566
diff changeset
214 if (who)
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25566
diff changeset
215 xmlnode_set_attrib(result->node, "to", who);
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25566
diff changeset
216 xmlnode_set_attrib(result->node, "id", id);
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
217 xmlnode_insert_child(result->node, item_not_found);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
218 } else {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
219 result = jabber_iq_new(js, JABBER_IQ_RESULT);
25817
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25566
diff changeset
220 if (who)
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25566
diff changeset
221 xmlnode_set_attrib(result->node, "to", who);
09d6a40a341d Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents: 25566
diff changeset
222 xmlnode_set_attrib(result->node, "id", id);
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
223 xmlnode_insert_child(result->node,
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
224 jabber_data_get_xml_definition(data));
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
225 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
226 jabber_iq_send(result);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
227 }
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
228
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
229 void
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
230 jabber_data_init(void)
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
231 {
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
232 purple_debug_info("jabber", "creating hash tables for data objects\n");
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
233 local_data_by_alt = g_hash_table_new_full(g_str_hash, g_str_equal,
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
234 g_free, NULL);
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
235 local_data_by_cid = g_hash_table_new_full(g_str_hash, g_str_equal,
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
236 g_free, jabber_data_delete);
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
237 remote_data_by_cid = g_hash_table_new_full(g_str_hash, g_str_equal,
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
238 g_free, jabber_data_delete);
26704
e6dba3759625 Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
239
e6dba3759625 Gratuitous alphabetization of the IQ handlers (again!) and move the data handler to jabber_data_init
Paul Aurich <darkrain42@pidgin.im>
parents: 26088
diff changeset
240 jabber_iq_register_handler("data", XEP_0231_NAMESPACE, jabber_data_parse);
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
241 }
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
242
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
243 void
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
244 jabber_data_uninit(void)
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
245 {
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
246 purple_debug_info("jabber", "destroying hash tables for data objects\n");
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
247 g_hash_table_destroy(local_data_by_alt);
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
248 g_hash_table_destroy(local_data_by_cid);
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
249 g_hash_table_destroy(remote_data_by_cid);
24737
b8a96a07e7ac Add more jabber plugin unloading functions to clean up more data structures
Paul Aurich <darkrain42@pidgin.im>
parents: 24386
diff changeset
250 local_data_by_alt = local_data_by_cid = remote_data_by_cid = NULL;
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
251 }

mercurial