Re: [RFC 2/2] client: Add authorized property handling to characteristic attribute

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

 



Hi Grzegorz,
On Wed, May 2, 2018 at 1:09 PM Grzegorz Kolodziejczyk <
grzegorz.kolodziejczyk@xxxxxxxxxxx> wrote:

> This patch adds handling of authorized property to bluetoothctl.
> ---
>   client/gatt.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 46 insertions(+)

> diff --git a/client/gatt.c b/client/gatt.c
> index 6bf644c48..fffa86851 100644
> --- a/client/gatt.c
> +++ b/client/gatt.c
> @@ -1432,6 +1432,30 @@ static gboolean chrc_notify_acquired_exists(const
GDBusPropertyTable *property,
>          return FALSE;
>   }

> +static gboolean chrc_get_authorized(const GDBusPropertyTable *property,
> +                                       DBusMessageIter *iter, void *data)
> +{
> +       struct chrc *chrc = data;
> +       dbus_bool_t value;
> +
> +       value = chrc->authorized ? TRUE : FALSE;
> +
> +       dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &value);
> +
> +       return TRUE;
> +}
> +
> +static gboolean chrc_get_authorized_exists(const GDBusPropertyTable
*property,
> +                                                               void
*data)
> +{
> +       struct chrc *chrc = data;
> +
> +       if (chrc->authorization_req)
> +               return TRUE;
> +
> +       return FALSE;
> +}
> +
>   static const GDBusPropertyTable chrc_properties[] = {
>          { "UUID", "s", chrc_get_uuid, NULL, NULL },
>          { "Service", "o", chrc_get_service, NULL, NULL },
> @@ -1442,6 +1466,8 @@ static const GDBusPropertyTable chrc_properties[] =
{
>                                          chrc_write_acquired_exists },
>          { "NotifyAcquired", "b", chrc_get_notify_acquired, NULL,
>                                          chrc_notify_acquired_exists },
> +       { "Authorized", "b", chrc_get_authorized, NULL,
> +
chrc_get_authorized_exists },
>          { }
>   };

> @@ -1665,6 +1691,15 @@ static void authorize_write_response(const char
*input, void *user_data)

>          chrc->authorized = true;

> +       /* Authorization check of prepare writes */
> +       if (!chrc->value_len) {
> +               reply = g_dbus_create_reply(pending_message,
DBUS_TYPE_INVALID);
> +               g_dbus_send_message(aad->conn, reply);
> +               g_free(aad);
> +
> +               return;
> +       }
> +
>          errsv = parse_value_arg(&iter, &chrc->value, &chrc->value_len,

chrc->max_val_len);
>          if (errsv == -EINVAL) {
> @@ -1701,8 +1736,16 @@ static DBusMessage
*chrc_write_value(DBusConnection *conn, DBusMessage *msg,
>          DBusMessageIter iter;
>          char *str;
>          int errsv;
> +       uint16_t offset = 0;

>          dbus_message_iter_init(msg, &iter);
> +       /* Get offset only (second parameter) */
> +       dbus_message_iter_next(&iter);
> +
> +       parse_options(&iter, &offset, NULL, NULL, NULL);
> +
> +       if (chrc->authorization_req && offset == 0)
> +               chrc->authorized = false;

>          if (chrc->authorization_req && !chrc->authorized) {
>                  struct authorize_attribute_data *aad;
> @@ -1722,6 +1765,9 @@ static DBusMessage *chrc_write_value(DBusConnection
*conn, DBusMessage *msg,
>                  return NULL;
>          }

> +       /* Rewind to value parameter */
> +       dbus_message_iter_init(msg, &iter);

I would prefer to make parse_value_arg parse the offset as well so we don't
have to reinit the iter.

>          errsv = parse_value_arg(&iter, &chrc->value, &chrc->value_len,

chrc->max_val_len);
>          if (errsv == -EINVAL) {
> --
> 2.13.6

> --
> To unsubscribe from this list: send the line "unsubscribe
linux-bluetooth" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Luiz Augusto von Dentz
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux