From 6f6a80a278b59be98806f736c31ee570d44043c0 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Tue, 24 May 2022 17:49:57 -0700 Subject: [PATCH] monitor/att: Attempt to reload if database is empty If database is empty attempt to reload since the daemon may have updated its cache in the meantime. Signed-off-by: Manika Shrivastava Signed-off-by: Ayush Garg --- monitor/att.c | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/monitor/att.c b/monitor/att.c index c7e1d79..ed50734 100644 --- a/monitor/att.c +++ b/monitor/att.c @@ -426,32 +426,39 @@ static void att_conn_data_free(void *data) static void load_gatt_db(struct packet_conn_data *conn) { - struct att_conn_data *data; + struct att_conn_data *data = conn->data; char filename[PATH_MAX]; bdaddr_t src; char local[18]; char peer[18]; - if (hci_devba(conn->index, &src) < 0) + if (!data) { + data = new0(struct att_conn_data, 1); + data->rdb = gatt_db_new(); + data->ldb = gatt_db_new(); + conn->data = data; + conn->destroy = att_conn_data_free; + } + + if (!gatt_db_isempty(data->ldb) && !gatt_db_isempty(data->rdb)) return; - data = new0(struct att_conn_data, 1); - data->rdb = gatt_db_new(); - data->ldb = gatt_db_new(); - conn->data = data; - conn->destroy = att_conn_data_free; + if (hci_devba(conn->index, &src) < 0) + return; ba2str(&src, local); - - create_filename(filename, PATH_MAX, "/%s/attributes", local); - - btd_settings_gatt_db_load(data->ldb, filename); - ba2str((bdaddr_t *)conn->dst, peer); - create_filename(filename, PATH_MAX, "/%s/cache/%s", local, peer); + if (gatt_db_isempty(data->ldb)) { + create_filename(filename, PATH_MAX, "/%s/attributes", local); + btd_settings_gatt_db_load(data->ldb, filename); + } - btd_settings_gatt_db_load(data->rdb, filename); + if (gatt_db_isempty(data->rdb)) { + create_filename(filename, PATH_MAX, "/%s/cache/%s", local, + peer); + btd_settings_gatt_db_load(data->rdb, filename); + } } static struct gatt_db_attribute *get_attribute(const struct l2cap_frame *frame, @@ -465,14 +472,12 @@ static struct gatt_db_attribute *get_attribute(const struct l2cap_frame *frame, if (!conn) return NULL; - data = conn->data; /* Try loading local and remote gatt_db if not loaded yet */ - if (!data) { - load_gatt_db(conn); - data = conn->data; - if (!data) - return NULL; - } + load_gatt_db(conn); + + data = conn->data; + if (!data) + return NULL; if (frame->in) { if (rsp) -- 2.7.4