[telepathy-gabble/master] Add more canned capability bundles, preallocate them, and free them in finalize

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


---
 src/capabilities.c |   77 ++++++++++++++++++++++++++++++++++++++++-----------
 src/capabilities.h |    5 +++
 2 files changed, 65 insertions(+), 17 deletions(-)

diff --git a/src/capabilities.c b/src/capabilities.c
index 5c7a6bd..c286f25 100644
--- a/src/capabilities.c
+++ b/src/capabilities.c
@@ -81,32 +81,40 @@ static const Feature quirks[] = {
       { 0, NULL, 0 }
 };
 
+static GabbleCapabilitySet *voice_v1_caps = NULL;
+static GabbleCapabilitySet *video_v1_caps = NULL;
+static GabbleCapabilitySet *any_audio_caps = NULL;
+static GabbleCapabilitySet *any_video_caps = NULL;
+static GabbleCapabilitySet *any_transport_caps = NULL;
+
 const GabbleCapabilitySet *
-gabble_capabilities_get_bundle_voice_v1 ()
+gabble_capabilities_get_bundle_voice_v1 (void)
 {
-  static GabbleCapabilitySet *voice_v1_caps = NULL;
-
-  if (voice_v1_caps == NULL)
-    {
-      voice_v1_caps = gabble_capability_set_new ();
-      gabble_capability_set_add (voice_v1_caps, NS_GOOGLE_FEAT_VOICE);
-    }
-
   return voice_v1_caps;
 }
 
 const GabbleCapabilitySet *
-gabble_capabilities_get_bundle_video_v1 ()
+gabble_capabilities_get_bundle_video_v1 (void)
 {
-  static GabbleCapabilitySet *video_v1_caps = NULL;
+  return video_v1_caps;
+}
 
-  if (video_v1_caps == NULL)
-    {
-      video_v1_caps = gabble_capability_set_new ();
-      gabble_capability_set_add (video_v1_caps, NS_GOOGLE_FEAT_VIDEO);
-    }
+const GabbleCapabilitySet *
+gabble_capabilities_get_any_audio (void)
+{
+  return any_audio_caps;
+}
 
-  return video_v1_caps;
+const GabbleCapabilitySet *
+gabble_capabilities_get_any_video (void)
+{
+  return any_video_caps;
+}
+
+const GabbleCapabilitySet *
+gabble_capabilities_get_any_transport (void)
+{
+  return any_transport_caps;
 }
 
 static gboolean
@@ -162,6 +170,29 @@ gabble_capabilities_init (GabbleConnection *conn)
        * to shut it up. */
       feature_handles = tp_dynamic_handle_repo_new (TP_HANDLE_TYPE_CONTACT,
           NULL, NULL);
+
+      /* make the pre-cooked bundles */
+
+      voice_v1_caps = gabble_capability_set_new ();
+      gabble_capability_set_add (voice_v1_caps, NS_GOOGLE_FEAT_VOICE);
+
+      video_v1_caps = gabble_capability_set_new ();
+      gabble_capability_set_add (video_v1_caps, NS_GOOGLE_FEAT_VIDEO);
+
+      any_audio_caps = gabble_capability_set_new ();
+      gabble_capability_set_add (any_audio_caps, NS_JINGLE_RTP_AUDIO);
+      gabble_capability_set_add (any_audio_caps, NS_JINGLE_DESCRIPTION_AUDIO);
+      gabble_capability_set_add (any_audio_caps, NS_GOOGLE_FEAT_VOICE);
+
+      any_video_caps = gabble_capability_set_new ();
+      gabble_capability_set_add (any_video_caps, NS_JINGLE_RTP_VIDEO);
+      gabble_capability_set_add (any_video_caps, NS_JINGLE_DESCRIPTION_VIDEO);
+      gabble_capability_set_add (any_video_caps, NS_GOOGLE_FEAT_VIDEO);
+
+      any_transport_caps = gabble_capability_set_new ();
+      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);
     }
 
   g_assert (feature_handles != NULL);
@@ -176,6 +207,18 @@ gabble_capabilities_finalize (GabbleConnection *conn)
 
   if (--feature_handles_refcount == 0)
     {
+      gabble_capability_set_free (voice_v1_caps);
+      gabble_capability_set_free (video_v1_caps);
+      gabble_capability_set_free (any_audio_caps);
+      gabble_capability_set_free (any_video_caps);
+      gabble_capability_set_free (any_transport_caps);
+
+      voice_v1_caps = NULL;
+      video_v1_caps = NULL;
+      any_audio_caps = NULL;
+      any_video_caps = NULL;
+      any_transport_caps = NULL;
+
       g_object_unref (feature_handles);
       feature_handles = NULL;
     }
diff --git a/src/capabilities.h b/src/capabilities.h
index 039b888..0909625 100644
--- a/src/capabilities.h
+++ b/src/capabilities.h
@@ -86,6 +86,11 @@ typedef gboolean (*GabbleCapabilitySetPredicate) (
 #define gabble_capability_set_predicate_at_least \
   ((GabbleCapabilitySetPredicate) gabble_capability_set_at_least)
 
+/* Some useful capability sets for Jingle */
+const GabbleCapabilitySet *gabble_capabilities_get_any_audio (void);
+const GabbleCapabilitySet *gabble_capabilities_get_any_video (void);
+const GabbleCapabilitySet *gabble_capabilities_get_any_transport (void);
+
 /* XEP-0115 version 1.3:
  *
  * "The names of the feature bundles MUST NOT be used for semantic purposes:
-- 
1.5.6.5




More information about the telepathy-commits mailing list