diff options
author | Johan Hedberg <johan.hedberg@nokia.com> | 2010-12-19 13:25:51 +0200 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@nokia.com> | 2010-12-19 13:25:51 +0200 |
commit | 4efb97bdae52e601dfcf1627e39d1e652457c53c (patch) | |
tree | 5c1b2172817b8405dc8ec2931c562295b830855c /src/sdpd-database.c | |
parent | 2eb9e5052780e8d06a90197068d189cab121efb3 (diff) | |
download | bluez-4efb97bdae52e601dfcf1627e39d1e652457c53c.tar.gz |
Add manager_foreach_adapter()
Ultimately manager_get_adapters shouldn't be needed at all. By
introducing manager_foreach_adapter most instances can be removed.
Diffstat (limited to 'src/sdpd-database.c')
-rw-r--r-- | src/sdpd-database.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/src/sdpd-database.c b/src/sdpd-database.c index a75b1a8a8..08f542ff9 100644 --- a/src/sdpd-database.c +++ b/src/sdpd-database.c @@ -41,6 +41,7 @@ #include "sdpd.h" #include "log.h" #include "adapter.h" +#include "manager.h" static sdp_list_t *service_db; static sdp_list_t *access_db; @@ -169,6 +170,7 @@ void sdp_svcdb_set_collectable(sdp_record_t *record, int sock) */ void sdp_record_add(const bdaddr_t *device, sdp_record_t *rec) { + struct btd_adapter *adapter; sdp_access_t *dev; SDPDBG("Adding rec : 0x%lx", (long) rec); @@ -185,7 +187,14 @@ void sdp_record_add(const bdaddr_t *device, sdp_record_t *rec) access_db = sdp_list_insert_sorted(access_db, dev, access_sort); - adapter_service_insert(device, rec); + if (bacmp(device, BDADDR_ANY) == 0) { + manager_foreach_adapter(adapter_service_insert, rec); + return; + } + + adapter = manager_find_adapter(device); + if (adapter) + adapter_service_insert(adapter, rec); } static sdp_list_t *record_locate(uint32_t handle) @@ -252,14 +261,20 @@ int sdp_record_remove(uint32_t handle) service_db = sdp_list_remove(service_db, r); p = access_locate(handle); - if (p) { - a = p->data; - if (a) { - adapter_service_remove(&a->device, r); - access_db = sdp_list_remove(access_db, a); - access_free(a); - } - } + if (p == NULL || p->data == NULL) + return 0; + + a = p->data; + + if (bacmp(&a->device, BDADDR_ANY) != 0) { + struct btd_adapter *adapter = manager_find_adapter(&a->device); + if (adapter) + adapter_service_remove(adapter, r); + } else + manager_foreach_adapter(adapter_service_remove, r); + + access_db = sdp_list_remove(access_db, a); + access_free(a); return 0; } @@ -326,6 +341,6 @@ void sdp_init_services_list(bdaddr_t *device) SDPDBG("adding record with handle %x", access->handle); - adapter_service_insert(device, rec); + manager_foreach_adapter(adapter_service_insert, rec); } } |