From 82816688c006661f53c87c15edd2a8cf27737c13 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Mon, 19 Sep 2016 17:43:32 +0300 Subject: [PATCH] core/gatt: Remove CCC state if no longer active If the device object cannot be found or the device is not connected and is not paired remove the CCC state as it is no longer valid. --- src/gatt-database.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/gatt-database.c b/src/gatt-database.c index 126e1b3d4..0877b25c0 100644 --- a/src/gatt-database.c +++ b/src/gatt-database.c @@ -879,6 +879,7 @@ static void send_notification_to_device(void *data, void *user_data) struct notify *notify = user_data; struct ccc_state *ccc; struct btd_device *device; + struct bt_gatt_server *server; ccc = find_ccc_state(device_state, notify->ccc_handle); if (!ccc) @@ -891,7 +892,14 @@ static void send_notification_to_device(void *data, void *user_data) &device_state->bdaddr, device_state->bdaddr_type); if (!device) + goto remove; + + server = btd_device_get_gatt_server(device); + if (!server) { + if (!device_is_paired(device, device_state->bdaddr_type)) + goto remove; return; + } /* * TODO: If the device is not connected but bonded, send the @@ -899,19 +907,23 @@ static void send_notification_to_device(void *data, void *user_data) */ if (!notify->indicate) { DBG("GATT server sending notification"); - bt_gatt_server_send_notification( - btd_device_get_gatt_server(device), + bt_gatt_server_send_notification(server, notify->handle, notify->value, notify->len); return; } DBG("GATT server sending indication"); - bt_gatt_server_send_indication(btd_device_get_gatt_server(device), - notify->handle, - notify->value, + bt_gatt_server_send_indication(server, notify->handle, notify->value, notify->len, conf_cb, NULL, NULL); + + return; + +remove: + /* Remove device state if device no longer exists or is not paired */ + if (queue_remove(notify->database->device_states, device_state)) + device_state_free(device_state); } static void send_notification_to_devices(struct btd_gatt_database *database, -- 2.47.3