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
uint8_t bdaddr_type;
};
+static struct queue *dbs = NULL;
+
static void ccc_cb_free(void *data)
{
struct ccc_cb_data *ccc_cb = data;
if (!database->db_id)
goto fail;
+ if (!dbs)
+ dbs = queue_new();
+
+ queue_push_tail(dbs, database);
+
return database;
fail:
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
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,