[PATCH 3/4] sdp: Make sdp_record_add to be handled by adapter
From: Grzegorz Kolodziejczyk <hidden>
Date: 2013-08-29 09:56:46
Subsystem:
the rest · Maintainer:
Linus Torvalds
Make sdp_record_add to be called from adapter. First write services to sdp db then to adapter db without revokes to adapter. Change-Id: I65d638096c91aadacc3cb5ef7a8a9181fa4dae6e --- profiles/audio/a2dp.c | 2 +- profiles/audio/avrcp.c | 4 ++-- profiles/health/hdp_util.c | 2 +- profiles/network/server.c | 2 +- profiles/sap/server.c | 2 +- src/adapter.c | 28 ++++++++++++++++++++++++++++ src/adapter.h | 3 +++ src/attrib-server.c | 2 +- src/profile.c | 7 +++---- src/sdpd-database.c | 10 ---------- 10 files changed, 41 insertions(+), 21 deletions(-)
diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
index 3f3cc1b..4b8d4f3 100644
--- a/profiles/audio/a2dp.c
+++ b/profiles/audio/a2dp.c@@ -1298,7 +1298,7 @@ struct a2dp_sep *a2dp_add_sep(struct btd_adapter *adapter, uint8_t type, return NULL; } - if (add_record_to_server(adapter_get_address(server->adapter), + if (adapter_add_record_to_server_adapter(server->adapter, record) < 0) { error("Unable to register A2DP service record"); sdp_record_free(record);
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index 9f164e4..d64f228 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c@@ -3829,7 +3829,7 @@ done: return -1; } - if (add_record_to_server(adapter_get_address(adapter), record) < 0) { + if (adapter_add_record_to_server_adapter(adapter, record) < 0) { error("Unable to register AVRCP target service record"); avrcp_target_server_remove(p, adapter); sdp_record_free(record);
@@ -3912,7 +3912,7 @@ done: return -1; } - if (add_record_to_server(adapter_get_address(adapter), record) < 0) { + if (adapter_add_record_to_server_adapter(adapter, record) < 0) { error("Unable to register AVRCP service record"); avrcp_controller_server_remove(p, adapter); sdp_record_free(record);
diff --git a/profiles/health/hdp_util.c b/profiles/health/hdp_util.c
index b53f1db..7692ca2 100644
--- a/profiles/health/hdp_util.c
+++ b/profiles/health/hdp_util.c@@ -733,7 +733,7 @@ gboolean hdp_update_sdp_record(struct hdp_adapter *adapter, GSList *app_list) if (sdp_set_record_state(sdp_record, adapter->record_state++) < 0) goto fail; - if (add_record_to_server(adapter_get_address(adapter->btd_adapter), + if (adapter_add_record_to_server_adapter(adapter->btd_adapter, sdp_record) < 0) goto fail; adapter->sdp_handler = sdp_record->handle;
diff --git a/profiles/network/server.c b/profiles/network/server.c
index de48bec..d321998 100644
--- a/profiles/network/server.c
+++ b/profiles/network/server.c@@ -587,7 +587,7 @@ static uint32_t register_server_record(struct network_server *ns) return 0; } - if (add_record_to_server(&ns->src, record) < 0) { + if (adapter_add_record_to_server_bdaddr(&ns->src, record) < 0) { error("Failed to register service record"); sdp_record_free(record); return 0;
diff --git a/profiles/sap/server.c b/profiles/sap/server.c
index dfcf0f1..d1e2581 100644
--- a/profiles/sap/server.c
+++ b/profiles/sap/server.c@@ -1358,7 +1358,7 @@ int sap_server_register(const char *path, const bdaddr_t *src) goto sdp_err; } - if (add_record_to_server(src, record) < 0) { + if (adapter_add_record_to_server_bdaddr(src, record) < 0) { error("Adding SAP SDP record to the SDP server failed."); sdp_record_free(record); goto sdp_err;
diff --git a/src/adapter.c b/src/adapter.c
index ba7be8a..6478ca7 100644
--- a/src/adapter.c
+++ b/src/adapter.c@@ -6308,6 +6308,34 @@ void adapter_start_sdp_server(uint16_t sdp_mtu, uint32_t sdp_flags) adapter_foreach(adapter_service_insert, services->data); } +int adapter_add_record_to_server_adapter(struct btd_adapter *adapter, sdp_record_t *rec) +{ + return adapter_add_record_to_server_bdaddr(adapter_get_address(adapter), rec); +} + +int adapter_add_record_to_server_bdaddr(const bdaddr_t *device, sdp_record_t *rec) +{ + int error; + struct btd_adapter *adapter; + + error = add_record_to_server(device, rec); + + /* Check if add_record_to server error occurs */ + if (!error) { + /* Add rec for each adapter */ + if (bacmp(device, BDADDR_ANY) == 0) { + adapter_foreach(adapter_service_insert, rec); + return error; + } + /* Add rec for single adapter */ + adapter = adapter_find(device); + if (adapter) + adapter_service_insert(adapter, rec); + } + + return error; +} + void adapter_sdp_init_services_list(bdaddr_t *device) { sdp_list_t *p;
diff --git a/src/adapter.h b/src/adapter.h
index bd54372..8a5fc73 100644
--- a/src/adapter.h
+++ b/src/adapter.h@@ -214,4 +214,7 @@ gboolean btd_adapter_check_oob_handler(struct btd_adapter *adapter); void btd_adapter_for_each_device(struct btd_adapter *adapter, void (*cb)(struct btd_device *device, void *data), void *data); + +int adapter_add_record_to_server_adapter(struct btd_adapter *adapter, sdp_record_t *rec); +int adapter_add_record_to_server_bdaddr(const bdaddr_t *device, sdp_record_t *rec); void adapter_sdp_init_services_list(bdaddr_t *device);
diff --git a/src/attrib-server.c b/src/attrib-server.c
index 3f629b0..19b878d 100644
--- a/src/attrib-server.c
+++ b/src/attrib-server.c@@ -326,7 +326,7 @@ static uint32_t attrib_create_sdp_new(struct gatt_server *server, "http://www.bluez.org/"); } - if (add_record_to_server(adapter_get_address(server->adapter), record) + if (adapter_add_record_to_server_adapter(server->adapter, record) == 0) return record->handle;
diff --git a/src/profile.c b/src/profile.c
index 90c3535..9a1687d 100644
--- a/src/profile.c
+++ b/src/profile.c@@ -1197,7 +1197,7 @@ static void ext_direct_connect(GIOChannel *io, GError *err, gpointer user_data) static uint32_t ext_register_record(struct ext_profile *ext, struct ext_io *l2cap, struct ext_io *rfcomm, - const bdaddr_t *src) + struct btd_adapter *adapter) { sdp_record_t *rec; char *dyn_record = NULL;
@@ -1220,7 +1220,7 @@ static uint32_t ext_register_record(struct ext_profile *ext, return 0; } - if (add_record_to_server(src, rec) < 0) { + if (adapter_add_record_to_server_adapter(adapter, rec) < 0) { error("Failed to register service record"); sdp_record_free(rec); return 0;
@@ -1322,8 +1322,7 @@ static uint32_t ext_start_servers(struct ext_profile *ext, } } - return ext_register_record(ext, l2cap, rfcomm, - adapter_get_address(adapter)); + return ext_register_record(ext, l2cap, rfcomm, adapter); failed: if (l2cap) {
diff --git a/src/sdpd-database.c b/src/sdpd-database.c
index 7228cd7..335ea0e 100644
--- a/src/sdpd-database.c
+++ b/src/sdpd-database.c@@ -168,7 +168,6 @@ 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);
@@ -184,15 +183,6 @@ void sdp_record_add(const bdaddr_t *device, sdp_record_t *rec) dev->handle = rec->handle; access_db = sdp_list_insert_sorted(access_db, dev, access_sort); - - if (bacmp(device, BDADDR_ANY) == 0) { - adapter_foreach(adapter_service_insert, rec); - return; - } - - adapter = adapter_find(device); - if (adapter) - adapter_service_insert(adapter, rec); } static sdp_list_t *record_locate(uint32_t handle)
--
1.7.9.5