linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 00/15] Move storage config and names files to ini-file format
@ 2012-10-18  9:00 Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 01/15] doc: Add settings storage documentation Frédéric Danis
                   ` (14 more replies)
  0 siblings, 15 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

Adapter saved configuration will be saved to /var/lib/bluetooth/<adapter address>/settings
in ini-file format for BlueZ 5.
Devices name cache will be saved in 1 file per device (named by device address)
under /var/lib/bluetooth/<adapter address>/cache/ directory.
If this files does not exist, we try to convert legacy files to this new format.

Access to variables during run-time is performed in adapter structure which is
populated by loading saved configuration during initialization.

Patches 2 to 8 remove access to config file from run-time.
Patch 9 moves to ini-file format style (load, save and convert).
Patches 10 to 15 move devices name cache to new files (read, write and convert).

Frédéric Danis (15):
  doc: Add settings storage documentation
  adapter: Read name in storage at init
  adaptername: Retrieve config name from adapter
  adapter: Read device class in storage at init
  adapter: Move pairable read to load_config()
  adapter: Read pairable timeout in storage at init
  adapter: Read discoverable timeout in storage at init
  adapter: Read mode in storage at init
  adapter: Move saved config to ini-file format
  TODO: Add entry to remove storage convertion function
  adapter: Move storage names to cache directory
  device: Retrieve name from cache directory
  dbusoob: Store device name in cache directory
  input: Retrieve device name from cache directory
  hcitool: Retrieve names from cache directory

 Makefile.tools           |    2 +-
 TODO                     |    6 +
 doc/settings-storage.txt |  106 ++++++++++++
 plugins/adaptername.c    |    6 +-
 plugins/dbusoob.c        |   26 ++-
 plugins/neard.c          |    2 +-
 profiles/input/device.c  |   26 ++-
 src/adapter.c            |  433 ++++++++++++++++++++++++++++++++++++----------
 src/adapter.h            |    3 +-
 src/device.c             |   25 ++-
 src/event.c              |   51 +++++-
 src/mgmt.c               |   19 +-
 src/mgmt.h               |    1 +
 tools/hcitool.c          |   31 +++-
 14 files changed, 610 insertions(+), 127 deletions(-)
 create mode 100644 doc/settings-storage.txt

-- 
1.7.9.5


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

* [PATCH v5 01/15] doc: Add settings storage documentation
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18 14:02   ` Daniel Wagner
  2012-10-18  9:00 ` [PATCH v5 02/15] adapter: Read name in storage at init Frédéric Danis
                   ` (13 subsequent siblings)
  14 siblings, 1 reply; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 doc/settings-storage.txt |  106 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 106 insertions(+)
 create mode 100644 doc/settings-storage.txt

diff --git a/doc/settings-storage.txt b/doc/settings-storage.txt
new file mode 100644
index 0000000..bc9ac66
--- /dev/null
+++ b/doc/settings-storage.txt
@@ -0,0 +1,106 @@
+Information related to local adapters and remote devices are stored in storage
+directory (default: /var/lib/bluetooth).
+Files are in ini-file format.
+
+There is one directory per adapter, named by its bluetooth address, which
+contains:
+ - a settings file for the local adapter
+ - an attribute_db file containing attributes of supported LE services
+ - names file containing names of all devices already seen
+ - one directory per remote device, named by remote device address, which
+   contains:
+    - a settings file
+    - a key file accessible only by root
+    - an attribute_db file containing attributes of remote LE services
+
+So the directory structure should be:
+    /var/lib/bluetooth/<adapter address>/
+        ./settings
+        ./attributes
+        ./cache/
+            ./<remote device address>
+            ./<remote device address>
+            ...
+        ./<remote device address>/
+            ./info
+            ./attributes
+        ./<remote device address>/
+            ./info
+            ./attributes
+        ...
+
+Adapter directory files
+=======================
+
+Settings file contains 1 [General] group with adapter info:
+  [General]
+  Name=
+  Class=0x000000
+  Discoverable=<true|false>
+  Connectable=<true|false>
+  Pairable=<true|false>
+  Powered=<true|false>
+  PairableTimeout=0
+  DiscoverableTimeout=0
+
+The attributes file is a list of handles (group name) with UUID and Value as
+keys, for example:
+  [0x0001]
+  UUID=00002800-0000-1000-8000-00805f9b34fb
+  Value=0018
+
+  [0x0004]
+  UUID=00002803-0000-1000-8000-00805f9b34fb
+  Value=020600002A
+
+  [0x0006]
+  UUID=00002a00-0000-1000-8000-00805f9b34fb
+  Value=4578616D706C6520446576696365
+
+Cache directory files
+======================
+
+Each files, named by remote device address, contains 1 [General] group:
+  [General]
+  Name=device name a
+  LastSeen=yyyy-mm-dd hh:mm:ss GMT
+
+Device directory files
+======================
+
+Remote device info file will include a [General] group with device info,
+[DeviceID], [LinkKey] and [LongTermKey] groups with related info:
+  [General]
+  Alias=
+  Class=0x000000
+  Manufacturer=0
+  LmpVersion=
+  LmpSubversion=
+  Features=0000000000000000
+  SupportedTechnologies=<BR/EDR|LE>;<BR/EDR|LE>
+  AddressType=<static|public>
+  LastSeen=yyyy-mm-dd hh:mm:ss GMT
+  LastUsed=yyyy-mm-dd hh:mm:ss GMT
+  Trusted=<true|false>
+  Profiles=<128 bits UUID of profile 1>;<128 bits UUID of profile 2>;...
+
+  [DeviceID]
+  Source=0
+  Vendor=0
+  Product=0
+  Version=0
+
+  [LinkKey]
+  Key=
+  Type=0
+  PINLength=0
+
+  [LongTermKey]
+  Key=
+  Authenticated=<true|false>
+  EncSize=0
+  EDiv=0
+  Rand=0
+
+The attribute_db file is a list of handles (group name) with UUID and Value as
+keys (cf. attribute_db in adapter directory).
-- 
1.7.9.5


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

