/*
* proxy.h - Base class for Telepathy client proxies
*
* Copyright (C) 2007 Collabora Ltd.
* Copyright (C) 2007 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
*/
#if defined (TP_DISABLE_SINGLE_INCLUDE) && !defined (_TP_IN_META_HEADER) && !defined (_TP_COMPILATION)
#error "Only and can be included directly."
#endif
#ifndef __TP_PROXY_H__
#define __TP_PROXY_H__
#include
#include
#include
#include
G_BEGIN_DECLS
/* Forward declaration of a subclass - from dbus.h */
typedef struct _TpDBusDaemon TpDBusDaemon;
/* Forward declaration - from simple-client-factory.h */
typedef struct _TpSimpleClientFactory TpSimpleClientFactory;
typedef struct _TpProxyPrivate TpProxyPrivate;
typedef struct _TpProxy TpProxy;
#define TP_DBUS_ERRORS (tp_dbus_errors_quark ())
GQuark tp_dbus_errors_quark (void);
typedef enum {
TP_DBUS_ERROR_UNKNOWN_REMOTE_ERROR = 0,
TP_DBUS_ERROR_PROXY_UNREFERENCED = 1,
TP_DBUS_ERROR_NO_INTERFACE = 2,
TP_DBUS_ERROR_NAME_OWNER_LOST = 3,
TP_DBUS_ERROR_INVALID_BUS_NAME = 4,
TP_DBUS_ERROR_INVALID_INTERFACE_NAME = 5,
TP_DBUS_ERROR_INVALID_OBJECT_PATH = 6,
TP_DBUS_ERROR_INVALID_MEMBER_NAME = 7,
TP_DBUS_ERROR_OBJECT_REMOVED = 8,
TP_DBUS_ERROR_CANCELLED = 9,
TP_DBUS_ERROR_INCONSISTENT = 10,
} TpDBusError;
#define TP_NUM_DBUS_ERRORS (TP_DBUS_ERROR_INCONSISTENT + 1)
#define NUM_TP_DBUS_ERRORS TP_NUM_DBUS_ERRORS
struct _TpProxy {
/**/
GObject parent;
TpDBusDaemon *_TP_SEAL (dbus_daemon);
DBusGConnection *_TP_SEAL (dbus_connection);
gchar *_TP_SEAL (bus_name);
gchar *_TP_SEAL (object_path);
GError *_TP_SEAL (invalidated);
TpProxyPrivate *priv;
};
typedef struct _TpProxyClass TpProxyClass;
typedef struct _TpProxyFeature TpProxyFeature;
typedef struct _TpProxyFeaturePrivate TpProxyFeaturePrivate;
typedef void (* TpProxyPrepareAsync) (TpProxy *proxy,
const TpProxyFeature *feature,
GAsyncReadyCallback callback,
gpointer user_data);
struct _TpProxyFeature {
/**/
GQuark name;
gboolean core;
TpProxyPrepareAsync prepare_async;
TpProxyPrepareAsync prepare_before_signalling_connected_async;
const GQuark *interfaces_needed;
/* Features we depend on */
const GQuark *depends_on;
gboolean can_retry;
/**/
GCallback _reserved[4];
TpProxyFeaturePrivate *priv;
};
/* XXX: hide this from the g-i scanner, since vapigen can't cope */
#ifndef __GI_SCANNER__
typedef const TpProxyFeature *(*TpProxyClassFeatureListFunc) (
TpProxyClass *cls);
#endif /* __GI_SCANNER__ */
struct _TpProxyClass {
/**/
GObjectClass parent_class;
GQuark interface;
unsigned int must_have_unique_name:1;
/**/
guint _reserved_flags:31;
/* XXX: hide this from the g-i scanner, since vapigen can't cope */
#ifdef __GI_SCANNER__
GCallback _internal_list_features;
#else
TpProxyClassFeatureListFunc list_features;
#endif /* __GI_SCANNER__ */
GCallback _reserved[3];
gpointer priv;
};
typedef struct _TpProxyPendingCall TpProxyPendingCall;
void tp_proxy_pending_call_cancel (TpProxyPendingCall *pc);
typedef struct _TpProxySignalConnection TpProxySignalConnection;
void tp_proxy_signal_connection_disconnect (TpProxySignalConnection *sc);
GType tp_proxy_get_type (void);
/* TYPE MACROS */
#define TP_TYPE_PROXY \
(tp_proxy_get_type ())
#define TP_PROXY(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TYPE_PROXY, \
TpProxy))
#define TP_PROXY_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass), TP_TYPE_PROXY, \
TpProxyClass))
#define TP_IS_PROXY(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TYPE_PROXY))
#define TP_IS_PROXY_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass), TP_TYPE_PROXY))
#define TP_PROXY_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TYPE_PROXY, \
TpProxyClass))
gboolean tp_proxy_has_interface_by_id (gpointer self, GQuark iface);
gboolean tp_proxy_has_interface (gpointer self, const gchar *iface);
_TP_AVAILABLE_IN_0_16
TpSimpleClientFactory *tp_proxy_get_factory (gpointer self);
TpDBusDaemon *tp_proxy_get_dbus_daemon (gpointer self);
DBusGConnection *tp_proxy_get_dbus_connection (gpointer self);
const gchar *tp_proxy_get_bus_name (gpointer self);
const gchar *tp_proxy_get_object_path (gpointer self);
const GError *tp_proxy_get_invalidated (gpointer self);
void tp_proxy_dbus_error_to_gerror (gpointer self,
const char *dbus_error, const char *debug_message, GError **error);
gboolean tp_proxy_is_prepared (gpointer self, GQuark feature);
void tp_proxy_prepare_async (gpointer self,
const GQuark *features,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean tp_proxy_prepare_finish (gpointer self,
GAsyncResult *result,
GError **error);
G_END_DECLS
#include
#endif /* #ifndef __TP_PROXY_H__*/