From 072892bc137504a941a59af5f5c18037e153aaca Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 25 Feb 2015 13:58:10 +0200 Subject: [PATCH] core/device: Set Local/Remote CSRK This set Local/Remote CSRK as keys to bt_att so it can use for signed writes. --- src/device.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/device.c b/src/device.c index f8d2dac2f..68b0d6180 100644 --- a/src/device.c +++ b/src/device.c @@ -4015,6 +4015,30 @@ static void gatt_server_init(struct btd_device *device, struct gatt_db *db) error("Failed to initialize bt_gatt_server"); } +static bool local_counter(uint32_t *sign_cnt, void *user_data) +{ + struct btd_device *dev = user_data; + + if (!dev->local_csrk) + return false; + + *sign_cnt = dev->local_csrk->counter++; + + return true; +} + +static bool remote_counter(uint32_t *sign_cnt, void *user_data) +{ + struct btd_device *dev = user_data; + + if (!dev->remote_csrk || *sign_cnt < dev->remote_csrk->counter) + return false; + + dev->remote_csrk->counter = *sign_cnt; + + return true; +} + bool device_attach_att(struct btd_device *dev, GIOChannel *io) { GError *gerr = NULL; @@ -4064,6 +4088,14 @@ bool device_attach_att(struct btd_device *dev, GIOChannel *io) att_disconnected_cb, dev, NULL); bt_att_set_close_on_unref(dev->att, true); + if (dev->local_csrk) + bt_att_set_local_key(dev->att, dev->local_csrk->key, + local_counter, dev); + + if (dev->remote_csrk) + bt_att_set_remote_key(dev->att, dev->remote_csrk->key, + remote_counter, dev); + database = btd_adapter_get_database(dev->adapter); gatt_client_init(dev); -- 2.47.3