#include <sys/time.h>
#include <bluetooth.h>
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include <unistd.h>
#include "bthcid.h"
#if 0
static const char *key_file = "/var/db/bthcid.keys";
static const char *new_key_file = "/var/db/bthcid.keys.new";
#endif
uint8_t *
lookup_key(bdaddr_t *laddr, bdaddr_t *raddr)
{
link_key_p key = NULL;
syslog(LOG_DEBUG, "Got Link_Key_Request event from '%s', " \
"remote bdaddr %s", bt_ntoa(laddr, NULL),
bt_ntoa(raddr, NULL));
if ((key = get_key(raddr, 0)) != NULL) {
syslog(LOG_DEBUG, "Found matching entry, " \
"remote bdaddr %s, name '%s', link key %s",
bt_ntoa(&key->bdaddr, NULL),
(key->name != NULL)? key->name : "No name",
(key->key != NULL)? "exists" : "doesn't exist");
return key->key;
}
syslog(LOG_DEBUG, "Could not find link key for remote bdaddr %s",
bt_ntoa(raddr, NULL));
return NULL;
}
uint8_t *
lookup_pin_conf(bdaddr_t *laddr, bdaddr_t *raddr)
{
link_key_p key = NULL;
syslog(LOG_DEBUG, "Got Link_Pin_Request event from '%s', " \
"remote bdaddr %s", bt_ntoa(laddr, NULL),
bt_ntoa(raddr, NULL));
if ((key = get_key(raddr, 0)) != NULL) {
syslog(LOG_DEBUG, "Found matching entry, " \
"remote bdaddr %s, name '%s', pin %s",
bt_ntoa(&key->bdaddr, NULL),
(key->name != NULL)? key->name : "No name",
(key->pin != NULL)? "exists" : "doesn't exist");
return key->pin;
}
syslog(LOG_DEBUG, "Could not find link key for remote bdaddr %s",
bt_ntoa(raddr, NULL));
return NULL;
}
void
save_key(bdaddr_t *laddr, bdaddr_t *raddr, uint8_t * key)
{
link_key_p lkey = NULL;
syslog(LOG_DEBUG, "Got Link_Key_Notification event from '%s', " \
"remote bdaddr %s", bt_ntoa(laddr, NULL),
bt_ntoa(raddr, NULL));
if ((lkey = get_key(raddr, 1)) == NULL) {
syslog(LOG_ERR, "Could not find entry for remote bdaddr %s",
bt_ntoa(raddr, NULL));
return;
}
syslog(LOG_DEBUG, "Updating link key for the entry, " \
"remote bdaddr %s, name '%s', link key %s",
bt_ntoa(&lkey->bdaddr, NULL),
(lkey->name != NULL)? lkey->name : "No name",
(lkey->key != NULL)? "exists" : "doesn't exist");
if (lkey->key == NULL) {
lkey->key = (uint8_t *) malloc(HCI_KEY_SIZE);
if (lkey->key == NULL) {
syslog(LOG_ERR, "Could not allocate link key");
exit(1);
}
}
memcpy(lkey->key, key, HCI_KEY_SIZE);
dump_keys_file();
read_config_file();
read_keys_file();
return;
}