# HG changeset patch # User Paul Aurich # Date 1234583842 0 # Node ID 0fa91206cf5af426582e3bda143785102a3b3a85 # Parent b3dbc9e8b6ef76a6d1213509ef9e965c5bf7d935 Always publish a element, even if we have an empty buddy icon. XEP-0153 requires we always publish the element, even if we have no avatar set, so do that, too. I'd also make the whole set of vcard stuff dependent on the server advertising support, but SOME servers out there don't. References #5082 (I suspect this fixes that.) diff -r b3dbc9e8b6ef -r 0fa91206cf5a libpurple/protocols/jabber/disco.c --- a/libpurple/protocols/jabber/disco.c Sat Feb 14 01:18:25 2009 +0000 +++ b/libpurple/protocols/jabber/disco.c Sat Feb 14 03:57:22 2009 +0000 @@ -340,7 +340,13 @@ { const char *ft_proxies; + /* + * This *should* happen only if the server supports vcard-temp, but there + * are apparently some servers that don't advertise it even though they + * support it. + */ jabber_vcard_fetch_mine(js); + if (js->pep) jabber_avatar_fetch_mine(js); diff -r b3dbc9e8b6ef -r 0fa91206cf5a libpurple/protocols/jabber/presence.c --- a/libpurple/protocols/jabber/presence.c Sat Feb 14 01:18:25 2009 +0000 +++ b/libpurple/protocols/jabber/presence.c Sat Feb 14 03:57:22 2009 +0000 @@ -155,11 +155,19 @@ presence = jabber_presence_create_js(js, state, stripped, priority); - if(js->avatar_hash) { - x = xmlnode_new_child(presence, "x"); - xmlnode_set_namespace(x, "vcard-temp:x:update"); + /* Per XEP-0153 4.1, we must always send the */ + x = xmlnode_new_child(presence, "x"); + xmlnode_set_namespace(x, "vcard-temp:x:update"); + /* + * FIXME: Per XEP-0153 4.3.2 bullet 2, we must not publish our + * image hash if another resource has logged in and updated the + * vcard avatar. Requires changes in jabber_presence_parse. + */ + if (js->vcard_fetched) { + /* Always publish a ; it's empty if we have no image. */ photo = xmlnode_new_child(x, "photo"); - xmlnode_insert_data(photo, js->avatar_hash, -1); + if (js->avatar_hash) + xmlnode_insert_data(photo, js->avatar_hash, -1); } jabber_send(js, presence);