Wed, 21 Jan 2009 00:19:33 +0000
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 | } |