diff -r 000000000000 -r d0f3a028347a libtelepathy/src/tp-connmgr.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtelepathy/src/tp-connmgr.c Tue Feb 02 01:10:06 2010 +0200 @@ -0,0 +1,217 @@ +/* tp-connmgr.c + * + * Copyright (C) 2005 Collabora Ltd. + * + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "tp-connmgr.h" +#include "tp-connmgr-signals-marshal.h" +#include "tp-conn.h" +#include "tp-helpers.h" + +#ifdef EMULATOR +#include "libtelepathy_wsd_solution.h" +#endif + +#ifdef EMULATOR + + GET_STATIC_VAR_FROM_TLS(parent_class,tp_connmgr,GObjectClass *) + #define parent_class (*GET_WSD_VAR_NAME(parent_class,tp_connmgr,s)()) + + GET_STATIC_VAR_FROM_TLS(type1,tp_connmgr,GType) + #define type1 (*GET_WSD_VAR_NAME(type1,tp_connmgr,s)()) +#else + static GObjectClass *parent_class = NULL; +#endif + + +static void _tp_connmgr_register_signal_marshallers() +{ + /* Register marshaller for the NewConnection signal */ + dbus_g_object_register_marshaller(tp_connmgr_signals_marshal_VOID__STRING_OBJECT_STRING, G_TYPE_NONE, G_TYPE_STRING, DBUS_TYPE_G_OBJECT_PATH, G_TYPE_STRING, G_TYPE_INVALID); +} + +static void tp_connmgr_dispose(GObject *obj) +{ + TpConnMgr *self = TELEPATHY_CONNMGR(obj); + + if (self->first_run) + { + self->first_run = FALSE; + } + + /* Call the parent dispose method */ + if (G_OBJECT_CLASS(parent_class)->dispose) + { + G_OBJECT_CLASS(parent_class)->dispose(obj); + } + +} + + +static void tp_connmgr_finalize(GObject *obj) +{ + if(G_OBJECT_CLASS(parent_class)->finalize) + { + G_OBJECT_CLASS(parent_class)->finalize(obj); + } +} + + +static void tp_connmgr_init(GTypeInstance *instance, gpointer g_class) +{ + TpConnMgr *self = TELEPATHY_CONNMGR(instance); + + self->first_run = TRUE; +} + + +static void tp_connmgr_class_init(TpConnMgrClass *klass) +{ + GObjectClass *obj = G_OBJECT_CLASS(klass); + parent_class = g_type_class_peek_parent(klass); + + obj->set_property = parent_class->set_property; + obj->get_property = parent_class->get_property; + + obj->dispose = tp_connmgr_dispose; + obj->finalize = tp_connmgr_finalize; + + _tp_connmgr_register_signal_marshallers(); +} + + +GType tp_connmgr_get_type(void) +{ +#ifndef EMULATOR + static GType type1 = 0; +#endif + + if (type1 == 0) + { + static const GTypeInfo info = + { + sizeof(TpConnMgrClass), + NULL, + NULL, + (GClassInitFunc)tp_connmgr_class_init, + NULL, + NULL, + sizeof(TpConnMgr), + 0, + (GInstanceInitFunc)tp_connmgr_init + + }; + type1 = g_type_register_static(DBUS_TYPE_G_PROXY, + "TpConnMgr", &info, 0); + } + return type1; +} + + + + +#ifdef SYMBIAN +EXPORT_C +#endif +TpConnMgr *tp_connmgr_new(DBusGConnection *connection, + const char *bus_name, + const char *object_path, + const char *interface_name) +{ + TpConnMgr *obj; + g_return_val_if_fail(connection != NULL, NULL); + g_return_val_if_fail(bus_name != NULL, NULL); + g_return_val_if_fail(object_path, NULL); + g_return_val_if_fail(interface_name, NULL); + + obj = g_object_new(TELEPATHY_CONNMGR_TYPE, + "name", bus_name, + "path", object_path, + "interface", interface_name, + "connection", connection, NULL); + + dbus_g_proxy_add_signal(DBUS_G_PROXY(obj), + "NewConnection", + G_TYPE_STRING, DBUS_TYPE_G_OBJECT_PATH, + G_TYPE_STRING, G_TYPE_INVALID); + + return obj; +} + + +#ifdef SYMBIAN +EXPORT_C +#endif +TpConn *tp_connmgr_new_connection(TpConnMgr *self, + GHashTable *connection_parameters, + gchar *protocol) +{ + GError *error = NULL; + TpConn *tp_conn_obj = NULL; + DBusGConnection *connection = tp_get_bus (); + gchar *bus_name = NULL, *object_path = NULL; + g_return_val_if_fail(TELEPATHY_IS_CONNMGR(self), NULL); + g_return_val_if_fail(connection_parameters != NULL, NULL); + + /* Create the actual connection and acquire service and path + information that the TpConn object will need */ + + if (!tp_connmgr_request_connection(DBUS_G_PROXY(self), protocol, + connection_parameters, &bus_name, + &object_path, &error)) + { + g_warning("Connect() failed: %s\n", error -> message); + g_error_free(error); + return NULL; + } + + if (bus_name == NULL || object_path == NULL) + { + return NULL; + } + + /* Create the TpConn object */ + + tp_conn_obj = tp_conn_new(connection, bus_name, object_path); + + return tp_conn_obj; +} + + +#ifdef SYMBIAN +EXPORT_C +#endif +gboolean tp_connmgr_list_protocols(TpConnMgr *self, char *** proto) +{ + GError *error = NULL; + + return dbus_g_proxy_call (DBUS_G_PROXY(self), "ListProtocols", &error, G_TYPE_INVALID, G_TYPE_STRV, proto, G_TYPE_INVALID); +} + + +#ifdef SYMBIAN +EXPORT_C +#endif +gboolean +tp_connmgr_get_parameters (TpConnMgr *self, const char * IN_proto, GPtrArray** OUT_arg1) + +{ + return dbus_g_proxy_call (DBUS_G_PROXY(self), "GetParameters", NULL, G_TYPE_STRING, IN_proto, G_TYPE_INVALID, dbus_g_type_get_collection ("GPtrArray", dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID)), OUT_arg1, G_TYPE_INVALID); +} +