X-Git-Url: http://git.maemo.org/git/?p=connman;a=blobdiff_plain;f=src%2Fdbus.c;h=daa2239c536926cb79809f45c2b35693bda091f5;hp=918fb0e544d632677b4ec373ec0ec6c443278cf9;hb=050811a6aa9fcfe1885e90694eeeebc2ee0fd071;hpb=5233b4347cc817a3e6e9e16b2ae6b3b5be25366e diff --git a/src/dbus.c b/src/dbus.c index 918fb0e..daa2239 100644 --- a/src/dbus.c +++ b/src/dbus.c @@ -2,7 +2,7 @@ * * Connection Manager * - * Copyright (C) 2007-2008 Intel Corporation. All rights reserved. + * Copyright (C) 2007-2009 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -23,51 +23,43 @@ #include #endif -#include +#include -void connman_dbus_dict_append_array(DBusMessageIter *dict, - const char *key, int type, void *val, int len) -{ - DBusMessageIter entry, value, array; - const char *variant_sig, *array_sig; +#include "connman.h" - switch (type) { - case DBUS_TYPE_BYTE: - variant_sig = DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING; - array_sig = DBUS_TYPE_BYTE_AS_STRING; - break; - default: - return; - } +char *connman_dbus_encode_string(const char *value) +{ + GString *str; + unsigned int i, size; - dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY, - NULL, &entry); + if (value == NULL) + return NULL; - dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); + size = strlen(value); - dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, - variant_sig, &value); + str = g_string_new(NULL); + if (str == NULL) + return NULL; - dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY, - array_sig, &array); - dbus_message_iter_append_fixed_array(&array, type, val, len); - dbus_message_iter_close_container(&value, &array); - - dbus_message_iter_close_container(&entry, &value); + for (i = 0; i < size; i++) { + const char tmp = value[i]; + if ((tmp < '0' || tmp > '9') && (tmp < 'A' || tmp > 'Z') && + (tmp < 'a' || tmp > 'z')) + g_string_append_printf(str, "_%02x", tmp); + else + str = g_string_append_c(str, tmp); + } - dbus_message_iter_close_container(dict, &entry); + return g_string_free(str, FALSE); } -void connman_dbus_dict_append_variant(DBusMessageIter *dict, +void connman_dbus_property_append_variant(DBusMessageIter *iter, const char *key, int type, void *val) { - DBusMessageIter entry, value; + DBusMessageIter value; const char *signature; - dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY, - NULL, &entry); - - dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); + dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &key); switch (type) { case DBUS_TYPE_BOOLEAN: @@ -99,10 +91,76 @@ void connman_dbus_dict_append_variant(DBusMessageIter *dict, break; } - dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, + dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, signature, &value); dbus_message_iter_append_basic(&value, type, val); + dbus_message_iter_close_container(iter, &value); +} + +void connman_dbus_dict_append_array(DBusMessageIter *dict, + const char *key, int type, void *val, int len) +{ + DBusMessageIter entry, value, array; + const char *variant_sig, *array_sig; + + switch (type) { + case DBUS_TYPE_BYTE: + variant_sig = DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING; + array_sig = DBUS_TYPE_BYTE_AS_STRING; + break; + default: + return; + } + + dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY, + NULL, &entry); + + dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); + + dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, + variant_sig, &value); + + dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY, + array_sig, &array); + dbus_message_iter_append_fixed_array(&array, type, val, len); + dbus_message_iter_close_container(&value, &array); + dbus_message_iter_close_container(&entry, &value); dbus_message_iter_close_container(dict, &entry); } + +void connman_dbus_dict_append_variant(DBusMessageIter *dict, + const char *key, int type, void *val) +{ + DBusMessageIter entry; + + dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY, + NULL, &entry); + + connman_dbus_property_append_variant(&entry, key, type, val); + + dbus_message_iter_close_container(dict, &entry); +} + +static DBusConnection *connection = NULL; + +DBusConnection *connman_dbus_get_connection(void) +{ + if (connection == NULL) + return NULL; + + return dbus_connection_ref(connection); +} + +int __connman_dbus_init(DBusConnection *conn) +{ + connection = conn; + + return 0; +} + +void __connman_dbus_cleanup(void) +{ + connection = NULL; +}