diff -r 46cc8e302e43 -r 3404599e4dda libtelepathy/src/tp-helpers.c --- a/libtelepathy/src/tp-helpers.c Wed Mar 31 22:32:38 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,292 +0,0 @@ -/* - * tp-helpers.c - Source for various helper functions - * for telepathy implementation - * - * 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 "tp-helpers.h" - - -#define CM_CONFS_DIR "/usr/share/telepathy/managers/" -#define CM_CONF_SUFFIX ".manager" -#define CM_CONF_GROUP "ConnectionManager" -#define FILE_SEPARATOR ',' -#define PROTO "Proto " - - -#ifdef EMULATOR -#include "libtelepathy_wsd_solution.h" -#endif - -#ifdef EMULATOR - - GET_STATIC_VAR_FROM_TLS(bus_proxy,tp_helpers,DBusGProxy *) - #define bus_proxy (*GET_WSD_VAR_NAME(bus_proxy,tp_helpers,s)()) - - GET_STATIC_VAR_FROM_TLS(bus1,tp_helpers,DBusGConnection *) - #define bus1 (*GET_WSD_VAR_NAME(bus1,tp_helpers,s)()) - -#endif - -static void _list_builder(gpointer key, gpointer value, gpointer data); - -DBusGConnection * -tp_get_bus () -{ -#ifndef EMULATOR - static DBusGConnection *bus1 = NULL; -#endif - - - if (bus1 == NULL) - { - GError *error = NULL; - - bus1 = dbus_g_bus_get (/*DBUS_BUS_STARTER*/DBUS_BUS_SESSION, &error); - - if (bus1 == NULL) - g_error ("Failed to connect to starter bus: %s", error->message); - } - - return bus1; -} - -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; -} - -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); -} - -GSList *tp_connmgr_list_cms(void) -{ - GError *error = NULL; - GDir *dir; - const gchar *filename; - gchar **name; - gchar *absolute_filepath; - GSList *cms = NULL; - - - /* Read the configuration file directory */ - if ((dir = g_dir_open(CM_CONFS_DIR, 0, &error)) == NULL) - { - g_printerr("Error opening directory %s: %s", CM_CONFS_DIR, - error->message); - return NULL; - } - - while ((filename = g_dir_read_name(dir)) != NULL) - /* Skip the file if it doesn't contain the required file suffix */ - if (g_str_has_suffix(filename, CM_CONF_SUFFIX)) - { - absolute_filepath = g_strconcat(CM_CONFS_DIR, filename, NULL); - name = g_strsplit(filename, ".", 0); - cms = g_slist_append(cms, *name); - } - - return cms; -} - -TpConnMgrInfo *tp_connmgr_get_info(gchar *cm) -{ - GError *error = NULL; - GKeyFile *file; - gsize len; - gchar *absolute_filepath; - gchar **protocols; - TpConnMgrInfo *cm_info = (TpConnMgrInfo *)malloc(sizeof(TpConnMgrInfo)); - cm_info->protocol_info = g_hash_table_new(g_str_hash, g_str_equal); - - absolute_filepath = g_strconcat(CM_CONFS_DIR, cm, CM_CONF_SUFFIX, NULL); - - file = g_key_file_new(); - if (!g_key_file_load_from_file - (file, absolute_filepath, G_KEY_FILE_NONE, &error)) - { - /* handle error */ - g_printerr("%s", error->message); - g_error_free(error); - return NULL; - } - g_key_file_set_list_separator(file, FILE_SEPARATOR); - - cm_info->name = g_key_file_get_string(file, CM_CONF_GROUP, - "Name", &error); - if (!(cm_info->name)) - { - /* handle error and free dynamic memory */ - g_printerr("%s", error->message); - g_error_free(error); - g_key_file_free(file); - g_free(absolute_filepath); - free(cm_info); - return NULL; - } - cm_info->bus_name = g_key_file_get_string(file, CM_CONF_GROUP, - "BusName", &error); - if (!(cm_info->bus_name)) - { - /* handle error and free dynamic memory */ - g_printerr("%s", error->message); - g_error_free(error); - g_key_file_free(file); - g_free(absolute_filepath); - g_free(cm_info->name); - free(cm_info); - return NULL; - } - cm_info->object_path = g_key_file_get_string(file,CM_CONF_GROUP, - "ObjectPath", &error); - if (!(cm_info->object_path)) - { - /* handle error and free dynamic memory */ - g_printerr("%s", error->message); - g_error_free(error); - g_key_file_free(file); - g_free(absolute_filepath); - g_free(cm_info->name); - g_free(cm_info->bus_name); - free(cm_info); - return NULL; - } - cm_info->protocols = g_key_file_get_string_list(file, CM_CONF_GROUP, - "Protos", &len, &error); - if (!(cm_info->protocols)) - { - /* handle error and free dynamic memory */ - g_printerr("%s", error->message); - g_error_free(error); - g_key_file_free(file); - g_free(absolute_filepath); - g_free(cm_info->name); - g_free(cm_info->bus_name); - g_free(cm_info->object_path); - free(cm_info); - return NULL; - } - - for(protocols=cm_info->protocols; *protocols; protocols++) - { - gchar **keys; - gchar *key_value; - gchar *proto_group = g_strconcat(PROTO, *protocols, NULL); - TpConnMgrProtInfo *cm_prot_info = - (TpConnMgrProtInfo *)malloc(sizeof(TpConnMgrProtInfo)); - cm_prot_info->default_params = g_hash_table_new(g_str_hash, g_str_equal); - - cm_prot_info->mandatory_params = g_key_file_get_string_list(file, - proto_group, "MandatoryParams", &len, &error); - if (!(cm_prot_info->mandatory_params)) - { - g_printerr("%s", error->message); - g_error_free(error); - } - cm_prot_info->optional_params = g_key_file_get_string_list(file, - proto_group, "OptionalParams", &len, &error); - if (!(cm_prot_info->optional_params)) - { - g_printerr("%s", error->message); - g_error_free(error); - } - - keys = g_key_file_get_keys (file, proto_group, &len, &error); - if (!(keys)) - { - g_printerr("%s", error->message); - g_error_free(error); - } - else - { - for(; *keys; keys++) - { - if(g_str_has_prefix(*keys, "default")) - { - key_value = g_key_file_get_string(file, proto_group, - *keys, &error); - if (!(key_value)) - { - g_printerr("%s", error->message); - g_error_free(error); - } - else - g_hash_table_insert(cm_prot_info->default_params, - g_strdup(*keys), key_value); - } - } - } - - - g_hash_table_insert(cm_info->protocol_info, g_strdup(*protocols), - cm_prot_info); - - } - - g_key_file_free(file); - g_free(absolute_filepath); - return cm_info; - -}