libpurple/protocols/jabber/data.c

Wed, 21 Jan 2009 00:19:33 +0000

author
Paul Aurich <darkrain42@pidgin.im>
date
Wed, 21 Jan 2009 00:19:33 +0000
branch
cpw.darkrain42.xmpp.bosh
changeset 25488
acdb4dbab299
parent 24737
b8a96a07e7ac
child 26072
e8fce2b2b9fe
permissions
-rw-r--r--

Don't track a cb-per-POST and remove the PurpleHTTPResponse structure.

The only callback ever used is http_received_cb and the ordering of
responses from the server is not guaranteed to match the order of our requests,
so the metaphor of matching them doesn't make sense. Instead of that, just
track the number of requests (to ensure there is always a request outstanding).

Additionally, pass the data const-ified instead of copying it. It's just
fed to an XML parser anyway.

UPDATE:

Tobias pointed out my explanation was flat-out wrong. The server's replies *do*
correspond to a specific request (HTTP pipelining). I believe what I meant to
say is that the XML in the replies isn't guaranteed to correspond to the
request's payload.

In any event, the critical point is that the callback is always the same, so
there's no need to store it per-request.

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.
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
6 *
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.
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
11 *
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 */
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
16
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"));
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
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);
d6402f066933 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <malu@pidgin.im>
parents: 24256
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);
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
189 g_hash_table_insert(local_data_by_cid, g_strdup(jabber_data_get_cid(data)),
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));
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
198 g_hash_table_insert(remote_data_by_cid, g_strdup(jabber_data_get_cid(data)),
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
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
203 jabber_data_parse(JabberStream *js, xmlnode *packet)
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
204 {
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
205 JabberIq *result = NULL;
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
206 const char *who = xmlnode_get_attrib(packet, "from");
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
207 xmlnode *data_node = xmlnode_get_child(packet, "data");
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
208 const JabberData *data =
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
209 jabber_data_find_local_by_cid(xmlnode_get_attrib(data_node, "cid"));
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
210
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
211 if (!data) {
23629
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
212 xmlnode *item_not_found = xmlnode_new("item-not-found");
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
213
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
214 result = jabber_iq_new(js, JABBER_IQ_ERROR);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
215 xmlnode_set_attrib(result->node, "to", who);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
216 xmlnode_set_attrib(result->node, "id", xmlnode_get_attrib(packet, "id"));
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);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
220 xmlnode_set_attrib(result->node, "to", who);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
221 xmlnode_set_attrib(result->node, "id", xmlnode_get_attrib(packet, "id"));
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
222 xmlnode_insert_child(result->node,
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
223 jabber_data_get_xml_definition(data));
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
224 }
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
225 jabber_iq_send(result);
05adde07702c New files used for custom smileys.
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
226 }
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
227
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
228 void
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
229 jabber_data_init(void)
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
230 {
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
231 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
232 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
233 g_free, NULL);
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
234 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
235 g_free, jabber_data_delete);
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
236 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
237 g_free, jabber_data_delete);
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
238 }
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
239
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
240 void
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23629
diff changeset
241 jabber_data_uninit(void)
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 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
244 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
245 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
246 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
247 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
248 }

mercurial