[jdev] Avatar loop on Google Jabber servers

Alban Crequy alban.crequy at collabora.co.uk
Fri Oct 2 07:07:25 CDT 2009


There is a bug [1] in Telepathy Gabble which become visible since 0.8.3
(or maybe before) when the user connects 2 times (with 2 different
resources) on a Google Jabber server. There is an infinite loop of
<presence> stanza sent from both Jabber clients: when each client
receives a <presence> stanza, it replies with a presence stanza, and
there is an infinite ping-pong.

It seems to happen only when connected to a Google Jabber server. The
reason is that Google Jabber servers modify the <presence> stanza sent
by a client before broadcasting it to the other resources (see
thread [2]). I think it is a bug in the Google Jabber server with
regard to XEP-0153 section 4.4 [3]. It should be ok if the server add
the photo in <presence> stanza when the client does not put any
"<x xmlns='vcard-temp:x:update'>" node. In this case, the client does
not support XEP-0153 and the server may want to simulate it. But if the
client adds such a node without any <photo> node inside, the server
should not attempt to modify it: the absence of <photo> node is done on
purpose either to indicate the client does not advertise any image (see
XEP-0153 section 4.1.2.) or to resolve an avatar conflict between 2
resources (see XEP-0153 section 4.4).

The loop is the following:
1. we get a <presence> stanza with a new photo hash
2. we send a <presence> stanza immediately without <photo> node as per
   XEP-0153 section 4.4.
3. Google server adds a photo stanza and broadcast our <presence>
   stanza to other resources 
4. we send a vCard request to the server
5. the server replies with an error resource-constraint with error type
6. the other resource receives our modified stanza, and performs step 1
   to 5.

The fixes in Gabble 0.8.4 are not enough. The fixes we want to do:

- When the server replies to a vCard request with an error of type
  "wait", do not send again a vCard request to the same JID for some
- When we are in a conflict resolution (XEP-0153 section 4.4), and
  Gabble receives a new presence stanza, do not enter again in the
  conflict resolution: it is not supposed to be recursive.

[1] https://bugs.freedesktop.org/show_bug.cgi?id=23684
[2] http://mail.jabber.org/pipermail/jdev/2009-September/029222.html
[3] http://xmpp.org/extensions/xep-0153.html


More information about the JDev mailing list