Clean up hciops code
Get rid of unnecessary variables now that the most important info is
tracked in the devs table.
diff --git a/plugins/hciops.c b/plugins/hciops.c
index 57c1890..0a32a0f 100644
--- a/plugins/hciops.c
+++ b/plugins/hciops.c
@@ -263,21 +263,19 @@
/* Start of HCI event callbacks */
-static int get_handle(int dev, bdaddr_t *sba, bdaddr_t *dba, uint16_t *handle)
+static int get_handle(int index, bdaddr_t *dba, uint16_t *handle)
{
struct hci_conn_list_req *cl;
struct hci_conn_info *ci;
- char addr[18];
int i;
cl = g_malloc0(10 * sizeof(*ci) + sizeof(*cl));
- ba2str(sba, addr);
- cl->dev_id = hci_devid(addr);
+ cl->dev_id = index;
cl->conn_num = 10;
ci = cl->conn_info;
- if (ioctl(dev, HCIGETCONNLIST, (void *) cl) < 0) {
+ if (ioctl(SK(index), HCIGETCONNLIST, (void *) cl) < 0) {
g_free(cl);
return -EIO;
}
@@ -295,21 +293,19 @@
return -ENOENT;
}
-static inline int get_bdaddr(int dev, bdaddr_t *sba, uint16_t handle, bdaddr_t *dba)
+static inline int get_bdaddr(int index, uint16_t handle, bdaddr_t *dba)
{
struct hci_conn_list_req *cl;
struct hci_conn_info *ci;
- char addr[18];
int i;
cl = g_malloc0(10 * sizeof(*ci) + sizeof(*cl));
- ba2str(sba, addr);
- cl->dev_id = hci_devid(addr);
+ cl->dev_id = index;
cl->conn_num = 10;
ci = cl->conn_info;
- if (ioctl(dev, HCIGETCONNLIST, (void *) cl) < 0) {
+ if (ioctl(SK(index), HCIGETCONNLIST, (void *) cl) < 0) {
g_free(cl);
return -EIO;
}
@@ -350,7 +346,7 @@
/* Link Key handling */
-static void link_key_request(int dev, bdaddr_t *sba, bdaddr_t *dba)
+static void link_key_request(int index, bdaddr_t *dba)
{
struct btd_adapter *adapter;
struct btd_device *device;
@@ -360,10 +356,10 @@
uint8_t type;
int err;
- ba2str(sba, sa); ba2str(dba, da);
+ ba2str(&BDADDR(index), sa); ba2str(dba, da);
info("link_key_request (sba=%s, dba=%s)", sa, da);
- adapter = manager_find_adapter(sba);
+ adapter = manager_find_adapter(&BDADDR(index));
if (adapter)
device = adapter_find_device(adapter, da);
else
@@ -372,7 +368,7 @@
memset(&req, 0, sizeof(req));
bacpy(&req.bdaddr, dba);
- err = ioctl(dev, HCIGETAUTHINFO, (unsigned long) &req);
+ err = ioctl(SK(index), HCIGETAUTHINFO, (unsigned long) &req);
if (err < 0) {
if (errno != EINVAL)
DBG("HCIGETAUTHINFO failed %s (%d)",
@@ -384,9 +380,11 @@
if (main_opts.debug_keys && device && device_get_debug_key(device, key))
type = 0x03;
- else if (read_link_key(sba, dba, key, &type) < 0 || type == 0x03) {
+ else if (read_link_key(&BDADDR(index), dba, key, &type) < 0 ||
+ type == 0x03) {
/* Link key not found */
- hci_send_cmd(dev, OGF_LINK_CTL, OCF_LINK_KEY_NEG_REPLY, 6, dba);
+ hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_LINK_KEY_NEG_REPLY,
+ 6, dba);
return;
}
@@ -397,7 +395,7 @@
/* Don't use unauthenticated combination keys if MITM is
* required */
if (type == 0x04 && req.type != 0xff && (req.type & 0x01))
- hci_send_cmd(dev, OGF_LINK_CTL, OCF_LINK_KEY_NEG_REPLY,
+ hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_LINK_KEY_NEG_REPLY,
6, dba);
else {
link_key_reply_cp lr;
@@ -405,63 +403,57 @@
memcpy(lr.link_key, key, 16);
bacpy(&lr.bdaddr, dba);
- hci_send_cmd(dev, OGF_LINK_CTL, OCF_LINK_KEY_REPLY,
+ hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_LINK_KEY_REPLY,
LINK_KEY_REPLY_CP_SIZE, &lr);
}
}
-static void link_key_notify(int dev, bdaddr_t *sba, void *ptr)
+static void link_key_notify(int index, void *ptr)
{
evt_link_key_notify *evt = ptr;
bdaddr_t *dba = &evt->bdaddr;
char sa[18], da[18];
- int dev_id, err;
+ int err;
unsigned char old_key[16];
uint8_t old_key_type;
- ba2str(sba, sa); ba2str(dba, da);
+ ba2str(&BDADDR(index), sa); ba2str(dba, da);
info("link_key_notify (sba=%s, dba=%s, type=%d)", sa, da,
evt->key_type);
- err = read_link_key(sba, dba, old_key, &old_key_type);
+ err = read_link_key(&BDADDR(index), dba, old_key, &old_key_type);
if (err < 0)
old_key_type = 0xff;
- dev_id = hci_devid(sa);
- if (dev_id < 0)
- err = -errno;
- else {
- err = btd_event_link_key_notify(sba, dba, evt->link_key,
- evt->key_type,
- PIN_LENGTH(dev_id),
- old_key_type);
- PIN_LENGTH(dev_id) = -1;
- }
+ err = btd_event_link_key_notify(&BDADDR(index), dba, evt->link_key,
+ evt->key_type, PIN_LENGTH(index),
+ old_key_type);
+ PIN_LENGTH(index) = -1;
if (err < 0) {
uint16_t handle;
if (err == -ENODEV)
- btd_event_bonding_process_complete(sba, dba,
+ btd_event_bonding_process_complete(&BDADDR(index), dba,
HCI_OE_LOW_RESOURCES);
else
- btd_event_bonding_process_complete(sba, dba,
+ btd_event_bonding_process_complete(&BDADDR(index), dba,
HCI_MEMORY_FULL);
- if (get_handle(dev, sba, dba, &handle) == 0) {
+ if (get_handle(index, dba, &handle) == 0) {
disconnect_cp cp;
memset(&cp, 0, sizeof(cp));
cp.handle = htobs(handle);
cp.reason = HCI_OE_LOW_RESOURCES;
- hci_send_cmd(dev, OGF_LINK_CTL, OCF_DISCONNECT,
+ hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_DISCONNECT,
DISCONNECT_CP_SIZE, &cp);
}
}
}
-static void return_link_keys(int dev, bdaddr_t *sba, void *ptr)
+static void return_link_keys(int index, void *ptr)
{
evt_return_link_keys *evt = ptr;
uint8_t num = evt->num_keys;
@@ -470,7 +462,7 @@
bdaddr_t dba;
int i;
- ba2str(sba, sa);
+ ba2str(&BDADDR(index), sa);
ptr++;
for (i = 0; i < num; i++) {
@@ -479,7 +471,7 @@
info("return_link_keys (sba=%s, dba=%s)", sa, da);
- btd_event_returned_link_key(sba, &dba);
+ btd_event_returned_link_key(&BDADDR(index), &dba);
ptr += 22;
}
@@ -487,51 +479,55 @@
/* Simple Pairing handling */
-static void user_confirm_request(int dev, bdaddr_t *sba, void *ptr)
+static void user_confirm_request(int index, void *ptr)
{
evt_user_confirm_request *req = ptr;
- if (btd_event_user_confirm(sba, &req->bdaddr,
+ if (btd_event_user_confirm(&BDADDR(index), &req->bdaddr,
btohl(req->passkey)) < 0)
- hci_send_cmd(dev, OGF_LINK_CTL,
+ hci_send_cmd(SK(index), OGF_LINK_CTL,
OCF_USER_CONFIRM_NEG_REPLY, 6, ptr);
}
-static void user_passkey_request(int dev, bdaddr_t *sba, void *ptr)
+static void user_passkey_request(int index, void *ptr)
{
evt_user_passkey_request *req = ptr;
- if (btd_event_user_passkey(sba, &req->bdaddr) < 0)
- hci_send_cmd(dev, OGF_LINK_CTL,
+ if (btd_event_user_passkey(&BDADDR(index), &req->bdaddr) < 0)
+ hci_send_cmd(SK(index), OGF_LINK_CTL,
OCF_USER_PASSKEY_NEG_REPLY, 6, ptr);
}
-static void user_passkey_notify(int dev, bdaddr_t *sba, void *ptr)
+static void user_passkey_notify(int index, void *ptr)
{
evt_user_passkey_notify *req = ptr;
- btd_event_user_notify(sba, &req->bdaddr, btohl(req->passkey));
+ btd_event_user_notify(&BDADDR(index), &req->bdaddr,
+ btohl(req->passkey));
}
-static void remote_oob_data_request(int dev, bdaddr_t *sba, void *ptr)
+static void remote_oob_data_request(int index, void *ptr)
{
- hci_send_cmd(dev, OGF_LINK_CTL, OCF_REMOTE_OOB_DATA_NEG_REPLY, 6, ptr);
+ hci_send_cmd(SK(index), OGF_LINK_CTL,
+ OCF_REMOTE_OOB_DATA_NEG_REPLY, 6, ptr);
}
-static void io_capa_request(int dev, bdaddr_t *sba, bdaddr_t *dba)
+static void io_capa_request(int index, void *ptr)
{
+ bdaddr_t *dba = ptr;
char sa[18], da[18];
uint8_t cap, auth;
- ba2str(sba, sa); ba2str(dba, da);
+ ba2str(&BDADDR(index), sa); ba2str(dba, da);
info("io_capa_request (sba=%s, dba=%s)", sa, da);
- if (btd_event_get_io_cap(sba, dba, &cap, &auth) < 0) {
+ if (btd_event_get_io_cap(&BDADDR(index), dba, &cap, &auth) < 0) {
io_capability_neg_reply_cp cp;
memset(&cp, 0, sizeof(cp));
bacpy(&cp.bdaddr, dba);
cp.reason = HCI_PAIRING_NOT_ALLOWED;
- hci_send_cmd(dev, OGF_LINK_CTL, OCF_IO_CAPABILITY_NEG_REPLY,
+ hci_send_cmd(SK(index), OGF_LINK_CTL,
+ OCF_IO_CAPABILITY_NEG_REPLY,
IO_CAPABILITY_NEG_REPLY_CP_SIZE, &cp);
} else {
io_capability_reply_cp cp;
@@ -540,38 +536,26 @@
cp.capability = cap;
cp.oob_data = 0x00;
cp.authentication = auth;
- hci_send_cmd(dev, OGF_LINK_CTL, OCF_IO_CAPABILITY_REPLY,
+ hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_IO_CAPABILITY_REPLY,
IO_CAPABILITY_REPLY_CP_SIZE, &cp);
}
}
-static void io_capa_response(int dev, bdaddr_t *sba, void *ptr)
+static void io_capa_response(int index, void *ptr)
{
evt_io_capability_response *evt = ptr;
char sa[18], da[18];
- ba2str(sba, sa); ba2str(&evt->bdaddr, da);
+ ba2str(&BDADDR(index), sa); ba2str(&evt->bdaddr, da);
info("io_capa_response (sba=%s, dba=%s)", sa, da);
- btd_event_set_io_cap(sba, &evt->bdaddr,
+ btd_event_set_io_cap(&BDADDR(index), &evt->bdaddr,
evt->capability, evt->authentication);
}
/* PIN code handling */
-void set_pin_length(bdaddr_t *sba, int length)
-{
- char addr[18];
- int dev_id;
-
- ba2str(sba, addr);
- dev_id = hci_devid(addr);
-
- if (dev_id >= 0)
- PIN_LENGTH(dev_id) = length;
-}
-
-static void pin_code_request(int dev, bdaddr_t *sba, bdaddr_t *dba)
+static void pin_code_request(int index, bdaddr_t *dba)
{
pin_code_reply_cp pr;
struct hci_conn_info_req *cr;
@@ -582,31 +566,31 @@
memset(&pr, 0, sizeof(pr));
bacpy(&pr.bdaddr, dba);
- ba2str(sba, sa); ba2str(dba, da);
+ ba2str(&BDADDR(index), sa); ba2str(dba, da);
info("pin_code_request (sba=%s, dba=%s)", sa, da);
cr = g_malloc0(sizeof(*cr) + sizeof(*ci));
bacpy(&cr->bdaddr, dba);
cr->type = ACL_LINK;
- if (ioctl(dev, HCIGETCONNINFO, (unsigned long) cr) < 0) {
+ if (ioctl(SK(index), HCIGETCONNINFO, (unsigned long) cr) < 0) {
error("Can't get conn info: %s (%d)", strerror(errno), errno);
goto reject;
}
ci = cr->conn_info;
memset(pin, 0, sizeof(pin));
- pinlen = read_pin_code(sba, dba, pin);
+ pinlen = read_pin_code(&BDADDR(index), dba, pin);
if (pinlen > 0) {
- set_pin_length(sba, pinlen);
+ PIN_LENGTH(index) = pinlen;
memcpy(pr.pin_code, pin, pinlen);
pr.pin_len = pinlen;
- hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_REPLY,
- PIN_CODE_REPLY_CP_SIZE, &pr);
+ hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_PIN_CODE_REPLY,
+ PIN_CODE_REPLY_CP_SIZE, &pr);
} else {
/* Request PIN from passkey agent */
- if (btd_event_request_pin(dev, sba, ci) < 0)
+ if (btd_event_request_pin(SK(index), &BDADDR(index), ci) < 0)
goto reject;
}
@@ -617,7 +601,7 @@
reject:
g_free(cr);
- hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_NEG_REPLY, 6, dba);
+ hci_send_cmd(SK(index), OGF_LINK_CTL, OCF_PIN_CODE_NEG_REPLY, 6, dba);
}
static void start_inquiry(bdaddr_t *local, uint8_t status, gboolean periodic)
@@ -669,16 +653,18 @@
adapter_set_state(adapter, state);
}
-static inline void remote_features_notify(int dev, bdaddr_t *sba, void *ptr)
+static inline void remote_features_notify(int index, void *ptr)
{
evt_remote_host_features_notify *evt = ptr;
if (evt->features[0] & 0x01)
- btd_event_set_legacy_pairing(sba, &evt->bdaddr, FALSE);
+ btd_event_set_legacy_pairing(&BDADDR(index), &evt->bdaddr,
+ FALSE);
else
- btd_event_set_legacy_pairing(sba, &evt->bdaddr, TRUE);
+ btd_event_set_legacy_pairing(&BDADDR(index), &evt->bdaddr,
+ TRUE);
- write_features_info(sba, &evt->bdaddr, NULL, evt->features);
+ write_features_info(&BDADDR(index), &evt->bdaddr, NULL, evt->features);
}
static void write_le_host_complete(bdaddr_t *sba, uint8_t status)
@@ -736,21 +722,21 @@
manager_start_adapter(index);
}
-static inline void cmd_status(int dev, bdaddr_t *sba, void *ptr)
+static inline void cmd_status(int index, void *ptr)
{
evt_cmd_status *evt = ptr;
uint16_t opcode = btohs(evt->opcode);
if (opcode == cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY))
- start_inquiry(sba, evt->status, FALSE);
+ start_inquiry(&BDADDR(index), evt->status, FALSE);
}
-static void read_scan_complete(bdaddr_t *sba, uint8_t status, void *ptr)
+static void read_scan_complete(int index, uint8_t status, void *ptr)
{
struct btd_adapter *adapter;
read_scan_enable_rp *rp = ptr;
- adapter = manager_find_adapter(sba);
+ adapter = manager_find_adapter(&BDADDR(index));
if (!adapter) {
error("Unable to find matching adapter");
@@ -760,7 +746,7 @@
adapter_mode_changed(adapter, rp->enable);
}
-static inline void cmd_complete(int index, bdaddr_t *sba, void *ptr)
+static inline void cmd_complete(int index, void *ptr)
{
evt_cmd_complete *evt = ptr;
uint16_t opcode = btohs(evt->opcode);
@@ -769,59 +755,60 @@
switch (opcode) {
case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_EXT_FEATURES):
ptr += sizeof(evt_cmd_complete);
- read_local_ext_features_complete(sba, ptr);
+ read_local_ext_features_complete(&BDADDR(index), ptr);
break;
case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BD_ADDR):
ptr += sizeof(evt_cmd_complete);
read_bd_addr_complete(index, ptr);
break;
case cmd_opcode_pack(OGF_LINK_CTL, OCF_PERIODIC_INQUIRY):
- start_inquiry(sba, status, TRUE);
+ start_inquiry(&BDADDR(index), status, TRUE);
break;
case cmd_opcode_pack(OGF_LINK_CTL, OCF_EXIT_PERIODIC_INQUIRY):
- inquiry_complete(sba, status, TRUE);
+ inquiry_complete(&BDADDR(index), status, TRUE);
break;
case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY_CANCEL):
- inquiry_complete(sba, status, FALSE);
+ inquiry_complete(&BDADDR(index), status, FALSE);
break;
case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_LE_HOST_SUPPORTED):
- write_le_host_complete(sba, status);
+ write_le_host_complete(&BDADDR(index), status);
break;
case cmd_opcode_pack(OGF_LE_CTL, OCF_LE_SET_SCAN_ENABLE):
- btd_event_le_set_scan_enable_complete(sba, status);
+ btd_event_le_set_scan_enable_complete(&BDADDR(index), status);
break;
case cmd_opcode_pack(OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME):
- adapter_setname_complete(sba, status);
+ adapter_setname_complete(&BDADDR(index), status);
break;
case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE):
- btd_event_setscan_enable_complete(sba);
+ btd_event_setscan_enable_complete(&BDADDR(index));
break;
case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SCAN_ENABLE):
ptr += sizeof(evt_cmd_complete);
- read_scan_complete(sba, status, ptr);
+ read_scan_complete(index, status, ptr);
break;
case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV):
- adapter_set_class_complete(sba, status);
+ adapter_set_class_complete(&BDADDR(index), status);
break;
case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SIMPLE_PAIRING_MODE):
- btd_event_write_simple_pairing_mode_complete(sba);
+ btd_event_write_simple_pairing_mode_complete(&BDADDR(index));
break;
case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SIMPLE_PAIRING_MODE):
ptr += sizeof(evt_cmd_complete);
- btd_event_read_simple_pairing_mode_complete(sba, ptr);
+ btd_event_read_simple_pairing_mode_complete(&BDADDR(index),
+ ptr);
break;
case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_LOCAL_NAME):
ptr += sizeof(evt_cmd_complete);
- adapter_update_local_name(sba, status, ptr);
+ adapter_update_local_name(&BDADDR(index), status, ptr);
break;
case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL):
ptr += sizeof(evt_cmd_complete);
- adapter_update_tx_power(sba, status, ptr);
+ adapter_update_tx_power(&BDADDR(index), status, ptr);
break;
};
}
-static inline void remote_name_information(int dev, bdaddr_t *sba, void *ptr)
+static inline void remote_name_information(int index, void *ptr)
{
evt_remote_name_req_complete *evt = ptr;
char name[MAX_NAME_LENGTH + 1];
@@ -831,10 +818,10 @@
if (!evt->status)
memcpy(name, evt->name, MAX_NAME_LENGTH);
- btd_event_remote_name(sba, &evt->bdaddr, evt->status, name);
+ btd_event_remote_name(&BDADDR(index), &evt->bdaddr, evt->status, name);
}
-static inline void remote_version_information(int dev, bdaddr_t *sba, void *ptr)
+static inline void remote_version_information(int index, void *ptr)
{
evt_read_remote_version_complete *evt = ptr;
bdaddr_t dba;
@@ -842,34 +829,34 @@
if (evt->status)
return;
- if (get_bdaddr(dev, sba, btohs(evt->handle), &dba) < 0)
+ if (get_bdaddr(index, btohs(evt->handle), &dba) < 0)
return;
- write_version_info(sba, &dba, btohs(evt->manufacturer),
+ write_version_info(&BDADDR(index), &dba, btohs(evt->manufacturer),
evt->lmp_ver, btohs(evt->lmp_subver));
}
-static inline void inquiry_result(int dev, bdaddr_t *sba, int plen, void *ptr)
+static inline void inquiry_result(int index, int plen, void *ptr)
{
uint8_t num = *(uint8_t *) ptr++;
int i;
for (i = 0; i < num; i++) {
inquiry_info *info = ptr;
- uint32_t class = info->dev_class[0]
- | (info->dev_class[1] << 8)
- | (info->dev_class[2] << 16);
+ uint32_t class = info->dev_class[0] |
+ (info->dev_class[1] << 8) |
+ (info->dev_class[2] << 16);
- btd_event_inquiry_result(sba, &info->bdaddr, class, 0, NULL);
+ btd_event_inquiry_result(&BDADDR(index), &info->bdaddr, class,
+ 0, NULL);
- update_lastseen(sba, &info->bdaddr);
+ update_lastseen(&BDADDR(index), &info->bdaddr);
ptr += INQUIRY_INFO_SIZE;
}
}
-static inline void inquiry_result_with_rssi(int dev, bdaddr_t *sba,
- int plen, void *ptr)
+static inline void inquiry_result_with_rssi(int index, int plen, void *ptr)
{
uint8_t num = *(uint8_t *) ptr++;
int i;
@@ -881,13 +868,13 @@
for (i = 0; i < num; i++) {
inquiry_info_with_rssi_and_pscan_mode *info = ptr;
uint32_t class = info->dev_class[0]
- | (info->dev_class[1] << 8)
- | (info->dev_class[2] << 16);
+ | (info->dev_class[1] << 8)
+ | (info->dev_class[2] << 16);
- btd_event_inquiry_result(sba, &info->bdaddr,
+ btd_event_inquiry_result(&BDADDR(index), &info->bdaddr,
class, info->rssi, NULL);
- update_lastseen(sba, &info->bdaddr);
+ update_lastseen(&BDADDR(index), &info->bdaddr);
ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
}
@@ -895,21 +882,20 @@
for (i = 0; i < num; i++) {
inquiry_info_with_rssi *info = ptr;
uint32_t class = info->dev_class[0]
- | (info->dev_class[1] << 8)
- | (info->dev_class[2] << 16);
+ | (info->dev_class[1] << 8)
+ | (info->dev_class[2] << 16);
- btd_event_inquiry_result(sba, &info->bdaddr,
+ btd_event_inquiry_result(&BDADDR(index), &info->bdaddr,
class, info->rssi, NULL);
- update_lastseen(sba, &info->bdaddr);
+ update_lastseen(&BDADDR(index), &info->bdaddr);
ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
}
}
}
-static inline void extended_inquiry_result(int dev, bdaddr_t *sba,
- int plen, void *ptr)
+static inline void extended_inquiry_result(int index, int plen, void *ptr)
{
uint8_t num = *(uint8_t *) ptr++;
int i;
@@ -917,20 +903,19 @@
for (i = 0; i < num; i++) {
extended_inquiry_info *info = ptr;
uint32_t class = info->dev_class[0]
- | (info->dev_class[1] << 8)
- | (info->dev_class[2] << 16);
+ | (info->dev_class[1] << 8)
+ | (info->dev_class[2] << 16);
- btd_event_inquiry_result(sba, &info->bdaddr, class,
+ btd_event_inquiry_result(&BDADDR(index), &info->bdaddr, class,
info->rssi, info->data);
- update_lastseen(sba, &info->bdaddr);
+ update_lastseen(&BDADDR(index), &info->bdaddr);
ptr += EXTENDED_INQUIRY_INFO_SIZE;
}
}
-static inline void remote_features_information(int dev, bdaddr_t *sba,
- void *ptr)
+static inline void remote_features_information(int index, void *ptr)
{
evt_read_remote_features_complete *evt = ptr;
bdaddr_t dba;
@@ -938,20 +923,20 @@
if (evt->status)
return;
- if (get_bdaddr(dev, sba, btohs(evt->handle), &dba) < 0)
+ if (get_bdaddr(index, btohs(evt->handle), &dba) < 0)
return;
- write_features_info(sba, &dba, evt->features, NULL);
+ write_features_info(&BDADDR(index), &dba, evt->features, NULL);
}
-static inline void conn_complete(int dev, int dev_id, bdaddr_t *sba, void *ptr)
+static inline void conn_complete(int index, void *ptr)
{
evt_conn_complete *evt = ptr;
char filename[PATH_MAX];
char local_addr[18], peer_addr[18], *str;
struct btd_adapter *adapter;
- adapter = manager_find_adapter(sba);
+ adapter = manager_find_adapter(&BDADDR(index));
if (!adapter) {
error("Unable to find matching adapter");
return;
@@ -960,16 +945,16 @@
if (evt->link_type != ACL_LINK)
return;
- btd_event_conn_complete(sba, evt->status, btohs(evt->handle),
- &evt->bdaddr);
+ btd_event_conn_complete(&BDADDR(index), evt->status,
+ btohs(evt->handle), &evt->bdaddr);
if (evt->status)
return;
- update_lastused(sba, &evt->bdaddr);
+ update_lastused(&BDADDR(index), &evt->bdaddr);
/* check if the remote version needs be requested */
- ba2str(sba, local_addr);
+ ba2str(&BDADDR(index), local_addr);
ba2str(&evt->bdaddr, peer_addr);
create_name(filename, sizeof(filename), STORAGEDIR, local_addr,
@@ -983,42 +968,43 @@
free(str);
}
-static inline void disconn_complete(int dev, bdaddr_t *sba, void *ptr)
+static inline void disconn_complete(int index, void *ptr)
{
evt_disconn_complete *evt = ptr;
- btd_event_disconn_complete(sba, evt->status, btohs(evt->handle),
- evt->reason);
+ btd_event_disconn_complete(&BDADDR(index), evt->status,
+ btohs(evt->handle), evt->reason);
}
-static inline void auth_complete(int dev, bdaddr_t *sba, void *ptr)
+static inline void auth_complete(int index, void *ptr)
{
evt_auth_complete *evt = ptr;
bdaddr_t dba;
- if (get_bdaddr(dev, sba, btohs(evt->handle), &dba) < 0)
+ if (get_bdaddr(index, btohs(evt->handle), &dba) < 0)
return;
- btd_event_bonding_process_complete(sba, &dba, evt->status);
+ btd_event_bonding_process_complete(&BDADDR(index), &dba, evt->status);
}
-static inline void simple_pairing_complete(int dev, bdaddr_t *sba, void *ptr)
+static inline void simple_pairing_complete(int index, void *ptr)
{
evt_simple_pairing_complete *evt = ptr;
- btd_event_simple_pairing_complete(sba, &evt->bdaddr, evt->status);
+ btd_event_simple_pairing_complete(&BDADDR(index), &evt->bdaddr,
+ evt->status);
}
-static inline void conn_request(int dev, bdaddr_t *sba, void *ptr)
+static inline void conn_request(int index, void *ptr)
{
evt_conn_request *evt = ptr;
uint32_t class = evt->dev_class[0] | (evt->dev_class[1] << 8)
| (evt->dev_class[2] << 16);
- btd_event_remote_class(sba, &evt->bdaddr, class);
+ btd_event_remote_class(&BDADDR(index), &evt->bdaddr, class);
}
-static inline void le_metaevent(int dev, bdaddr_t *sba, void *ptr)
+static inline void le_metaevent(int index, void *ptr)
{
evt_le_meta_event *meta = ptr;
le_advertising_info *info;
@@ -1035,7 +1021,8 @@
for (i = 0; i < num; i++) {
/* RSSI is last byte of the advertising report event */
rssi = info->data + info->length;
- btd_event_inquiry_result(sba, &info->bdaddr, 0, *rssi, NULL);
+ btd_event_inquiry_result(&BDADDR(index), &info->bdaddr, 0,
+ *rssi, NULL);
info = (le_advertising_info *) (rssi + 1);
}
}
@@ -1059,8 +1046,8 @@
gpointer data)
{
unsigned char buf[HCI_MAX_EVENT_SIZE], *ptr = buf;
- int type, dev, index = GPOINTER_TO_INT(data);
- struct hci_dev_info dev_info, *di = &dev_info;
+ int type, index = GPOINTER_TO_INT(data);
+ struct hci_dev_info di;
size_t len;
hci_event_hdr *eh;
GIOError err;
@@ -1086,119 +1073,116 @@
eh = (hci_event_hdr *) ptr;
ptr += HCI_EVENT_HDR_SIZE;
- memset(di, 0, sizeof(*di));
- if (hci_devinfo(index, di) == 0)
- bacpy(&BDADDR(index), &di->bdaddr);
- else
- bacpy(&di->bdaddr, &BDADDR(index));
+ memset(&di, 0, sizeof(di));
+ if (hci_devinfo(index, &di) == 0) {
+ bacpy(&BDADDR(index), &di.bdaddr);
- if (ignore_device(di))
- return TRUE;
-
- dev = g_io_channel_unix_get_fd(chan);
+ if (ignore_device(&di))
+ return TRUE;
+ }
switch (eh->evt) {
case EVT_CMD_STATUS:
- cmd_status(dev, &di->bdaddr, ptr);
+ cmd_status(index, ptr);
break;
case EVT_CMD_COMPLETE:
- cmd_complete(di->dev_id, &di->bdaddr, ptr);
+ cmd_complete(index, ptr);
break;
case EVT_REMOTE_NAME_REQ_COMPLETE:
- remote_name_information(dev, &di->bdaddr, ptr);
+ remote_name_information(index, ptr);
break;
case EVT_READ_REMOTE_VERSION_COMPLETE:
- remote_version_information(dev, &di->bdaddr, ptr);
+ remote_version_information(index, ptr);
break;
case EVT_READ_REMOTE_FEATURES_COMPLETE:
- remote_features_information(dev, &di->bdaddr, ptr);
+ remote_features_information(index, ptr);
break;
case EVT_REMOTE_HOST_FEATURES_NOTIFY:
- remote_features_notify(dev, &di->bdaddr, ptr);
+ remote_features_notify(index, ptr);
break;
case EVT_INQUIRY_COMPLETE:
evt = (evt_cmd_status *) ptr;
- inquiry_complete(&di->bdaddr, evt->status, FALSE);
+ inquiry_complete(&BDADDR(index), evt->status, FALSE);
break;
case EVT_INQUIRY_RESULT:
- inquiry_result(dev, &di->bdaddr, eh->plen, ptr);
+ inquiry_result(index, eh->plen, ptr);
break;
case EVT_INQUIRY_RESULT_WITH_RSSI:
- inquiry_result_with_rssi(dev, &di->bdaddr, eh->plen, ptr);
+ inquiry_result_with_rssi(index, eh->plen, ptr);
break;
case EVT_EXTENDED_INQUIRY_RESULT:
- extended_inquiry_result(dev, &di->bdaddr, eh->plen, ptr);
+ extended_inquiry_result(index, eh->plen, ptr);
break;
case EVT_CONN_COMPLETE:
- conn_complete(dev, di->dev_id, &di->bdaddr, ptr);
+ conn_complete(index, ptr);
break;
case EVT_DISCONN_COMPLETE:
- disconn_complete(dev, &di->bdaddr, ptr);
+ disconn_complete(index, ptr);
break;
case EVT_AUTH_COMPLETE:
- auth_complete(dev, &di->bdaddr, ptr);
+ auth_complete(index, ptr);
break;
case EVT_SIMPLE_PAIRING_COMPLETE:
- simple_pairing_complete(dev, &di->bdaddr, ptr);
+ simple_pairing_complete(index, ptr);
break;
case EVT_CONN_REQUEST:
- conn_request(dev, &di->bdaddr, ptr);
+ conn_request(index, ptr);
break;
case EVT_LE_META_EVENT:
- le_metaevent(dev, &di->bdaddr, ptr);
+ le_metaevent(index, ptr);
break;
case EVT_PIN_CODE_REQ:
- pin_code_request(dev, &di->bdaddr, (bdaddr_t *) ptr);
+ pin_code_request(index, (bdaddr_t *) ptr);
break;
case EVT_LINK_KEY_REQ:
- link_key_request(dev, &di->bdaddr, (bdaddr_t *) ptr);
+ link_key_request(index, (bdaddr_t *) ptr);
break;
case EVT_LINK_KEY_NOTIFY:
- link_key_notify(dev, &di->bdaddr, ptr);
+ link_key_notify(index, ptr);
break;
case EVT_RETURN_LINK_KEYS:
- return_link_keys(dev, &di->bdaddr, ptr);
+ return_link_keys(index, ptr);
break;
case EVT_IO_CAPABILITY_REQUEST:
- io_capa_request(dev, &di->bdaddr, (bdaddr_t *) ptr);
+ io_capa_request(index, ptr);
break;
case EVT_IO_CAPABILITY_RESPONSE:
- io_capa_response(dev, &di->bdaddr, ptr);
+ io_capa_response(index, ptr);
break;
case EVT_USER_CONFIRM_REQUEST:
- user_confirm_request(dev, &di->bdaddr, ptr);
+ user_confirm_request(index, ptr);
break;
case EVT_USER_PASSKEY_REQUEST:
- user_passkey_request(dev, &di->bdaddr, ptr);
+ user_passkey_request(index, ptr);
break;
case EVT_USER_PASSKEY_NOTIFY:
- user_passkey_notify(dev, &di->bdaddr, ptr);
+ user_passkey_notify(index, ptr);
break;
case EVT_REMOTE_OOB_DATA_REQUEST:
- remote_oob_data_request(dev, &di->bdaddr, ptr);
+ remote_oob_data_request(index, ptr);
break;
}
@@ -2137,6 +2121,8 @@
pin_code_reply_cp pr;
size_t len = strlen(pin);
+ PIN_LENGTH(index) = len;
+
memset(&pr, 0, sizeof(pr));
bacpy(&pr.bdaddr, bdaddr);
memcpy(pr.pin_code, pin, len);
diff --git a/src/agent.c b/src/agent.c
index b65a550..2ddfd6e 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -411,8 +411,6 @@
goto done;
}
- set_pin_length(&sba, len);
-
cb(agent, NULL, pin, req->user_data);
done:
diff --git a/src/event.c b/src/event.c
index 60249f0..8db930b 100644
--- a/src/event.c
+++ b/src/event.c
@@ -116,7 +116,6 @@
goto fail;
adapter_get_address(adapter, &sba);
- set_pin_length(&sba, strlen(pincode));
return;
diff --git a/src/hcid.h b/src/hcid.h
index caa1d62..48d489a 100644
--- a/src/hcid.h
+++ b/src/hcid.h
@@ -77,8 +77,6 @@
void btd_start_exit_timer(void);
void btd_stop_exit_timer(void);
-void set_pin_length(bdaddr_t *sba, int length);
-
gboolean plugin_init(GKeyFile *config, const char *enable,
const char *disable);
void plugin_cleanup(void);