diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2006-02-24 02:04:08 +0000 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2006-02-24 02:04:08 +0000 |
commit | 5aa5d226872dc680d834096185d492ad715a5cc6 (patch) | |
tree | 1084ec8046c84f0f9ec16039660c9a47a6c705f8 /hcid/storage.c | |
parent | 1670b1237dee92f83cb46ea0d9840d88dd49c57a (diff) |
Add support for remembering the PIN code length
Diffstat (limited to 'hcid/storage.c')
-rw-r--r-- | hcid/storage.c | 36 |
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; |