summaryrefslogtreecommitdiff
path: root/src/storage.c
diff options
context:
space:
mode:
authorPaulo Alcantara <paulo.alcantara@openbossa.org>2012-07-27 16:43:20 -0300
committerJohan Hedberg <johan.hedberg@intel.com>2012-07-29 20:09:12 +0200
commit85128d40f4788acb0115f09c07b716e741444406 (patch)
tree7b286b47e724404bc9c12ac8fa31bce6eb53b194 /src/storage.c
parent6098a13f6065baa755b9fd5d2e58d70f0107c09b (diff)
downloadbluez-85128d40f4788acb0115f09c07b716e741444406.tar.gz
storage: Store address type in "linkkeys" file
Diffstat (limited to 'src/storage.c')
-rw-r--r--src/storage.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/storage.c b/src/storage.c
index 864f2fd36..adaa26f1e 100644
--- a/src/storage.c
+++ b/src/storage.c
@@ -608,9 +608,10 @@ int write_lastused_info(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
return textfile_put(filename, key, str);
}
-int write_link_key(bdaddr_t *local, bdaddr_t *peer, unsigned char *key, uint8_t type, int length)
+int write_link_key(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
+ unsigned char *key, uint8_t type, int length)
{
- char filename[PATH_MAX + 1], addr[18], str[38];
+ char filename[PATH_MAX + 1], addr[20], str[38];
int i;
memset(str, 0, sizeof(str));
@@ -623,6 +624,7 @@ int write_link_key(bdaddr_t *local, bdaddr_t *peer, unsigned char *key, uint8_t
create_file(filename, S_IRUSR | S_IWUSR);
ba2str(peer, addr);
+ sprintf(&addr[17], "#%hhu", peer_type);
if (length < 0) {
char *tmp = textfile_get(filename, addr);
@@ -636,18 +638,29 @@ int write_link_key(bdaddr_t *local, bdaddr_t *peer, unsigned char *key, uint8_t
return textfile_put(filename, addr, str);
}
-int read_link_key(bdaddr_t *local, bdaddr_t *peer, unsigned char *key, uint8_t *type)
+int read_link_key(bdaddr_t *local, bdaddr_t *peer, uint8_t peer_type,
+ unsigned char *key, uint8_t *type)
{
- char filename[PATH_MAX + 1], addr[18], tmp[3], *str;
+ char filename[PATH_MAX + 1], addr[20], tmp[3], *str;
int i;
create_filename(filename, PATH_MAX, local, "linkkeys");
ba2str(peer, addr);
+ sprintf(&addr[17], "#%hhu", peer_type);
+
+ str = textfile_get(filename, addr);
+ if (str != NULL)
+ goto done;
+
+ /* Try old format (address only) */
+ addr[17] = '\0';
+
str = textfile_get(filename, addr);
if (!str)
return -ENOENT;
+done:
if (!key) {
free(str);
return 0;