/* * client.c - proxy for a Telepathy client * * Copyright (C) 2009 Collabora Ltd. * Copyright (C) 2009 Nokia Corporation * * 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 "config.h" #include "telepathy-glib/client.h" #include #include #include #include #include #define DEBUG_FLAG TP_DEBUG_DISPATCHER #include "telepathy-glib/debug-internal.h" #include "telepathy-glib/_gen/tp-cli-client-body.h" /** * SECTION:client * @title: TpClient * @short_description: proxy object for a client of the ChannelDispatcher * * Each client to which the ChannelDispatcher can send channels must implement * the Client interface. This object represents such a client, and is mainly * useful in the implementation of the ChannelDispatcher itself. * * Since: 0.7.32 */ /** * TpClient: * * Each client to which the ChannelDispatcher can send channels must implement * the Client interface. This object represents such a client, and is mainly * useful in the implementation of the ChannelDispatcher itself. * * This proxy is usable but very incomplete: accessors for D-Bus properties * will be added in a later version of telepathy-glib, along with a mechanism * similar to tp_connection_call_when_ready(). * * Many operations performed on a Client are done via D-Bus properties. * Until convenience methods for this are implemented, use of the generic * tp_cli_dbus_properties_call_get_all() and tp_cli_dbus_properties_call_set() * methods is recommended. * * Since: 0.7.32 */ /** * TpClientClass: * * The class of a #TpClient. */ struct _TpClientPrivate { gpointer dummy; }; G_DEFINE_TYPE (TpClient, tp_client, TP_TYPE_PROXY) static void tp_client_init (TpClient *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TYPE_CLIENT, TpClientPrivate); } static void tp_client_constructed (GObject *object) { TpClient *self = TP_CLIENT (object); void (*chain_up) (GObject *) = ((GObjectClass *) tp_client_parent_class)->constructed; if (chain_up != NULL) chain_up (object); g_return_if_fail (tp_proxy_get_dbus_daemon (self) != NULL); } static void tp_client_class_init (TpClientClass *klass) { TpProxyClass *proxy_class = (TpProxyClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; g_type_class_add_private (klass, sizeof (TpClientPrivate)); object_class->constructed = tp_client_constructed; proxy_class->interface = TP_IFACE_QUARK_CLIENT; tp_client_init_known_interfaces (); } /** * tp_client_init_known_interfaces: * * Ensure that the known interfaces for TpClient have been set up. * This is done automatically when necessary, but for correct * overriding of library interfaces by local extensions, you should * call this function before calling * tp_proxy_or_subclass_hook_on_interface_add() with first argument * %TP_TYPE_CLIENT. * * Since: 0.7.32 */ void tp_client_init_known_interfaces (void) { static gsize once = 0; if (g_once_init_enter (&once)) { GType tp_type = TP_TYPE_CLIENT; tp_proxy_init_known_interfaces (); tp_proxy_or_subclass_hook_on_interface_add (tp_type, tp_cli_client_add_signals); tp_proxy_subclass_add_error_mapping (tp_type, TP_ERROR_PREFIX, TP_ERROR, TP_TYPE_ERROR); g_once_init_leave (&once, 1); } }