diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2009-05-29 12:05:54 +0100 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2009-06-26 15:21:30 +0100 |
commit | 467418a95c83f3ed906308b815051d1a4389c153 (patch) | |
tree | f11e4c822e597724eea0b946038dba59bf4550f6 /src/tube-dbus.c | |
parent | 8e80bbb0667077731276efe54aa8dc443387481e (diff) | |
download | telepathy-salut-467418a95c83f3ed906308b815051d1a4389c153.tar.gz |
implement DBusTube.Offer method
Diffstat (limited to 'src/tube-dbus.c')
-rw-r--r-- | 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 3cbb6101..118fa575 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 } |