telepathygabble/src/capabilities.c
changeset 0 d0f3a028347a
--- /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}
+};
+