diff options
Diffstat (limited to 'unit/manager-api.c')
-rw-r--r-- | unit/manager-api.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/unit/manager-api.c b/unit/manager-api.c index 02bf58ab..40ad3704 100644 --- a/unit/manager-api.c +++ b/unit/manager-api.c @@ -96,6 +96,38 @@ DBusMessage *manager_get_services(DBusConnection *connection) return reply; } +DBusMessage *manager_get_properties(DBusConnection *connection) +{ + DBusMessage *message, *reply; + DBusError error; + + message = dbus_message_new_method_call(CONNMAN_SERVICE, + CONNMAN_MANAGER_PATH, + CONNMAN_MANAGER_INTERFACE, + "GetProperties"); + if (message == NULL) + return NULL; + + dbus_error_init(&error); + + reply = dbus_connection_send_with_reply_and_block(connection, + message, -1, &error); + if (reply == NULL) { + if (dbus_error_is_set(&error) == TRUE) { + LOG("%s", error.message); + dbus_error_free(&error); + } else { + LOG("%s", error.message); + } + dbus_message_unref(message); + return NULL; + } + + dbus_message_unref(message); + + return reply; +} + DBusMessage *manager_create_session(DBusConnection *connection, struct test_session_info *info, const char *notifier_path) @@ -187,3 +219,44 @@ DBusMessage *manager_set_session_mode(DBusConnection *connection, return set_property(connection, "SessionMode", DBUS_TYPE_BOOLEAN, &enable); } + +int manager_parse_properties(DBusMessage *msg, + struct test_manager *manager) +{ + DBusMessageIter iter, array; + + dbus_message_iter_init(msg, &iter); + dbus_message_iter_recurse(&iter, &array); + + while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_DICT_ENTRY) { + DBusMessageIter entry, value; + const char *key; + + dbus_message_iter_recurse(&array, &entry); + dbus_message_iter_get_basic(&entry, &key); + + dbus_message_iter_next(&entry); + dbus_message_iter_recurse(&entry, &value); + + switch (dbus_message_iter_get_arg_type(&value)) { + case DBUS_TYPE_STRING: + if (g_str_equal(key, "State") == TRUE) { + const char *val; + dbus_message_iter_get_basic(&value, &val); + + if (manager->state != NULL) + g_free(manager->state); + + LOG("State %s", val); + + manager->state = g_strdup(val); + } + break; + default: + break; + } + dbus_message_iter_next(&array); + } + + return 0; +} |