[telepathy-salut/master] implement DBusTube.Offer method

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Fri Jun 26 07:28:11 PDT 2009


---
 src/tube-dbus.c |   64 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 61 insertions(+), 3 deletions(-)

diff --git a/src/tube-dbus.c b/src/tube-dbus.c
index 3cbb610..118fa57 100644
--- a/src/tube-dbus.c
+++ b/src/tube-dbus.c
@@ -1697,6 +1697,66 @@ salut_tube_dbus_get_interfaces (TpSvcChannel *iface,
     }
 }
 
+static gboolean
+salut_tube_dbus_check_access_control (SalutTubeDBus *self,
+    guint access_control,
+    GError **error)
+{
+  switch (access_control)
+    {
+      case TP_SOCKET_ACCESS_CONTROL_CREDENTIALS:
+      case TP_SOCKET_ACCESS_CONTROL_LOCALHOST:
+        break;
+
+      default:
+        g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
+            "%u socket access control is not supported", access_control);
+        return FALSE;
+    }
+
+  return TRUE;
+}
+
+/**
+ * salut_tube_dbus_offer_async
+ *
+ * Implement D-Bus method Offer on interface
+ * org.freedesktop.Telepathy.Channel.Type.DBusTube
+ */
+static void
+salut_tube_dbus_offer_async (TpSvcChannelTypeDBusTube *self,
+    GHashTable *parameters,
+    guint access_control,
+    DBusGMethodInvocation *context)
+{
+  SalutTubeDBus *tube = SALUT_TUBE_DBUS (self);
+  SalutTubeDBusPrivate *priv = SALUT_TUBE_DBUS_GET_PRIVATE (tube);
+  GError *error = NULL;
+
+  if (!salut_tube_dbus_check_access_control (tube, access_control, &error))
+    {
+      dbus_g_method_return_error (context, error);
+      g_error_free (error);
+      return;
+    }
+
+  priv->access_control = access_control;
+
+  g_object_set (self, "parameters", parameters, NULL);
+
+  if (salut_tube_dbus_offer (tube, &error))
+    {
+      tp_svc_channel_type_dbus_tube_return_from_offer (context,
+          priv->dbus_srv_addr);
+    }
+  else
+    {
+      g_assert (error != NULL);
+      dbus_g_method_return_error (context, error);
+      g_error_free (error);
+    }
+}
+
 static void
 channel_iface_init (gpointer g_iface,
                     gpointer iface_data)
@@ -1729,14 +1789,12 @@ dbustube_iface_init (gpointer g_iface,
                      gpointer iface_data)
 {
   /* FIXME */
-#if 0
   TpSvcChannelTypeDBusTubeClass *klass =
       (TpSvcChannelTypeDBusTubeClass *) g_iface;
 
 #define IMPLEMENT(x, suffix) tp_svc_channel_type_dbus_tube_implement_##x (\
     klass, salut_tube_dbus_##x##suffix)
   IMPLEMENT(offer,_async);
-  IMPLEMENT(accept,_async);
+  //IMPLEMENT(accept,_async);
 #undef IMPLEMENT
-#endif
 }
-- 
1.5.6.5




More information about the telepathy-commits mailing list