[jdev] Avatar loop on Google Jabber servers
Alban Crequy
alban.crequy at collabora.co.uk
Fri Oct 2 07:07:25 CDT 2009
Hi,
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
"wait"
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
time.
- 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] https://www.jabber.org/jdev/2009-September/029222.html
[3] http://xmpp.org/extensions/xep-0153.html
--
Alban
More information about the JDev
mailing list