* [PATCH v5 02/15] adapter: Read name in storage at init
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 01/15] doc: Add settings storage documentation Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18 14:04   ` Daniel Wagner
  2012-10-18  9:00 ` [PATCH v5 03/15] adaptername: Retrieve config name from adapter Frédéric Danis
                   ` (12 subsequent siblings)
  14 siblings, 1 reply; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 src/adapter.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/adapter.c b/src/adapter.c
index 3b24816..233527a 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2506,6 +2506,18 @@ void btd_adapter_unref(struct btd_adapter *adapter)
 	g_free(path);
 }
 
+static void load_config(struct btd_adapter *adapter)
+{
+	char name[MAX_NAME_LENGTH + 1];
+
+	/* Get name */
+	if (read_local_name(&adapter->bdaddr, name) < 0)
+		adapter->name = NULL;
+	else
+		adapter->name = g_strdup(name);
+
+}
+
 gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
 {
 	adapter->up = up;
@@ -2525,6 +2537,7 @@ gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
 	if (main_opts.gatt_enabled)
 		btd_adapter_gatt_server_start(adapter);
 
+	load_config(adapter);
 	load_drivers(adapter);
 	btd_profile_foreach(probe_profile, adapter);
 	clear_blocked(adapter);
-- 
1.7.9.5


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

* [PATCH v5 03/15] adaptername: Retrieve config name from adapter
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 01/15] doc: Add settings storage documentation Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 02/15] adapter: Read name in storage at init Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 04/15] adapter: Read device class in storage at init Frédéric Danis
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 plugins/adaptername.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/plugins/adaptername.c b/plugins/adaptername.c
index f58fb0f..353f11c 100644
--- a/plugins/adaptername.c
+++ b/plugins/adaptername.c
@@ -211,8 +211,10 @@ static int adaptername_probe(struct btd_adapter *adapter)
 	adapter_set_allow_name_changes(adapter, TRUE);
 	current_id = adapter_get_dev_id(adapter);
 
-	if (read_local_name(adapter_get_address(adapter), name) < 0)
-		expand_name(name, MAX_NAME_LENGTH, main_opts.name, current_id);
+	if (btd_adapter_get_name(adapter) != NULL)
+		return 0;
+
+	expand_name(name, MAX_NAME_LENGTH, main_opts.name, current_id);
 
 	DBG("Setting name '%s' for device 'hci%d'", name, current_id);
 	adapter_set_name(adapter, name);
-- 
1.7.9.5


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

* [PATCH v5 04/15] adapter: Read device class in storage at init
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
                   ` (2 preceding siblings ...)
  2012-10-18  9:00 ` [PATCH v5 03/15] adaptername: Retrieve config name from adapter Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 05/15] adapter: Move pairable read to load_config() Frédéric Danis
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 src/adapter.c |   21 ++++++++++-----------
 src/adapter.h |    2 +-
 src/mgmt.c    |    2 +-
 3 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index 233527a..dd06d46 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2177,18 +2177,11 @@ void btd_adapter_get_mode(struct btd_adapter *adapter, uint8_t *mode,
 		*pairable = adapter->pairable;
 }
 
-void btd_adapter_read_class(struct btd_adapter *adapter, uint8_t *major,
+void btd_adapter_get_major_minor(struct btd_adapter *adapter, uint8_t *major,
 								uint8_t *minor)
 {
-	uint8_t cls[3];
-
-	if (read_local_class(&adapter->bdaddr, cls) < 0) {
-		uint32_t class = htobl(main_opts.class);
-		memcpy(cls, &class, 3);
-	}
-
-	*major = cls[1];
-	*minor = cls[0];
+	*major = (adapter->dev_class >> 8) & 0xFF;
+	*minor = adapter->dev_class & 0xFF;
 }
 
 uint32_t btd_adapter_get_class(struct btd_adapter *adapter)
@@ -2257,7 +2250,6 @@ void btd_adapter_start(struct btd_adapter *adapter)
 
 	ba2str(&adapter->bdaddr, address);
 
-	adapter->dev_class = 0;
 	adapter->off_requested = FALSE;
 	adapter->up = TRUE;
 	adapter->discov_timeout = get_discoverable_timeout(address);
@@ -2509,6 +2501,7 @@ void btd_adapter_unref(struct btd_adapter *adapter)
 static void load_config(struct btd_adapter *adapter)
 {
 	char name[MAX_NAME_LENGTH + 1];
+	uint8_t class[3];
 
 	/* Get name */
 	if (read_local_name(&adapter->bdaddr, name) < 0)
@@ -2516,6 +2509,12 @@ static void load_config(struct btd_adapter *adapter)
 	else
 		adapter->name = g_strdup(name);
 
+	/* Get class */
+	if (read_local_class(&adapter->bdaddr, class) == 0)
+		adapter->dev_class = class[0] | (class[1] << 8) |
+					(class[2] << 16);
+	else
+		adapter->dev_class = main_opts.class;
 }
 
 gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
diff --git a/src/adapter.h b/src/adapter.h
index d53c658..be69781 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -85,7 +85,7 @@ void btd_adapter_get_mode(struct btd_adapter *adapter, uint8_t *mode,
 						uint16_t *discoverable_timeout,
 						gboolean *pairable);
 
-void btd_adapter_read_class(struct btd_adapter *adapter, uint8_t *major,
+void btd_adapter_get_major_minor(struct btd_adapter *adapter, uint8_t *major,
 							uint8_t *minor);
 
 uint32_t btd_adapter_get_class(struct btd_adapter *adapter);
diff --git a/src/mgmt.c b/src/mgmt.c
index 627fb4b..ad180c3 100644
--- a/src/mgmt.c
+++ b/src/mgmt.c
@@ -1105,7 +1105,7 @@ static void read_info_complete(int sk, uint16_t index, void *buf, size_t len)
 	else
 		adapter_name_changed(adapter, (char *) rp->name);
 
-	btd_adapter_read_class(adapter, &major, &minor);
+	btd_adapter_get_major_minor(adapter, &major, &minor);
 	mgmt_set_dev_class(index, major, minor);
 
 	btd_adapter_get_mode(adapter, &mode, NULL, NULL, NULL);
-- 
1.7.9.5


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

* [PATCH v5 05/15] adapter: Move pairable read to load_config()
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
                   ` (3 preceding siblings ...)
  2012-10-18  9:00 ` [PATCH v5 04/15] adapter: Read device class in storage at init Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 06/15] adapter: Read pairable timeout in storage at init Frédéric Danis
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 src/adapter.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index dd06d46..74c36ec 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2515,6 +2515,10 @@ static void load_config(struct btd_adapter *adapter)
 					(class[2] << 16);
 	else
 		adapter->dev_class = main_opts.class;
+
+	/* Get pairable mode */
+	if (read_device_pairable(&adapter->bdaddr, &adapter->pairable) < 0)
+		adapter->pairable = TRUE;
 }
 
 gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
@@ -2542,10 +2546,6 @@ gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
 	clear_blocked(adapter);
 	load_devices(adapter);
 
-	/* Set pairable mode */
-	if (read_device_pairable(&adapter->bdaddr, &adapter->pairable) < 0)
-		adapter->pairable = TRUE;
-
 	/* retrieve the active connections: address the scenario where
 	 * the are active connections before the daemon've started */
 	load_connections(adapter);
-- 
1.7.9.5


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

* [PATCH v5 06/15] adapter: Read pairable timeout in storage at init
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
                   ` (4 preceding siblings ...)
  2012-10-18  9:00 ` [PATCH v5 05/15] adapter: Move pairable read to load_config() Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 07/15] adapter: Read discoverable " Frédéric Danis
                   ` (8 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 src/adapter.c |   21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index 74c36ec..6d2aadc 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2117,16 +2117,6 @@ static int get_discoverable_timeout(const char *src)
 	return main_opts.discovto;
 }
 
