[telepathy-gabble/master] 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