On Tue, 2013-09-24 at 19:45 -0300, jprvita at gmail.com wrote: > +static void parse_adapter_properties(pa_bluetooth_adapter *a, DBusMessageIter *i, bool is_property_change) { > + DBusMessageIter element_i; > + > + pa_assert(a); > + > + dbus_message_iter_recurse(i, &element_i); > + > + while (dbus_message_iter_get_arg_type(&element_i) == DBUS_TYPE_DICT_ENTRY) { > + DBusMessageIter dict_i, variant_i; > + const char *key; > + > + dbus_message_iter_recurse(&element_i, &dict_i); > + > + key = check_variant_property(&dict_i); > + if (key == NULL) { > + pa_log_error("Received invalid property for adapter %s", a->path); > + return; > + } > + > + dbus_message_iter_recurse(&dict_i, &variant_i); > + > + if (dbus_message_iter_get_arg_type(&variant_i) == DBUS_TYPE_STRING && pa_streq(key, "Address")) { > + char *value; The type should be "const char *". > + > + if (is_property_change) { > + pa_log_warn("Adapter property 'Address' expected to be constant but changed for %s, ignoring", a->path); > + return; > + } > + > + if (a->address) { > + pa_log_warn("Adapter %s received a duplicate 'Address' property, ignoring", a->path); > + return; > + } > + > + dbus_message_iter_get_basic(&variant_i, &value); > + a->address = pa_xstrdup(value); > + } > + > + dbus_message_iter_next(&element_i); > + } > +} > + > static void parse_interfaces_and_properties(pa_bluetooth_discovery *y, DBusMessageIter *dict_i) { > DBusMessageIter element_i; > const char *path; > @@ -439,7 +506,11 @@ static void parse_interfaces_and_properties(pa_bluetooth_discovery *y, DBusMessa > > pa_log_debug("Adapter %s found", path); > > - /* TODO: parse adapter properties and register endpoints */ > + parse_adapter_properties(a, &iface_i, false); > + if (!a->address) > + return; (Note to self: there is an ongoing discussion about whether there should be an adapter_info_valid field. Depending on the conclusion of the discussion, this code may change in v6.) -- Tanu