linux-bluetooth.vger.kernel.org archive mirror
 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 1/4] sdp: Move sdp server init to 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

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

diff --git a/src/adapter.c b/src/adapter.c
index 17f5508..d2d829e 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -6295,3 +6295,15 @@ 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

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 1/4] sdp: Move sdp server init to adapter Grzegorz Kolodziejczyk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).