diff options
Diffstat (limited to 'qt4/tests/lib/glib/echo2/conn.c')
-rw-r--r-- | qt4/tests/lib/glib/echo2/conn.c | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/qt4/tests/lib/glib/echo2/conn.c b/qt4/tests/lib/glib/echo2/conn.c new file mode 100644 index 000000000..46531b3fd --- /dev/null +++ b/qt4/tests/lib/glib/echo2/conn.c @@ -0,0 +1,194 @@ +/* + * conn.c - an example connection + * + * Copyright (C) 2007 Collabora Ltd. <http://www.collabora.co.uk/> + * Copyright (C) 2007 Nokia Corporation + * + * Copying and distribution of this file, with or without modification, + * are permitted in any medium without royalty provided the copyright + * notice and this notice are preserved. + */ + +#include "conn.h" + +#include <dbus/dbus-glib.h> + +#include <telepathy-glib/telepathy-glib.h> +#include <telepathy-glib/handle-repo-dynamic.h> + +#include "im-manager.h" +#include "protocol.h" + +G_DEFINE_TYPE (ExampleEcho2Connection, + example_echo_2_connection, + TP_TYPE_BASE_CONNECTION) + +enum +{ + PROP_ACCOUNT = 1, + N_PROPS +}; + +struct _ExampleEcho2ConnectionPrivate +{ + gchar *account; +}; + +static void +example_echo_2_connection_init (ExampleEcho2Connection *self) +{ + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, + EXAMPLE_TYPE_ECHO_2_CONNECTION, + ExampleEcho2ConnectionPrivate); +} + +static void +get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *spec) +{ + ExampleEcho2Connection *self = EXAMPLE_ECHO_2_CONNECTION (object); + + switch (property_id) { + case PROP_ACCOUNT: + g_value_set_string (value, self->priv->account); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); + } +} + +static void +set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *spec) +{ + ExampleEcho2Connection *self = EXAMPLE_ECHO_2_CONNECTION (object); + + switch (property_id) { + case PROP_ACCOUNT: + g_free (self->priv->account); + self->priv->account = g_utf8_strdown (g_value_get_string (value), -1); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); + } +} + +static void +finalize (GObject *object) +{ + ExampleEcho2Connection *self = EXAMPLE_ECHO_2_CONNECTION (object); + + g_free (self->priv->account); + + G_OBJECT_CLASS (example_echo_2_connection_parent_class)->finalize (object); +} + +static gchar * +get_unique_connection_name (TpBaseConnection *conn) +{ + ExampleEcho2Connection *self = EXAMPLE_ECHO_2_CONNECTION (conn); + + return g_strdup (self->priv->account); +} + +static gchar * +example_normalize_contact (TpHandleRepoIface *repo G_GNUC_UNUSED, + const gchar *id, + gpointer context G_GNUC_UNUSED, + GError **error) +{ + return example_echo_2_protocol_normalize_contact (id, error); +} + +static void +create_handle_repos (TpBaseConnection *conn, + TpHandleRepoIface *repos[NUM_TP_HANDLE_TYPES]) +{ + repos[TP_HANDLE_TYPE_CONTACT] = tp_dynamic_handle_repo_new + (TP_HANDLE_TYPE_CONTACT, example_normalize_contact, NULL); +} + +static GPtrArray * +create_channel_managers (TpBaseConnection *conn) +{ + GPtrArray *ret = g_ptr_array_sized_new (1); + + g_ptr_array_add (ret, g_object_new (EXAMPLE_TYPE_ECHO_2_IM_MANAGER, + "connection", conn, + NULL)); + + return ret; +} + +static gboolean +start_connecting (TpBaseConnection *conn, + GError **error) +{ + ExampleEcho2Connection *self = EXAMPLE_ECHO_2_CONNECTION (conn); + TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (conn, + TP_HANDLE_TYPE_CONTACT); + + /* In a real connection manager we'd ask the underlying implementation to + * start connecting, then go to state CONNECTED when finished, but here + * we can do it immediately. */ + + conn->self_handle = tp_handle_ensure (contact_repo, self->priv->account, + NULL, NULL); + + tp_base_connection_change_status (conn, TP_CONNECTION_STATUS_CONNECTED, + TP_CONNECTION_STATUS_REASON_REQUESTED); + + return TRUE; +} + +static void +shut_down (TpBaseConnection *conn) +{ + /* In a real connection manager we'd ask the underlying implementation to + * start shutting down, then call this function when finished, but here + * we can do it immediately. */ + tp_base_connection_finish_shutdown (conn); +} + +static const gchar *interfaces_always_present[] = { + TP_IFACE_CONNECTION_INTERFACE_REQUESTS, + NULL }; + +const gchar * const * +example_echo_2_connection_get_possible_interfaces (void) +{ + /* in this example CM we don't have any extra interfaces that are sometimes, + * but not always, present */ + return interfaces_always_present; +} + +static void +example_echo_2_connection_class_init (ExampleEcho2ConnectionClass *klass) +{ + TpBaseConnectionClass *base_class = + (TpBaseConnectionClass *) klass; + GObjectClass *object_class = (GObjectClass *) klass; + GParamSpec *param_spec; + + object_class->get_property = get_property; + object_class->set_property = set_property; + object_class->finalize = finalize; + g_type_class_add_private (klass, sizeof (ExampleEcho2ConnectionPrivate)); + + base_class->create_handle_repos = create_handle_repos; + base_class->get_unique_connection_name = get_unique_connection_name; + base_class->create_channel_managers = create_channel_managers; + base_class->start_connecting = start_connecting; + base_class->shut_down = shut_down; + base_class->interfaces_always_present = interfaces_always_present; + + param_spec = g_param_spec_string ("account", "Account name", + "The username of this user", NULL, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | + G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB); + g_object_class_install_property (object_class, PROP_ACCOUNT, param_spec); +} |