-static int get_pairable_timeout(const char *src)
-{
-	int timeout;
-
-	if (read_pairable_timeout(src, &timeout) == 0)
-		return timeout;
-
-	return main_opts.pairto;
-}
-
 static void set_auto_connect(gpointer data, gpointer user_data)
 {
 	struct btd_device *device = data;
@@ -2253,7 +2243,6 @@ void btd_adapter_start(struct btd_adapter *adapter)
 	adapter->off_requested = FALSE;
 	adapter->up = TRUE;
 	adapter->discov_timeout = get_discoverable_timeout(address);
-	adapter->pairable_timeout = get_pairable_timeout(address);
 	adapter->off_timer = 0;
 
 	if (adapter->scan_mode & SCAN_INQUIRY)
@@ -2502,6 +2491,10 @@ static void load_config(struct btd_adapter *adapter)
 {
 	char name[MAX_NAME_LENGTH + 1];
 	uint8_t class[3];
+	char address[18];
+	int timeout;
+
+	ba2str(&adapter->bdaddr, address);
 
 	/* Get name */
 	if (read_local_name(&adapter->bdaddr, name) < 0)
@@ -2519,6 +2512,12 @@ static void load_config(struct btd_adapter *adapter)
 	/* Get pairable mode */
 	if (read_device_pairable(&adapter->bdaddr, &adapter->pairable) < 0)
 		adapter->pairable = TRUE;
+
+	/* Get pairable timeout */
+	if (read_pairable_timeout(address, &timeout) < 0)
+		adapter->pairable_timeout = main_opts.pairto;
+	else
+		adapter->pairable_timeout = timeout;
 }
 
 gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
-- 
1.7.9.5


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

* [PATCH v5 07/15] adapter: Read discoverable timeout in storage at init
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
                   ` (5 preceding siblings ...)
  2012-10-18  9:00 ` [PATCH v5 06/15] adapter: Read pairable timeout in storage at init Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 08/15] adapter: Read mode " Frédéric Danis
                   ` (7 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 src/adapter.c |   19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index 6d2aadc..20fa1d0 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2107,16 +2107,6 @@ static void load_connections(struct btd_adapter *adapter)
 	g_slist_free_full(conns, g_free);
 }
 
-static int get_discoverable_timeout(const char *src)
-{
-	int timeout;
-
-	if (read_discoverable_timeout(src, &timeout) == 0)
-		return timeout;
-
-	return main_opts.discovto;
-}
-
 static void set_auto_connect(gpointer data, gpointer user_data)
 {
 	struct btd_device *device = data;
@@ -2161,7 +2151,7 @@ void btd_adapter_get_mode(struct btd_adapter *adapter, uint8_t *mode,
 		*on_mode = get_mode(&adapter->bdaddr, "on");
 
 	if (discoverable_timeout)
-		*discoverable_timeout = get_discoverable_timeout(address);
+		*discoverable_timeout = adapter->discov_timeout;
 
 	if (pairable)
 		*pairable = adapter->pairable;
@@ -2242,7 +2232,6 @@ void btd_adapter_start(struct btd_adapter *adapter)
 
 	adapter->off_requested = FALSE;
 	adapter->up = TRUE;
-	adapter->discov_timeout = get_discoverable_timeout(address);
 	adapter->off_timer = 0;
 
 	if (adapter->scan_mode & SCAN_INQUIRY)
@@ -2518,6 +2507,12 @@ static void load_config(struct btd_adapter *adapter)
 		adapter->pairable_timeout = main_opts.pairto;
 	else
 		adapter->pairable_timeout = timeout;
+
+	/* Get discoverable timeout */
+	if (read_discoverable_timeout(address, &timeout) < 0)
+		adapter->discov_timeout = main_opts.discovto;
+	else
+		adapter->discov_timeout = timeout;
 }
 
 gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
-- 
1.7.9.5


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

* [PATCH v5 08/15] adapter: Read mode in storage at init
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
                   ` (6 preceding siblings ...)
  2012-10-18  9:00 ` [PATCH v5 07/15] adapter: Read discoverable " Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 09/15] adapter: Move saved config to ini-file format Frédéric Danis
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

Mgmt interface allows to change connectable and discoverable adapter
status even if the adapter is off. So both status are changed during
adapter init.
Remove on_mode from btd_adapter_get_mode(), as it is no more used.
Update src/mgmt.c and plugins/neard.c
---
 plugins/neard.c |    2 +-
 src/adapter.c   |   75 +++++++++++++++++++++++++++++--------------------------
 src/adapter.h   |    1 -
 src/mgmt.c      |   17 +++----------
 src/mgmt.h      |    1 +
 5 files changed, 45 insertions(+), 51 deletions(-)

diff --git a/plugins/neard.c b/plugins/neard.c
index 2da5024..8018977 100644
--- a/plugins/neard.c
+++ b/plugins/neard.c
@@ -376,7 +376,7 @@ static int check_adapter(struct btd_adapter *adapter)
 	if (btd_adapter_check_oob_handler(adapter))
 		return -EINPROGRESS;
 
-	btd_adapter_get_mode(adapter, NULL, NULL, NULL, &pairable);
+	btd_adapter_get_mode(adapter, NULL, NULL, &pairable);
 
 	if (!pairable || !adapter_get_agent(adapter))
 		return -ENOENT;
diff --git a/src/adapter.c b/src/adapter.c
index 20fa1d0..155293e 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -156,6 +156,7 @@ struct btd_adapter {
 	guint auto_timeout_id;		/* Automatic connections timeout */
 	sdp_list_t *services;		/* Services associated to adapter */
 
+	gboolean discoverable;		/* discoverable state */
 	gboolean pairable;		/* pairable state */
 	gboolean initialized;
 
@@ -196,7 +197,7 @@ static const char *mode2str(uint8_t mode)
 	}
 }
 
-static uint8_t get_mode(const bdaddr_t *bdaddr, const char *mode)
+static uint8_t get_mode(const char *mode)
 {
 	if (strcasecmp("off", mode) == 0)
 		return MODE_OFF;
@@ -204,15 +205,7 @@ static uint8_t get_mode(const bdaddr_t *bdaddr, const char *mode)
 		return MODE_CONNECTABLE;
 	else if (strcasecmp("discoverable", mode) == 0)
 		return MODE_DISCOVERABLE;
-	else if (strcasecmp("on", mode) == 0) {
-		char onmode[14], srcaddr[18];
-
-		ba2str(bdaddr, srcaddr);
-		if (read_on_mode(srcaddr, onmode, sizeof(onmode)) < 0)
-			return MODE_CONNECTABLE;
-
-		return get_mode(bdaddr, onmode);
-	} else
+	else
 		return MODE_UNKNOWN;
 }
 
@@ -375,11 +368,8 @@ static void set_powered(struct btd_adapter *adapter, gboolean powered,
 	uint8_t mode;
 	int err;
 
-	if (powered) {
-		mode = get_mode(&adapter->bdaddr, "on");
-		return set_discoverable(adapter, mode == MODE_DISCOVERABLE,
-									id);
-	}
+	if (powered)
+		return set_discoverable(adapter, adapter->discoverable, id);
 
 	mode = MODE_OFF;
 
@@ -1416,7 +1406,10 @@ static DBusMessage *request_session(DBusConnection *conn,
 	if (!adapter->mode_sessions)
 		adapter->global_mode = adapter->mode;
 
-	new_mode = get_mode(&adapter->bdaddr, "on");
+	if (adapter->discoverable)
+		new_mode = MODE_DISCOVERABLE;
+	else
+		new_mode = MODE_CONNECTABLE;
 
 	req = find_session(adapter->mode_sessions, sender);
 	if (req) {
@@ -2130,25 +2123,15 @@ static void call_adapter_powered_callbacks(struct btd_adapter *adapter,
 }
 
 void btd_adapter_get_mode(struct btd_adapter *adapter, uint8_t *mode,
-						uint8_t *on_mode,
 						uint16_t *discoverable_timeout,
 						gboolean *pairable)
 {
-	char str[14], address[18];
+	char address[18];
 
 	ba2str(&adapter->bdaddr, address);
 
-	if (mode) {
-		if (main_opts.remember_powered == FALSE)
-			*mode = main_opts.mode;
-		else if (read_device_mode(address, str, sizeof(str)) == 0)
-			*mode = get_mode(&adapter->bdaddr, str);
-		else
-			*mode = main_opts.mode;
-	}
-
-	if (on_mode)
-		*on_mode = get_mode(&adapter->bdaddr, "on");
+	if (mode)
+		*mode = adapter->mode;
 
 	if (discoverable_timeout)
 		*discoverable_timeout = adapter->discov_timeout;
@@ -2234,10 +2217,13 @@ void btd_adapter_start(struct btd_adapter *adapter)
 	adapter->up = TRUE;
 	adapter->off_timer = 0;
 
-	if (adapter->scan_mode & SCAN_INQUIRY)
+	if (adapter->scan_mode & SCAN_INQUIRY) {
 		adapter->mode = MODE_DISCOVERABLE;
-	else
+		adapter->discoverable = TRUE;
+	} else {
 		adapter->mode = MODE_CONNECTABLE;
+		adapter->discoverable = FALSE;
+	}
 
 	g_dbus_emit_property_changed(btd_get_dbus_connection(), adapter->path,
 						ADAPTER_INTERFACE, "Powered");
@@ -2481,6 +2467,7 @@ static void load_config(struct btd_adapter *adapter)
 	char name[MAX_NAME_LENGTH + 1];
 	uint8_t class[3];
 	char address[18];
+	char mode[14];
 	int timeout;
 
 	ba2str(&adapter->bdaddr, address);
@@ -2513,6 +2500,24 @@ static void load_config(struct btd_adapter *adapter)
 		adapter->discov_timeout = main_opts.discovto;
 	else
 		adapter->discov_timeout = timeout;
+
+	/* Get mode */
+	if (main_opts.remember_powered == FALSE)
+		adapter->mode = main_opts.mode;
+	else if (read_device_mode(address, mode, sizeof(mode)) == 0)
+		adapter->mode = get_mode(mode);
+	else
+		adapter->mode = main_opts.mode;
+
+	/* Get on mode */
+	if (read_on_mode(address, mode, sizeof(mode)) == 0)
+		adapter->discoverable = (strcasecmp("discoverable", mode) == 0);
+	else
+		adapter->discoverable = (adapter->mode == MODE_DISCOVERABLE);
+
+	mgmt_set_connectable(adapter->dev_id, TRUE);
+	mgmt_set_discoverable(adapter->dev_id, adapter->discoverable,
+				adapter->discov_timeout);
 }
 
 gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
@@ -2893,9 +2898,11 @@ void adapter_mode_changed(struct btd_adapter *adapter, uint8_t scan_mode)
 		break;
 	case SCAN_PAGE:
 		adapter->mode = MODE_CONNECTABLE;
+		adapter->discoverable = FALSE;
 		break;
 	case (SCAN_PAGE | SCAN_INQUIRY):
 		adapter->mode = MODE_DISCOVERABLE;
+		adapter->discoverable = TRUE;
 		break;
 	default:
 		/* ignore, reserved */
@@ -3198,17 +3205,13 @@ gboolean adapter_powering_down(struct btd_adapter *adapter)
 
 int btd_adapter_restore_powered(struct btd_adapter *adapter)
 {
-	char mode[14], address[18];
-
 	if (!main_opts.remember_powered)
 		return -EINVAL;
 
 	if (adapter->up)
 		return 0;
 
-	ba2str(&adapter->bdaddr, address);
-	if (read_device_mode(address, mode, sizeof(mode)) == 0 &&
-						g_str_equal(mode, "off"))
+	if (adapter->mode == MODE_OFF)
 		return 0;
 
 	return mgmt_set_powered(adapter->dev_id, TRUE);
diff --git a/src/adapter.h b/src/adapter.h
index be69781..54f9ea7 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -81,7 +81,6 @@ void btd_adapter_start(struct btd_adapter *adapter);
 int btd_adapter_stop(struct btd_adapter *adapter);
 
 void btd_adapter_get_mode(struct btd_adapter *adapter, uint8_t *mode,
-						uint8_t *on_mode,
 						uint16_t *discoverable_timeout,
 						gboolean *pairable);
 
diff --git a/src/mgmt.c b/src/mgmt.c
index ad180c3..18a653e 100644
--- a/src/mgmt.c
+++ b/src/mgmt.c
@@ -207,7 +207,7 @@ static int mgmt_set_mode(int index, uint16_t opcode, uint8_t val)
 	return 0;
 }
 
-static int mgmt_set_connectable(int index, gboolean connectable)
+int mgmt_set_connectable(int index, gboolean connectable)
 {
 	DBG("index %d connectable %d", index, connectable);
 	return mgmt_set_mode(index, MGMT_OP_SET_CONNECTABLE, connectable);
@@ -315,27 +315,18 @@ static void update_settings(struct btd_adapter *adapter, uint32_t settings)
 {
 	struct controller_info *info;
 	gboolean pairable;
-	uint8_t on_mode;
 	uint16_t index, discoverable_timeout;
 
 	DBG("new settings %x", settings);
 
-	btd_adapter_get_mode(adapter, NULL, &on_mode, &discoverable_timeout,
-								&pairable);
+	btd_adapter_get_mode(adapter, NULL, &discoverable_timeout, &pairable);
 
 	index = adapter_get_dev_id(adapter);
 
 	info = &controllers[index];
 
-	if (on_mode == MODE_DISCOVERABLE && !mgmt_discoverable(settings)) {
-		if(!mgmt_connectable(settings))
-			mgmt_set_connectable(index, TRUE);
-		mgmt_set_discoverable(index, TRUE, discoverable_timeout);
-	} else if (on_mode == MODE_CONNECTABLE && !mgmt_connectable(settings)) {
-		mgmt_set_connectable(index, TRUE);
-	} else if (mgmt_powered(settings)) {
+	if (mgmt_powered(settings))
 		adapter_mode_changed(adapter, create_mode(settings));
-	}
 
 	if (mgmt_pairable(settings) != pairable)
 		mgmt_set_pairable(index, pairable);
@@ -1108,7 +1099,7 @@ static void read_info_complete(int sk, uint16_t index, void *buf, size_t len)
 	btd_adapter_get_major_minor(adapter, &major, &minor);
 	mgmt_set_dev_class(index, major, minor);
 
-	btd_adapter_get_mode(adapter, &mode, NULL, NULL, NULL);
+	btd_adapter_get_mode(adapter, &mode, NULL, NULL);
 	if (mode == MODE_OFF && mgmt_powered(info->current_settings)) {
 		mgmt_set_powered(index, FALSE);
 		return;
diff --git a/src/mgmt.h b/src/mgmt.h
index a2c0497..daa168a 100644
--- a/src/mgmt.h
+++ b/src/mgmt.h
@@ -26,6 +26,7 @@ int mgmt_setup(void);
 void mgmt_cleanup(void);
 
 int mgmt_set_powered(int index, gboolean powered);
+int mgmt_set_connectable(int index, gboolean connectable);
 int mgmt_set_discoverable(int index, gboolean discoverable, uint16_t timeout);
 int mgmt_set_pairable(int index, gboolean pairable);
 int mgmt_set_name(int index, const char *name);
-- 
1.7.9.5


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

* [PATCH v5 09/15] adapter: Move saved config to ini-file format
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
                   ` (7 preceding siblings ...)
  2012-10-18  9:00 ` [PATCH v5 08/15] adapter: Read mode " Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 10/15] TODO: Add entry to remove storage convertion function Frédéric Danis
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

Read and write config file in ini-file format.
If the file can not be loaded, try to convert legacy configuration.
---
 src/adapter.c |  234 ++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 189 insertions(+), 45 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index 155293e..30fda1f 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -33,6 +33,7 @@
 #include <stdlib.h>
 #include <stdbool.h>
 #include <sys/ioctl.h>
+#include <sys/file.h>
 
 #include <bluetooth/bluetooth.h>
 #include <bluetooth/uuid.h>
@@ -83,6 +84,8 @@
 #define REMOVE_TEMP_TIMEOUT (3 * 60)
 #define PENDING_FOUND_MAX 5
 
+#define SETTINGS_PATH STORAGEDIR "/%s/settings"
+
 static GSList *adapter_drivers = NULL;
 
 enum session_req_type {
@@ -209,6 +212,56 @@ static uint8_t get_mode(const char *mode)
 		return MODE_UNKNOWN;
 }
 
+static void store_adapter_info(struct btd_adapter *adapter)
+{
+	GKeyFile *key_file;
+	char filename[PATH_MAX + 1];
+	char address[18];
+	char *str;
+	gsize length = 0;
+
+	key_file = g_key_file_new();
+
+	g_key_file_set_string(key_file, "General", "Name", adapter->name);
+
+	str = g_strdup_printf("0x%2.2x%2.2x%2.2x",
+				(adapter->dev_class >> 16) & 0xFF,
+				(adapter->dev_class >> 8) & 0xFF,
+				adapter->dev_class & 0xFF);
+	g_key_file_set_string(key_file, "General", "Class", str);
+	g_free(str);
+
+	g_key_file_set_boolean(key_file, "General", "Powered",
+				adapter->mode > MODE_OFF);
+
+	g_key_file_set_boolean(key_file, "General", "Pairable",
+				adapter->pairable);
+
+	if (adapter->pairable_timeout != main_opts.pairto)
+		g_key_file_set_integer(key_file, "General", "PairableTimeout",
+					adapter->pairable_timeout);
+
+	g_key_file_set_boolean(key_file, "General", "Discoverable",
+				adapter->discoverable);
+
+	if (adapter->discov_timeout != main_opts.discovto)
+		g_key_file_set_integer(key_file, "General",
+					"DiscoverableTimeout",
+					adapter->discov_timeout);
+
+	ba2str(&adapter->bdaddr, address);
+	snprintf(filename, PATH_MAX, SETTINGS_PATH, address);
+	filename[PATH_MAX] = '\0';
+
+	create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+
+	str = g_key_file_to_data(key_file, &length, NULL);
+	g_file_set_contents(filename, str, length, NULL);
+	g_free(str);
+
+	g_key_file_free(key_file);
+}
+
 static struct session_req *session_ref(struct session_req *req)
 {
 	req->refcount++;
@@ -278,7 +331,6 @@ static struct session_req *find_session_by_msg(GSList *list, const DBusMessage *
 static int set_mode(struct btd_adapter *adapter, uint8_t new_mode)
 {
 	int err;
-	const char *modestr;
 
 	if (adapter->pending_mode != NULL)
 		return -EALREADY;
@@ -310,10 +362,9 @@ static int set_mode(struct btd_adapter *adapter, uint8_t new_mode)
 		return err;
 
 done:
-	modestr = mode2str(new_mode);
-	write_device_mode(&adapter->bdaddr, modestr);
+	store_adapter_info(adapter);
 
-	DBG("%s", modestr);
+	DBG("%s", mode2str(new_mode));
 
 	return 0;
 }
@@ -451,7 +502,7 @@ void btd_adapter_pairable_changed(struct btd_adapter *adapter,
 {
 	adapter->pairable = pairable;
 
-	write_device_pairable(&adapter->bdaddr, pairable);
+	store_adapter_info(adapter);
 
 	g_dbus_emit_property_changed(btd_get_dbus_connection(), adapter->path,
 					ADAPTER_INTERFACE, "Pairable");
@@ -713,7 +764,7 @@ static void set_discoverable_timeout(struct btd_adapter *adapter,
 
 	adapter->discov_timeout = timeout;
 
-	write_discoverable_timeout(&adapter->bdaddr, timeout);
+	store_adapter_info(adapter);
 
 	g_dbus_emit_property_changed(conn, adapter->path, ADAPTER_INTERFACE,
 						"DiscoverableTimeout");
@@ -733,7 +784,7 @@ static void set_pairable_timeout(struct btd_adapter *adapter,
 
 	adapter->pairable_timeout = timeout;
 
-	write_pairable_timeout(&adapter->bdaddr, timeout);
+	store_adapter_info(adapter);
 
 	g_dbus_emit_property_changed(conn, adapter->path, ADAPTER_INTERFACE,
 							"PairableTimeout");
@@ -749,10 +800,10 @@ void btd_adapter_class_changed(struct btd_adapter *adapter, uint8_t *new_class)
 	if (class == adapter->dev_class)
 		return;
 
-	write_local_class(&adapter->bdaddr, new_class);
-
 	adapter->dev_class = class;
 
+	store_adapter_info(adapter);
+
 	if (main_opts.gatt_enabled) {
 		uint8_t cls[3];
 
@@ -806,7 +857,7 @@ int adapter_set_name(struct btd_adapter *adapter, const char *name)
 		adapter->name = g_strdup(maxname);
 	}
 
-	write_local_name(&adapter->bdaddr, maxname);
+	store_adapter_info(adapter);
 
 	return 0;
 }
@@ -2294,13 +2345,11 @@ static void set_mode_complete(struct btd_adapter *adapter)
 {
 	DBusConnection *conn = btd_get_dbus_connection();
 	struct session_req *pending;
-	const char *modestr;
 	int err;
 
-	modestr = mode2str(adapter->mode);
-	write_device_mode(&adapter->bdaddr, modestr);
+	store_adapter_info(adapter);
 
-	DBG("%s", modestr);
+	DBG("%s", mode2str(adapter->mode));
 
 	if (adapter->mode == MODE_OFF) {
 		g_slist_free_full(adapter->mode_sessions, session_free);
@@ -2462,58 +2511,153 @@ void btd_adapter_unref(struct btd_adapter *adapter)
 	g_free(path);
 }
 
-static void load_config(struct btd_adapter *adapter)
+static void convert_config(struct btd_adapter *adapter, const char *filename,
+				GKeyFile *key_file)
 {
-	char name[MAX_NAME_LENGTH + 1];
-	uint8_t class[3];
 	char address[18];
-	char mode[14];
+	char str[MAX_NAME_LENGTH + 1];
+	char config_path[PATH_MAX + 1];
+	char *converted;
+	uint8_t class[3];
+	gboolean flag;
 	int timeout;
+	uint8_t mode;
+	char *data;
+	gsize length = 0;
+
+	ba2str(&adapter->bdaddr, address);
+	snprintf(config_path, PATH_MAX, STORAGEDIR "/%s/config", address);
+	config_path[PATH_MAX] = '\0';
+
+	converted = textfile_get(config_path, "converted");
+	if (converted) {
+		if (strcmp(converted, "yes") == 0) {
+			DBG("Legacy config file already converted");
+			return;
+		}
+
+		g_free(converted);
+	}
+
+	if (read_local_name(&adapter->bdaddr, str) == 0)
+		g_key_file_set_string(key_file, "General", "Name", str);
+
+	if (read_local_class(&adapter->bdaddr, class) == 0) {
+		sprintf(str, "0x%2.2x%2.2x%2.2x", class[2], class[1], class[0]);
+		g_key_file_set_string(key_file, "General", "Class", str);
+	}
+
+	if (read_device_pairable(&adapter->bdaddr, &flag) == 0)
+		g_key_file_set_boolean(key_file, "General", "Pairable", flag);
+
+	if (read_pairable_timeout(address, &timeout) == 0)
+		g_key_file_set_integer(key_file, "General",
+						"PairableTimeout", timeout);
+
+	if (read_discoverable_timeout(address, &timeout) == 0)
+		g_key_file_set_integer(key_file, "General",
+						"DiscoverableTimeout", timeout);
+
+	if (read_device_mode(address, str, sizeof(str)) == 0) {
+		mode = get_mode(str);
+		g_key_file_set_boolean(key_file, "General", "Powered",
+					mode > MODE_OFF);
+	}
+
+	if (read_on_mode(address, str, sizeof(str)) == 0) {
+		mode = get_mode(str);
+		g_key_file_set_boolean(key_file, "General", "Discoverable",
+					mode == MODE_DISCOVERABLE);
+	}
+
+	create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+
+	data = g_key_file_to_data(key_file, &length, NULL);
+	g_file_set_contents(filename, data, length, NULL);
+	g_free(data);
+
+	textfile_put(config_path, "converted", "yes");
+}
+
+static void load_config(struct btd_adapter *adapter)
+{
+	GKeyFile *key_file;
+	char filename[PATH_MAX + 1];
+	char address[18];
+	char *str;
+	gboolean powered;
+	GError *gerr = NULL;
 
 	ba2str(&adapter->bdaddr, address);
 
+	key_file = g_key_file_new();
+
+	snprintf(filename, PATH_MAX, SETTINGS_PATH, address);
+	filename[PATH_MAX] = '\0';
+
+	if (!g_key_file_load_from_file(key_file, filename, 0, NULL))
+		convert_config(adapter, filename, key_file);
+
 	/* Get name */
-	if (read_local_name(&adapter->bdaddr, name) < 0)
-		adapter->name = NULL;
-	else
-		adapter->name = g_strdup(name);
+	adapter->name = g_key_file_get_string(key_file, "General",
+								"Name", NULL);
 
 	/* Get class */
-	if (read_local_class(&adapter->bdaddr, class) == 0)
-		adapter->dev_class = class[0] | (class[1] << 8) |
-					(class[2] << 16);
-	else
+	str = g_key_file_get_string(key_file, "General", "Class", NULL);
+	if (str) {
+		adapter->dev_class = strtol(str, NULL, 16);
+		g_free(str);
+	} else
 		adapter->dev_class = main_opts.class;
 
 	/* Get pairable mode */
-	if (read_device_pairable(&adapter->bdaddr, &adapter->pairable) < 0)
+	adapter->pairable = g_key_file_get_boolean(key_file, "General",
+							"Pairable", &gerr);
+	if (gerr) {
 		adapter->pairable = TRUE;
+		g_error_free(gerr);
+		gerr = NULL;
+	}
 
 	/* Get pairable timeout */
-	if (read_pairable_timeout(address, &timeout) < 0)
+	adapter->pairable_timeout = g_key_file_get_integer(key_file, "General",
+						"PairableTimeout", &gerr);
+	if (gerr) {
 		adapter->pairable_timeout = main_opts.pairto;
-	else
-		adapter->pairable_timeout = timeout;
+		g_error_free(gerr);
+		gerr = NULL;
+	}
+
+	/* Get discoverable mode */
+	adapter->discoverable = g_key_file_get_boolean(key_file, "General",
+							"Discoverable", &gerr);
+	if (gerr) {
+		adapter->discoverable = (main_opts.mode == MODE_DISCOVERABLE);
+		g_error_free(gerr);
+		gerr = NULL;
+	}
 
 	/* Get discoverable timeout */
-	if (read_discoverable_timeout(address, &timeout) < 0)
+	adapter->discov_timeout = g_key_file_get_integer(key_file, "General",
+						"DiscoverableTimeout", &gerr);
+	if (gerr) {
 		adapter->discov_timeout = main_opts.discovto;
-	else
-		adapter->discov_timeout = timeout;
+		g_error_free(gerr);
+		gerr = NULL;
+	}
 
-	/* Get mode */
-	if (main_opts.remember_powered == FALSE)
-		adapter->mode = main_opts.mode;
-	else if (read_device_mode(address, mode, sizeof(mode)) == 0)
-		adapter->mode = get_mode(mode);
-	else
+	/* Get powered mode */
+	powered = g_key_file_get_boolean(key_file, "General", "Powered",
+						&gerr);
+	if (gerr) {
 		adapter->mode = main_opts.mode;
-
-	/* Get on mode */
-	if (read_on_mode(address, mode, sizeof(mode)) == 0)
-		adapter->discoverable = (strcasecmp("discoverable", mode) == 0);
-	else
-		adapter->discoverable = (adapter->mode == MODE_DISCOVERABLE);
+		g_error_free(gerr);
+		gerr = NULL;
+	} else if (powered) {
+		adapter->mode = adapter->discoverable ? MODE_DISCOVERABLE :
+							MODE_CONNECTABLE;
+	} else
+		adapter->mode = MODE_OFF;
 
 	mgmt_set_connectable(adapter->dev_id, TRUE);
 	mgmt_set_discoverable(adapter->dev_id, adapter->discoverable,
-- 
1.7.9.5


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

* [PATCH v5 10/15] TODO: Add entry to remove storage convertion function
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
                   ` (8 preceding siblings ...)
  2012-10-18  9:00 ` [PATCH v5 09/15] adapter: Move saved config to ini-file format Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 11/15] adapter: Move storage names to cache directory Frédéric Danis
                   ` (4 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 TODO |    6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/TODO b/TODO
index ca72cd6..bc9bf9c 100644
--- a/TODO
+++ b/TODO
@@ -30,6 +30,12 @@ General
   Priority: Low
   Complexity: C1
 
+- Function in src/adapter.c to convert old storage files to new ini-file format
+  should be removed 6-8 months after first BlueZ 5 release.
+
+  Priority: Low
+  Complexity: C1
+
 BlueZ 5
 =======
 
-- 
1.7.9.5


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

* [PATCH v5 11/15] adapter: Move storage names to cache directory
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
                   ` (9 preceding siblings ...)
  2012-10-18  9:00 ` [PATCH v5 10/15] TODO: Add entry to remove storage convertion function Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 12/15] device: Retrieve name from " Frédéric Danis
                   ` (3 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 src/adapter.c |  106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 src/event.c   |   51 ++++++++++++++++++++++++---
 2 files changed, 150 insertions(+), 7 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index 30fda1f..ca47111 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2511,6 +2511,83 @@ void btd_adapter_unref(struct btd_adapter *adapter)
 	g_free(path);
 }
 
+struct converter {
+	char *addr;
+	char *group;
+	char *key;
+};
+
+static void convert_cache(char *key, char *value, void *user_data)
+{
+	struct converter *convert = user_data;
+	char filename[PATH_MAX + 1];
+	char *str = key;
+	GKeyFile *key_file;
+	char *data;
+	gsize length = 0;
+
+	if (strchr(key, '#'))
+		str[17] = '\0';
+
+	if (bachk(str) != 0)
+		return;
+
+	snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", convert->addr,
+			str);
+	filename[PATH_MAX] = '\0';
+	create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+
+	key_file = g_key_file_new();
+	g_key_file_load_from_file(key_file, filename, 0, NULL);
+	g_key_file_set_string(key_file, convert->group, convert->key, value);
+
+	data = g_key_file_to_data(key_file, &length, NULL);
+	g_file_set_contents(filename, data, length, NULL);
+	g_free(data);
+
+	g_key_file_free(key_file);
+}
+
+static void convert_device_storage(struct btd_adapter *adapter)
+{
+	char filename[PATH_MAX + 1];
+	char address[18];
+	char *str;
+	struct converter convert;
+
+	ba2str(&adapter->bdaddr, address);
+	convert.addr = address;
+	convert.group = "General";
+
+	/* Convert device's name cache */
+	snprintf(filename, PATH_MAX, STORAGEDIR "/%s/names", address);
+	filename[PATH_MAX] = '\0';
+
+	str = textfile_get(filename, "converted");
+	if (str && strcmp(str, "yes") == 0) {
+		DBG("Legacy names file already converted");
+	} else {
+		convert.key = "Name";
+		textfile_foreach(filename, convert_cache, &convert);
+		textfile_put(filename, "converted", "yes");
+	}
+	free(str);
+
+	/* Convert lastseen device cache */
+	snprintf(filename, PATH_MAX, STORAGEDIR "/%s/lastseen", address);
+	filename[PATH_MAX] = '\0';
+
+	str = textfile_get(filename, "converted");
+	if (str && strcmp(str, "yes") == 0) {
+		DBG("Legacy lastseen file already converted");
+	} else {
+		convert.key = "LastSeen";
+		textfile_foreach(filename, convert_cache, &convert);
+		textfile_put(filename, "converted", "yes");
+	}
+	free(str);
+}
+
 static void convert_config(struct btd_adapter *adapter, const char *filename,
 				GKeyFile *key_file)
 {
@@ -2684,6 +2761,7 @@ gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
 		btd_adapter_gatt_server_start(adapter);
 
 	load_config(adapter);
+	convert_device_storage(adapter);
 	load_drivers(adapter);
 	btd_profile_foreach(probe_profile, adapter);
 	clear_blocked(adapter);
@@ -2965,9 +3043,31 @@ void adapter_update_found_devices(struct btd_adapter *adapter,
 		write_remote_appearance(&adapter->bdaddr, bdaddr, bdaddr_type,
 							eir_data.appearance);
 
-	if (eir_data.name != NULL && eir_data.name_complete)
-		write_device_name(&adapter->bdaddr, bdaddr, bdaddr_type,
-								eir_data.name);
+	if (eir_data.name != NULL && eir_data.name_complete) {
+		char filename[PATH_MAX + 1];
+		char s_addr[18], d_addr[18];
+		GKeyFile *key_file;
+		char *data;
+		gsize length = 0;
+
+		ba2str(&adapter->bdaddr, s_addr);
+		ba2str(bdaddr, d_addr);
+		snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s",
+				s_addr, d_addr);
+		filename[PATH_MAX] = '\0';
+		create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+
+		key_file = g_key_file_new();
+		g_key_file_load_from_file(key_file, filename, 0, NULL);
+		g_key_file_set_string(key_file, "General", "Name",
+					eir_data.name);
+
+		data = g_key_file_to_data(key_file, &length, NULL);
+		g_file_set_contents(filename, data, length, NULL);
+		g_free(data);
+
+		g_key_file_free(key_file);
+	}
 
 	/* Avoid creating LE device if it's not discoverable */
 	if (bdaddr_type != BDADDR_BREDR &&
diff --git a/src/event.c b/src/event.c
index 48aeffd..b9eb368 100644
--- a/src/event.c
+++ b/src/event.c
@@ -34,6 +34,7 @@
 #include <stdlib.h>
 #include <stdbool.h>
 #include <string.h>
+#include <sys/stat.h>
 
 #include <bluetooth/bluetooth.h>
 
@@ -224,11 +225,36 @@ static void update_lastseen(bdaddr_t *sba, bdaddr_t *dba, uint8_t dba_type)
 {
 	time_t t;
 	struct tm *tm;
+	char filename[PATH_MAX + 1];
+	char s_addr[18], d_addr[18];
+	char str[24];
+	GKeyFile *key_file;
+	char *data;
+	gsize length = 0;
 
 	t = time(NULL);
 	tm = gmtime(&t);
 
-	write_lastseen_info(sba, dba, dba_type, tm);
+
+	memset(str, 0, sizeof(str));
+	strftime(str, sizeof(str), "%Y-%m-%d %H:%M:%S %Z", tm);
+
+	ba2str(sba, s_addr);
+	ba2str(dba, d_addr);
+	snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", s_addr,
+			d_addr);
+	filename[PATH_MAX] = '\0';
+	create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+
+	key_file = g_key_file_new();
+	g_key_file_load_from_file(key_file, filename, 0, NULL);
+	g_key_file_set_string(key_file, "General", "LastSeen", str);
+
+	data = g_key_file_to_data(key_file, &length, NULL);
+	g_file_set_contents(filename, data, length, NULL);
+	g_free(data);
+
+	g_key_file_free(key_file);
 }
 
 static void update_lastused(bdaddr_t *sba, bdaddr_t *dba, uint8_t dba_type)
@@ -265,7 +291,11 @@ void btd_event_remote_name(bdaddr_t *local, bdaddr_t *peer, char *name)
 {
 	struct btd_adapter *adapter;
 	struct btd_device *device;
-	uint8_t peer_type;
+	char filename[PATH_MAX + 1];
+	char local_addr[18], peer_addr[18];
+	GKeyFile *key_file;
+	char *data;
+	gsize length = 0;
 
 	if (!g_utf8_validate(name, -1, NULL)) {
 		int i;
@@ -282,9 +312,22 @@ void btd_event_remote_name(bdaddr_t *local, bdaddr_t *peer, char *name)
 	if (!get_adapter_and_device(local, peer, &adapter, &device, FALSE))
 		return;
 
-	peer_type = device_get_addr_type(device);
+	ba2str(local, local_addr);
+	ba2str(peer, peer_addr);
+	snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", local_addr,
+			peer_addr);
+	filename[PATH_MAX] = '\0';
+	create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+
+	key_file = g_key_file_new();
+	g_key_file_load_from_file(key_file, filename, 0, NULL);
+	g_key_file_set_string(key_file, "General", "Name", name);
+
+	data = g_key_file_to_data(key_file, &length, NULL);
+	g_file_set_contents(filename, data, length, NULL);
+	g_free(data);
 
-	write_device_name(local, peer, peer_type, name);
+	g_key_file_free(key_file);
 
 	if (device)
 		device_set_name(device, name);
-- 
1.7.9.5


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

* [PATCH v5 12/15] device: Retrieve name from cache directory
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
                   ` (10 preceding siblings ...)
  2012-10-18  9:00 ` [PATCH v5 11/15] adapter: Move storage names to cache directory Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 13/15] dbusoob: Store device name in " Frédéric Danis
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 src/device.c |   25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/device.c b/src/device.c
index bb0f890..5eecbb3 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1589,6 +1589,8 @@ struct btd_device *device_create(struct btd_adapter *adapter,
 	const bdaddr_t *src;
 	char srcaddr[18], alias[MAX_NAME_LENGTH + 1];
 	uint16_t vendor, product, version;
+	char filename[PATH_MAX + 1];
+	GKeyFile *key_file;
 
 	device = g_try_malloc0(sizeof(struct btd_device));
 	if (device == NULL)
@@ -1616,7 +1618,28 @@ struct btd_device *device_create(struct btd_adapter *adapter,
 	src = adapter_get_address(adapter);
 	ba2str(src, srcaddr);
 
-	read_device_name(srcaddr, address, bdaddr_type, device->name);
+	snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", srcaddr,
+			address);
+	filename[PATH_MAX] = '\0';
+	key_file = g_key_file_new();
+
+	if (g_key_file_load_from_file(key_file, filename, 0, NULL)) {
+		char *str;
+		int len;
+
+		str = g_key_file_get_string(key_file, "General", "Name", NULL);
+		if (str) {
+			len = strlen(str);
+			if (len > HCI_MAX_NAME_LENGTH)
+				str[HCI_MAX_NAME_LENGTH] = '\0';
+
+			strcpy(device->name, str);
+			g_free(str);
+		}
+	}
+
+	g_key_file_free(key_file);
+
 	if (read_device_alias(srcaddr, address, bdaddr_type, alias,
 							sizeof(alias)) == 0)
 		device->alias = g_strdup(alias);
-- 
1.7.9.5


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

* [PATCH v5 13/15] dbusoob: Store device name in cache directory
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
                   ` (11 preceding siblings ...)
  2012-10-18  9:00 ` [PATCH v5 12/15] device: Retrieve name from " Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 14/15] input: Retrieve device name from " Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 15/15] hcitool: Retrieve names " Frédéric Danis
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 plugins/dbusoob.c |   26 +++++++++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)

diff --git a/plugins/dbusoob.c b/plugins/dbusoob.c
index 5c5b6ef..82d512c 100644
--- a/plugins/dbusoob.c
+++ b/plugins/dbusoob.c
@@ -31,6 +31,7 @@
 
 #include <errno.h>
 #include <gdbus.h>
+#include <sys/stat.h>
 
 #include <bluetooth/bluetooth.h>
 #include <bluetooth/hci.h>
@@ -194,6 +195,11 @@ static gboolean parse_data(DBusMessageIter *data, struct oob_data *remote_data)
 static gboolean store_data(struct btd_adapter *adapter, struct oob_data *data)
 {
 	bdaddr_t bdaddr;
+	char filename[PATH_MAX + 1];
+	char s_addr[18];
+	GKeyFile *key_file;
+	char *str;
+	gsize length = 0;
 
 	str2ba(data->addr, &bdaddr);
 
@@ -207,9 +213,23 @@ static gboolean store_data(struct btd_adapter *adapter, struct oob_data *data)
 		write_remote_class(adapter_get_address(adapter), &bdaddr,
 								data->class);
 
-	if (data->name)
-		write_device_name(adapter_get_address(adapter), &bdaddr, 0,
-								data->name);
+	if (data->name) {
+		ba2str(adapter_get_address(adapter), s_addr);
+		snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s",
+				s_addr, data->addr);
+		filename[PATH_MAX] = '\0';
+		create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+
+		key_file = g_key_file_new();
+		g_key_file_load_from_file(key_file, filename, 0, NULL);
+		g_key_file_set_string(key_file, "General", "Name", data->name);
+
+		str = g_key_file_to_data(key_file, &length, NULL);
+		g_file_set_contents(filename, str, length, NULL);
+		g_free(str);
+
+		g_key_file_free(key_file);
+	}
 
 	return TRUE;
 }
-- 
1.7.9.5


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

* [PATCH v5 14/15] input: Retrieve device name from cache directory
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
                   ` (12 preceding siblings ...)
  2012-10-18  9:00 ` [PATCH v5 13/15] dbusoob: Store device name in " Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  2012-10-18  9:00 ` [PATCH v5 15/15] hcitool: Retrieve names " Frédéric Danis
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 profiles/input/device.c |   26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/profiles/input/device.c b/profiles/input/device.c
index 997235b..f4f4f65 100644
--- a/profiles/input/device.c
+++ b/profiles/input/device.c
@@ -37,6 +37,7 @@
 #include <bluetooth/sdp_lib.h>
 #include <bluetooth/uuid.h>
 
+#include <glib.h>
 #include <gdbus.h>
 
 #include "log.h"
@@ -762,7 +763,9 @@ static struct input_device *input_device_new(struct btd_device *device,
 {
 	struct btd_adapter *adapter = device_get_adapter(device);
 	struct input_device *idev;
-	char name[249], src_addr[18], dst_addr[18];
+	char src_addr[18], dst_addr[18];
+	char filename[PATH_MAX + 1];
+	GKeyFile *key_file;
 
 	idev = g_new0(struct input_device, 1);
 	bacpy(&idev->src, adapter_get_address(adapter));
@@ -775,9 +778,24 @@ static struct input_device *input_device_new(struct btd_device *device,
 	ba2str(&idev->src, src_addr);
 	ba2str(&idev->dst, dst_addr);
 
-	if (read_device_name(src_addr, dst_addr, device_get_addr_type(device),
-				name) == 0)
-		idev->name = g_strdup(name);
+	snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", src_addr,
+			dst_addr);
+	filename[PATH_MAX] = '\0';
+	key_file = g_key_file_new();
+
+	if (g_key_file_load_from_file(key_file, filename, 0, NULL)) {
+		int len;
+
+		idev->name = g_key_file_get_string(key_file, "General",
+								"Name", NULL);
+		if (idev->name) {
+			len = strlen(idev->name);
+			if (len > HCI_MAX_NAME_LENGTH)
+				idev->name[HCI_MAX_NAME_LENGTH] = '\0';
+		}
+	}
+
+	g_key_file_free(key_file);
 
 	if (g_dbus_register_interface(btd_get_dbus_connection(),
 					idev->path, INPUT_DEVICE_INTERFACE,
-- 
1.7.9.5


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

* [PATCH v5 15/15] hcitool: Retrieve names from cache directory
  2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
                   ` (13 preceding siblings ...)
  2012-10-18  9:00 ` [PATCH v5 14/15] input: Retrieve device name from " Frédéric Danis
@ 2012-10-18  9:00 ` Frédéric Danis
  14 siblings, 0 replies; 20+ messages in thread
From: Frédéric Danis @ 2012-10-18  9:00 UTC (permalink / raw)
  To: linux-bluetooth

---
 Makefile.tools  |    2 +-
 tools/hcitool.c |   31 ++++++++++++++++++++++++++-----
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/Makefile.tools b/Makefile.tools
index e1f693c..a6adbed 100644
--- a/Makefile.tools
+++ b/Makefile.tools
@@ -28,7 +28,7 @@ tools_hciconfig_LDADD = lib/libbluetooth-private.la
 
 tools_hcitool_SOURCES = tools/hcitool.c src/oui.h src/oui.c \
 						src/textfile.h src/textfile.c
-tools_hcitool_LDADD = lib/libbluetooth-private.la
+tools_hcitool_LDADD = lib/libbluetooth-private.la @GLIB_LIBS@
 
 tools_sdptool_SOURCES = tools/sdptool.c src/sdp-xml.h src/sdp-xml.c
 tools_sdptool_LDADD = lib/libbluetooth-private.la @GLIB_LIBS@
diff --git a/tools/hcitool.c b/tools/hcitool.c
index aefbd68..a05e31f 100644
--- a/tools/hcitool.c
+++ b/tools/hcitool.c
@@ -40,6 +40,8 @@
 #include <sys/socket.h>
 #include <signal.h>
 
+#include <glib.h>
+
 #include <bluetooth/bluetooth.h>
 #include <bluetooth/hci.h>
 #include <bluetooth/hci_lib.h>
@@ -409,13 +411,32 @@ static char *major_classes[] = {
 
 static char *get_device_name(const bdaddr_t *local, const bdaddr_t *peer)
 {
-	char filename[PATH_MAX + 1], addr[18];
+	char filename[PATH_MAX + 1];
+	char local_addr[18], peer_addr[18];
+	GKeyFile *key_file;
+	char *str = NULL;
+	int len;
+
+	ba2str(local, local_addr);
+	ba2str(peer, peer_addr);
+
+	snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", local_addr,
+			peer_addr);
+	filename[PATH_MAX] = '\0';
+	key_file = g_key_file_new();
+
+	if (g_key_file_load_from_file(key_file, filename, 0, NULL)) {
+		str = g_key_file_get_string(key_file, "General", "Name", NULL);
+		if (str) {
+			len = strlen(str);
+			if (len > HCI_MAX_NAME_LENGTH)
+				str[HCI_MAX_NAME_LENGTH] = '\0';
+		}
+	}
 
-	ba2str(local, addr);
-	create_name(filename, PATH_MAX, STORAGEDIR, addr, "names");
+	g_key_file_free(key_file);
 
-	ba2str(peer, addr);
-	return textfile_get(filename, addr);
+	return str;
 }
 
 /* Display local devices */
-- 
1.7.9.5


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

* Re: [PATCH v5 01/15] doc: Add settings storage documentation
  2012-10-18  9:00 ` [PATCH v5 01/15] doc: Add settings storage documentation Frédéric Danis
@ 2012-10-18 14:02   ` Daniel Wagner
  2012-10-18 14:31     ` Frederic Danis
  0 siblings, 1 reply; 20+ messages in thread
From: Daniel Wagner @ 2012-10-18 14:02 UTC (permalink / raw)
  To: Frédéric Danis; +Cc: linux-bluetooth

Hi Frédéric,

On 18.10.2012 11:00, Frédéric Danis wrote:
> ---
>   doc/settings-storage.txt |  106 ++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 106 insertions(+)
>   create mode 100644 doc/settings-storage.txt
>
> diff --git a/doc/settings-storage.txt b/doc/settings-storage.txt
> new file mode 100644
> index 0000000..bc9ac66
> --- /dev/null
> +++ b/doc/settings-storage.txt
> @@ -0,0 +1,106 @@
> +Information related to local adapters and remote devices are stored in storage
> +directory (default: /var/lib/bluetooth).
> +Files are in ini-file format.
> +
> +There is one directory per adapter, named by its bluetooth address, which
> +contains:
> + - a settings file for the local adapter
> + - an attribute_db file containing attributes of supported LE services
> + - names file containing names of all devices already seen
> + - one directory per remote device, named by remote device address, which
> +   contains:
> +    - a settings file
> +    - a key file accessible only by root
> +    - an attribute_db file containing attributes of remote LE services
> +
> +So the directory structure should be:

"should be" -> "is"?

cheers,
daniel

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

* Re: [PATCH v5 02/15] adapter: Read name in storage at init
  2012-10-18  9:00 ` [PATCH v5 02/15] adapter: Read name in storage at init Frédéric Danis
@ 2012-10-18 14:04   ` Daniel Wagner
  2012-10-18 14:41     ` Frederic Danis
  0 siblings, 1 reply; 20+ messages in thread
From: Daniel Wagner @ 2012-10-18 14:04 UTC (permalink / raw)
  To: Frédéric Danis; +Cc: linux-bluetooth

On 18.10.2012 11:00, Frédéric Danis wrote:
> ---
>   src/adapter.c |   13 +++++++++++++
>   1 file changed, 13 insertions(+)
>
> diff --git a/src/adapter.c b/src/adapter.c
> index 3b24816..233527a 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -2506,6 +2506,18 @@ void btd_adapter_unref(struct btd_adapter *adapter)
>   	g_free(path);
>   }
>
> +static void load_config(struct btd_adapter *adapter)
> +{
> +	char name[MAX_NAME_LENGTH + 1];
> +
> +	/* Get name */
> +	if (read_local_name(&adapter->bdaddr, name) < 0)
> +		adapter->name = NULL;
> +	else
> +		adapter->name = g_strdup(name);
> +
> +}

Why is this function called load_config when then comment above says 
'Get name'? Or is there more code added in the next patches?


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

* Re: [PATCH v5 01/15] doc: Add settings storage documentation
  2012-10-18 14:02   ` Daniel Wagner
@ 2012-10-18 14:31     ` Frederic Danis
  0 siblings, 0 replies; 20+ messages in thread
From: Frederic Danis @ 2012-10-18 14:31 UTC (permalink / raw)
  To: Daniel Wagner; +Cc: linux-bluetooth

Hello Daniel,

On 18/10/2012 16:02, Daniel Wagner wrote:
> Hi Frédéric,
>
> On 18.10.2012 11:00, Frédéric Danis wrote:
>> ---
>>   doc/settings-storage.txt |  106
>> ++++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 106 insertions(+)
>>   create mode 100644 doc/settings-storage.txt
>>
>> diff --git a/doc/settings-storage.txt b/doc/settings-storage.txt
>> new file mode 100644
>> index 0000000..bc9ac66
>> --- /dev/null
>> +++ b/doc/settings-storage.txt
>> @@ -0,0 +1,106 @@
>> +Information related to local adapters and remote devices are stored
>> in storage
>> +directory (default: /var/lib/bluetooth).
>> +Files are in ini-file format.
>> +
>> +There is one directory per adapter, named by its bluetooth address,
>> which
>> +contains:
>> + - a settings file for the local adapter
>> + - an attribute_db file containing attributes of supported LE services
>> + - names file containing names of all devices already seen
>> + - one directory per remote device, named by remote device address,
>> which
>> +   contains:
>> +    - a settings file
>> +    - a key file accessible only by root
>> +    - an attribute_db file containing attributes of remote LE services
>> +
>> +So the directory structure should be:
>
> "should be" -> "is"?

You're right, I will change it.
Thanks

Regards

Fred


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


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

* Re: [PATCH v5 02/15] adapter: Read name in storage at init
  2012-10-18 14:04   ` Daniel Wagner
@ 2012-10-18 14:41     ` Frederic Danis
  0 siblings, 0 replies; 20+ messages in thread
From: Frederic Danis @ 2012-10-18 14:41 UTC (permalink / raw)
  To: Daniel Wagner; +Cc: linux-bluetooth

Hello Daniel,

On 18/10/2012 16:04, Daniel Wagner wrote:
> On 18.10.2012 11:00, Frédéric Danis wrote:
>> ---
>>   src/adapter.c |   13 +++++++++++++
>>   1 file changed, 13 insertions(+)
>>
>> diff --git a/src/adapter.c b/src/adapter.c
>> index 3b24816..233527a 100644
>> --- a/src/adapter.c
>> +++ b/src/adapter.c
>> @@ -2506,6 +2506,18 @@ void btd_adapter_unref(struct btd_adapter
>> *adapter)
>>       g_free(path);
>>   }
>>
>> +static void load_config(struct btd_adapter *adapter)
>> +{
>> +    char name[MAX_NAME_LENGTH + 1];
>> +
>> +    /* Get name */
>> +    if (read_local_name(&adapter->bdaddr, name) < 0)
>> +        adapter->name = NULL;
>> +    else
>> +        adapter->name = g_strdup(name);
>> +
>> +}
>
> Why is this function called load_config when then comment above says
> 'Get name'? Or is there more code added in the next patches?

This function grows in following patches while it reads more settings 
during adapter initialization.

Regards

Fred

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


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

end of thread, other threads:[~2012-10-18 14:41 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-18  9:00 [PATCH v5 00/15] Move storage config and names files to ini-file format Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 01/15] doc: Add settings storage documentation Frédéric Danis
2012-10-18 14:02   ` Daniel Wagner
2012-10-18 14:31     ` Frederic Danis
2012-10-18  9:00 ` [PATCH v5 02/15] adapter: Read name in storage at init Frédéric Danis
2012-10-18 14:04   ` Daniel Wagner
2012-10-18 14:41     ` Frederic Danis
2012-10-18  9:00 ` [PATCH v5 03/15] adaptername: Retrieve config name from adapter Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 04/15] adapter: Read device class in storage at init Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 05/15] adapter: Move pairable read to load_config() Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 06/15] adapter: Read pairable timeout in storage at init Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 07/15] adapter: Read discoverable " Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 08/15] adapter: Read mode " Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 09/15] adapter: Move saved config to ini-file format Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 10/15] TODO: Add entry to remove storage convertion function Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 11/15] adapter: Move storage names to cache directory Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 12/15] device: Retrieve name from " Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 13/15] dbusoob: Store device name in " Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 14/15] input: Retrieve device name from " Frédéric Danis
2012-10-18  9:00 ` [PATCH v5 15/15] hcitool: Retrieve names " Frédéric Danis

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).