From: Szymon Janc <szymon.janc@tieto.com>
To: Marcin Kraglak <marcin.kraglak@tieto.com>
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: [PATCHv2 2/3] shared/gatt: Return bool in gatt_db_get_attribute_permissions
Date: Sun, 01 Jun 2014 18:43:20 +0200 [thread overview]
Message-ID: <5434705.gW0UxoHRjg@leonov> (raw)
In-Reply-To: <1401442662-11475-2-git-send-email-marcin.kraglak@tieto.com>
On Friday 30 of May 2014 11:37:41 Marcin Kraglak wrote:
> It will return true if attribute with given handle exists in db and
> set permissions value, otherwise it will return false.
> Now, if get_permissions failed, we should reply with
> ATT_ECODE_ATTR_NOT_FOUND.
> ---
> android/gatt.c | 23 +++++++++++++++++------
> src/shared/gatt-db.c | 11 +++++++----
> src/shared/gatt-db.h | 3 ++-
> 3 files changed, 26 insertions(+), 11 deletions(-)
>
> diff --git a/android/gatt.c b/android/gatt.c
> index 80d9f30..421cae4 100644
> --- a/android/gatt.c
> +++ b/android/gatt.c
> @@ -4070,8 +4070,13 @@ static void read_requested_attributes(void *data,
> void *user_data) uint8_t *value;
> int value_len;
>
> - permissions = gatt_db_get_attribute_permissions(gatt_db,
> - resp_data->handle);
> + if (!gatt_db_get_attribute_permissions(gatt_db,
> + resp_data->handle,
> + &permissions)) {
> + resp_data->error = ATT_ECODE_ATTR_NOT_FOUND;
> + resp_data->state = REQUEST_DONE;
> + return;
> + }
>
> /*
> * Check if it is attribute we didn't declare permissions, like service
> @@ -5067,7 +5072,9 @@ static void write_cmd_request(const uint8_t *cmd,
> uint16_t cmd_len, if (!len)
> return;
>
> - permissions = gatt_db_get_attribute_permissions(gatt_db, handle);
> + if (!gatt_db_get_attribute_permissions(gatt_db, handle, &permissions))
> + return;
> +
> if (check_device_permissions(dev, cmd[0], permissions))
> return;
>
> @@ -5093,7 +5100,9 @@ static void write_signed_cmd_request(const uint8_t
> *cmd, uint16_t cmd_len,
>
> len = dec_signed_write_cmd(cmd, cmd_len, &handle, value, &vlen, s);
>
> - permissions = gatt_db_get_attribute_permissions(gatt_db, handle);
> + if (!gatt_db_get_attribute_permissions(gatt_db, handle, &permissions))
> + return;
> +
> if (check_device_permissions(dev, cmd[0], permissions))
> return;
>
> @@ -5133,7 +5142,8 @@ static uint8_t write_req_request(const uint8_t *cmd,
> uint16_t cmd_len, if (!len)
> return ATT_ECODE_INVALID_PDU;
>
> - permissions = gatt_db_get_attribute_permissions(gatt_db, handle);
> + if (!gatt_db_get_attribute_permissions(gatt_db, handle, &permissions))
> + return ATT_ECODE_ATTR_NOT_FOUND;
>
> error = check_device_permissions(dev, cmd[0], permissions);
> if (error)
> @@ -5181,7 +5191,8 @@ static uint8_t write_prep_request(const uint8_t *cmd,
> uint16_t cmd_len, if (!len)
> return ATT_ECODE_INVALID_PDU;
>
> - permissions = gatt_db_get_attribute_permissions(gatt_db, handle);
> + if (!gatt_db_get_attribute_permissions(gatt_db, handle, &permissions))
> + return ATT_ECODE_ATTR_NOT_FOUND;
>
> error = check_device_permissions(dev, cmd[0], permissions);
> if (error)
> diff --git a/src/shared/gatt-db.c b/src/shared/gatt-db.c
> index 998e93e..c11c5d1 100644
> --- a/src/shared/gatt-db.c
> +++ b/src/shared/gatt-db.c
> @@ -734,7 +734,8 @@ uint16_t gatt_db_get_end_handle(struct gatt_db *db,
> uint16_t handle) return service->attributes[0]->handle +
> service->num_handles - 1; }
>
> -uint32_t gatt_db_get_attribute_permissions(struct gatt_db *db, uint16_t
> handle) +bool gatt_db_get_attribute_permissions(struct gatt_db *db,
> uint16_t handle, + uint32_t *permissions)
> {
> struct gatt_db_attribute *attribute;
> struct gatt_db_service *service;
> @@ -743,7 +744,7 @@ uint32_t gatt_db_get_attribute_permissions(struct
> gatt_db *db, uint16_t handle) service = queue_find(db->services,
> find_service_for_handle,
> INT_TO_PTR(handle));
> if (!service)
> - return 0;
> + return false;
>
> service_handle = service->attributes[0]->handle;
>
> @@ -754,7 +755,9 @@ uint32_t gatt_db_get_attribute_permissions(struct
> gatt_db *db, uint16_t handle) */
> attribute = service->attributes[handle - service_handle];
> if (!attribute)
> - return 0;
> + return false;
> +
> + *permissions = attribute->permissions;
> + return true;
>
> - return attribute->permissions;
> }
> diff --git a/src/shared/gatt-db.h b/src/shared/gatt-db.h
> index f2f2f4d..a88f637 100644
> --- a/src/shared/gatt-db.h
> +++ b/src/shared/gatt-db.h
> @@ -92,4 +92,5 @@ const bt_uuid_t *gatt_db_get_attribute_type(struct gatt_db
> *db,
>
> uint16_t gatt_db_get_end_handle(struct gatt_db *db, uint16_t handle);
>
> -uint32_t gatt_db_get_attribute_permissions(struct gatt_db *db, uint16_t
> handle); +bool gatt_db_get_attribute_permissions(struct gatt_db *db,
> uint16_t handle, + uint32_t *permissions);
Patches 2/3 and 3/3 are now applied, thanks.
--
BR
Szymon Janc
next prev parent reply other threads:[~2014-06-01 16:43 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-30 9:37 [PATCHv2 1/3] android/gatt: Fix parallel reading/writing attributes values from applications Marcin Kraglak
2014-05-30 9:37 ` [PATCHv2 2/3] shared/gatt: Return bool in gatt_db_get_attribute_permissions Marcin Kraglak
2014-06-01 16:43 ` Szymon Janc [this message]
2014-05-30 9:37 ` [PATCHv2 3/3] android/gatt: Check for invalid handle errors Marcin Kraglak
2014-06-01 16:42 ` [PATCHv2 1/3] android/gatt: Fix parallel reading/writing attributes values from applications Szymon Janc
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5434705.gW0UxoHRjg@leonov \
--to=szymon.janc@tieto.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=marcin.kraglak@tieto.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox