static void mgmt_new_key(int sk, void *buf, size_t len) { struct mgmt_ev_new_key *ev = buf; struct controller_info *info; uint16_t index; if (len != sizeof(*ev)) { error("new_key event size mismatch (%zu != %zu)", len, sizeof(*ev)); return; } index = btohs(bt_get_unaligned(&ev->index)); DBG("Controller %u new key of type %u pin_len %u", index, ev->key.type, ev->key.pin_len); if (index > max_index) { error("Unexpected index %u in new_key event", index); return; } if (ev->key.pin_len > 16) { error("Invalid PIN length (%u) in new_key event", ev->key.pin_len); return; } info = &controllers[index]; btd_event_link_key_notify(&info->bdaddr, &ev->key.bdaddr, ev->key.val, ev->key.type, ev->key.pin_len, ev->old_key_type); }
static void mgmt_new_key(int sk, uint16_t index, void *buf, size_t len) { struct mgmt_ev_new_key *ev = buf; struct controller_info *info; if (len != sizeof(*ev)) { error("new_key event size mismatch (%zu != %zu)", len, sizeof(*ev)); return; } DBG("Controller %u new key of type %u pin_len %u", index, ev->key.type, ev->key.pin_len); if (index > max_index) { error("Unexpected index %u in new_key event", index); return; } if (ev->key.pin_len > 16) { error("Invalid PIN length (%u) in new_key event", ev->key.pin_len); return; } info = &controllers[index]; if (ev->store_hint) btd_event_link_key_notify(&info->bdaddr, &ev->key.bdaddr, ev->key.val, ev->key.type, ev->key.pin_len); btd_event_bonding_complete(&info->bdaddr, &ev->key.bdaddr, 0); }