--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telepathygabble/src/capabilities.c Tue Feb 02 01:10:06 2010 +0200
@@ -0,0 +1,97 @@
+/*
+ * capabilities.c - Connection.Interface.Capabilities constants and utilities
+ * Copyright (C) 2005 Collabora Ltd.
+ *
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "capabilities.h"
+
+#include "namespaces.h"
+#include "config.h"
+#include "gabble-presence-cache.h"
+#include "telepathy-interfaces.h"
+#include "gabble-media-channel.h"
+
+static const Feature self_advertised_features[] =
+{
+ { VERSION, NS_GOOGLE_FEAT_SESSION, 0},
+ { VERSION, NS_GOOGLE_TRANSPORT_P2P, PRESENCE_CAP_GOOGLE_TRANSPORT_P2P},
+ { VERSION, NS_JINGLE, PRESENCE_CAP_JINGLE},
+
+ { BUNDLE_VOICE_V1, NS_GOOGLE_FEAT_VOICE, PRESENCE_CAP_GOOGLE_VOICE},
+ { BUNDLE_JINGLE_AUDIO, NS_JINGLE_DESCRIPTION_AUDIO, PRESENCE_CAP_JINGLE_DESCRIPTION_AUDIO},
+ { BUNDLE_JINGLE_VIDEO, NS_JINGLE_DESCRIPTION_VIDEO, PRESENCE_CAP_JINGLE_DESCRIPTION_VIDEO},
+ { NULL, NULL, 0}
+};
+
+
+
+
+GSList *
+capabilities_get_features (GabblePresenceCapabilities caps)
+{
+ GSList *features = NULL;
+ const Feature *i;
+
+ for (i = self_advertised_features; NULL != i->ns; i++)
+ if ((i->caps & caps) == i->caps)
+ features = g_slist_append (features, (gpointer) i);
+
+ return features;
+}
+
+void
+capabilities_fill_cache (GabblePresenceCache *cache)
+{
+ const Feature *feat;
+ for (feat = self_advertised_features; NULL != feat->ns; feat++)
+ {
+ gchar *node = g_strconcat (NS_GABBLE_CAPS "#", feat->bundle, NULL);
+ gabble_presence_cache_add_bundle_caps (cache,
+ node, feat->caps);
+ g_free (node);
+ }
+
+ gabble_presence_cache_add_bundle_caps (cache,
+ "http://www.google.com/xmpp/client/caps#voice-v1",
+ PRESENCE_CAP_GOOGLE_VOICE);
+}
+
+GabblePresenceCapabilities
+capabilities_get_initial_caps ()
+{
+ GabblePresenceCapabilities ret = 0;
+ const Feature *feat;
+
+ for (feat = self_advertised_features; NULL != feat->ns; feat++)
+ {
+ if (g_str_equal (feat->bundle, VERSION))
+ /* VERSION == bundle means a fixed feature, which we always advertise */
+ ret |= feat->caps;
+ }
+
+ return ret;
+}
+
+const CapabilityConversionData capabilities_conversions[] =
+{
+ { TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA,
+ _gabble_media_channel_typeflags_to_caps_tmp, /*_gabble_media_channel_typeflags_to_caps,*/
+ _gabble_media_channel_caps_to_typeflags_tmp /*_gabble_media_channel_caps_to_typeflags*/ },
+ { NULL, NULL, NULL}
+};
+