[telepathy-salut/master] set self caps before the first announce of the service

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Mon Mar 30 09:35:50 PDT 2009


---
 src/salut-avahi-self.c |   61 ++++++++++++++++++++++++++---------------------
 src/salut-connection.c |   15 +++++------
 2 files changed, 41 insertions(+), 35 deletions(-)

diff --git a/src/salut-avahi-self.c b/src/salut-avahi-self.c
index 5a885b9..dab2c78 100644
--- a/src/salut-avahi-self.c
+++ b/src/salut-avahi-self.c
@@ -186,6 +186,37 @@ create_txt_record (SalutAvahiSelf *self,
 }
 
 static gboolean
+salut_avahi_self_set_caps (SalutSelf *_self,
+                           GError **error)
+{
+  SalutAvahiSelf *self = SALUT_AVAHI_SELF (_self);
+  SalutAvahiSelfPrivate *priv = SALUT_AVAHI_SELF_GET_PRIVATE (self);
+
+  if (priv->presence == NULL)
+    /* Service is not announced yet */
+    return TRUE;
+
+  ga_entry_group_service_freeze (priv->presence);
+
+  if (_self->node == NULL)
+      ga_entry_group_service_remove_key (priv->presence, "node", NULL);
+  else
+      ga_entry_group_service_set (priv->presence, "node", _self->node, NULL);
+
+  if (_self->hash == NULL)
+      ga_entry_group_service_remove_key (priv->presence, "hash", NULL);
+  else
+      ga_entry_group_service_set (priv->presence, "hash", _self->hash, NULL);
+
+  if (_self->ver == NULL)
+      ga_entry_group_service_remove_key (priv->presence, "ver", NULL);
+  else
+      ga_entry_group_service_set (priv->presence, "ver", _self->ver, NULL);
+
+  return ga_entry_group_service_thaw (priv->presence, error);
+}
+
+static gboolean
 salut_avahi_self_announce (SalutSelf *_self,
                            gint port,
                            GError **error)
@@ -217,6 +248,9 @@ salut_avahi_self_announce (SalutSelf *_self,
   if (priv->presence == NULL)
     goto error;
 
+  if (!salut_avahi_self_set_caps (_self, NULL))
+    goto error;
+
   if (!ga_entry_group_commit (priv->presence_group, error))
     goto error;
 
@@ -249,33 +283,6 @@ salut_avahi_self_set_presence (SalutSelf *self,
 }
 
 static gboolean
-salut_avahi_self_set_caps (SalutSelf *_self,
-                           GError **error)
-{
-  SalutAvahiSelf *self = SALUT_AVAHI_SELF (_self);
-  SalutAvahiSelfPrivate *priv = SALUT_AVAHI_SELF_GET_PRIVATE (self);
-
-  ga_entry_group_service_freeze (priv->presence);
-
-  if (_self->node == NULL)
-      ga_entry_group_service_remove_key (priv->presence, "node", NULL);
-  else
-      ga_entry_group_service_set (priv->presence, "node", _self->node, NULL);
-
-  if (_self->hash == NULL)
-      ga_entry_group_service_remove_key (priv->presence, "hash", NULL);
-  else
-      ga_entry_group_service_set (priv->presence, "hash", _self->hash, NULL);
-
-  if (_self->ver == NULL)
-      ga_entry_group_service_remove_key (priv->presence, "ver", NULL);
-  else
-      ga_entry_group_service_set (priv->presence, "ver", _self->ver, NULL);
-
-  return ga_entry_group_service_thaw (priv->presence, error);
-}
-
-static gboolean
 salut_avahi_self_set_alias (SalutSelf *_self,
                             GError **error)
 {
diff --git a/src/salut-connection.c b/src/salut-connection.c
index 0582b9c..cccaacc 100644
--- a/src/salut-connection.c
+++ b/src/salut-connection.c
@@ -946,7 +946,6 @@ _self_established_cb (SalutSelf *s, gpointer data)
   TpBaseConnection *base = TP_BASE_CONNECTION (self);
   TpHandleRepoIface *handle_repo = tp_base_connection_get_handles (
       TP_BASE_CONNECTION (self), TP_HANDLE_TYPE_CONTACT);
-  GError *error = NULL;
 
   g_free (self->name);
   self->name = g_strdup (s->name);
@@ -981,13 +980,6 @@ _self_established_cb (SalutSelf *s, gpointer data)
 
   tp_base_connection_change_status (base, TP_CONNECTION_STATUS_CONNECTED,
       TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED);
-
-  /* FIXME: Is it the right place to do that? */
-  if (!announce_self_caps (self, &error))
-    {
-      DEBUG ("Can't announce our capabilities: %s", error->message);
-      g_error_free (error);
-    }
 }
 
 
@@ -1007,6 +999,7 @@ discovery_client_running (SalutConnection *self)
 {
   SalutConnectionPrivate *priv = SALUT_CONNECTION_GET_PRIVATE (self);
   gint port;
+  GError *error = NULL;
 
   priv->self = salut_discovery_client_create_self (priv->discovery_client,
       self, priv->nickname, priv->first_name, priv->last_name, priv->jid,
@@ -1026,6 +1019,12 @@ discovery_client_running (SalutConnection *self)
   port = salut_xmpp_connection_manager_listen (priv->xmpp_connection_manager,
       NULL);
 
+  if (!announce_self_caps (self, &error))
+    {
+      DEBUG ("Can't announce our capabilities: %s", error->message);
+      g_error_free (error);
+    }
+
   if (port == -1 || !salut_self_announce (priv->self, port, NULL))
     {
       tp_base_connection_change_status (
-- 
1.5.6.5




More information about the telepathy-commits mailing list