Diff between 1452790f1489db4f9fb1363dbe8b6fdf3b4d5e6b and bde3c34fd7ef72ebdacd4b5489fd72cf493a4084

Changed Files

File Additions Deletions Status
src/gatt-database.c +35 -0 modified
src/gatt-database.h +4 -0 modified

Full Patch

diff --git a/src/gatt-database.c b/src/gatt-database.c
index eea3f60..ff5fa3b 100644
--- a/src/gatt-database.c
+++ b/src/gatt-database.c
@@ -209,6 +209,8 @@ struct device_info {
 	uint8_t bdaddr_type;
 };
 
+static struct queue *dbs = NULL;
+
 static void ccc_cb_free(void *data)
 {
 	struct ccc_cb_data *ccc_cb = data;
@@ -4123,6 +4125,11 @@ bredr:
 	if (!database->db_id)
 		goto fail;
 
+	if (!dbs)
+		dbs = queue_new();
+
+	queue_push_tail(dbs, database);
+
 	return database;
 
 fail:
@@ -4143,6 +4150,34 @@ void btd_gatt_database_destroy(struct btd_gatt_database *database)
 	gatt_database_free(database);
 }
 
+static bool match_db(const void *data, const void *user_data)
+{
+	const struct btd_gatt_database *database = data;
+	const struct gatt_db *db = user_data;
+
+	return database->db == db;
+}
+
+struct btd_gatt_database *btd_gatt_database_get(struct gatt_db *db)
+{
+	struct btd_gatt_database *database;
+
+	database = queue_find(dbs, match_db, db);
+	if (!database)
+		return NULL;
+
+	return database;
+}
+
+struct btd_adapter *
+btd_gatt_database_get_adapter(struct btd_gatt_database *database)
+{
+	if (!database)
+		return NULL;
+
+	return database->adapter;
+}
+
 struct gatt_db *btd_gatt_database_get_db(struct btd_gatt_database *database)
 {
 	if (!database)
diff --git a/src/gatt-database.h b/src/gatt-database.h
index 30ae68e..998e3c4 100644
--- a/src/gatt-database.h
+++ b/src/gatt-database.h
@@ -13,7 +13,11 @@ struct btd_gatt_database;
 struct btd_gatt_database *btd_gatt_database_new(struct btd_adapter *adapter);
 void btd_gatt_database_destroy(struct btd_gatt_database *database);
 
+struct btd_gatt_database *btd_gatt_database_get(struct gatt_db *db);
 struct gatt_db *btd_gatt_database_get_db(struct btd_gatt_database *database);
+struct btd_adapter *
+btd_gatt_database_get_adapter(struct btd_gatt_database *database);
+
 void btd_gatt_database_att_disconnected(struct btd_gatt_database *database,
 						struct btd_device *device);
 void btd_gatt_database_server_connected(struct btd_gatt_database *database,