[telepathy-gabble/master] Use namespace sets to convert Capabilities type-specific flags to XMPP caps
Simon McVittie
simon.mcvittie at collabora.co.uk
Mon Aug 24 08:10:56 PDT 2009
---
src/capabilities.h | 2 +-
src/connection.c | 14 ++++++++++++--
src/media-channel.c | 38 +++++++++++++-------------------------
src/media-channel.h | 4 ++--
4 files changed, 28 insertions(+), 30 deletions(-)
diff --git a/src/capabilities.h b/src/capabilities.h
index 2b79d8a..344fc35 100644
--- a/src/capabilities.h
+++ b/src/capabilities.h
@@ -126,7 +126,7 @@ const GabbleCapabilitySet *gabble_capabilities_get_initial_caps (void);
GabblePresenceCapabilities capabilities_parse (const GabbleCapabilitySet *cap_set);
-typedef GabblePresenceCapabilities (*TypeFlagsToCapsFunc) (guint typeflags);
+typedef void (*TypeFlagsToCapsFunc) (guint typeflags, GabbleCapabilitySet *caps);
typedef guint (*CapsToTypeFlagsFunc) (GabblePresenceCapabilities caps);
typedef struct _CapabilityConversionData CapabilityConversionData;
diff --git a/src/connection.c b/src/connection.c
index 7c5be36..64a10b9 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -2460,11 +2460,15 @@ gabble_connection_advertise_capabilities (TpSvcConnectionInterfaceCapabilities *
GabbleCapabilitySet *cap_set;
GabbleCapabilitySet *save_set;
GError *error = NULL;
+ GabbleCapabilitySet *add_set, *remove_set;
TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context);
DEBUG ("caps before: %x", pres->caps);
+ add_set = gabble_capability_set_new ();
+ remove_set = gabble_capability_set_new ();
+
for (i = 0; i < add->len; i++)
{
GValue iface_flags_pair = {0, };
@@ -2481,7 +2485,7 @@ gabble_connection_advertise_capabilities (TpSvcConnectionInterfaceCapabilities *
for (ccd = capabilities_conversions; NULL != ccd->iface; ccd++)
if (g_str_equal (channel_type, ccd->iface))
- add_caps |= ccd->tf2c_fn (flags);
+ ccd->tf2c_fn (flags, add_set);
g_free (channel_type);
}
@@ -2490,9 +2494,15 @@ gabble_connection_advertise_capabilities (TpSvcConnectionInterfaceCapabilities *
{
for (ccd = capabilities_conversions; NULL != ccd->iface; ccd++)
if (g_str_equal (del[i], ccd->iface))
- remove_caps |= ccd->tf2c_fn (~0);
+ ccd->tf2c_fn (~0, remove_set);
}
+ add_caps = capabilities_parse (add_set);
+ remove_caps = capabilities_parse (remove_set);
+
+ gabble_capability_set_free (add_set);
+ gabble_capability_set_free (remove_set);
+
save_caps = caps = pres->caps;
save_set = gabble_presence_dup_caps (pres);
diff --git a/src/media-channel.c b/src/media-channel.c
index 77bdeb2..9876371 100644
--- a/src/media-channel.c
+++ b/src/media-channel.c
@@ -2493,24 +2493,10 @@ stream_direction_changed_cb (GabbleMediaStream *stream,
chan, id, direction, pending_send);
}
-#define GTALK_CAPS \
- ( PRESENCE_CAP_GOOGLE_VOICE )
-
-#define GTALK_VIDEO_CAPS \
- ( PRESENCE_CAP_GOOGLE_VIDEO )
-
-#define JINGLE_AUDIO_CAPS \
- ( PRESENCE_CAP_JINGLE_RTP | PRESENCE_CAP_JINGLE_RTP_AUDIO \
- | PRESENCE_CAP_JINGLE_DESCRIPTION_AUDIO )
-
-#define JINGLE_VIDEO_CAPS \
- ( PRESENCE_CAP_JINGLE_RTP | PRESENCE_CAP_JINGLE_RTP_VIDEO \
- | PRESENCE_CAP_JINGLE_DESCRIPTION_VIDEO )
-
-GabblePresenceCapabilities
-_gabble_media_channel_typeflags_to_caps (TpChannelMediaCapabilities flags)
+void
+_gabble_media_channel_typeflags_to_caps (TpChannelMediaCapabilities flags,
+ GabbleCapabilitySet *caps)
{
- GabblePresenceCapabilities caps = 0;
gboolean gtalk_p2p;
DEBUG ("adding Jingle caps %u (%s, %s, %s, %s)", flags,
@@ -2522,30 +2508,32 @@ _gabble_media_channel_typeflags_to_caps (TpChannelMediaCapabilities flags)
? "ice-udp" : "no ice-udp");
if (flags & TP_CHANNEL_MEDIA_CAPABILITY_NAT_TRAVERSAL_ICE_UDP)
- caps |= PRESENCE_CAP_JINGLE_TRANSPORT_ICEUDP;
+ gabble_capability_set_add (caps, NS_JINGLE_TRANSPORT_ICEUDP);
gtalk_p2p = flags & TP_CHANNEL_MEDIA_CAPABILITY_NAT_TRAVERSAL_GTALK_P2P;
if (gtalk_p2p)
- caps |= PRESENCE_CAP_GOOGLE_TRANSPORT_P2P;
+ gabble_capability_set_add (caps, NS_GOOGLE_TRANSPORT_P2P);
if (flags & TP_CHANNEL_MEDIA_CAPABILITY_AUDIO)
{
- caps |= JINGLE_AUDIO_CAPS;
+ gabble_capability_set_add (caps, NS_JINGLE_RTP);
+ gabble_capability_set_add (caps, NS_JINGLE_RTP_AUDIO);
+ gabble_capability_set_add (caps, NS_JINGLE_DESCRIPTION_AUDIO);
if (gtalk_p2p)
- caps |= GTALK_CAPS;
+ gabble_capability_set_add (caps, NS_GOOGLE_FEAT_VOICE);
}
if (flags & TP_CHANNEL_MEDIA_CAPABILITY_VIDEO)
{
- caps |= JINGLE_VIDEO_CAPS;
+ gabble_capability_set_add (caps, NS_JINGLE_RTP);
+ gabble_capability_set_add (caps, NS_JINGLE_RTP_VIDEO);
+ gabble_capability_set_add (caps, NS_JINGLE_DESCRIPTION_VIDEO);
if (gtalk_p2p)
- caps |= GTALK_VIDEO_CAPS;
+ gabble_capability_set_add (caps, NS_GOOGLE_FEAT_VIDEO);
}
-
- return caps;
}
static void
diff --git a/src/media-channel.h b/src/media-channel.h
index a91404b..3966815 100644
--- a/src/media-channel.h
+++ b/src/media-channel.h
@@ -71,8 +71,8 @@ GType gabble_media_channel_get_type (void);
(G_TYPE_INSTANCE_GET_CLASS ((obj), GABBLE_TYPE_MEDIA_CHANNEL, \
GabbleMediaChannelClass))
-GabblePresenceCapabilities
-_gabble_media_channel_typeflags_to_caps (TpChannelMediaCapabilities flags);
+void _gabble_media_channel_typeflags_to_caps (TpChannelMediaCapabilities flags,
+ GabbleCapabilitySet *caps);
TpChannelMediaCapabilities
_gabble_media_channel_caps_to_typeflags (GabblePresenceCapabilities caps);
--
1.5.6.5
More information about the telepathy-commits
mailing list