[Telepathy-commits] [telepathy-gabble/master] Abstract enhanced capabilities in channel managers

Alban Crequy alban.crequy at collabora.co.uk
Fri Dec 5 09:42:32 PST 2008


---
 src/channel-manager.c |   62 ++++++++++++++++++++++++++
 src/channel-manager.h |   30 +++++++++++++
 src/connection.c      |    8 ++--
 src/presence-cache.c  |  116 +++++++++++++++++++++++++++++++++++++++++++------
 src/presence-cache.h  |    6 +++
 src/presence.c        |   47 ++++++++++++++++++--
 src/presence.h        |    4 +-
 tests/test-presence.c |    4 +-
 8 files changed, 251 insertions(+), 26 deletions(-)

diff --git a/src/channel-manager.c b/src/channel-manager.c
index dd94b74..fd6808f 100644
--- a/src/channel-manager.c
+++ b/src/channel-manager.c
@@ -363,6 +363,68 @@ void gabble_channel_manager_get_contact_capabilities (
   /* ... else assume there is not caps for this kind of channels */
 }
 
+gpointer gabble_channel_manager_parse_capabilities (
+    GabbleChannelManager *manager,
+    GabbleConnection *conn)
+{
+  GabbleChannelManagerIface *iface = GABBLE_CHANNEL_MANAGER_GET_INTERFACE (
+      manager);
+  GabbleChannelManagerParseCapsFunc method = iface->parse_caps;
+
+  if (method != NULL)
+    {
+      return method (manager, conn);
+    }
+  /* ... else assume there is not caps for this kind of channels */
+  return NULL;
+}
+
+void gabble_channel_manager_free_capabilities (GabbleChannelManager *manager,
+                                               gpointer *specific_caps)
+{
+  GabbleChannelManagerIface *iface = GABBLE_CHANNEL_MANAGER_GET_INTERFACE (
+      manager);
+  GabbleChannelManagerFreeCapsFunc method = iface->free_caps;
+
+  if (method != NULL)
+    {
+      method (manager, specific_caps);
+    }
+  /* ... else assume there is no need to free */
+}
+
+void gabble_channel_manager_copy_capabilities (GabbleChannelManager *manager,
+                                               gpointer *specific_caps_out,
+                                               gpointer specific_caps_in)
+{
+  GabbleChannelManagerIface *iface = GABBLE_CHANNEL_MANAGER_GET_INTERFACE (
+      manager);
+  GabbleChannelManagerCopyCapsFunc method = iface->copy_caps;
+
+  if (method != NULL)
+    {
+      method (manager, specific_caps_out, specific_caps_in);
+    }
+  else
+    *specific_caps_out = NULL;
+}
+
+void gabble_channel_manager_update_capabilities (
+    GabbleChannelManager *manager,
+    gpointer specific_caps_out,
+    gpointer specific_caps_in)
+{
+  GabbleChannelManagerIface *iface = GABBLE_CHANNEL_MANAGER_GET_INTERFACE (
+      manager);
+  GabbleChannelManagerCopyCapsFunc method = iface->update_caps;
+
+  if (method != NULL)
+    {
+      method (manager, specific_caps_out, specific_caps_in);
+    }
+  /* ... else, do what? */
+}
+
 void
 gabble_channel_manager_foreach_channel (GabbleChannelManager *manager,
                                         GabbleExportableChannelFunc func,
diff --git a/src/channel-manager.h b/src/channel-manager.h
index d0f982d..7fcff10 100644
--- a/src/channel-manager.h
+++ b/src/channel-manager.h
@@ -55,10 +55,36 @@ typedef void (*GabbleChannelManagerGetContactCapsFunc) (
     GabbleChannelManager *manager, GabbleConnection *conn, TpHandle handle,
     GPtrArray *arr);
 
+typedef gpointer (*GabbleChannelManagerParseCapsFunc) (
+    GabbleChannelManager *manager, GabbleConnection *conn);
+
+typedef void (*GabbleChannelManagerFreeCapsFunc) (
+    GabbleChannelManager *manager, gpointer *specific_caps);
+
+typedef void (*GabbleChannelManagerCopyCapsFunc) (
+    GabbleChannelManager *manager, gpointer *specific_caps_out,
+    gpointer specific_caps_in);
+
+typedef void (*GabbleChannelManagerUpdateCapsFunc) (
+    GabbleChannelManager *manager, gpointer *specific_caps_out, gpointer specific_caps_in);
+
 void gabble_channel_manager_get_contact_capabilities (
     GabbleChannelManager *manager, GabbleConnection *conn, TpHandle handle,
     GPtrArray *arr);
 
+gpointer gabble_channel_manager_parse_capabilities (
+    GabbleChannelManager *manager, GabbleConnection *conn);
+
+void gabble_channel_manager_free_capabilities (GabbleChannelManager *manager,
+    gpointer *specific_caps);
+
+void gabble_channel_manager_copy_capabilities (GabbleChannelManager *manager,
+    gpointer *specific_caps_out, gpointer specific_caps_in);
+
+void gabble_channel_manager_update_capabilities (
+    GabbleChannelManager *manager, gpointer specific_caps_out,
+    gpointer specific_caps_in);
+
 typedef void (*GabbleChannelManagerForeachChannelFunc) (
     GabbleChannelManager *manager, GabbleExportableChannelFunc func,
     gpointer user_data);
@@ -98,6 +124,10 @@ struct _GabbleChannelManagerIface {
     GTypeInterface parent;
 
     GabbleChannelManagerGetContactCapsFunc get_contact_caps;
+    GabbleChannelManagerParseCapsFunc parse_caps;
+    GabbleChannelManagerFreeCapsFunc free_caps;
+    GabbleChannelManagerCopyCapsFunc copy_caps;
+    GabbleChannelManagerUpdateCapsFunc update_caps;
 
     GabbleChannelManagerForeachChannelFunc foreach_channel;
 
diff --git a/src/connection.c b/src/connection.c
index 9dab762..9c926c9 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -1927,7 +1927,7 @@ connection_auth_cb (LmConnection *lmconn,
 
   /* set initial capabilities */
   gabble_presence_set_capabilities (conn->self_presence, priv->resource,
-      capabilities_get_initial_caps (), NULL, NULL, priv->caps_serial++);
+      capabilities_get_initial_caps (), NULL, NULL, NULL, priv->caps_serial++);
 
   if (!gabble_disco_request_with_timeout (conn->disco, GABBLE_DISCO_TYPE_INFO,
                                           priv->stream_server, NULL,
@@ -2214,7 +2214,7 @@ gabble_connection_advertise_capabilities (TpSvcConnectionInterfaceCapabilities *
     {
       DEBUG ("before != after, changing");
       gabble_presence_set_capabilities (pres, priv->resource, caps, NULL,
-          NULL, priv->caps_serial++);
+          NULL, NULL, priv->caps_serial++);
       DEBUG ("set caps: %x", pres->caps);
     }
 
@@ -2960,8 +2960,8 @@ gabble_connection_ensure_capabilities (GabbleConnection *self,
       /* We changed capabilities */
       GError *error = NULL;
 
-      gabble_presence_set_capabilities (self->self_presence, priv->resource,
-          new_caps, NULL, NULL, priv->caps_serial++);
+      gabble_presence_set_capabilities (self->self_presence,
+          priv->resource, new_caps, NULL, NULL, NULL, priv->caps_serial++);
 
       if (!_gabble_connection_signal_own_presence (self, &error))
         DEBUG ("error sending presence: %s", error->message);
diff --git a/src/presence-cache.c b/src/presence-cache.c
index 3172009..4670936 100644
--- a/src/presence-cache.c
+++ b/src/presence-cache.c
@@ -38,12 +38,14 @@
 #define DEBUG_FLAG GABBLE_DEBUG_PRESENCE
 
 #include "caps-hash.h"
+#include "channel-manager.h"
 #include "debug.h"
 #include "disco.h"
 #include "gabble-signals-marshal.h"
 #include "namespaces.h"
 #include "util.h"
 #include "roster.h"
+#include "types.h"
 
 /* When five DIFFERENT guys report the same caps for a given bundle, it'll
  * be enough. But if only ONE guy use the verification string (XEP-0115 v1.5),
@@ -201,6 +203,9 @@ struct _CapabilityInfo
   GHashTable *stream_tube_caps;
   GHashTable *dbus_tube_caps;
 
+  /* channel factory -> specific caps */
+  GHashTable *per_channel_factory_caps;
+
   TpIntSet *guys;
   guint trust;
 };
@@ -233,7 +238,7 @@ static guint
 capability_info_recvd (GabblePresenceCache *cache, const gchar *node,
         TpHandle handle, GabblePresenceCapabilities caps,
         GHashTable *stream_tube_caps, GHashTable *dbus_tube_caps,
-        guint trust_inc)
+        GHashTable *per_channel_factory_caps, guint trust_inc)
 {
   CapabilityInfo *info = capability_info_get (cache, node);
 
@@ -248,6 +253,7 @@ capability_info_recvd (GabblePresenceCache *cache, const gchar *node,
       info->caps = caps;
       info->stream_tube_caps = stream_tube_caps;
       info->dbus_tube_caps = dbus_tube_caps;
+      info->per_channel_factory_caps = per_channel_factory_caps;
       info->trust = 0;
       info->caps_set = TRUE;
     }
@@ -707,6 +713,59 @@ _parse_cap_bundles (
 }
 
 static void
+free_specific_caps_helper (gpointer key, gpointer value, gpointer user_data)
+{
+  GabbleChannelManager *manager = GABBLE_CHANNEL_MANAGER (key);
+  gabble_channel_manager_free_capabilities (manager, value);
+}
+
+void
+gabble_presence_cache_free_specific_cache (
+    GHashTable *per_channel_factory_caps)
+{
+  g_hash_table_foreach (per_channel_factory_caps, free_specific_caps_helper,
+      NULL);
+}
+
+static void
+copy_specific_caps_helper (gpointer key, gpointer value, gpointer user_data)
+{
+  GHashTable *table_out = user_data;
+  GabbleChannelManager *manager = GABBLE_CHANNEL_MANAGER (key);
+  gpointer out;
+  gabble_channel_manager_copy_capabilities (manager, &out, value);
+  g_hash_table_insert (table_out, key, out);
+}
+
+void
+gabble_presence_cache_copy_specific_cache (
+    GHashTable **out, GHashTable *in)
+{
+  *out = g_hash_table_new (NULL, NULL);
+  g_hash_table_foreach (in, copy_specific_caps_helper,
+      *out);
+}
+
+static void
+update_specific_caps_helper (gpointer key, gpointer value, gpointer user_data)
+{
+  GHashTable *table_out = user_data;
+  GabbleChannelManager *manager = GABBLE_CHANNEL_MANAGER (key);
+  gpointer out;
+  gabble_channel_manager_copy_capabilities (manager, &out, value);
+  g_hash_table_insert (table_out, key, out);
+}
+
+void
+gabble_presence_cache_update_specific_cache (
+    GHashTable **out, GHashTable *in)
+{
+  *out = g_hash_table_new (NULL, NULL);
+  g_hash_table_foreach (in, update_specific_caps_helper,
+      out);
+}
+
+static void
 _caps_disco_cb (GabbleDisco *disco,
                 GabbleDiscoRequest *request,
                 const gchar *jid,
@@ -725,9 +784,11 @@ _caps_disco_cb (GabbleDisco *disco,
   GabblePresenceCapabilities caps = 0;
   GHashTable *stream_tube_caps;
   GHashTable *dbus_tube_caps;
+  GHashTable *per_channel_factory_caps;
   guint trust, trust_inc;
   TpHandle handle = 0;
   gboolean bad_hash = FALSE;
+  guint j;
 
   cache = GABBLE_PRESENCE_CACHE (user_data);
   priv = GABBLE_PRESENCE_CACHE_PRIV (cache);
@@ -754,10 +815,11 @@ _caps_disco_cb (GabbleDisco *disco,
 
           if (!waiter->disco_requested)
             {
-              const gchar *j;
+              const gchar *waiter_jid;
 
-              j = tp_handle_inspect (contact_repo, waiter->handle);
-              full_jid = g_strdup_printf ("%s/%s", j, waiter->resource);
+              waiter_jid = tp_handle_inspect (contact_repo, waiter->handle);
+              full_jid = g_strdup_printf ("%s/%s", waiter_jid,
+                  waiter->resource);
 
               gabble_disco_request (disco, GABBLE_DISCO_TYPE_INFO, full_jid,
                   node, _caps_disco_cb, cache, G_OBJECT(cache), NULL);
@@ -788,7 +850,22 @@ _caps_disco_cb (GabbleDisco *disco,
       NULL);
   dbus_tube_caps = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
       NULL);
+  per_channel_factory_caps = g_hash_table_new (NULL, NULL);
+
+  /* parsing for Connection.Interface.ContactCapabilities.DRAFT */
+  for (j = 0; j < priv->conn->channel_managers->len; j++)
+    {
+      gpointer *factory_caps;
+      GabbleChannelManager *manager = GABBLE_CHANNEL_MANAGER (
+          g_ptr_array_index (priv->conn->channel_managers, j));
+
+      factory_caps = gabble_channel_manager_parse_capabilities
+          (manager, priv->conn);
+      if (factory_caps != NULL)
+        g_hash_table_insert (per_channel_factory_caps, manager, factory_caps);
+    }
 
+  /* parsing for Connection.Interface.Capabilities*/
   for (child = query_result->children; NULL != child; child = child->next)
     {
       const gchar *var;
@@ -854,8 +931,10 @@ _caps_disco_cb (GabbleDisco *disco,
       DEBUG ("Ignoring presence from invalid JID %s", jid);
       g_hash_table_destroy (stream_tube_caps);
       g_hash_table_destroy (dbus_tube_caps);
+      gabble_presence_cache_free_specific_cache (per_channel_factory_caps);
       stream_tube_caps = NULL;
       dbus_tube_caps = NULL;
+      per_channel_factory_caps = NULL;
       goto OUT;
     }
 
@@ -876,8 +955,10 @@ _caps_disco_cb (GabbleDisco *disco,
       DEBUG ("Ignoring non requested disco reply");
       g_hash_table_destroy (stream_tube_caps);
       g_hash_table_destroy (dbus_tube_caps);
+      gabble_presence_cache_free_specific_cache (per_channel_factory_caps);
       stream_tube_caps = NULL;
       dbus_tube_caps = NULL;
+      per_channel_factory_caps = NULL;
       goto OUT;
     }
 
@@ -896,7 +977,8 @@ _caps_disco_cb (GabbleDisco *disco,
       if (g_str_equal (waiter_self->ver, computed_hash))
         {
           trust = capability_info_recvd (cache, node, handle, caps,
-              stream_tube_caps, dbus_tube_caps, trust_inc);
+              stream_tube_caps, dbus_tube_caps, per_channel_factory_caps,
+              trust_inc);
         }
       else
         {
@@ -907,23 +989,27 @@ _caps_disco_cb (GabbleDisco *disco,
           bad_hash = TRUE;
           g_hash_table_destroy (stream_tube_caps);
           g_hash_table_destroy (dbus_tube_caps);
+          gabble_presence_cache_free_specific_cache (per_channel_factory_caps);
           stream_tube_caps = NULL;
           dbus_tube_caps = NULL;
+          per_channel_factory_caps = NULL;
         }
     }
   else
     {
       trust_inc = 1;
       trust = capability_info_recvd (cache, node, handle, caps, NULL, NULL,
-          trust_inc);
+          NULL, trust_inc);
 
       /* Do not allow tubes caps if the contact does not observe XEP-0115
        * version 1.5: we don't need to bother being compatible with both version
        * 1.3 and tubes caps */
       g_hash_table_destroy (stream_tube_caps);
       g_hash_table_destroy (dbus_tube_caps);
+      gabble_presence_cache_free_specific_cache (per_channel_factory_caps);
       stream_tube_caps = NULL;
       dbus_tube_caps = NULL;
+      per_channel_factory_caps = NULL;
     }
 
   for (i = waiters; NULL != i;)
@@ -950,9 +1036,9 @@ _caps_disco_cb (GabbleDisco *disco,
                 DEBUG ("setting caps for %d (thanks to %d %s) to "
                     "%d (save_caps %d)",
                     waiter->handle, handle, jid, caps, save_caps);
-                gabble_presence_set_capabilities (presence,
-                    waiter->resource, caps, stream_tube_caps, dbus_tube_caps,
-                    waiter->serial);
+                gabble_presence_set_capabilities (presence, waiter->resource,
+                    caps, stream_tube_caps, dbus_tube_caps,
+                    per_channel_factory_caps, waiter->serial);
                 DEBUG ("caps for %d (thanks to %d %s) now %d", waiter->handle,
                     handle, jid, presence->caps);
                 g_signal_emit (cache, signals[CAPABILITIES_UPDATE], 0,
@@ -983,10 +1069,11 @@ _caps_disco_cb (GabbleDisco *disco,
 
           if (!waiter->disco_requested)
             {
-              const gchar *j;
+              const gchar *waiter_jid;
 
-              j = tp_handle_inspect (contact_repo, waiter->handle);
-              full_jid = g_strdup_printf ("%s/%s", j, waiter->resource);
+              waiter_jid = tp_handle_inspect (contact_repo, waiter->handle);
+              full_jid = g_strdup_printf ("%s/%s", waiter_jid,
+                  waiter->resource);
 
               gabble_disco_request (disco, GABBLE_DISCO_TYPE_INFO, full_jid,
                   node, _caps_disco_cb, cache, G_OBJECT(cache), NULL);
@@ -1046,8 +1133,9 @@ _process_caps_uri (GabblePresenceCache *cache,
 
       if (presence)
         {
-          gabble_presence_set_capabilities (presence, resource, info->caps,
-              info->stream_tube_caps, info->dbus_tube_caps, serial);
+          gabble_presence_set_capabilities (presence, resource,
+              info->caps, info->stream_tube_caps, info->dbus_tube_caps,
+              info->per_channel_factory_caps, serial);
           DEBUG ("caps for %d (%s) now %d", handle, from, presence->caps);
         }
       else
diff --git a/src/presence-cache.h b/src/presence-cache.h
index fc18d54..82ce987 100644
--- a/src/presence-cache.h
+++ b/src/presence-cache.h
@@ -84,6 +84,12 @@ void gabble_presence_cache_add_bundle_caps (GabblePresenceCache *cache,
     const gchar *node, GabblePresenceCapabilities caps);
 void gabble_presence_cache_really_remove (GabblePresenceCache *cache,
     TpHandle handle);
+void gabble_presence_cache_free_specific_cache (
+    GHashTable *per_channel_factory_caps);
+void gabble_presence_cache_copy_specific_cache (GHashTable **out,
+    GHashTable *in);
+void gabble_presence_cache_update_specific_cache (GHashTable **out,
+    GHashTable *in);
 
 G_END_DECLS
 
diff --git a/src/presence.c b/src/presence.c
index 2491981..ef6d52c 100644
--- a/src/presence.c
+++ b/src/presence.c
@@ -23,6 +23,7 @@
 
 #include <string.h>
 
+#include "channel-manager.h"
 #include "presence-cache.h"
 #include "namespaces.h"
 #include "util.h"
@@ -42,6 +43,7 @@ struct _Resource {
     GabblePresenceCapabilities caps;
     GHashTable *stream_tube_caps;
     GHashTable *dbus_tube_caps;
+    GHashTable *per_channel_factory_caps;
     guint caps_serial;
     GabblePresenceId status;
     gchar *status_message;
@@ -57,11 +59,12 @@ struct _GabblePresencePrivate {
 static Resource *
 _resource_new (gchar *name)
 {
-  Resource *new = g_slice_new (Resource);
+  Resource *new = g_slice_new0 (Resource);
   new->name = name;
   new->caps = PRESENCE_CAP_NONE;
   new->stream_tube_caps = NULL;
   new->dbus_tube_caps = NULL;
+  new->per_channel_factory_caps = NULL;
   new->status = GABBLE_PRESENCE_OFFLINE;
   new->status_message = NULL;
   new->priority = 0;
@@ -197,6 +200,7 @@ gabble_presence_set_capabilities (GabblePresence *presence,
                                   GabblePresenceCapabilities caps,
                                   GHashTable *stream_tube_caps,
                                   GHashTable *dbus_tube_caps,
+                                  GHashTable *per_channel_factory_caps,
                                   guint serial)
 {
   GabblePresencePrivate *priv = GABBLE_PRESENCE_PRIV (presence);
@@ -204,13 +208,26 @@ gabble_presence_set_capabilities (GabblePresence *presence,
 
   presence->caps = 0;
   if (presence->stream_tube_caps != NULL)
-    g_hash_table_destroy (presence->stream_tube_caps);
+    {
+      g_hash_table_destroy (presence->stream_tube_caps);
+      presence->per_channel_factory_caps = NULL;
+    }
   if (presence->dbus_tube_caps != NULL)
-    g_hash_table_destroy (presence->dbus_tube_caps);
+    {
+      g_hash_table_destroy (presence->dbus_tube_caps);
+      presence->per_channel_factory_caps = NULL;
+    }
+  if (presence->per_channel_factory_caps != NULL)
+    {
+      gabble_presence_cache_free_specific_cache
+        (presence->per_channel_factory_caps);
+      presence->per_channel_factory_caps = NULL;
+    }
   presence->stream_tube_caps = g_hash_table_new_full (g_str_hash, g_str_equal,
       g_free, NULL);
   presence->dbus_tube_caps = g_hash_table_new_full (g_str_hash, g_str_equal,
       g_free, NULL);
+  presence->per_channel_factory_caps = g_hash_table_new (NULL, NULL);
 
   DEBUG ("about to add caps %u to resource %s with serial %u", caps, resource,
     serial);
@@ -238,9 +255,21 @@ gabble_presence_set_capabilities (GabblePresence *presence,
               DEBUG ("resource %s caps now %u", resource, tmp->caps);
 
               if (tmp->stream_tube_caps != NULL)
-                g_hash_table_destroy (tmp->stream_tube_caps);
+                {
+                  g_hash_table_destroy (tmp->stream_tube_caps);
+                  tmp->stream_tube_caps = NULL;
+                }
               if (tmp->dbus_tube_caps != NULL)
-                g_hash_table_destroy (tmp->dbus_tube_caps);
+                {
+                  g_hash_table_destroy (tmp->dbus_tube_caps);
+                  tmp->dbus_tube_caps = NULL;
+                }
+              if (tmp->per_channel_factory_caps != NULL)
+                {
+                  gabble_presence_cache_free_specific_cache
+                      (tmp->per_channel_factory_caps);
+                  tmp->per_channel_factory_caps = NULL;
+                }
               tmp->stream_tube_caps = g_hash_table_new_full (g_str_hash,
                   g_str_equal, g_free, NULL);
               tmp->dbus_tube_caps = g_hash_table_new_full (g_str_hash,
@@ -251,6 +280,9 @@ gabble_presence_set_capabilities (GabblePresence *presence,
               if (dbus_tube_caps != NULL)
                 tp_g_hash_table_update (tmp->dbus_tube_caps,
                     dbus_tube_caps, g_strdup, NULL);
+              if (per_channel_factory_caps != NULL)
+                gabble_presence_cache_copy_specific_cache
+                    (&tmp->per_channel_factory_caps, per_channel_factory_caps);
             }
         }
 
@@ -263,6 +295,11 @@ gabble_presence_set_capabilities (GabblePresence *presence,
       if (tmp->dbus_tube_caps != NULL)
         tp_g_hash_table_update (presence->dbus_tube_caps,
             tmp->dbus_tube_caps, g_strdup, NULL);
+
+      if (tmp->per_channel_factory_caps != NULL)
+        gabble_presence_cache_update_specific_cache
+            (presence->per_channel_factory_caps,
+             tmp->per_channel_factory_caps);
     }
 
   DEBUG ("total caps now %u", presence->caps);
diff --git a/src/presence.h b/src/presence.h
index 500d9e2..417571e 100644
--- a/src/presence.h
+++ b/src/presence.h
@@ -58,6 +58,7 @@ struct _GabblePresence {
     GabblePresenceCapabilities caps;
     GHashTable *stream_tube_caps;
     GHashTable *dbus_tube_caps;
+    GHashTable *per_channel_factory_caps;
     GabblePresenceId status;
     gchar *status_message;
     gchar *nickname;
@@ -82,7 +83,8 @@ gboolean gabble_presence_update (GabblePresence *presence,
 
 void gabble_presence_set_capabilities (GabblePresence *presence,
     const gchar *resource, GabblePresenceCapabilities caps,
-    GHashTable *stream_tube_caps, GHashTable *dbus_tube_caps, guint serial);
+    GHashTable *stream_tube_caps, GHashTable *dbus_tube_caps,
+    GHashTable *per_channel_factory_caps, guint serial);
 
 const gchar *gabble_presence_pick_resource_by_caps (GabblePresence *presence,
     GabblePresenceCapabilities caps);
diff --git a/tests/test-presence.c b/tests/test-presence.c
index 3e1d2f1..819e900 100644
--- a/tests/test-presence.c
+++ b/tests/test-presence.c
@@ -109,7 +109,7 @@ int main (int argc, char **argv)
   g_assert (FALSE == gabble_presence_update (presence, "bar",
     GABBLE_PRESENCE_AVAILABLE, "dingoes", -1));
   gabble_presence_set_capabilities (presence, "bar",
-      PRESENCE_CAP_GOOGLE_VOICE, NULL, NULL, 0);
+      PRESENCE_CAP_GOOGLE_VOICE, NULL, NULL, NULL, 0);
 
   dump = gabble_presence_dump (presence);
   g_assert (0 == strcmp (dump,
@@ -138,7 +138,7 @@ int main (int argc, char **argv)
 
   /* give voice cap to first resource */
   gabble_presence_set_capabilities (presence, "foo",
-      PRESENCE_CAP_GOOGLE_VOICE, NULL, NULL, 0);
+      PRESENCE_CAP_GOOGLE_VOICE, NULL, NULL, NULL, 0);
 
   /* resource has voice cap */
   resource = gabble_presence_pick_resource_by_caps (presence,
-- 
1.5.6.5




More information about the Telepathy-commits mailing list