[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