[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