[telepathy-gabble/telepathy-gabble-0.8] src/presence-cache.c: Fix a possible infinite ping-ping on presence stanza with the server
Alban Crequy
alban.crequy at collabora.co.uk
Fri Sep 4 06:58:20 PDT 2009
---
src/presence-cache.c | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/src/presence-cache.c b/src/presence-cache.c
index 5824434..a817bae 100644
--- a/src/presence-cache.c
+++ b/src/presence-cache.c
@@ -1327,11 +1327,24 @@ _parse_presence_message (GabblePresenceCache *cache,
GabblePresenceCachePrivate *priv = GABBLE_PRESENCE_CACHE_PRIV (cache);
gint8 priority = 0;
const gchar *resource, *status_message = NULL;
+ gchar *my_full_jid;
LmMessageNode *presence_node, *child_node;
LmHandlerResult ret = LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
GabblePresenceId presence_id;
GabblePresence *presence;
+ /* The server should not send back the presence stanza about ourself (same
+ * resource). If it does, we just ignore the received stanza. We want to
+ * avoid any infinite ping-pong with the server due to XEP-0153 4.2-2-3.
+ */
+ my_full_jid = gabble_connection_get_full_jid (priv->conn);
+ if (!tp_strdiff (from, my_full_jid))
+ {
+ g_free (my_full_jid);
+ return LM_HANDLER_RESULT_REMOVE_MESSAGE;
+ }
+ g_free (my_full_jid);
+
presence_node = message->node;
g_assert (0 == strcmp (presence_node->name, "presence"));
--
1.5.6.5
More information about the telepathy-commits
mailing list