[telepathy-gabble/master] capabilities_get_initial_caps: return a set instead of a bitfield

Simon McVittie simon.mcvittie at collabora.co.uk
Tue Sep 8 04:10:16 PDT 2009


---
 src/capabilities.c |   36 +++++++++++++++++++-----------------
 src/capabilities.h |    8 ++------
 src/connection.c   |    7 +++----
 3 files changed, 24 insertions(+), 27 deletions(-)

diff --git a/src/capabilities.c b/src/capabilities.c
index 1b33839..57a7d27 100644
--- a/src/capabilities.c
+++ b/src/capabilities.c
@@ -86,6 +86,7 @@ static GabbleCapabilitySet *video_v1_caps = NULL;
 static GabbleCapabilitySet *any_audio_caps = NULL;
 static GabbleCapabilitySet *any_video_caps = NULL;
 static GabbleCapabilitySet *any_transport_caps = NULL;
+static GabbleCapabilitySet *initial_caps = NULL;
 
 const GabbleCapabilitySet *
 gabble_capabilities_get_bundle_voice_v1 (void)
@@ -117,6 +118,12 @@ gabble_capabilities_get_any_transport (void)
   return any_transport_caps;
 }
 
+const GabbleCapabilitySet *
+gabble_capabilities_get_initial_caps (void)
+{
+  return initial_caps;
+}
+
 static gboolean
 omits_content_creators (LmMessageNode *identity)
 {
@@ -164,6 +171,8 @@ gabble_capabilities_init (GabbleConnection *conn)
 
   if (feature_handles_refcount++ == 0)
     {
+      const Feature *feat;
+
       g_assert (feature_handles == NULL);
       /* TpDynamicHandleRepo wants a handle type, which isn't relevant here
        * (we're just using it as a string pool). Use an arbitrary handle type
@@ -193,6 +202,14 @@ gabble_capabilities_init (GabbleConnection *conn)
       gabble_capability_set_add (any_transport_caps, NS_GOOGLE_TRANSPORT_P2P);
       gabble_capability_set_add (any_transport_caps, NS_JINGLE_TRANSPORT_ICEUDP);
       gabble_capability_set_add (any_transport_caps, NS_JINGLE_TRANSPORT_RAWUDP);
+
+      initial_caps = gabble_capability_set_new ();
+
+      for (feat = self_advertised_features; feat->ns != NULL; feat++)
+        {
+          if (feat->feature_type == FEATURE_FIXED)
+            gabble_capability_set_add (initial_caps, feat->ns);
+        }
     }
 
   g_assert (feature_handles != NULL);
@@ -212,12 +229,14 @@ gabble_capabilities_finalize (GabbleConnection *conn)
       gabble_capability_set_free (any_audio_caps);
       gabble_capability_set_free (any_video_caps);
       gabble_capability_set_free (any_transport_caps);
+      gabble_capability_set_free (initial_caps);
 
       voice_v1_caps = NULL;
       video_v1_caps = NULL;
       any_audio_caps = NULL;
       any_video_caps = NULL;
       any_transport_caps = NULL;
+      initial_caps = NULL;
 
       g_object_unref (feature_handles);
       feature_handles = NULL;
@@ -290,23 +309,6 @@ capabilities_fill_cache (GabblePresenceCache *cache)
     PRESENCE_CAP_GOOGLE_VOICE, NS_GOOGLE_FEAT_VOICE);
 }
 
-GabblePresenceCapabilities
-capabilities_get_initial_caps ()
-{
-  GabblePresenceCapabilities ret = 0;
-  const Feature *feat;
-
-  for (feat = self_advertised_features; NULL != feat->ns; feat++)
-    {
-      if (feat->feature_type == FEATURE_FIXED)
-        {
-          ret |= feat->caps;
-        }
-    }
-
-  return ret;
-}
-
 const CapabilityConversionData capabilities_conversions[] =
 {
   { TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA,
diff --git a/src/capabilities.h b/src/capabilities.h
index af5c207..fa73acb 100644
--- a/src/capabilities.h
+++ b/src/capabilities.h
@@ -119,12 +119,8 @@ const GabbleCapabilitySet *gabble_capabilities_get_bundle_video_v1 (void);
  */
 void capabilities_fill_cache (GabblePresenceCache *cache);
 
-/*
- * capabilities_get_initial_caps
- *
- * Return the GabblePresenceCapabilities we always have
- */
-GabblePresenceCapabilities capabilities_get_initial_caps (void);
+/* Return the capabilities we always have */
+const GabbleCapabilitySet *gabble_capabilities_get_initial_caps (void);
 
 GabblePresenceCapabilities capabilities_parse (const GabbleCapabilitySet *cap_set);
 
diff --git a/src/connection.c b/src/connection.c
index 5c857bf..685272d 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -2064,7 +2064,7 @@ connection_auth_cb (LmConnection *lmconn,
   GError *error = NULL;
   const gchar *jid;
   GabblePresenceCapabilities caps;
-  GabbleCapabilitySet *cap_set;
+  const GabbleCapabilitySet *cap_set;
 
   if (base->status != TP_CONNECTION_STATUS_CONNECTING)
     {
@@ -2126,11 +2126,10 @@ connection_auth_cb (LmConnection *lmconn,
       GABBLE_PRESENCE_AVAILABLE, NULL, priv->priority);
 
   /* set initial capabilities */
-  caps = capabilities_get_initial_caps ();
-  cap_set = gabble_capability_set_new_from_flags (caps);
+  cap_set = gabble_capabilities_get_initial_caps ();
+  caps = capabilities_parse (cap_set);
   gabble_presence_set_capabilities (conn->self_presence, priv->resource,
       cap_set, caps, priv->caps_serial++);
-  gabble_capability_set_free (cap_set);
 
   if (!gabble_disco_request_with_timeout (conn->disco, GABBLE_DISCO_TYPE_INFO,
                                           priv->stream_server, NULL,
-- 
1.5.6.5




More information about the telepathy-commits mailing list