All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] *** Make sdp independent from adapter ***
@ 2013-08-26 13:07 Grzegorz Kolodziejczyk
  2013-08-26 13:07 ` [PATCH 1/4] sdp: Move sdp server init to adapter Grzegorz Kolodziejczyk
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Grzegorz Kolodziejczyk @ 2013-08-26 13:07 UTC (permalink / raw)
  To: linux-bluetooth

Solutions to consider:
- Access db has been expanded via sdp_get_access_list
- sdp_access_t moved to sdpd.h

Grzegorz Kolodziejczyk (4):
  sdp: Move sdp server init to adapter
  sdp: Move spd_init_services_list to adapter
  sdp: Make sdp_record_add to be handled by adapter
  sdp: Make sdp_record_remove to be handled by adapter

 profiles/audio/a2dp.c      |   10 ++--
 profiles/audio/avrcp.c     |    8 ++--
 profiles/health/hdp.c      |    2 +-
 profiles/health/hdp_util.c |    4 +-
 profiles/network/server.c  |    6 +--
 profiles/sap/server.c      |    4 +-
 src/adapter.c              |  109 +++++++++++++++++++++++++++++++++++++++++++-
 src/adapter.h              |    6 +++
 src/attrib-server.c        |    8 ++--
 src/main.c                 |    2 +-
 src/profile.c              |    4 +-
 src/sdpd-database.c        |   52 ++++-----------------
 src/sdpd.h                 |    8 +++-
 13 files changed, 152 insertions(+), 71 deletions(-)

-- 
1.7.9.5


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/4] sdp: Move sdp server init to adapter
  2013-08-26 13:07 [PATCH 0/4] *** Make sdp independent from adapter *** Grzegorz Kolodziejczyk
@ 2013-08-26 13:07 ` Grzegorz Kolodziejczyk
  2013-08-28 10:01   ` Frederic Danis
  2013-08-26 13:07 ` [PATCH 2/4] sdp: Move spd_init_services_list " Grzegorz Kolodziejczyk
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Grzegorz Kolodziejczyk @ 2013-08-26 13:07 UTC (permalink / raw)
  To: linux-bluetooth

Change-Id: Ie8440d59a00750f3d8aec49924d6b209bc6ebe2f
---
 src/adapter.c |   11 +++++++++++
 src/adapter.h |    1 +
 src/main.c    |    2 +-
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/adapter.c b/src/adapter.c
index 17f5508..723e3a8 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -6295,3 +6295,14 @@ void adapter_shutdown(void)
 	if (!adapter_remaining)
 		btd_exit();
 }
