[Telepathy-commits] [telepathy-salut/master] Add salut_self_set_caps() that publish XEP-0115's {node, hash, ver} on Avahi

Alban Crequy alban.crequy at collabora.co.uk
Thu Feb 26 11:20:04 PST 2009


---
 src/salut-avahi-self.c |   28 ++++++++++++++++++++++++++++
 src/salut-self.c       |   20 ++++++++++++++++++++
 src/salut-self.h       |    7 +++++++
 3 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/src/salut-avahi-self.c b/src/salut-avahi-self.c
index 4c6637d..282ca5d 100644
--- a/src/salut-avahi-self.c
+++ b/src/salut-avahi-self.c
@@ -249,6 +249,33 @@ 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)
 {
@@ -440,6 +467,7 @@ salut_avahi_self_class_init (
 
   self_class->announce = salut_avahi_self_announce;
   self_class->set_presence = salut_avahi_self_set_presence;
+  self_class->set_caps = salut_avahi_self_set_caps;
   self_class->set_alias = salut_avahi_self_set_alias;
   self_class->remove_avatar = salut_avahi_self_remove_avatar;
   self_class->set_avatar = salut_avahi_self_set_avatar;
diff --git a/src/salut-self.c b/src/salut-self.c
index 0a816bc..6eb3a5f 100644
--- a/src/salut-self.c
+++ b/src/salut-self.c
@@ -500,6 +500,9 @@ salut_self_finalize (GObject *object)
   g_free (self->olpc_color);
   g_free (self->olpc_cur_act);
 #endif
+  g_free(self->node);
+  g_free(self->hash);
+  g_free(self->ver);
 
   G_OBJECT_CLASS (salut_self_parent_class)->finalize (object);
 }
@@ -527,6 +530,23 @@ salut_self_set_presence (SalutSelf *self, SalutPresenceId status,
   return SALUT_SELF_GET_CLASS (self)->set_presence (self, error);
 }
 
+gboolean
+salut_self_set_caps (SalutSelf *self,
+                     const gchar *node,
+                     const gchar *hash,
+                     const gchar *ver,
+                     GError **error)
+{
+  g_free (self->node);
+  self->node = g_strdup (node);
+  g_free (self->hash);
+  self->hash = g_strdup (hash);
+  g_free (self->ver);
+  self->ver = g_strdup (ver);
+
+  return SALUT_SELF_GET_CLASS (self)->set_caps (self, error);
+}
+
 const gchar *
 salut_self_get_alias (SalutSelf *self)
 {
diff --git a/src/salut-self.h b/src/salut-self.h
index 06c7919..244827c 100644
--- a/src/salut-self.h
+++ b/src/salut-self.h
@@ -45,6 +45,7 @@ struct _SalutSelfClass {
     /* public abstract methods */
     gboolean (*announce) (SalutSelf *self, gint port, GError **error);
     gboolean (*set_presence) (SalutSelf *self, GError **error);
+    gboolean (*set_caps) (SalutSelf *self, GError **error);
     gboolean (*set_alias) (SalutSelf *self, GError **error);
     gboolean (*set_avatar) (SalutSelf *self, guint8 *data, gsize size,
         GError **error);
@@ -74,6 +75,9 @@ struct _SalutSelf {
     TpHandle olpc_cur_act_room;
     gchar *olpc_color;
 #endif
+    gchar *node;
+    gchar *hash;
+    gchar *ver;
 
     /* private */
     SalutConnection *connection;
@@ -107,6 +111,9 @@ gboolean salut_self_announce (SalutSelf *self, gint port, GError **error);
 gboolean salut_self_set_presence (SalutSelf *self,
     SalutPresenceId status, const gchar *message, GError **error);
 
+gboolean salut_self_set_caps (SalutSelf *self, const gchar *node,
+    const gchar *hash, const gchar *ver, GError **error);
+
 gboolean salut_self_set_avatar (SalutSelf *self, guint8 *data,
     gsize size, GError **error);
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list