diff --git a/tools/bluetooth-player.c b/tools/bluetooth-player.c
index 096fa44..d691d67 100644
--- a/tools/bluetooth-player.c
+++ b/tools/bluetooth-player.c
dbus_uint16_t valu16;
dbus_int16_t vals16;
const char *valstr;
+ DBusMessageIter subiter;
if (iter == NULL) {
rl_printf("%s%s is nil\n", label, name);
dbus_message_iter_get_basic(iter, &vals16);
rl_printf("%s%s: %d\n", label, name, vals16);
break;
+ case DBUS_TYPE_VARIANT:
+ dbus_message_iter_recurse(iter, &subiter);
+ print_iter(label, name, &subiter);
+ break;
+ case DBUS_TYPE_ARRAY:
+ dbus_message_iter_recurse(iter, &subiter);
+ while (dbus_message_iter_get_arg_type(&subiter) !=
+ DBUS_TYPE_INVALID) {
+ print_iter(label, name, &subiter);
+ dbus_message_iter_next(&subiter);
+ }
+ break;
+ case DBUS_TYPE_DICT_ENTRY:
+ dbus_message_iter_recurse(iter, &subiter);
+ dbus_message_iter_get_basic(&subiter, &valstr);
+ dbus_message_iter_next(&subiter);
+ print_iter(label, valstr, &subiter);
+ break;
default:
rl_printf("%s%s has unsupported type\n", label, name);
break;