- if (strcasecmp(arg, "yes") == 0 ||
- strcasecmp(arg, "true") == 0 ||
- strcasecmp(arg, "on") == 0 ||
- strcasecmp(arg, "enable" ) == 0 ||
- strcasecmp(arg, "y") == 0 ||
- strcasecmp(arg, "t") == 0 ||
- strcasecmp(arg, "1") == 0)
- return 1;
-
- return -1;
-}
-
-static int append_property_array(DBusMessageIter *iter, char *property,
- char **data, int num_args)
-{
- DBusMessageIter value, array;
- int i = 0;
-
- dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &property);
-
- dbus_array_open(iter, &value);
- dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY,
- DBUS_TYPE_STRING_AS_STRING, &array);
-
- while (data[i] != NULL && strncmp(data[i], "--", 2) != 0) {
- dbus_message_iter_append_basic(&array, DBUS_TYPE_STRING,
- &data[i]);
- if (num_args > 0 && i == num_args)
- break;
- i++;
- }
-
- dbus_message_iter_close_container(&value, &array);
- dbus_message_iter_close_container(iter, &value);
-
- return i;
-}
-
-static int append_property_dict(DBusMessageIter *iter, char *property,
- char **keys, char **data, int num_args)
-{
- int is_ipv6 = 0;
- DBusMessageIter value, dict, entry, dict_key;
- int i = 0;
- unsigned char prefix;
- char *property_value;
-
- dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &property);
-
- /* Top most level is a{sv} */
- dbus_dict_open_variant(iter, &value);
-
- dbus_dict_open(&value, &dict);
-
- if (strcmp(property, "IPv6.Configuration") == 0)
- is_ipv6 = 1;
-
- while (keys[i] != NULL && data[i] != NULL
- && strncmp(data[i], "--", 2) != 0) {
-
- if (num_args > 0 && i == num_args)
- break;
-
- dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY,
- NULL, &entry);
- dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING,
- &keys[i]);
-
- property_value = data[i];
-
- if (is_ipv6 == 1 && g_strcmp0(keys[i], "PrefixLength") == 0) {
- prefix = atoi(data[i]);
-
- dbus_message_iter_open_container(&entry,
- DBUS_TYPE_VARIANT,
- DBUS_TYPE_BYTE_AS_STRING,
- &dict_key);
- dbus_message_iter_append_basic(&dict_key,
- DBUS_TYPE_BYTE, &prefix);
- } else {
- if (is_ipv6 == 1 && strcmp(keys[i], "Privacy") == 0) {
- switch (parse_boolean(property_value)) {
- case 0:
- property_value = "disabled";
- break;
- case 1:
- property_value = "enabled";
- break;
- case -1:
- if (strcmp(property_value,
- "prefered") != 0)
- return -EINVAL;
- break;
- }
- }
-
- dbus_message_iter_open_container(&entry,
- DBUS_TYPE_VARIANT,
- DBUS_TYPE_STRING_AS_STRING,
- &dict_key);
- dbus_message_iter_append_basic(&dict_key,
- DBUS_TYPE_STRING,
- &property_value);
- }
-
- dbus_message_iter_close_container(&entry, &dict_key);
- dbus_message_iter_close_container(&dict, &entry);
-
- i++;
- }
- /* Close {sv}, then close a{sv} */
- dbus_dict_close(&value, &dict);
- dbus_dict_close(iter, &value);
-
- return i;
-}
-
-void iterate_array(DBusMessageIter *iter)
-{
- DBusMessageIter array_item;
- dbus_bool_t key_bool;
- char *key_str;
-
- dbus_message_iter_recurse(iter, &array_item);
- /* Make sure the entry is not NULL! */
- printf("[ ");
- while (dbus_message_iter_get_arg_type(&array_item) !=
- DBUS_TYPE_INVALID) {
- if (dbus_message_iter_get_arg_type(&array_item) ==
- DBUS_TYPE_STRING) {
- dbus_message_iter_get_basic(&array_item,
- &key_str);
- printf("%s ", key_str);
- } else if (dbus_message_iter_get_arg_type(&array_item) ==
- DBUS_TYPE_BOOLEAN) {
- dbus_message_iter_get_basic(&array_item, &key_bool);
- printf("%s ", key_bool == TRUE ? "True"
- : "False");
- }
- dbus_message_iter_next(&array_item);
- }
- if (dbus_message_iter_get_arg_type(&array_item) ==
- DBUS_TYPE_INVALID)
- printf("] ");
-}
-
-void iterate_dict(DBusMessageIter *dict, char *string, uint16_t key_int)
-{
- DBusMessageIter dict_entry, sub_dict_entry;
-
- 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");
-}
-
-void extract_service_name(DBusMessageIter *dict, struct service_data *service)
-{
- DBusMessageIter dict_entry, value;
- const char *key;
- const char *state;