diff options
author | Frédéric Danis <frederic.danis@collabora.com> | 2024-03-04 16:58:38 +0100 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2024-03-04 15:52:09 -0500 |
commit | 71f0a1e88d9a55d5b4a0db007ab15e5dcb525a4c (patch) | |
tree | 63f648d3eb6702c35a313983862847e196cbfa1c | |
parent | d5a9195a6269e703c6e3a47c40982ec94d8cc838 (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.c | 13 |
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; } |