diff libpurple/protocols/jabber/presence.c @ 25831:0fa91206cf5a

Always publish a <photo/> element, even if we have an empty buddy icon. XEP-0153 requires we always publish the <x/> 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.)
author Paul Aurich <paul@darkrain42.org>
date Sat, 14 Feb 2009 03:57:22 +0000
parents bba38f03085d
children 7e020fbe2cdb
line wrap: on
line diff
--- 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> */
+		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 <photo>; 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);