+
+void adapter_start_sdp_server(uint16_t sdp_mtu, uint32_t sdp_flags) {
+	sdp_list_t *services;
+
+	info("Start sdp server");
+	start_sdp_server(sdp_mtu, sdp_flags);
+
+	services = sdp_get_record_list();
+	for (; services; services = services->next)
+		adapter_foreach(adapter_service_insert, services->data);
+}
diff --git a/src/adapter.h b/src/adapter.h
index 32b12c0..a60a29f 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -79,6 +79,7 @@ struct smp_ltk_info {
 int adapter_init(void);
 void adapter_cleanup(void);
 void adapter_shutdown(void);
+void adapter_start_sdp_server(uint16_t sdp_mtu, uint32_t sdp_flags);
 
 struct btd_adapter *adapter_find(const bdaddr_t *sba);
 struct btd_adapter *adapter_find_by_id(int id);
diff --git a/src/main.c b/src/main.c
index dc0478e..7e68d1e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -548,7 +548,7 @@ int main(int argc, char *argv[])
 	if (option_compat == TRUE)
 		sdp_flags |= SDP_SERVER_COMPAT;
 
-	start_sdp_server(sdp_mtu, sdp_flags);
+	adapter_start_sdp_server(sdp_mtu, sdp_flags);
 
 	/* Loading plugins has to be done after D-Bus has been setup since
 	 * the plugins might wanna expose some paths on the bus. However the
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/4] sdp: Move spd_init_services_list to adapter
  2013-08-26 13:07 [PATCH 0/4] *** Make sdp independent from adapter *** Grzegorz Kolodziejczyk
  2013-08-26 13:07 ` [PATCH 1/4] sdp: Move sdp server init to adapter Grzegorz Kolodziejczyk
@ 2013-08-26 13:07 ` Grzegorz Kolodziejczyk
  2013-08-26 13:07 ` [PATCH 3/4] sdp: Make sdp_record_add to be handled by adapter Grzegorz Kolodziejczyk
  2013-08-26 13:07 ` [PATCH 4/4] sdp: Make sdp_record_remove " Grzegorz Kolodziejczyk
  3 siblings, 0 replies; 9+ messages in thread
From: Grzegorz Kolodziejczyk @ 2013-08-26 13:07 UTC (permalink / raw)
  To: linux-bluetooth

Make sdp_init_services_list to be runned in adapter instead of
sdp-database. sdp_init_service is invoked by adapter_register function.

Change-Id: Iddf5afbe410608ca96df727a7c9bb791e457ca77
---
 src/adapter.c       |   27 ++++++++++++++++++++++++++-
 src/adapter.h       |    2 ++
 src/sdpd-database.c |   31 ++++++++-----------------------
 src/sdpd.h          |    3 +--
 4 files changed, 37 insertions(+), 26 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index 723e3a8..fd20d61 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -5603,7 +5603,7 @@ static int adapter_register(struct btd_adapter *adapter)
 		agent_unref(agent);
 	}
 
-	sdp_init_services_list(&adapter->bdaddr);
+	adapter_sdp_init_services_list(&adapter->bdaddr);
 
 	btd_adapter_gatt_server_start(adapter);
 
@@ -6306,3 +6306,28 @@ void adapter_start_sdp_server(uint16_t sdp_mtu, uint32_t sdp_flags) {
 	for (; services; services = services->next)
 		adapter_foreach(adapter_service_insert, services->data);
 }
+
+void adapter_sdp_init_services_list(bdaddr_t *device)
+{
+	sdp_list_t *p;
+
+	p = sdp_get_access_list();
+
+	DBG("");
+
+	for (; p != NULL; p = p->next) {
+		sdp_access_t *access = p->data;
+		sdp_record_t *rec;
+
+		if (bacmp(BDADDR_ANY, &access->device))
+			continue;
+
+		rec = sdp_record_find(access->handle);
+		if (rec == NULL)
+			continue;
+
+		SDPDBG("adding record with handle %x", access->handle);
+
+		adapter_foreach(adapter_service_insert, rec);
+	}
+}
diff --git a/src/adapter.h b/src/adapter.h
index a60a29f..ad01710 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -214,3 +214,5 @@ 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);
+
+void adapter_sdp_init_services_list(bdaddr_t *device);
diff --git a/src/sdpd-database.c b/src/sdpd-database.c
index cf33f19..7228cd7 100644
--- a/src/sdpd-database.c
+++ b/src/sdpd-database.c
@@ -285,6 +285,14 @@ sdp_list_t *sdp_get_record_list(void)
 	return service_db;
 }
 
+/*
+ * Return a pointer to the linked list containing the access db in sorted order
+ */
+sdp_list_t *sdp_get_access_list(void)
+{
+	return access_db;
+}
+
 int sdp_check_access(uint32_t handle, bdaddr_t *device)
 {
 	sdp_list_t *p = access_locate(handle);
@@ -314,26 +322,3 @@ uint32_t sdp_next_handle(void)
 
 	return handle;
 }
-
-void sdp_init_services_list(bdaddr_t *device)
-{
-	sdp_list_t *p;
-
-	DBG("");
-
-	for (p = access_db; p != NULL; p = p->next) {
-		sdp_access_t *access = p->data;
-		sdp_record_t *rec;
-
-		if (bacmp(BDADDR_ANY, &access->device))
-			continue;
-
-		rec = sdp_record_find(access->handle);
-		if (rec == NULL)
-			continue;
-
-		SDPDBG("adding record with handle %x", access->handle);
-
-		adapter_foreach(adapter_service_insert, rec);
-	}
-}
diff --git a/src/sdpd.h b/src/sdpd.h
index 9a0e1e9..ad384bd 100644
--- a/src/sdpd.h
+++ b/src/sdpd.h
@@ -68,6 +68,7 @@ sdp_record_t *sdp_record_find(uint32_t handle);
 void sdp_record_add(const bdaddr_t *device, sdp_record_t *rec);
 int sdp_record_remove(uint32_t handle);
 sdp_list_t *sdp_get_record_list(void);
+sdp_list_t *sdp_get_access_list(void);
 int sdp_check_access(uint32_t handle, bdaddr_t *device);
 uint32_t sdp_next_handle(void);
 
@@ -81,5 +82,3 @@ void stop_sdp_server(void);
 
 int add_record_to_server(const bdaddr_t *src, sdp_record_t *rec);
 int remove_record_from_server(uint32_t handle);
-
-void sdp_init_services_list(bdaddr_t *device);
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/4] sdp: Make sdp_record_add to be handled by adapter
  2013-08-26 13:07 [PATCH 0/4] *** Make sdp independent from adapter *** Grzegorz Kolodziejczyk
  2013-08-26 13:07 ` [PATCH 1/4] sdp: Move sdp server init to adapter Grzegorz Kolodziejczyk
  2013-08-26 13:07 ` [PATCH 2/4] sdp: Move spd_init_services_list " Grzegorz Kolodziejczyk
@ 2013-08-26 13:07 ` Grzegorz Kolodziejczyk
  2013-08-28 10:02   ` Frederic Danis
  2013-08-26 13:07 ` [PATCH 4/4] sdp: Make sdp_record_remove " Grzegorz Kolodziejczyk
  3 siblings, 1 reply; 9+ messages in thread
From: Grzegorz Kolodziejczyk @ 2013-08-26 13:07 UTC (permalink / raw)
  To: linux-bluetooth

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              |   31 +++++++++++++++++++++++++++++++
 src/adapter.h              |    2 ++
 src/attrib-server.c        |    2 +-
 src/profile.c              |    2 +-
 src/sdpd-database.c        |   10 ----------
 10 files changed, 41 insertions(+), 18 deletions(-)

diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
index 3f3cc1b..384b143 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_get_address(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..6734b0b 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_get_address(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_get_address(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..30e59bb 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_get_address(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..980dc3a 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(&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..34a2e38 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(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 fd20d61..8e897ce 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -6307,6 +6307,37 @@ 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(const bdaddr_t *device, sdp_record_t *rec)
+{
+	int chck;
+	struct btd_adapter *adapter;
+
+	chck = add_record_to_server(device, rec);
+
+	//  Check if rec handle error occure
+	//
+	//  0       - Ok
+	//
+	//  handle == 0xffffffff
+	//  -ENOSPC - next handle < 0x10000
+	//
+	//  -EEXIST - record already exist
+	if (chck == 0) {
+		//  Add rec for each adapter
+		if (bacmp(device, BDADDR_ANY) == 0) {
+			adapter_foreach(adapter_service_insert, rec);
+			return chck;
+		}
+
+		//  Add rec for single adapter
+		adapter = adapter_find(device);
+		if (adapter)
+			adapter_service_insert(adapter, rec);
+	}
+
+	return chck;
+}
+
 void adapter_sdp_init_services_list(bdaddr_t *device)
 {
 	sdp_list_t *p;
diff --git a/src/adapter.h b/src/adapter.h
index ad01710..3a4b4d9 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -215,4 +215,6 @@ 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(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..67631d1 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_get_address(server->adapter), record)
 			== 0)
 		return record->handle;
 
diff --git a/src/profile.c b/src/profile.c
index 90c3535..8e9236c 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -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(src, rec) < 0) {
 		error("Failed to register service record");
 		sdp_record_free(rec);
 		return 0;
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


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/4] sdp: Make sdp_record_remove to be handled by adapter
  2013-08-26 13:07 [PATCH 0/4] *** Make sdp independent from adapter *** Grzegorz Kolodziejczyk
                   ` (2 preceding siblings ...)
  2013-08-26 13:07 ` [PATCH 3/4] sdp: Make sdp_record_add to be handled by adapter Grzegorz Kolodziejczyk
@ 2013-08-26 13:07 ` Grzegorz Kolodziejczyk
  2013-08-28 10:04   ` Frederic Danis
  3 siblings, 1 reply; 9+ messages in thread
From: Grzegorz Kolodziejczyk @ 2013-08-26 13:07 UTC (permalink / raw)
  To: linux-bluetooth

Make sdp_record_remove to be called from adapter. First remove service
from sdp db then from adapter db without revokes to adapter.

Change-Id: I13a3113909bab2b4494a00ef05e25dc8d113e3ac
---
 profiles/audio/a2dp.c      |    8 ++++----
 profiles/audio/avrcp.c     |    4 ++--
 profiles/health/hdp.c      |    2 +-
 profiles/health/hdp_util.c |    2 +-
 profiles/network/server.c  |    4 ++--
 profiles/sap/server.c      |    2 +-
 src/adapter.c              |   40 ++++++++++++++++++++++++++++++++++++++++
 src/adapter.h              |    1 +
 src/attrib-server.c        |    6 +++---
 src/profile.c              |    2 +-
 src/sdpd-database.c        |   11 -----------
 src/sdpd.h                 |    5 +++++
 12 files changed, 61 insertions(+), 26 deletions(-)

diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
index 384b143..835fe9a 100644
--- a/profiles/audio/a2dp.c
+++ b/profiles/audio/a2dp.c
@@ -1327,7 +1327,7 @@ void a2dp_remove_sep(struct a2dp_sep *sep)
 			return;
 		server->sources = g_slist_remove(server->sources, sep);
 		if (server->sources == NULL && server->source_record_id) {
-			remove_record_from_server(server->source_record_id);
+			adapter_remove_record_from_server(server->source_record_id);
 			server->source_record_id = 0;
 		}
 	} else {
@@ -1335,7 +1335,7 @@ void a2dp_remove_sep(struct a2dp_sep *sep)
 			return;
 		server->sinks = g_slist_remove(server->sinks, sep);
 		if (server->sinks == NULL && server->sink_record_id) {
-			remove_record_from_server(server->sink_record_id);
+			adapter_remove_record_from_server(server->sink_record_id);
 			server->sink_record_id = 0;
 		}
 	}
@@ -1944,7 +1944,7 @@ static void a2dp_source_server_remove(struct btd_profile *p,
 					(GDestroyNotify) a2dp_unregister_sep);
 
 	if (server->source_record_id) {
-		remove_record_from_server(server->source_record_id);
+		adapter_remove_record_from_server(server->source_record_id);
 		server->source_record_id = 0;
 	}
 
@@ -1989,7 +1989,7 @@ static void a2dp_sink_server_remove(struct btd_profile *p,
 	g_slist_free_full(server->sinks, (GDestroyNotify) a2dp_unregister_sep);
 
 	if (server->sink_record_id) {
-		remove_record_from_server(server->sink_record_id);
+		adapter_remove_record_from_server(server->sink_record_id);
 		server->sink_record_id = 0;
 	}
 
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index 6734b0b..825e63c 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -3797,7 +3797,7 @@ static void avrcp_target_server_remove(struct btd_profile *p,
 		return;
 
 	if (server->tg_record_id != 0) {
-		remove_record_from_server(server->tg_record_id);
+		adapter_remove_record_from_server(server->tg_record_id);
 		server->tg_record_id = 0;
 	}
 
@@ -3880,7 +3880,7 @@ static void avrcp_controller_server_remove(struct btd_profile *p,
 		return;
 
 	if (server->ct_record_id != 0) {
-		remove_record_from_server(server->ct_record_id);
+		adapter_remove_record_from_server(server->ct_record_id);
 		server->ct_record_id = 0;
 	}
 
diff --git a/profiles/health/hdp.c b/profiles/health/hdp.c
index 7f24756..eeac102 100644
--- a/profiles/health/hdp.c
+++ b/profiles/health/hdp.c
@@ -1403,7 +1403,7 @@ void hdp_adapter_unregister(struct btd_adapter *adapter)
 	hdp_adapter = l->data;
 	adapters = g_slist_remove(adapters, hdp_adapter);
 	if (hdp_adapter->sdp_handler > 0)
-		remove_record_from_server(hdp_adapter->sdp_handler);
+		adapter_remove_record_from_server(hdp_adapter->sdp_handler);
 	release_adapter_instance(hdp_adapter);
 	btd_adapter_unref(hdp_adapter->btd_adapter);
 	g_free(hdp_adapter);
diff --git a/profiles/health/hdp_util.c b/profiles/health/hdp_util.c
index 30e59bb..34551df 100644
--- a/profiles/health/hdp_util.c
+++ b/profiles/health/hdp_util.c
@@ -693,7 +693,7 @@ gboolean hdp_update_sdp_record(struct hdp_adapter *adapter, GSList *app_list)
 	sdp_record_t *sdp_record;
 
 	if (adapter->sdp_handler > 0)
-		remove_record_from_server(adapter->sdp_handler);
+		adapter_remove_record_from_server(adapter->sdp_handler);
 
 	if (app_list == NULL) {
 		adapter->sdp_handler = 0;
diff --git a/profiles/network/server.c b/profiles/network/server.c
index 980dc3a..4efdd74 100644
--- a/profiles/network/server.c
+++ b/profiles/network/server.c
@@ -628,7 +628,7 @@ static void server_disconnect(DBusConnection *conn, void *user_data)
 	ns->watch_id = 0;
 
 	if (ns->record_id) {
-		remove_record_from_server(ns->record_id);
+		adapter_remove_record_from_server(ns->record_id);
 		ns->record_id = 0;
 	}
 
@@ -722,7 +722,7 @@ static void server_free(void *data)
 	server_remove_sessions(ns);
 
 	if (ns->record_id)
-		remove_record_from_server(ns->record_id);
+		adapter_remove_record_from_server(ns->record_id);
 
 	g_free(ns->name);
 	g_free(ns->bridge);
diff --git a/profiles/sap/server.c b/profiles/sap/server.c
index 34a2e38..f2ccb63 100644
--- a/profiles/sap/server.c
+++ b/profiles/sap/server.c
@@ -1318,7 +1318,7 @@ static void server_remove(struct sap_server *server)
 
 	sap_server_remove_conn(server);
 
-	remove_record_from_server(server->record_id);
+	adapter_remove_record_from_server(server->record_id);
 
 	if (server->listen_io) {
 		g_io_channel_shutdown(server->listen_io, TRUE, NULL);
diff --git a/src/adapter.c b/src/adapter.c
index 8e897ce..8a5398f 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -6338,6 +6338,46 @@ int adapter_add_record_to_server(const bdaddr_t *device, sdp_record_t *rec)
 	return chck;
 }
 
+int adapter_remove_record_from_server(uint32_t handle)
+{
+	int chck;
+	sdp_list_t *p;
+	sdp_record_t *r;
+	sdp_access_t *a;
+	sdp_record_t rh, ah;
+
+	chck = remove_record_from_server(handle);
+
+	if (chck == 0) {
+		//	record_locate section
+		rh.handle = handle;
+		p = sdp_list_find(sdp_get_record_list(), &rh, record_sort);
+
+		r = p->data;
+
+		//	access_locate section
+		ah.handle = handle;
+		p = sdp_list_find(sdp_get_access_list(), &ah, record_sort);
+
+		if (p == NULL || p->data == NULL)
+			return 0;
+
+		a = p->data;
+
+		//	remove from adapter services
+		if (bacmp(&a->device, BDADDR_ANY) != 0) {
+			struct btd_adapter *adapter = adapter_find(&a->device);
+			if (adapter)
+				adapter_service_remove(adapter, r);
+		} else
+			adapter_foreach(adapter_service_remove, r);
+
+		free(a);
+	}
+
+	return chck;
+}
+
 void adapter_sdp_init_services_list(bdaddr_t *device)
 {
 	sdp_list_t *p;
diff --git a/src/adapter.h b/src/adapter.h
index 3a4b4d9..4043347 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -216,5 +216,6 @@ void btd_adapter_for_each_device(struct btd_adapter *adapter,
 			void *data);
 
 int adapter_add_record_to_server(const bdaddr_t *device, sdp_record_t *rec);
+int adapter_remove_record_from_server(uint32_t handle);
 
 void adapter_sdp_init_services_list(bdaddr_t *device);
diff --git a/src/attrib-server.c b/src/attrib-server.c
index 67631d1..89aa4c2 100644
--- a/src/attrib-server.c
+++ b/src/attrib-server.c
@@ -139,10 +139,10 @@ static void gatt_server_free(struct gatt_server *server)
 	g_slist_free_full(server->clients, (GDestroyNotify) channel_free);
 
 	if (server->gatt_sdp_handle > 0)
-		remove_record_from_server(server->gatt_sdp_handle);
+		adapter_remove_record_from_server(server->gatt_sdp_handle);
 
 	if (server->gap_sdp_handle > 0)
-		remove_record_from_server(server->gap_sdp_handle);
+		adapter_remove_record_from_server(server->gap_sdp_handle);
 
 	if (server->adapter != NULL)
 		btd_adapter_unref(server->adapter);
@@ -1380,7 +1380,7 @@ uint32_t attrib_create_sdp(struct btd_adapter *adapter, uint16_t handle,
 
 void attrib_free_sdp(uint32_t sdp_handle)
 {
-	remove_record_from_server(sdp_handle);
+	adapter_remove_record_from_server(sdp_handle);
 }
 
 static uint16_t find_uuid16_avail(struct btd_adapter *adapter, uint16_t nitems)
diff --git a/src/profile.c b/src/profile.c
index 8e9236c..2a0a6ad 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -1390,7 +1390,7 @@ static void ext_remove_records(struct ext_profile *ext,
 
 		ext->records = g_slist_remove(ext->records, r);
 
-		remove_record_from_server(r->handle);
+		adapter_remove_record_from_server(r->handle);
 		btd_adapter_unref(r->adapter);
 		g_free(r);
 	}
diff --git a/src/sdpd-database.c b/src/sdpd-database.c
index 335ea0e..013f0f6 100644
--- a/src/sdpd-database.c
+++ b/src/sdpd-database.c
@@ -41,10 +41,6 @@
 static sdp_list_t *service_db;
 static sdp_list_t *access_db;
 
-typedef struct {
-	uint32_t handle;
-	bdaddr_t device;
-} sdp_access_t;
 
 /*
  * Ordering function called when inserting a service record.
@@ -254,13 +250,6 @@ int sdp_record_remove(uint32_t handle)
 
 	a = p->data;
 
-	if (bacmp(&a->device, BDADDR_ANY) != 0) {
-		struct btd_adapter *adapter = adapter_find(&a->device);
-		if (adapter)
-			adapter_service_remove(adapter, r);
-	} else
-		adapter_foreach(adapter_service_remove, r);
-
 	access_db = sdp_list_remove(access_db, a);
 	access_free(a);
 
diff --git a/src/sdpd.h b/src/sdpd.h
index ad384bd..769dc63 100644
--- a/src/sdpd.h
+++ b/src/sdpd.h
@@ -45,6 +45,11 @@ typedef struct request {
 	int      len;
 } sdp_req_t;
 
+typedef struct {
+	uint32_t handle;
+	bdaddr_t device;
+} sdp_access_t;
+
 void handle_internal_request(int sk, int mtu, void *data, int len);
 void handle_request(int sk, uint8_t *data, int len);
 
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/4] sdp: Move sdp server init to adapter
  2013-08-26 13:07 ` [PATCH 1/4] sdp: Move sdp server init to adapter Grzegorz Kolodziejczyk
@ 2013-08-28 10:01   ` Frederic Danis
  0 siblings, 0 replies; 9+ messages in thread
From: Frederic Danis @ 2013-08-28 10:01 UTC (permalink / raw)
  To: Grzegorz Kolodziejczyk; +Cc: linux-bluetooth

Hello Grzegorz,

On 26/08/2013 15:07, Grzegorz Kolodziejczyk wrote:
> Change-Id: Ie8440d59a00750f3d8aec49924d6b209bc6ebe2f
> ---
>   src/adapter.c |   11 +++++++++++
>   src/adapter.h |    1 +
>   src/main.c    |    2 +-
>   3 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/src/adapter.c b/src/adapter.c
> index 17f5508..723e3a8 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -6295,3 +6295,14 @@ void adapter_shutdown(void)
>   	if (!adapter_remaining)
>   		btd_exit();
>   }
> +
> +void adapter_start_sdp_server(uint16_t sdp_mtu, uint32_t sdp_flags) {

Place opening brace of function at the beginning of the next line, please.

Regards

Fred

-- 
Frederic Danis                            Open Source Technology Center
frederic.danis@intel.com                              Intel Corporation


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/4] sdp: Make sdp_record_add to be handled by adapter
  2013-08-26 13:07 ` [PATCH 3/4] sdp: Make sdp_record_add to be handled by adapter Grzegorz Kolodziejczyk
@ 2013-08-28 10:02   ` Frederic Danis
  0 siblings, 0 replies; 9+ messages in thread
From: Frederic Danis @ 2013-08-28 10:02 UTC (permalink / raw)
  To: Grzegorz Kolodziejczyk; +Cc: linux-bluetooth

Hello Grzegorz,

On 26/08/2013 15:07, Grzegorz Kolodziejczyk wrote:
<snip>
> diff --git a/src/adapter.c b/src/adapter.c
> index fd20d61..8e897ce 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -6307,6 +6307,37 @@ 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(const bdaddr_t *device, sdp_record_t *rec)
> +{
> +	int chck;
> +	struct btd_adapter *adapter;
> +
> +	chck = add_record_to_server(device, rec);
> +
> +	//  Check if rec handle error occure
> +	//
> +	//  0       - Ok
> +	//
> +	//  handle == 0xffffffff
> +	//  -ENOSPC - next handle < 0x10000
> +	//
> +	//  -EEXIST - record already exist

Please use C89 coding style for comments, like defined for the Linux 
kernel. I.e.:
	/*
	 * comment
	 * comment
	 */

> +	if (chck == 0) {
> +		//  Add rec for each adapter

idem here ( /* comment */ )

> +		if (bacmp(device, BDADDR_ANY) == 0) {
> +			adapter_foreach(adapter_service_insert, rec);
> +			return chck;
> +		}
> +
> +		//  Add rec for single adapter

and here

> +		adapter = adapter_find(device);
> +		if (adapter)
> +			adapter_service_insert(adapter, rec);
> +	}
> +
> +	return chck;
> +}
> +

Regards

Fred

-- 
Frederic Danis                            Open Source Technology Center
frederic.danis@intel.com                              Intel Corporation


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/4] sdp: Make sdp_record_remove to be handled by adapter
  2013-08-26 13:07 ` [PATCH 4/4] sdp: Make sdp_record_remove " Grzegorz Kolodziejczyk
@ 2013-08-28 10:04   ` Frederic Danis
  0 siblings, 0 replies; 9+ messages in thread
From: Frederic Danis @ 2013-08-28 10:04 UTC (permalink / raw)
  To: Grzegorz Kolodziejczyk; +Cc: linux-bluetooth

Hello Grzegorz,

On 26/08/2013 15:07, Grzegorz Kolodziejczyk wrote:
<snip>
> diff --git a/src/adapter.c b/src/adapter.c
> index 8e897ce..8a5398f 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -6338,6 +6338,46 @@ int adapter_add_record_to_server(const bdaddr_t *device, sdp_record_t *rec)
>   	return chck;
>   }
>
> +int adapter_remove_record_from_server(uint32_t handle)
> +{
> +	int chck;
> +	sdp_list_t *p;
> +	sdp_record_t *r;
> +	sdp_access_t *a;
> +	sdp_record_t rh, ah;
> +
> +	chck = remove_record_from_server(handle);
> +
> +	if (chck == 0) {
> +		//	record_locate section

Please use C89 coding style for comments.

> +		rh.handle = handle;
> +		p = sdp_list_find(sdp_get_record_list(), &rh, record_sort);
> +
> +		r = p->data;
> +
> +		//	access_locate section

idem here

> +		ah.handle = handle;
> +		p = sdp_list_find(sdp_get_access_list(), &ah, record_sort);
> +
> +		if (p == NULL || p->data == NULL)
> +			return 0;
> +
> +		a = p->data;
> +
> +		//	remove from adapter services

and here

> +		if (bacmp(&a->device, BDADDR_ANY) != 0) {
> +			struct btd_adapter *adapter = adapter_find(&a->device);
> +			if (adapter)
> +				adapter_service_remove(adapter, r);
> +		} else
> +			adapter_foreach(adapter_service_remove, r);
> +
> +		free(a);
> +	}
> +
> +	return chck;
> +}
> +

Regards

Fred

-- 
Frederic Danis                            Open Source Technology Center
frederic.danis@intel.com                              Intel Corporation


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 3/4] sdp: Make sdp_record_add to be handled by adapter
  2013-08-29  9:56 [PATCH 0/4] Make sdp independent from adapter Grzegorz Kolodziejczyk
@ 2013-08-29  9:56 ` Grzegorz Kolodziejczyk
  0 siblings, 0 replies; 9+ messages in thread
