summaryrefslogtreecommitdiffstats
path: root/hcid/storage.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2006-02-24 02:04:08 +0000
committerMarcel Holtmann <marcel@holtmann.org>2006-02-24 02:04:08 +0000
commit5aa5d226872dc680d834096185d492ad715a5cc6 (patch)
tree1084ec8046c84f0f9ec16039660c9a47a6c705f8 /hcid/storage.c
parent1670b1237dee92f83cb46ea0d9840d88dd49c57a (diff)
Add support for remembering the PIN code length
Diffstat (limited to 'hcid/storage.c')
-rw-r--r--hcid/storage.c36
1 files changed, 33 insertions, 3 deletions
diff --git a/hcid/storage.c b/hcid/storage.c
index a553ae96..3040264d 100644
--- a/hcid/storage.c
+++ b/hcid/storage.c
@@ -153,15 +153,15 @@ int write_lastused_info(bdaddr_t *local, bdaddr_t *peer, struct tm *tm)
return textfile_put(filename, addr, str);
}
-int write_link_key(bdaddr_t *local, bdaddr_t *peer, unsigned char *key, int type)
+int write_link_key(bdaddr_t *local, bdaddr_t *peer, unsigned char *key, int type, int length)
{
- char filename[PATH_MAX + 1], addr[18], str[35];
+ char filename[PATH_MAX + 1], addr[18], str[38];
int i;
memset(str, 0, sizeof(str));
for (i = 0; i < 16; i++)
sprintf(str + (i * 2), "%2.2X", key[i]);
- sprintf(str + 32, " %d", type);
+ sprintf(str + 32, " %d %d", type, length);
ba2str(local, addr);
snprintf(filename, PATH_MAX, "%s/%s/linkkeys", STORAGEDIR, addr);
@@ -169,6 +169,13 @@ int write_link_key(bdaddr_t *local, bdaddr_t *peer, unsigned char *key, int type
create_file(filename, S_IRUSR | S_IWUSR);
ba2str(peer, addr);
+
+ if (length < 0) {
+ char *tmp = textfile_get(filename, addr);
+ if (tmp && strlen(tmp) > 34)
+ memcpy(str + 34, tmp + 34, 3);
+ }
+
return textfile_put(filename, addr, str);
}
@@ -196,6 +203,29 @@ int read_link_key(bdaddr_t *local, bdaddr_t *peer, unsigned char *key)
return 0;
}
+int read_pin_length(bdaddr_t *local, bdaddr_t *peer)
+{
+ char filename[PATH_MAX + 1], addr[18], *str;
+ int len;
+
+ ba2str(local, addr);
+ snprintf(filename, PATH_MAX, "%s/%s/linkkeys", STORAGEDIR, addr);
+
+ ba2str(peer, addr);
+ str = textfile_get(filename, addr);
+ if (!str)
+ return -ENOENT;
+
+ if (strlen(str) < 36)
+ return -ENOENT;
+
+ len = atoi(str + 35);
+
+ free(str);
+
+ return len;
+}
+
int read_pin_code(bdaddr_t *local, bdaddr_t *peer, char *pin)
{
char filename[PATH_MAX + 1], addr[18], *str;