[PATCH v5 12/39] bluetooth: Parse BlueZ 5 adapter properties

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux