* [PATCHv2 4/6] android/gatt: Store proper attributes permissions in database
2014-05-26 9:10 [PATCHv2 1/6] shared/gatt: Define atribute permissions as uint32_t Marcin Kraglak
2014-05-26 9:10 ` [PATCHv2 2/6] shared/gatt: Add helper for getting attribute's permissions Marcin Kraglak
2014-05-26 9:10 ` [PATCHv2 3/6] android/hal-gatt: Define attribute permissions values Marcin Kraglak
@ 2014-05-26 9:10 ` Marcin Kraglak
2014-05-26 9:10 ` [PATCHv2 5/6] android/gatt: Add proper permissions to built-in services Marcin Kraglak
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Marcin Kraglak @ 2014-05-26 9:10 UTC (permalink / raw)
To: linux-bluetooth
Convert Android HAL permissions to GATT server permissions and store
them in database.
---
android/gatt.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 51 insertions(+), 4 deletions(-)
diff --git a/android/gatt.c b/android/gatt.c
index 70cd5fe..bfcbb62 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -57,6 +57,17 @@
#define BASE_UUID16_OFFSET 12
+#define GATT_PERM_READ 0x00000001
+#define GATT_PERM_READ_ENCRYPTED 0x00000002
+#define GATT_PERM_READ_MITM 0x00000004
+#define GATT_PERM_READ_AUTHORIZATION 0x00000008
+#define GATT_PERM_WRITE 0x00000100
+#define GATT_PERM_WRITE_ENCRYPTED 0x00000200
+#define GATT_PERM_WRITE_MITM 0x00000400
+#define GATT_PERM_WRITE_AUTHORIZATION 0x00000800
+#define GATT_PERM_WRITE_SIGNED 0x00010000
+#define GATT_PERM_WRITE_SIGNED_MITM 0x00020000
+
static const uint8_t BLUETOOTH_UUID[] = {
0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -4013,6 +4024,40 @@ failed:
bdaddr);
}
+static uint32_t android_to_gatt_permissions(int32_t hal_permissions)
+{
+ uint32_t permissions = 0;
+
+ if (hal_permissions & HAL_GATT_PERMISSION_READ)
+ permissions |= GATT_PERM_READ;
+
+ if (hal_permissions & HAL_GATT_PERMISSION_READ_ENCRYPTED)
+ permissions |= GATT_PERM_READ_ENCRYPTED | GATT_PERM_READ;
+
+ if (hal_permissions & HAL_GATT_PERMISSION_READ_ENCRYPTED_MITM)
+ permissions |= GATT_PERM_READ_MITM | GATT_PERM_READ_ENCRYPTED |
+ GATT_PERM_READ;
+
+ if (hal_permissions & HAL_GATT_PERMISSION_WRITE)
+ permissions |= GATT_PERM_WRITE;
+
+ if (hal_permissions & HAL_GATT_PERMISSION_WRITE_ENCRYPTED)
+ permissions |= GATT_PERM_WRITE_ENCRYPTED | GATT_PERM_WRITE;
+
+ if (hal_permissions & HAL_GATT_PERMISSION_WRITE_ENCRYPTED_MITM)
+ permissions |= GATT_PERM_WRITE_MITM |
+ GATT_PERM_WRITE_ENCRYPTED | GATT_PERM_WRITE;
+
+ if (hal_permissions & HAL_GATT_PERMISSION_WRITE_SIGNED)
+ permissions |= GATT_PERM_WRITE_SIGNED;
+
+ if (hal_permissions & HAL_GATT_PERMISSION_WRITE_SIGNED_MITM)
+ permissions |= GATT_PERM_WRITE_SIGNED_MITM |
+ GATT_PERM_WRITE_SIGNED;
+
+ return permissions;
+}
+
static void handle_server_add_characteristic(const void *buf, uint16_t len)
{
const struct hal_cmd_gatt_server_add_characteristic *cmd = buf;
@@ -4020,6 +4065,7 @@ static void handle_server_add_characteristic(const void *buf, uint16_t len)
struct gatt_app *server;
bt_uuid_t uuid;
uint8_t status;
+ uint32_t permissions;
int32_t app_id = cmd->server_if;
DBG("");
@@ -4033,11 +4079,11 @@ static void handle_server_add_characteristic(const void *buf, uint16_t len)
}
android2uuid(cmd->uuid, &uuid);
+ permissions = android_to_gatt_permissions(cmd->permissions);
- /*FIXME: Handle properties. Register callback if needed. */
ev.char_handle = gatt_db_add_characteristic(gatt_db,
cmd->service_handle,
- &uuid, cmd->permissions,
+ &uuid, permissions,
cmd->properties,
read_cb, write_cb,
INT_TO_PTR(app_id));
@@ -4067,6 +4113,7 @@ static void handle_server_add_descriptor(const void *buf, uint16_t len)
struct gatt_app *server;
bt_uuid_t uuid;
uint8_t status;
+ uint32_t permissions;
int32_t app_id = cmd->server_if;
DBG("");
@@ -4080,11 +4127,11 @@ static void handle_server_add_descriptor(const void *buf, uint16_t len)
}
android2uuid(cmd->uuid, &uuid);
+ permissions = android_to_gatt_permissions(cmd->permissions);
- /*FIXME: Handle properties. Register callback if needed. */
ev.descr_handle = gatt_db_add_char_descriptor(gatt_db,
cmd->service_handle,
- &uuid, cmd->permissions,
+ &uuid, permissions,
read_cb, write_cb,
INT_TO_PTR(app_id));
if (!ev.descr_handle)
--
1.9.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCHv2 5/6] android/gatt: Add proper permissions to built-in services
2014-05-26 9:10 [PATCHv2 1/6] shared/gatt: Define atribute permissions as uint32_t Marcin Kraglak
` (2 preceding siblings ...)
2014-05-26 9:10 ` [PATCHv2 4/6] android/gatt: Store proper attributes permissions in database Marcin Kraglak
@ 2014-05-26 9:10 ` Marcin Kraglak
2014-05-26 9:10 ` [PATCHv2 6/6] android/gatt: Check permissions before read execution Marcin Kraglak
2014-05-26 12:19 ` [PATCHv2 1/6] shared/gatt: Define atribute permissions as uint32_t Szymon Janc
5 siblings, 0 replies; 7+ messages in thread
From: Marcin Kraglak @ 2014-05-26 9:10 UTC (permalink / raw)
To: linux-bluetooth
Set permissions to built in services.
---
android/gatt.c | 27 ++++++++++++++-------------
1 file changed, 14 insertions(+), 13 deletions(-)
diff --git a/android/gatt.c b/android/gatt.c
index bfcbb62..cde8816 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -5078,7 +5078,7 @@ static void register_gap_service(void)
bt_uuid16_create(&uuid, GATT_CHARAC_DEVICE_NAME);
gap_srvc_data.dev_name =
gatt_db_add_characteristic(gatt_db, gap_srvc_data.srvc,
- &uuid, 0,
+ &uuid, GATT_PERM_READ,
GATT_CHR_PROP_READ,
gap_read_cb, NULL,
NULL);
@@ -5087,7 +5087,7 @@ static void register_gap_service(void)
bt_uuid16_create(&uuid, GATT_CHARAC_APPEARANCE);
gap_srvc_data.appear =
gatt_db_add_characteristic(gatt_db, gap_srvc_data.srvc,
- &uuid, 0,
+ &uuid, GATT_PERM_READ,
GATT_CHR_PROP_READ,
gap_read_cb, NULL,
NULL);
@@ -5096,7 +5096,7 @@ static void register_gap_service(void)
bt_uuid16_create(&uuid, GATT_CHARAC_PERIPHERAL_PRIV_FLAG);
gap_srvc_data.priv =
gatt_db_add_characteristic(gatt_db, gap_srvc_data.srvc,
- &uuid, 0,
+ &uuid, GATT_PERM_READ,
GATT_CHR_PROP_READ,
gap_read_cb, NULL,
NULL);
@@ -5169,43 +5169,43 @@ static void register_device_info_service(void)
/* User data are not const hence (void *) cast is used */
bt_uuid16_create(&uuid, GATT_CHARAC_SYSTEM_ID);
- gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, 0,
+ gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, GATT_PERM_READ,
GATT_CHR_PROP_READ,
device_info_read_cb, NULL,
(void *) device_info.system_id);
bt_uuid16_create(&uuid, GATT_CHARAC_MODEL_NUMBER_STRING);
- gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, 0,
+ gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, GATT_PERM_READ,
GATT_CHR_PROP_READ,
device_info_read_cb, NULL,
(void *) device_info.model_number);
bt_uuid16_create(&uuid, GATT_CHARAC_SERIAL_NUMBER_STRING);
- gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, 0,
+ gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, GATT_PERM_READ,
GATT_CHR_PROP_READ,
device_info_read_cb, NULL,
(void *) device_info.serial_number);
bt_uuid16_create(&uuid, GATT_CHARAC_FIRMWARE_REVISION_STRING);
- gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, 0,
+ gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, GATT_PERM_READ,
GATT_CHR_PROP_READ,
device_info_read_cb, NULL,
(void *) device_info.firmware_rev);
bt_uuid16_create(&uuid, GATT_CHARAC_HARDWARE_REVISION_STRING);
- gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, 0,
+ gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, GATT_PERM_READ,
GATT_CHR_PROP_READ,
device_info_read_cb, NULL,
(void *) device_info.hardware_rev);
bt_uuid16_create(&uuid, GATT_CHARAC_SOFTWARE_REVISION_STRING);
- gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, 0,
+ gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, GATT_PERM_READ,
GATT_CHR_PROP_READ,
device_info_read_cb, NULL,
(void *) device_info.software_rev);
bt_uuid16_create(&uuid, GATT_CHARAC_MANUFACTURER_NAME_STRING);
- gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, 0,
+ gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, GATT_PERM_READ,
GATT_CHR_PROP_READ,
device_info_read_cb, NULL,
(void *) device_info.manufacturer_name);
@@ -5250,13 +5250,14 @@ static void register_gatt_service(void)
srvc_handle = gatt_db_add_service(gatt_db, &uuid, true, 4);
bt_uuid16_create(&uuid, GATT_CHARAC_SERVICE_CHANGED);
- gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, 0,
+ gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, GATT_PERM_READ,
GATT_CHR_PROP_INDICATE, NULL, NULL,
NULL);
bt_uuid16_create(&uuid, GATT_CLIENT_CHARAC_CFG_UUID);
- gatt_db_add_char_descriptor(gatt_db, srvc_handle, &uuid, 0, NULL,
- gatt_srvc_change_register_cb, NULL);
+ gatt_db_add_char_descriptor(gatt_db, srvc_handle, &uuid, GATT_PERM_READ,
+ NULL, gatt_srvc_change_register_cb,
+ NULL);
gatt_db_service_set_active(gatt_db, srvc_handle, true);
}
--
1.9.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCHv2 1/6] shared/gatt: Define atribute permissions as uint32_t
2014-05-26 9:10 [PATCHv2 1/6] shared/gatt: Define atribute permissions as uint32_t Marcin Kraglak
` (4 preceding siblings ...)
2014-05-26 9:10 ` [PATCHv2 6/6] android/gatt: Check permissions before read execution Marcin Kraglak
@ 2014-05-26 12:19 ` Szymon Janc
5 siblings, 0 replies; 7+ messages in thread
From: Szymon Janc @ 2014-05-26 12:19 UTC (permalink / raw)
To: Marcin Kraglak; +Cc: linux-bluetooth
Hi Marcin,
On Monday 26 of May 2014 11:10:24 Marcin Kraglak wrote:
> ---
> src/shared/gatt-db.c | 6 +++---
> src/shared/gatt-db.h | 4 ++--
> 2 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/src/shared/gatt-db.c b/src/shared/gatt-db.c
> index 36316af..90c09bb 100644
> --- a/src/shared/gatt-db.c
> +++ b/src/shared/gatt-db.c
> @@ -48,7 +48,7 @@ struct gatt_db {
> struct gatt_db_attribute {
> uint16_t handle;
> bt_uuid_t uuid;
> - uint8_t permissions;
> + uint32_t permissions;
> uint16_t value_len;
> uint8_t *value;
>
> @@ -269,7 +269,7 @@ static void set_attribute_data(struct gatt_db_attribute *attribute,
>
> uint16_t gatt_db_add_characteristic(struct gatt_db *db, uint16_t handle,
> const bt_uuid_t *uuid,
> - uint8_t permissions,
> + uint32_t permissions,
> uint8_t properties,
> gatt_db_read_t read_func,
> gatt_db_write_t write_func,
> @@ -317,7 +317,7 @@ uint16_t gatt_db_add_characteristic(struct gatt_db *db, uint16_t handle,
>
> uint16_t gatt_db_add_char_descriptor(struct gatt_db *db, uint16_t handle,
> const bt_uuid_t *uuid,
> - uint8_t permissions,
> + uint32_t permissions,
> gatt_db_read_t read_func,
> gatt_db_write_t write_func,
> void *user_data)
> diff --git a/src/shared/gatt-db.h b/src/shared/gatt-db.h
> index 3d46730..350e34e 100644
> --- a/src/shared/gatt-db.h
> +++ b/src/shared/gatt-db.h
> @@ -41,7 +41,7 @@ typedef void (*gatt_db_write_t) (uint16_t handle, uint16_t offset,
>
> uint16_t gatt_db_add_characteristic(struct gatt_db *db, uint16_t handle,
> const bt_uuid_t *uuid,
> - uint8_t permissions,
> + uint32_t permissions,
> uint8_t properties,
> gatt_db_read_t read_func,
> gatt_db_write_t write_func,
> @@ -49,7 +49,7 @@ uint16_t gatt_db_add_characteristic(struct gatt_db *db, uint16_t handle,
>
> uint16_t gatt_db_add_char_descriptor(struct gatt_db *db, uint16_t handle,
> const bt_uuid_t *uuid,
> - uint8_t permissions,
> + uint32_t permissions,
> gatt_db_read_t read_func,
> gatt_db_write_t write_func,
> void *user_data);
>
All patches applied (with some cleanups in the last one), thanks.
--
Best regards,
Szymon Janc
^ permalink raw reply [flat|nested] 7+ messages in thread