From: Grzegorz Kolodziejczyk @ 2013-08-29  9:56 UTC (permalink / raw)
  To: linux-bluetooth

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


^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2013-08-29  9:56 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-26 13:07 [PATCH 0/4] *** Make sdp independent from adapter *** Grzegorz Kolodziejczyk
2013-08-26 13:07 ` [PATCH 1/4] sdp: Move sdp server init to adapter Grzegorz Kolodziejczyk
2013-08-28 10:01   ` Frederic Danis
2013-08-26 13:07 ` [PATCH 2/4] sdp: Move spd_init_services_list " Grzegorz Kolodziejczyk
2013-08-26 13:07 ` [PATCH 3/4] sdp: Make sdp_record_add to be handled by adapter Grzegorz Kolodziejczyk
2013-08-28 10:02   ` Frederic Danis
2013-08-26 13:07 ` [PATCH 4/4] sdp: Make sdp_record_remove " Grzegorz Kolodziejczyk
2013-08-28 10:04   ` Frederic Danis
  -- strict thread matches above, loose matches on Subject: below --
2013-08-29  9:56 [PATCH 0/4] Make sdp independent from adapter Grzegorz Kolodziejczyk
2013-08-29  9:56 ` [PATCH 3/4] sdp: Make sdp_record_add to be handled by adapter Grzegorz Kolodziejczyk

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.