diff -r 000000000000 -r d0f3a028347a telepathygabble/src/telepathy-helpers.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telepathygabble/src/telepathy-helpers.c Tue Feb 02 01:10:06 2010 +0200 @@ -0,0 +1,118 @@ +/* + * telepathy-helpers.c - Source for some Telepathy D-Bus helper functions + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include "telepathy-helpers.h" + +#ifdef EMULATOR +#include "libgabble_wsd_solution.h" + + GET_STATIC_VAR_FROM_TLS(busCon,gabble_helpers,DBusGConnection*) + #define busCon (*GET_WSD_VAR_NAME(busCon,gabble_helpers, s)()) + + GET_STATIC_VAR_FROM_TLS(bus_proxy,gabble_helpers,DBusGProxy*) + #define bus_proxy (*GET_WSD_VAR_NAME(bus_proxy,gabble_helpers, s)()) + +#endif + + +DBusGConnection * +tp_get_bus () +{ +#ifndef EMULATOR + static DBusGConnection *busCon = NULL; +#endif + + if (busCon == NULL) + { + GError *error = NULL; + + busCon = dbus_g_bus_get (DBUS_BUS_SESSION/*DBUS_BUS_STARTER*/, &error); + + if (busCon == NULL) + { + g_warning ("Failed to connect to starter bus: %s", error->message); + exit (1); + } + } + + return busCon; +} + +DBusGProxy * +tp_get_bus_proxy () +{ +#ifndef EMULATOR + static DBusGProxy *bus_proxy = NULL; +#endif + + if (bus_proxy == NULL) + { + DBusGConnection *bus = tp_get_bus (); + + bus_proxy = dbus_g_proxy_new_for_name (bus, + "org.freedesktop.DBus", + "/org/freedesktop/DBus", + "org.freedesktop.DBus"); + + if (bus_proxy == NULL) + g_error ("Failed to get proxy object for bus."); + } + + return bus_proxy; +} + +static void _list_builder (gpointer key, gpointer value, gpointer data); + +GSList * +tp_hash_to_key_value_list (GHashTable *hash) +{ + GSList *ret = NULL; + + g_hash_table_foreach (hash, _list_builder, &ret); + + return ret; +} + +void +tp_key_value_list_free (GSList *list) +{ + GSList *iter; + + for (iter = list; iter; iter = g_slist_next(iter)) + { + g_free (iter->data); + } + + g_slist_free (list); +} + +static void _list_builder (gpointer key, gpointer value, gpointer data) +{ + GSList **list = (GSList **) data; + TpKeyValue *kv = g_new0 (TpKeyValue, 1); + + kv->key = key; + kv->value = value; + + *list = g_slist_prepend (*list, kv); +} +