- printf("{ ");
- while (dbus_message_iter_get_arg_type(dict) == DBUS_TYPE_DICT_ENTRY) {
- dbus_message_iter_recurse(dict, &dict_entry);
- dbus_message_iter_get_basic(&dict_entry, &string);
- printf("%s=", string);
- dbus_message_iter_next(&dict_entry);
- while (dbus_message_iter_get_arg_type(&dict_entry)
- != DBUS_TYPE_INVALID) {
- dbus_message_iter_recurse(&dict_entry, &sub_dict_entry);
- if (dbus_message_iter_get_arg_type(&sub_dict_entry)
- == DBUS_TYPE_UINT16) {
- dbus_message_iter_get_basic(&sub_dict_entry,
- &key_int);
- printf("%d ", key_int);
- } else if (dbus_message_iter_get_arg_type(&sub_dict_entry)
- == DBUS_TYPE_STRING) {
- dbus_message_iter_get_basic(&sub_dict_entry,
- &string);
- printf("%s ", string);
- } else if (dbus_message_iter_get_arg_type(&sub_dict_entry)
- == DBUS_TYPE_ARRAY) {
- iterate_array(&sub_dict_entry);
- }
- dbus_message_iter_next(&dict_entry);
- }
- dbus_message_iter_next(dict);
- }
- printf("}");
-}
-
-/* Get dictionary info about the current service and store it */
-static void extract_service_properties(DBusMessageIter *dict,
- struct service_data *service)
-{
- DBusMessageIter entry, value, array_item;
- char *key;
- char *key_str;
- uint16_t key_uint16;
- dbus_bool_t key_bool;
-
- while (dbus_message_iter_get_arg_type(dict) == DBUS_TYPE_DICT_ENTRY) {
- dbus_message_iter_recurse(dict, &entry);
- dbus_message_iter_get_basic(&entry, &key);
- printf("\n %s = ", key);
- if (strcmp(key, "Name") == 0 && strlen(key) < 5)
- service->name = key;
-
- dbus_message_iter_next(&entry);
- dbus_message_iter_recurse(&entry, &value);
- /* Check if entry is a dictionary itself */
- if (strcmp(key, "Ethernet") == 0 ||
- /* if just strcmp, the .Configuration names don't match
- * and they are iterated with iterate_array instead*/
- strncmp(key, "IPv4", 4) == 0 ||
- strncmp(key, "IPv6", 4) == 0 ||
- strncmp(key, "Proxy", 5) == 0 ||
- strcmp(key, "Provider") == 0) {
- dbus_message_iter_recurse(&value, &array_item);
- iterate_dict(&array_item, key_str, key_uint16);
- } else
- switch (dbus_message_iter_get_arg_type(&value)) {
- case DBUS_TYPE_ARRAY:
- iterate_array(&value);
- break;
- case DBUS_TYPE_BOOLEAN:
- dbus_message_iter_get_basic(&value, &key_bool);
- printf("%s", key_bool == TRUE ? "True" : "False");
- break;
- case DBUS_TYPE_BYTE:
- dbus_message_iter_get_basic(&value, &key_uint16);
- printf("%d", key_uint16);
- break;
- case DBUS_TYPE_STRING:
- dbus_message_iter_get_basic(&value, &key_str);
- printf("%s", key_str);
- break;
- }
- dbus_message_iter_next(dict);
- }
- printf("\n\n");
-}
-
-static void match_service_name(DBusMessage *message, char *service_name,
- struct service_data *service)
-{
- DBusMessageIter iter, array;
-
- dbus_message_iter_init(message, &iter);
- dbus_message_iter_recurse(&iter, &array);
-
- while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_STRUCT) {
- DBusMessageIter entry, dict;
- char *path;
-
- dbus_message_iter_recurse(&array, &entry);
- dbus_message_iter_get_basic(&entry, &path);