Mercurial > pidgin.yaz
annotate libpurple/protocols/jabber/useravatar.c @ 28914:e14402d6c5e0
jabber: Go back to not overwriting avatars if there is not one locally set.
This isn't quite right yet, because we need to pick up the hash and advertise
it in our presence.
Fixes #10287.
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Fri, 13 Nov 2009 18:39:23 +0000 |
parents | fa7f3426ed13 |
children | 93e8e6331d44 |
rev | line source |
---|---|
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
1 /* |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
2 * purple - Jabber Protocol Plugin |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
3 * |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
4 * Purple is the legal property of its developers, whose names are too numerous |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
5 * to list here. Please refer to the COPYRIGHT file distributed with this |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
6 * source distribution. |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
7 * |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
8 * This program is free software; you can redistribute it and/or modify |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
9 * it under the terms of the GNU General Public License as published by |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
10 * the Free Software Foundation; either version 2 of the License, or |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
11 * (at your option) any later version. |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
12 * |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
16 * GNU General Public License for more details. |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
17 * |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
28397
8c991e09efcb
Update various header copyrights thanks to licensecheck.
Paul Aurich <paul@darkrain42.org>
parents:
28114
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
21 * |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
22 */ |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
23 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
24 #include "internal.h" |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
25 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
26 #include "useravatar.h" |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
27 #include "pep.h" |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
28 #include "debug.h" |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
29 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
30 #define MAX_HTTP_BUDDYICON_BYTES (200 * 1024) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
31 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
32 static void update_buddy_metadata(JabberStream *js, const char *from, xmlnode *items); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
33 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
34 void jabber_avatar_init(void) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
35 { |
26818 | 36 jabber_add_feature(NS_AVATAR_1_1_METADATA, |
25819
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
37 jabber_pep_namespace_only_when_pep_enabled_cb); |
26818 | 38 jabber_add_feature(NS_AVATAR_1_1_DATA, |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
39 jabber_pep_namespace_only_when_pep_enabled_cb); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
40 |
26818 | 41 jabber_pep_register_handler(NS_AVATAR_1_1_METADATA, |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
42 update_buddy_metadata); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
43 } |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
44 |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
45 static void |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
46 remove_avatar_0_12_nodes(JabberStream *js) |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
47 { |
26880
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
48 #if 0 |
26883
df7505e0d64a
The correct fix here is to place non-code in a comment (yes, even if it's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26882
diff
changeset
|
49 /* See note below for why this is #if 0'd */ |
26880
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
50 |
26874
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
51 /* Publish an empty avatar according to the XEP-0084 v0.12 semantics */ |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
52 xmlnode *publish, *item, *metadata; |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
53 /* publish the metadata */ |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
54 publish = xmlnode_new("publish"); |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
55 xmlnode_set_attrib(publish, "node", NS_AVATAR_0_12_METADATA); |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
56 |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
57 item = xmlnode_new_child(publish, "item"); |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
58 xmlnode_set_attrib(item, "id", "stop"); |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
59 |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
60 metadata = xmlnode_new_child(item, "metadata"); |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
61 xmlnode_set_namespace(metadata, NS_AVATAR_0_12_METADATA); |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
62 |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
63 xmlnode_new_child(metadata, "stop"); |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
64 |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
65 /* publish */ |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
66 jabber_pep_publish(js, publish); |
26880
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
67 #endif |
26874
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
68 |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
69 /* |
26880
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
70 * This causes ejabberd 2.0.0 to kill the connection unceremoniously. |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
71 * See https://support.process-one.net/browse/EJAB-623. When adiumx.com |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
72 * was upgraded, the issue went away. |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
73 * |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
74 * I think it makes a lot of sense to not have an avatar at the old |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
75 * node instead of having something interpreted as "no avatar". When |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
76 * a contact with an older client logs in, in the latter situation, |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
77 * there's a race between interpreting the <presence/> vcard-temp:x:update |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
78 * avatar (non-empty) and the XEP-0084 v0.12 avatar (empty, so show no |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
79 * avatar for the buddy) which leads to unhappy and confused users. |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
80 * |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
81 * A deluge of frustrating "Read error" bug reports may change my mind |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
82 * about this. |
afc3ec89e83b
Revert the partial hack for ejabberd 2.0.0. See comment in code.
Paul Aurich <paul@darkrain42.org>
parents:
26874
diff
changeset
|
83 * --darkrain42 |
26874
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
84 */ |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
85 jabber_pep_delete_node(js, NS_AVATAR_0_12_METADATA); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
86 jabber_pep_delete_node(js, NS_AVATAR_0_12_DATA); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
87 } |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
88 |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
89 void jabber_avatar_set(JabberStream *js, PurpleStoredImage *img) |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
90 { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
91 xmlnode *publish, *metadata, *item; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
92 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
93 if (!js->pep) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
94 return; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
95 |
26874
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
96 /* Hmmm, not sure if this is worth the traffic, but meh */ |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
97 remove_avatar_0_12_nodes(js); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
98 |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
99 if (!img) { |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
100 publish = xmlnode_new("publish"); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
101 xmlnode_set_attrib(publish, "node", NS_AVATAR_1_1_METADATA); |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
102 |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
103 item = xmlnode_new_child(publish, "item"); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
104 metadata = xmlnode_new_child(item, "metadata"); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
105 xmlnode_set_namespace(metadata, NS_AVATAR_1_1_METADATA); |
25819
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
106 |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
107 /* publish */ |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
108 jabber_pep_publish(js, publish); |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
109 } else { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
110 /* |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
111 * TODO: This is pretty gross. The Jabber PRPL really shouldn't |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
112 * do voodoo to try to determine the image type, height |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
113 * and width. |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
114 */ |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
115 /* A PNG header, including the IHDR, but nothing else */ |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
116 const struct { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
117 guchar signature[8]; /* must be hex 89 50 4E 47 0D 0A 1A 0A */ |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
118 struct { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
119 guint32 length; /* must be 0x0d */ |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
120 guchar type[4]; /* must be 'I' 'H' 'D' 'R' */ |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
121 guint32 width; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
122 guint32 height; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
123 guchar bitdepth; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
124 guchar colortype; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
125 guchar compression; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
126 guchar filter; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
127 guchar interlace; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
128 } ihdr; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
129 } *png = purple_imgstore_get_data(img); /* ATTN: this is in network byte order! */ |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
130 |
26788
fbb2b8e2d91e
Use purple_strequal and g_str_equal
Paul Aurich <paul@darkrain42.org>
parents:
25832
diff
changeset
|
131 /* check if the data is a valid png file (well, at least to some extent) */ |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
132 if(png->signature[0] == 0x89 && |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
133 png->signature[1] == 0x50 && |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
134 png->signature[2] == 0x4e && |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
135 png->signature[3] == 0x47 && |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
136 png->signature[4] == 0x0d && |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
137 png->signature[5] == 0x0a && |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
138 png->signature[6] == 0x1a && |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
139 png->signature[7] == 0x0a && |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
140 ntohl(png->ihdr.length) == 0x0d && |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
141 png->ihdr.type[0] == 'I' && |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
142 png->ihdr.type[1] == 'H' && |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
143 png->ihdr.type[2] == 'D' && |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
144 png->ihdr.type[3] == 'R') { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
145 /* parse PNG header to get the size of the image (yes, this is required) */ |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
146 guint32 width = ntohl(png->ihdr.width); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
147 guint32 height = ntohl(png->ihdr.height); |
25820
c0a27a44ebd6
Support both XEP-0084 namespaces for fetching our own avatars at login
Paul Aurich <paul@darkrain42.org>
parents:
25819
diff
changeset
|
148 xmlnode *data, *info; |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
149 char *lengthstring, *widthstring, *heightstring; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
150 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
151 /* compute the sha1 hash */ |
25820
c0a27a44ebd6
Support both XEP-0084 namespaces for fetching our own avatars at login
Paul Aurich <paul@darkrain42.org>
parents:
25819
diff
changeset
|
152 char *hash = jabber_calculate_data_sha1sum(purple_imgstore_get_data(img), |
c0a27a44ebd6
Support both XEP-0084 namespaces for fetching our own avatars at login
Paul Aurich <paul@darkrain42.org>
parents:
25819
diff
changeset
|
153 purple_imgstore_get_size(img)); |
c0a27a44ebd6
Support both XEP-0084 namespaces for fetching our own avatars at login
Paul Aurich <paul@darkrain42.org>
parents:
25819
diff
changeset
|
154 char *base64avatar = purple_base64_encode(purple_imgstore_get_data(img), |
c0a27a44ebd6
Support both XEP-0084 namespaces for fetching our own avatars at login
Paul Aurich <paul@darkrain42.org>
parents:
25819
diff
changeset
|
155 purple_imgstore_get_size(img)); |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
156 |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
157 publish = xmlnode_new("publish"); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
158 xmlnode_set_attrib(publish, "node", NS_AVATAR_1_1_DATA); |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
159 |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
160 item = xmlnode_new_child(publish, "item"); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
161 xmlnode_set_attrib(item, "id", hash); |
25819
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
162 |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
163 data = xmlnode_new_child(item, "data"); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
164 xmlnode_set_namespace(data, NS_AVATAR_1_1_DATA); |
25820
c0a27a44ebd6
Support both XEP-0084 namespaces for fetching our own avatars at login
Paul Aurich <paul@darkrain42.org>
parents:
25819
diff
changeset
|
165 |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
166 xmlnode_insert_data(data, base64avatar, -1); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
167 /* publish the avatar itself */ |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
168 jabber_pep_publish(js, publish); |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
169 |
25820
c0a27a44ebd6
Support both XEP-0084 namespaces for fetching our own avatars at login
Paul Aurich <paul@darkrain42.org>
parents:
25819
diff
changeset
|
170 g_free(base64avatar); |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
171 |
25819
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
172 lengthstring = g_strdup_printf("%" G_GSIZE_FORMAT, |
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
173 purple_imgstore_get_size(img)); |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
174 widthstring = g_strdup_printf("%u", width); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
175 heightstring = g_strdup_printf("%u", height); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
176 |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
177 /* publish the metadata */ |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
178 publish = xmlnode_new("publish"); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
179 xmlnode_set_attrib(publish, "node", NS_AVATAR_1_1_METADATA); |
25820
c0a27a44ebd6
Support both XEP-0084 namespaces for fetching our own avatars at login
Paul Aurich <paul@darkrain42.org>
parents:
25819
diff
changeset
|
180 |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
181 item = xmlnode_new_child(publish, "item"); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
182 xmlnode_set_attrib(item, "id", hash); |
25820
c0a27a44ebd6
Support both XEP-0084 namespaces for fetching our own avatars at login
Paul Aurich <paul@darkrain42.org>
parents:
25819
diff
changeset
|
183 |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
184 metadata = xmlnode_new_child(item, "metadata"); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
185 xmlnode_set_namespace(metadata, NS_AVATAR_1_1_METADATA); |
25820
c0a27a44ebd6
Support both XEP-0084 namespaces for fetching our own avatars at login
Paul Aurich <paul@darkrain42.org>
parents:
25819
diff
changeset
|
186 |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
187 info = xmlnode_new_child(metadata, "info"); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
188 xmlnode_set_attrib(info, "id", hash); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
189 xmlnode_set_attrib(info, "type", "image/png"); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
190 xmlnode_set_attrib(info, "bytes", lengthstring); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
191 xmlnode_set_attrib(info, "width", widthstring); |
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
192 xmlnode_set_attrib(info, "height", heightstring); |
25820
c0a27a44ebd6
Support both XEP-0084 namespaces for fetching our own avatars at login
Paul Aurich <paul@darkrain42.org>
parents:
25819
diff
changeset
|
193 |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
194 jabber_pep_publish(js, publish); |
25820
c0a27a44ebd6
Support both XEP-0084 namespaces for fetching our own avatars at login
Paul Aurich <paul@darkrain42.org>
parents:
25819
diff
changeset
|
195 |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
196 g_free(lengthstring); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
197 g_free(widthstring); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
198 g_free(heightstring); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
199 g_free(hash); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
200 } else { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
201 purple_debug_error("jabber", "Cannot set PEP avatar to non-PNG data\n"); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
202 } |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
203 } |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
204 } |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
205 |
25817
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
206 static void |
26874
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
207 do_got_own_avatar_0_12_cb(JabberStream *js, const char *from, xmlnode *items) |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
208 { |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
209 if (items) |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
210 /* It wasn't an error (i.e. 'item-not-found') */ |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
211 remove_avatar_0_12_nodes(js); |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
212 } |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
213 |
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
214 static void |
25817
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
215 do_got_own_avatar_cb(JabberStream *js, const char *from, xmlnode *items) |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
216 { |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
217 xmlnode *item = NULL, *metadata = NULL, *info = NULL; |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
218 PurpleAccount *account = purple_connection_get_account(js->gc); |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
219 const char *server_hash = NULL; |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
220 |
26874
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
221 if (items && (item = xmlnode_get_child(items, "item")) && |
28114
93d9cf1151a4
jabber: Fix setting the PEP node the first time.
Paul Aurich <paul@darkrain42.org>
parents:
27216
diff
changeset
|
222 (metadata = xmlnode_get_child(item, "metadata")) && |
93d9cf1151a4
jabber: Fix setting the PEP node the first time.
Paul Aurich <paul@darkrain42.org>
parents:
27216
diff
changeset
|
223 (info = xmlnode_get_child(metadata, "info"))) { |
25817
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
224 server_hash = xmlnode_get_attrib(info, "id"); |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
225 } |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
226 |
28114
93d9cf1151a4
jabber: Fix setting the PEP node the first time.
Paul Aurich <paul@darkrain42.org>
parents:
27216
diff
changeset
|
227 /* |
93d9cf1151a4
jabber: Fix setting the PEP node the first time.
Paul Aurich <paul@darkrain42.org>
parents:
27216
diff
changeset
|
228 * If we have an avatar and the server returned an error/malformed data, |
93d9cf1151a4
jabber: Fix setting the PEP node the first time.
Paul Aurich <paul@darkrain42.org>
parents:
27216
diff
changeset
|
229 * push our avatar. If the server avatar doesn't match the local one, push |
93d9cf1151a4
jabber: Fix setting the PEP node the first time.
Paul Aurich <paul@darkrain42.org>
parents:
27216
diff
changeset
|
230 * our avatar. |
93d9cf1151a4
jabber: Fix setting the PEP node the first time.
Paul Aurich <paul@darkrain42.org>
parents:
27216
diff
changeset
|
231 */ |
28914
e14402d6c5e0
jabber: Go back to not overwriting avatars if there is not one locally set.
Paul Aurich <paul@darkrain42.org>
parents:
28889
diff
changeset
|
232 if ((!items || !metadata) || |
28114
93d9cf1151a4
jabber: Fix setting the PEP node the first time.
Paul Aurich <paul@darkrain42.org>
parents:
27216
diff
changeset
|
233 !purple_strequal(server_hash, js->initial_avatar_hash)) { |
25817
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
234 PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account); |
26791
80437c891f92
Publish only 'new' xmlns of avatars and delete old.
Paul Aurich <paul@darkrain42.org>
parents:
26790
diff
changeset
|
235 jabber_avatar_set(js, img); |
25817
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
236 purple_imgstore_unref(img); |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
237 } |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
238 } |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
239 |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
240 void jabber_avatar_fetch_mine(JabberStream *js) |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
241 { |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
242 char *jid = g_strdup_printf("%s@%s", js->user->node, js->user->domain); |
28914
e14402d6c5e0
jabber: Go back to not overwriting avatars if there is not one locally set.
Paul Aurich <paul@darkrain42.org>
parents:
28889
diff
changeset
|
243 |
e14402d6c5e0
jabber: Go back to not overwriting avatars if there is not one locally set.
Paul Aurich <paul@darkrain42.org>
parents:
28889
diff
changeset
|
244 if (js->initial_avatar_hash) { |
e14402d6c5e0
jabber: Go back to not overwriting avatars if there is not one locally set.
Paul Aurich <paul@darkrain42.org>
parents:
28889
diff
changeset
|
245 jabber_pep_request_item(js, jid, NS_AVATAR_0_12_METADATA, NULL, |
e14402d6c5e0
jabber: Go back to not overwriting avatars if there is not one locally set.
Paul Aurich <paul@darkrain42.org>
parents:
28889
diff
changeset
|
246 do_got_own_avatar_0_12_cb); |
e14402d6c5e0
jabber: Go back to not overwriting avatars if there is not one locally set.
Paul Aurich <paul@darkrain42.org>
parents:
28889
diff
changeset
|
247 jabber_pep_request_item(js, jid, NS_AVATAR_1_1_METADATA, NULL, |
e14402d6c5e0
jabber: Go back to not overwriting avatars if there is not one locally set.
Paul Aurich <paul@darkrain42.org>
parents:
28889
diff
changeset
|
248 do_got_own_avatar_cb); |
e14402d6c5e0
jabber: Go back to not overwriting avatars if there is not one locally set.
Paul Aurich <paul@darkrain42.org>
parents:
28889
diff
changeset
|
249 } |
e14402d6c5e0
jabber: Go back to not overwriting avatars if there is not one locally set.
Paul Aurich <paul@darkrain42.org>
parents:
28889
diff
changeset
|
250 |
25817
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
251 g_free(jid); |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
252 } |
9195955395b6
Only (re)publish XMPP avatars at login if the server's avatar differs
Paul Aurich <paul@darkrain42.org>
parents:
25816
diff
changeset
|
253 |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
254 typedef struct _JabberBuddyAvatarUpdateURLInfo { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
255 JabberStream *js; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
256 char *from; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
257 char *id; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
258 } JabberBuddyAvatarUpdateURLInfo; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
259 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
260 static void |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
261 do_buddy_avatar_update_fromurl(PurpleUtilFetchUrlData *url_data, |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
262 gpointer user_data, const gchar *url_text, |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
263 gsize len, const gchar *error_message) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
264 { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
265 JabberBuddyAvatarUpdateURLInfo *info = user_data; |
27216
77cfaae36918
Need to make a copy of this because purple_util_fetch_url frees its.
Paul Aurich <paul@darkrain42.org>
parents:
26883
diff
changeset
|
266 gpointer icon_data; |
77cfaae36918
Need to make a copy of this because purple_util_fetch_url frees its.
Paul Aurich <paul@darkrain42.org>
parents:
26883
diff
changeset
|
267 |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
268 if(!url_text) { |
28889
fa7f3426ed13
jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <paul@darkrain42.org>
parents:
28397
diff
changeset
|
269 purple_debug_error("jabber", |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
270 "do_buddy_avatar_update_fromurl got error \"%s\"", |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
271 error_message); |
25816
b68ac693ae2d
Don't leak a JabberBuddyAvatarUpdateURLInfo struct in the error case
Paul Aurich <paul@darkrain42.org>
parents:
25815
diff
changeset
|
272 goto out; |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
273 } |
25821 | 274 |
27216
77cfaae36918
Need to make a copy of this because purple_util_fetch_url frees its.
Paul Aurich <paul@darkrain42.org>
parents:
26883
diff
changeset
|
275 icon_data = g_memdup(url_text, len); |
77cfaae36918
Need to make a copy of this because purple_util_fetch_url frees its.
Paul Aurich <paul@darkrain42.org>
parents:
26883
diff
changeset
|
276 purple_buddy_icons_set_for_user(purple_connection_get_account(info->js->gc), info->from, icon_data, len, info->id); |
25816
b68ac693ae2d
Don't leak a JabberBuddyAvatarUpdateURLInfo struct in the error case
Paul Aurich <paul@darkrain42.org>
parents:
25815
diff
changeset
|
277 |
b68ac693ae2d
Don't leak a JabberBuddyAvatarUpdateURLInfo struct in the error case
Paul Aurich <paul@darkrain42.org>
parents:
25815
diff
changeset
|
278 out: |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
279 g_free(info->from); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
280 g_free(info->id); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
281 g_free(info); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
282 } |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
283 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
284 static void |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
285 do_buddy_avatar_update_data(JabberStream *js, const char *from, xmlnode *items) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
286 { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
287 xmlnode *item, *data; |
26874
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
288 const char *checksum; |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
289 char *b64data; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
290 void *img; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
291 size_t size; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
292 if(!items) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
293 return; |
25821 | 294 |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
295 item = xmlnode_get_child(items, "item"); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
296 if(!item) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
297 return; |
25819
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
298 |
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
299 data = xmlnode_get_child(item, "data"); |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
300 if(!data) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
301 return; |
25819
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
302 |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
303 checksum = xmlnode_get_attrib(item,"id"); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
304 if(!checksum) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
305 return; |
25821 | 306 |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
307 b64data = xmlnode_get_data(data); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
308 if(!b64data) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
309 return; |
25821 | 310 |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
311 img = purple_base64_decode(b64data, &size); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
312 if(!img) { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
313 g_free(b64data); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
314 return; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
315 } |
25821 | 316 |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
317 purple_buddy_icons_set_for_user(purple_connection_get_account(js->gc), from, img, size, checksum); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
318 g_free(b64data); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
319 } |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
320 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
321 static void |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
322 update_buddy_metadata(JabberStream *js, const char *from, xmlnode *items) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
323 { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
324 PurpleBuddy *buddy = purple_find_buddy(purple_connection_get_account(js->gc), from); |
26874
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
325 const char *checksum; |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
326 xmlnode *item, *metadata; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
327 if(!buddy) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
328 return; |
25821 | 329 |
25830
b3dbc9e8b6ef
I had the distinct pleasure of throwing invalid garbage at this code; it
Paul Aurich <paul@darkrain42.org>
parents:
25823
diff
changeset
|
330 if (!items) |
b3dbc9e8b6ef
I had the distinct pleasure of throwing invalid garbage at this code; it
Paul Aurich <paul@darkrain42.org>
parents:
25823
diff
changeset
|
331 return; |
b3dbc9e8b6ef
I had the distinct pleasure of throwing invalid garbage at this code; it
Paul Aurich <paul@darkrain42.org>
parents:
25823
diff
changeset
|
332 |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
333 item = xmlnode_get_child(items,"item"); |
25830
b3dbc9e8b6ef
I had the distinct pleasure of throwing invalid garbage at this code; it
Paul Aurich <paul@darkrain42.org>
parents:
25823
diff
changeset
|
334 if (!item) |
b3dbc9e8b6ef
I had the distinct pleasure of throwing invalid garbage at this code; it
Paul Aurich <paul@darkrain42.org>
parents:
25823
diff
changeset
|
335 return; |
b3dbc9e8b6ef
I had the distinct pleasure of throwing invalid garbage at this code; it
Paul Aurich <paul@darkrain42.org>
parents:
25823
diff
changeset
|
336 |
25819
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
337 metadata = xmlnode_get_child(item, "metadata"); |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
338 if(!metadata) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
339 return; |
25819
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
340 |
25830
b3dbc9e8b6ef
I had the distinct pleasure of throwing invalid garbage at this code; it
Paul Aurich <paul@darkrain42.org>
parents:
25823
diff
changeset
|
341 checksum = purple_buddy_icons_get_checksum_for_user(buddy); |
b3dbc9e8b6ef
I had the distinct pleasure of throwing invalid garbage at this code; it
Paul Aurich <paul@darkrain42.org>
parents:
25823
diff
changeset
|
342 |
26874
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
343 /* <stop/> was the pre-v1.1 method of publishing an empty avatar */ |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
344 if(xmlnode_get_child(metadata, "stop")) { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
345 purple_buddy_icons_set_for_user(purple_connection_get_account(js->gc), from, NULL, 0, NULL); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
346 } else { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
347 xmlnode *info, *goodinfo = NULL; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
348 gboolean has_children = FALSE; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
349 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
350 /* iterate over all info nodes to get one we can use */ |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
351 for(info = metadata->child; info; info = info->next) { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
352 if(info->type == XMLNODE_TYPE_TAG) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
353 has_children = TRUE; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
354 if(info->type == XMLNODE_TYPE_TAG && !strcmp(info->name,"info")) { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
355 const char *type = xmlnode_get_attrib(info,"type"); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
356 const char *id = xmlnode_get_attrib(info,"id"); |
25821 | 357 |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
358 if(checksum && id && !strcmp(id, checksum)) { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
359 /* we already have that avatar, so we don't have to do anything */ |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
360 goodinfo = NULL; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
361 break; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
362 } |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
363 /* We'll only pick the png one for now. It's a very nice image format anyways. */ |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
364 if(type && id && !goodinfo && !strcmp(type, "image/png")) |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
365 goodinfo = info; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
366 } |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
367 } |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
368 if(has_children == FALSE) { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
369 purple_buddy_icons_set_for_user(purple_connection_get_account(js->gc), from, NULL, 0, NULL); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
370 } else if(goodinfo) { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
371 const char *url = xmlnode_get_attrib(goodinfo, "url"); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
372 const char *id = xmlnode_get_attrib(goodinfo,"id"); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
373 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
374 /* the avatar might either be stored in a pep node, or on a HTTP(S) URL */ |
25819
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
375 if(!url) { |
26874
76de9455154c
Drop support for XEP-0084 v0.12 and publish a <stop/> instead of deleting the node.
Paul Aurich <paul@darkrain42.org>
parents:
26818
diff
changeset
|
376 jabber_pep_request_item(js, from, NS_AVATAR_1_1_DATA, id, |
25819
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
377 do_buddy_avatar_update_data); |
ba8f51cb3691
Support XEP-0084 (User Avatar) v1.1 alongside v0.12
Paul Aurich <paul@darkrain42.org>
parents:
25817
diff
changeset
|
378 } else { |
25815
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
379 PurpleUtilFetchUrlData *url_data; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
380 JabberBuddyAvatarUpdateURLInfo *info = g_new0(JabberBuddyAvatarUpdateURLInfo, 1); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
381 info->js = js; |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
382 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
383 url_data = purple_util_fetch_url_len(url, TRUE, NULL, TRUE, |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
384 MAX_HTTP_BUDDYICON_BYTES, |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
385 do_buddy_avatar_update_fromurl, info); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
386 if (url_data) { |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
387 info->from = g_strdup(from); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
388 info->id = g_strdup(id); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
389 js->url_datas = g_slist_prepend(js->url_datas, url_data); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
390 } else |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
391 g_free(info); |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
392 |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
393 } |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
394 } |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
395 } |
5dd25c58b65e
Migrate the XMPP User Avatar (XEP-0084) code to its own file
Paul Aurich <paul@darkrain42.org>
parents:
diff
changeset
|
396 } |