aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorFrédéric Danis <frederic.danis@collabora.com>2024-03-04 16:58:38 +0100
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2024-03-04 15:52:09 -0500
commit71f0a1e88d9a55d5b4a0db007ab15e5dcb525a4c (patch)
tree63f648d3eb6702c35a313983862847e196cbfa1c
parentd5a9195a6269e703c6e3a47c40982ec94d8cc838 (diff)
gatt-server: Add support for signed write command
GAP/SEC/CSIGN/BV-02-C request the ability to check that signed write has been performed successfully.
-rw-r--r--src/shared/gatt-server.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/shared/gatt-server.c b/src/shared/gatt-server.c
index c7ce3ec1f8..0e399ceb19 100644
--- a/src/shared/gatt-server.c
+++ b/src/shared/gatt-server.c
@@ -106,6 +106,7 @@ struct bt_gatt_server {
unsigned int read_multiple_vl_id;
unsigned int prep_write_id;
unsigned int exec_write_id;
+ unsigned int signed_write_cmd_id;
uint8_t min_enc_size;
@@ -155,6 +156,7 @@ static void bt_gatt_server_free(struct bt_gatt_server *server)
bt_att_unregister(server->att, server->read_multiple_vl_id);
bt_att_unregister(server->att, server->prep_write_id);
bt_att_unregister(server->att, server->exec_write_id);
+ bt_att_unregister(server->att, server->signed_write_cmd_id);
queue_destroy(server->prep_queue, prep_write_data_destroy);
@@ -777,7 +779,8 @@ static void write_complete_cb(struct gatt_db_attribute *attr, int err,
struct bt_gatt_server *server = op->server;
uint16_t handle;
- if (op->opcode == BT_ATT_OP_WRITE_CMD) {
+ if (op->opcode == BT_ATT_OP_WRITE_CMD ||
+ op->opcode == BT_ATT_OP_SIGNED_WRITE_CMD) {
async_write_op_destroy(op);
return;
}
@@ -1628,6 +1631,14 @@ static bool gatt_server_register_att_handlers(struct bt_gatt_server *server)
if (!server->exec_write_id)
return NULL;
+ /* Signed Write Command */
+ server->signed_write_cmd_id = bt_att_register(server->att,
+ BT_ATT_OP_SIGNED_WRITE_CMD,
+ write_cb,
+ server, NULL);
+ if (!server->signed_write_cmd_id)
+ return false;
+
return true;
}