Wed, 13 May 2009 20:29:03 +0000
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 | } |