Loading system/btif/src/btif_dm.cc +66 −6 Original line number Diff line number Diff line Loading @@ -98,6 +98,8 @@ bool btif_get_device_type(const RawAddress& bda, int* p_device_type); using bluetooth::Uuid; namespace { constexpr char kBtmLogTag[] = "API"; constexpr char kBtmLogTagCallback[] = "CBACK"; constexpr char kBtmLogTagSdp[] = "SDP"; } Loading Loading @@ -141,12 +143,6 @@ const Uuid UUID_A2DP_SINK = Uuid::FromString("110B"); #define ENCRYPTED_BREDR 2 #define ENCRYPTED_LE 4 namespace { constexpr char kBtmLogTag[] = "API"; } struct btif_dm_pairing_cb_t { bt_bond_state_t state; RawAddress static_bdaddr; Loading Loading @@ -551,6 +547,13 @@ static void bond_state_changed(bt_status_t status, const RawAddress& bd_addr, if ((pairing_cb.state == state) && (state == BT_BOND_STATE_BONDING)) { // Cross key pairing so send callback for static address if (!pairing_cb.static_bdaddr.IsEmpty()) { BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Bond state changed", base::StringPrintf( "Crosskey bt_status:%s bond_state:%u reason:%s", bt_status_text(status).c_str(), state, hci_reason_code_text(to_hci_reason_code(pairing_cb.fail_reason)) .c_str())); GetInterfaceToProfiles()->events->invoke_bond_state_changed_cb( status, bd_addr, state, pairing_cb.fail_reason); } Loading Loading @@ -582,6 +585,13 @@ static void bond_state_changed(bt_status_t status, const RawAddress& bd_addr, << bd_addr; } } BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Bond state changed", base::StringPrintf( "bt_status:%s bond_state:%u reason:%s", bt_status_text(status).c_str(), state, hci_reason_code_text(to_hci_reason_code(pairing_cb.fail_reason)) .c_str())); GetInterfaceToProfiles()->events->invoke_bond_state_changed_cb( status, bd_addr, state, pairing_cb.fail_reason); Loading Loading @@ -947,6 +957,10 @@ static void btif_dm_pin_req_evt(tBTA_DM_PIN_REQ* p_pin_req) { } } } BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Pin request", base::StringPrintf("name:\"%s\" min16:%c", PRIVATE_NAME(bd_name.name), (p_pin_req->min_16_digit) ? 'T' : 'F')); GetInterfaceToProfiles()->events->invoke_pin_request_cb( bd_addr, bd_name, cod, p_pin_req->min_16_digit); } Loading Loading @@ -1034,6 +1048,11 @@ static void btif_dm_ssp_cfm_req_evt(tBTA_DM_SP_CFM_REQ* p_ssp_cfm_req) { } pairing_cb.sdp_attempts = 0; BTM_LogHistory(kBtmLogTagCallback, bd_addr, "Ssp request", base::StringPrintf("name:\"%s\" just_works:%c pin:%u", PRIVATE_NAME(bd_name.name), (p_ssp_cfm_req->just_works) ? 'T' : 'F', p_ssp_cfm_req->num_val)); GetInterfaceToProfiles()->events->invoke_ssp_request_cb( bd_addr, bd_name, cod, (p_ssp_cfm_req->just_works ? BT_SSP_VARIANT_CONSENT Loading Loading @@ -1073,6 +1092,10 @@ static void btif_dm_ssp_key_notif_evt(tBTA_DM_SP_KEY_NOTIF* p_ssp_key_notif) { cod = COD_UNCLASSIFIED; } BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Ssp request", base::StringPrintf("name:\"%s\" passkey:%u", PRIVATE_NAME(bd_name.name), p_ssp_key_notif->passkey)); GetInterfaceToProfiles()->events->invoke_ssp_request_cb( bd_addr, bd_name, cod, BT_SSP_VARIANT_PASSKEY_NOTIFICATION, p_ssp_key_notif->passkey); Loading Loading @@ -1212,6 +1235,10 @@ static void btif_dm_auth_cmpl_evt(tBTA_DM_AUTH_CMPL* p_auth_cmpl) { if (is_crosskey) { // If bonding occurred due to cross-key pairing, send address // consolidate callback BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Consolidate", base::StringPrintf(" <=> %s", ADDRESS_TO_LOGGABLE_CSTR(pairing_cb.bd_addr))); GetInterfaceToProfiles()->events->invoke_address_consolidate_cb( pairing_cb.bd_addr, bd_addr); } else { Loading Loading @@ -2443,6 +2470,15 @@ void btif_dm_create_bond_le(const RawAddress bd_addr, tBLE_ADDR_TYPE addr_type) { BTIF_TRACE_EVENT("%s: bd_addr=%s, addr_type=%d, transport=%d", __func__, ADDRESS_TO_LOGGABLE_CSTR(bd_addr), addr_type); const tBLE_BD_ADDR ble_bd_addr{ .type = addr_type, .bda = bd_addr, }; BTM_LogHistory( kBtmLogTag, ble_bd_addr, "Create bond", base::StringPrintf("transport:%s", bt_transport_text(BT_TRANSPORT_LE).c_str())); btif_stats_add_bond_event(bd_addr, BTIF_DM_FUNC_CREATE_BOND, pairing_cb.state); Loading Loading @@ -2690,6 +2726,13 @@ void btif_dm_pin_reply(const RawAddress bd_addr, uint8_t accept, void btif_dm_ssp_reply(const RawAddress bd_addr, bt_ssp_variant_t variant, uint8_t accept) { BTIF_TRACE_EVENT("%s: accept=%d", __func__, accept); BTM_LogHistory( kBtmLogTag, bd_addr, "Ssp reply", base::StringPrintf( "originator:%s variant:%d accept:%c le:%c numeric_comparison:%c", (pairing_cb.is_local_initiated) ? "local" : "remote", variant, (accept) ? 'Y' : 'N', (pairing_cb.is_le_only) ? 'T' : 'F', (pairing_cb.is_le_nc) ? 'T' : 'F')); if (pairing_cb.is_le_only) { if (pairing_cb.is_le_nc) { BTA_DmBleConfirmReply(bd_addr, accept); Loading Loading @@ -3310,6 +3353,11 @@ static void btif_dm_ble_key_notif_evt(tBTA_DM_SP_KEY_NOTIF* p_ssp_key_notif) { pairing_cb.is_ssp = false; cod = COD_UNCLASSIFIED; BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Ssp request", base::StringPrintf("name:\"%s\" passkey:%u", PRIVATE_NAME(bd_name.name), p_ssp_key_notif->passkey)); GetInterfaceToProfiles()->events->invoke_ssp_request_cb( bd_addr, bd_name, cod, BT_SSP_VARIANT_PASSKEY_NOTIFICATION, p_ssp_key_notif->passkey); Loading Loading @@ -3553,6 +3601,10 @@ static void btif_dm_ble_sec_req_evt(tBTA_DM_BLE_SEC_REQ* p_ble_req, cod = COD_UNCLASSIFIED; BTM_LogHistory(kBtmLogTagCallback, bd_addr, "SSP ble request", base::StringPrintf("name:\"%s\" BT_SSP_VARIANT_CONSENT", PRIVATE_NAME(bd_name.name))); GetInterfaceToProfiles()->events->invoke_ssp_request_cb( bd_addr, bd_name, cod, BT_SSP_VARIANT_CONSENT, 0); } Loading Loading @@ -3588,6 +3640,9 @@ static void btif_dm_ble_passkey_req_evt(tBTA_DM_PIN_REQ* p_pin_req) { cod = COD_UNCLASSIFIED; BTM_LogHistory(kBtmLogTagCallback, bd_addr, "PIN request", base::StringPrintf("name:\"%s\"", PRIVATE_NAME(bd_name.name))); GetInterfaceToProfiles()->events->invoke_pin_request_cb(bd_addr, bd_name, cod, false); } Loading @@ -3610,6 +3665,11 @@ static void btif_dm_ble_key_nc_req_evt(tBTA_DM_SP_KEY_NOTIF* p_notif_req) { pairing_cb.is_le_only = true; pairing_cb.is_le_nc = true; BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Ssp request", base::StringPrintf("name:\"%s\" passkey:%u", PRIVATE_NAME(bd_name.name), p_notif_req->passkey)); GetInterfaceToProfiles()->events->invoke_ssp_request_cb( bd_addr, bd_name, COD_UNCLASSIFIED, BT_SSP_VARIANT_PASSKEY_CONFIRMATION, p_notif_req->passkey); Loading system/stack/btm/btm_ble.cc +37 −14 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #define LOG_TAG "bt_btm_ble" #include <base/logging.h> #include <base/strings/stringprintf.h> #include <cstdint> Loading @@ -45,6 +46,7 @@ #include "stack/include/bt_octets.h" #include "stack/include/bt_types.h" #include "stack/include/btm_api.h" #include "stack/include/btm_log_history.h" #include "stack/include/btu.h" #include "stack/include/gatt_api.h" #include "stack/include/l2cap_security_interface.h" Loading @@ -64,6 +66,10 @@ void gatt_notify_phy_updated(tGATT_STATUS status, uint16_t handle, #define PROPERTY_BLE_PRIVACY_ENABLED "bluetooth.core.gap.le.privacy.enabled" #endif namespace { constexpr char kBtmLogTag[] = "SEC"; } // Pairing parameters defined in Vol 3, Part H, Chapter 3.5.1 - 3.5.2 // All present in the exact decimal values, not hex // Ex: bluetooth.core.smp.le.ctkd.initiator_key_distribution 15(0x0f) Loading Loading @@ -251,8 +257,12 @@ const Octet16& BTM_GetDeviceDHK() { return btm_cb.devcb.id_keys.dhk; } * ******************************************************************************/ void BTM_SecurityGrant(const RawAddress& bd_addr, uint8_t res) { tSMP_STATUS res_smp = const tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_REPEATED_ATTEMPTS; BTM_LogHistory(kBtmLogTag, bd_addr, "Granted", base::StringPrintf("passkey_status:%s", smp_status_text(res_smp).c_str())); BTM_TRACE_DEBUG("BTM_SecurityGrant"); SMP_SecurityGrant(bd_addr, res_smp); } Loading @@ -274,14 +284,18 @@ void BTM_SecurityGrant(const RawAddress& bd_addr, uint8_t res) { void BTM_BlePasskeyReply(const RawAddress& bd_addr, uint8_t res, uint32_t passkey) { tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bd_addr); tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_PASSKEY_ENTRY_FAIL; if (p_dev_rec == NULL) { BTM_TRACE_ERROR("Passkey reply to Unknown device"); return; } const tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_PASSKEY_ENTRY_FAIL; BTM_LogHistory(kBtmLogTag, bd_addr, "Passkey reply", base::StringPrintf("transport:%s authenticate_status:%s", bt_transport_text(BT_TRANSPORT_LE).c_str(), smp_status_text(res_smp).c_str())); p_dev_rec->sec_flags |= BTM_SEC_LE_AUTHENTICATED; BTM_TRACE_DEBUG("BTM_BlePasskeyReply"); SMP_PasskeyReply(bd_addr, res_smp, passkey); Loading @@ -301,13 +315,18 @@ void BTM_BlePasskeyReply(const RawAddress& bd_addr, uint8_t res, ******************************************************************************/ void BTM_BleConfirmReply(const RawAddress& bd_addr, uint8_t res) { tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bd_addr); tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_PASSKEY_ENTRY_FAIL; if (p_dev_rec == NULL) { BTM_TRACE_ERROR("Passkey reply to Unknown device"); return; } const tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_PASSKEY_ENTRY_FAIL; BTM_LogHistory(kBtmLogTag, bd_addr, "Confirm reply", base::StringPrintf( "transport:%s numeric_comparison_authenticate_status:%s", bt_transport_text(BT_TRANSPORT_LE).c_str(), smp_status_text(res_smp).c_str())); p_dev_rec->sec_flags |= BTM_SEC_LE_AUTHENTICATED; BTM_TRACE_DEBUG("%s", __func__); Loading @@ -331,16 +350,18 @@ void BTM_BleConfirmReply(const RawAddress& bd_addr, uint8_t res) { ******************************************************************************/ void BTM_BleOobDataReply(const RawAddress& bd_addr, uint8_t res, uint8_t len, uint8_t* p_data) { tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_OOB_FAIL; tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bd_addr); BTM_TRACE_DEBUG("%s:", __func__); if (p_dev_rec == NULL) { BTM_TRACE_ERROR("%s: Unknown device", __func__); return; } const tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_OOB_FAIL; BTM_LogHistory(kBtmLogTag, bd_addr, "Oob data reply", base::StringPrintf("transport:%s authenticate_status:%s", bt_transport_text(BT_TRANSPORT_LE).c_str(), smp_status_text(res_smp).c_str())); p_dev_rec->sec_flags |= BTM_SEC_LE_AUTHENTICATED; SMP_OobDataReply(bd_addr, res_smp, len, p_data); } Loading @@ -361,14 +382,16 @@ void BTM_BleOobDataReply(const RawAddress& bd_addr, uint8_t res, uint8_t len, void BTM_BleSecureConnectionOobDataReply(const RawAddress& bd_addr, uint8_t* p_c, uint8_t* p_r) { tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bd_addr); BTM_TRACE_DEBUG("%s:", __func__); if (p_dev_rec == NULL) { BTM_TRACE_ERROR("%s: Unknown device", __func__); return; } BTM_LogHistory( kBtmLogTag, bd_addr, "Oob data reply", base::StringPrintf("transport:%s", bt_transport_text(BT_TRANSPORT_LE).c_str())); p_dev_rec->sec_flags |= BTM_SEC_LE_AUTHENTICATED; tSMP_SC_OOB_DATA oob; Loading system/stack/btm/btm_sec.cc +8 −1 Original line number Diff line number Diff line Loading @@ -1267,8 +1267,15 @@ void BTM_ConfirmReqReply(tBTM_STATUS res, const RawAddress& bd_addr) { /* If timeout already expired or has been canceled, ignore the reply */ if ((btm_cb.pairing_state != BTM_PAIR_STATE_WAIT_NUMERIC_CONFIRM) || (btm_cb.pairing_bda != bd_addr)) (btm_cb.pairing_bda != bd_addr)) { LOG_WARN( "Ignore confirm request reply as bonding has been canceled or timer " "expired"); return; } BTM_LogHistory(kBtmLogTag, bd_addr, "Confirm reply", base::StringPrintf("status:%s", btm_status_text(res).c_str())); btm_sec_change_pairing_state(BTM_PAIR_STATE_WAIT_AUTH_COMPLETE); Loading Loading
system/btif/src/btif_dm.cc +66 −6 Original line number Diff line number Diff line Loading @@ -98,6 +98,8 @@ bool btif_get_device_type(const RawAddress& bda, int* p_device_type); using bluetooth::Uuid; namespace { constexpr char kBtmLogTag[] = "API"; constexpr char kBtmLogTagCallback[] = "CBACK"; constexpr char kBtmLogTagSdp[] = "SDP"; } Loading Loading @@ -141,12 +143,6 @@ const Uuid UUID_A2DP_SINK = Uuid::FromString("110B"); #define ENCRYPTED_BREDR 2 #define ENCRYPTED_LE 4 namespace { constexpr char kBtmLogTag[] = "API"; } struct btif_dm_pairing_cb_t { bt_bond_state_t state; RawAddress static_bdaddr; Loading Loading @@ -551,6 +547,13 @@ static void bond_state_changed(bt_status_t status, const RawAddress& bd_addr, if ((pairing_cb.state == state) && (state == BT_BOND_STATE_BONDING)) { // Cross key pairing so send callback for static address if (!pairing_cb.static_bdaddr.IsEmpty()) { BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Bond state changed", base::StringPrintf( "Crosskey bt_status:%s bond_state:%u reason:%s", bt_status_text(status).c_str(), state, hci_reason_code_text(to_hci_reason_code(pairing_cb.fail_reason)) .c_str())); GetInterfaceToProfiles()->events->invoke_bond_state_changed_cb( status, bd_addr, state, pairing_cb.fail_reason); } Loading Loading @@ -582,6 +585,13 @@ static void bond_state_changed(bt_status_t status, const RawAddress& bd_addr, << bd_addr; } } BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Bond state changed", base::StringPrintf( "bt_status:%s bond_state:%u reason:%s", bt_status_text(status).c_str(), state, hci_reason_code_text(to_hci_reason_code(pairing_cb.fail_reason)) .c_str())); GetInterfaceToProfiles()->events->invoke_bond_state_changed_cb( status, bd_addr, state, pairing_cb.fail_reason); Loading Loading @@ -947,6 +957,10 @@ static void btif_dm_pin_req_evt(tBTA_DM_PIN_REQ* p_pin_req) { } } } BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Pin request", base::StringPrintf("name:\"%s\" min16:%c", PRIVATE_NAME(bd_name.name), (p_pin_req->min_16_digit) ? 'T' : 'F')); GetInterfaceToProfiles()->events->invoke_pin_request_cb( bd_addr, bd_name, cod, p_pin_req->min_16_digit); } Loading Loading @@ -1034,6 +1048,11 @@ static void btif_dm_ssp_cfm_req_evt(tBTA_DM_SP_CFM_REQ* p_ssp_cfm_req) { } pairing_cb.sdp_attempts = 0; BTM_LogHistory(kBtmLogTagCallback, bd_addr, "Ssp request", base::StringPrintf("name:\"%s\" just_works:%c pin:%u", PRIVATE_NAME(bd_name.name), (p_ssp_cfm_req->just_works) ? 'T' : 'F', p_ssp_cfm_req->num_val)); GetInterfaceToProfiles()->events->invoke_ssp_request_cb( bd_addr, bd_name, cod, (p_ssp_cfm_req->just_works ? BT_SSP_VARIANT_CONSENT Loading Loading @@ -1073,6 +1092,10 @@ static void btif_dm_ssp_key_notif_evt(tBTA_DM_SP_KEY_NOTIF* p_ssp_key_notif) { cod = COD_UNCLASSIFIED; } BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Ssp request", base::StringPrintf("name:\"%s\" passkey:%u", PRIVATE_NAME(bd_name.name), p_ssp_key_notif->passkey)); GetInterfaceToProfiles()->events->invoke_ssp_request_cb( bd_addr, bd_name, cod, BT_SSP_VARIANT_PASSKEY_NOTIFICATION, p_ssp_key_notif->passkey); Loading Loading @@ -1212,6 +1235,10 @@ static void btif_dm_auth_cmpl_evt(tBTA_DM_AUTH_CMPL* p_auth_cmpl) { if (is_crosskey) { // If bonding occurred due to cross-key pairing, send address // consolidate callback BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Consolidate", base::StringPrintf(" <=> %s", ADDRESS_TO_LOGGABLE_CSTR(pairing_cb.bd_addr))); GetInterfaceToProfiles()->events->invoke_address_consolidate_cb( pairing_cb.bd_addr, bd_addr); } else { Loading Loading @@ -2443,6 +2470,15 @@ void btif_dm_create_bond_le(const RawAddress bd_addr, tBLE_ADDR_TYPE addr_type) { BTIF_TRACE_EVENT("%s: bd_addr=%s, addr_type=%d, transport=%d", __func__, ADDRESS_TO_LOGGABLE_CSTR(bd_addr), addr_type); const tBLE_BD_ADDR ble_bd_addr{ .type = addr_type, .bda = bd_addr, }; BTM_LogHistory( kBtmLogTag, ble_bd_addr, "Create bond", base::StringPrintf("transport:%s", bt_transport_text(BT_TRANSPORT_LE).c_str())); btif_stats_add_bond_event(bd_addr, BTIF_DM_FUNC_CREATE_BOND, pairing_cb.state); Loading Loading @@ -2690,6 +2726,13 @@ void btif_dm_pin_reply(const RawAddress bd_addr, uint8_t accept, void btif_dm_ssp_reply(const RawAddress bd_addr, bt_ssp_variant_t variant, uint8_t accept) { BTIF_TRACE_EVENT("%s: accept=%d", __func__, accept); BTM_LogHistory( kBtmLogTag, bd_addr, "Ssp reply", base::StringPrintf( "originator:%s variant:%d accept:%c le:%c numeric_comparison:%c", (pairing_cb.is_local_initiated) ? "local" : "remote", variant, (accept) ? 'Y' : 'N', (pairing_cb.is_le_only) ? 'T' : 'F', (pairing_cb.is_le_nc) ? 'T' : 'F')); if (pairing_cb.is_le_only) { if (pairing_cb.is_le_nc) { BTA_DmBleConfirmReply(bd_addr, accept); Loading Loading @@ -3310,6 +3353,11 @@ static void btif_dm_ble_key_notif_evt(tBTA_DM_SP_KEY_NOTIF* p_ssp_key_notif) { pairing_cb.is_ssp = false; cod = COD_UNCLASSIFIED; BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Ssp request", base::StringPrintf("name:\"%s\" passkey:%u", PRIVATE_NAME(bd_name.name), p_ssp_key_notif->passkey)); GetInterfaceToProfiles()->events->invoke_ssp_request_cb( bd_addr, bd_name, cod, BT_SSP_VARIANT_PASSKEY_NOTIFICATION, p_ssp_key_notif->passkey); Loading Loading @@ -3553,6 +3601,10 @@ static void btif_dm_ble_sec_req_evt(tBTA_DM_BLE_SEC_REQ* p_ble_req, cod = COD_UNCLASSIFIED; BTM_LogHistory(kBtmLogTagCallback, bd_addr, "SSP ble request", base::StringPrintf("name:\"%s\" BT_SSP_VARIANT_CONSENT", PRIVATE_NAME(bd_name.name))); GetInterfaceToProfiles()->events->invoke_ssp_request_cb( bd_addr, bd_name, cod, BT_SSP_VARIANT_CONSENT, 0); } Loading Loading @@ -3588,6 +3640,9 @@ static void btif_dm_ble_passkey_req_evt(tBTA_DM_PIN_REQ* p_pin_req) { cod = COD_UNCLASSIFIED; BTM_LogHistory(kBtmLogTagCallback, bd_addr, "PIN request", base::StringPrintf("name:\"%s\"", PRIVATE_NAME(bd_name.name))); GetInterfaceToProfiles()->events->invoke_pin_request_cb(bd_addr, bd_name, cod, false); } Loading @@ -3610,6 +3665,11 @@ static void btif_dm_ble_key_nc_req_evt(tBTA_DM_SP_KEY_NOTIF* p_notif_req) { pairing_cb.is_le_only = true; pairing_cb.is_le_nc = true; BTM_LogHistory( kBtmLogTagCallback, bd_addr, "Ssp request", base::StringPrintf("name:\"%s\" passkey:%u", PRIVATE_NAME(bd_name.name), p_notif_req->passkey)); GetInterfaceToProfiles()->events->invoke_ssp_request_cb( bd_addr, bd_name, COD_UNCLASSIFIED, BT_SSP_VARIANT_PASSKEY_CONFIRMATION, p_notif_req->passkey); Loading
system/stack/btm/btm_ble.cc +37 −14 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #define LOG_TAG "bt_btm_ble" #include <base/logging.h> #include <base/strings/stringprintf.h> #include <cstdint> Loading @@ -45,6 +46,7 @@ #include "stack/include/bt_octets.h" #include "stack/include/bt_types.h" #include "stack/include/btm_api.h" #include "stack/include/btm_log_history.h" #include "stack/include/btu.h" #include "stack/include/gatt_api.h" #include "stack/include/l2cap_security_interface.h" Loading @@ -64,6 +66,10 @@ void gatt_notify_phy_updated(tGATT_STATUS status, uint16_t handle, #define PROPERTY_BLE_PRIVACY_ENABLED "bluetooth.core.gap.le.privacy.enabled" #endif namespace { constexpr char kBtmLogTag[] = "SEC"; } // Pairing parameters defined in Vol 3, Part H, Chapter 3.5.1 - 3.5.2 // All present in the exact decimal values, not hex // Ex: bluetooth.core.smp.le.ctkd.initiator_key_distribution 15(0x0f) Loading Loading @@ -251,8 +257,12 @@ const Octet16& BTM_GetDeviceDHK() { return btm_cb.devcb.id_keys.dhk; } * ******************************************************************************/ void BTM_SecurityGrant(const RawAddress& bd_addr, uint8_t res) { tSMP_STATUS res_smp = const tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_REPEATED_ATTEMPTS; BTM_LogHistory(kBtmLogTag, bd_addr, "Granted", base::StringPrintf("passkey_status:%s", smp_status_text(res_smp).c_str())); BTM_TRACE_DEBUG("BTM_SecurityGrant"); SMP_SecurityGrant(bd_addr, res_smp); } Loading @@ -274,14 +284,18 @@ void BTM_SecurityGrant(const RawAddress& bd_addr, uint8_t res) { void BTM_BlePasskeyReply(const RawAddress& bd_addr, uint8_t res, uint32_t passkey) { tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bd_addr); tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_PASSKEY_ENTRY_FAIL; if (p_dev_rec == NULL) { BTM_TRACE_ERROR("Passkey reply to Unknown device"); return; } const tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_PASSKEY_ENTRY_FAIL; BTM_LogHistory(kBtmLogTag, bd_addr, "Passkey reply", base::StringPrintf("transport:%s authenticate_status:%s", bt_transport_text(BT_TRANSPORT_LE).c_str(), smp_status_text(res_smp).c_str())); p_dev_rec->sec_flags |= BTM_SEC_LE_AUTHENTICATED; BTM_TRACE_DEBUG("BTM_BlePasskeyReply"); SMP_PasskeyReply(bd_addr, res_smp, passkey); Loading @@ -301,13 +315,18 @@ void BTM_BlePasskeyReply(const RawAddress& bd_addr, uint8_t res, ******************************************************************************/ void BTM_BleConfirmReply(const RawAddress& bd_addr, uint8_t res) { tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bd_addr); tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_PASSKEY_ENTRY_FAIL; if (p_dev_rec == NULL) { BTM_TRACE_ERROR("Passkey reply to Unknown device"); return; } const tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_PASSKEY_ENTRY_FAIL; BTM_LogHistory(kBtmLogTag, bd_addr, "Confirm reply", base::StringPrintf( "transport:%s numeric_comparison_authenticate_status:%s", bt_transport_text(BT_TRANSPORT_LE).c_str(), smp_status_text(res_smp).c_str())); p_dev_rec->sec_flags |= BTM_SEC_LE_AUTHENTICATED; BTM_TRACE_DEBUG("%s", __func__); Loading @@ -331,16 +350,18 @@ void BTM_BleConfirmReply(const RawAddress& bd_addr, uint8_t res) { ******************************************************************************/ void BTM_BleOobDataReply(const RawAddress& bd_addr, uint8_t res, uint8_t len, uint8_t* p_data) { tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_OOB_FAIL; tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bd_addr); BTM_TRACE_DEBUG("%s:", __func__); if (p_dev_rec == NULL) { BTM_TRACE_ERROR("%s: Unknown device", __func__); return; } const tSMP_STATUS res_smp = (res == BTM_SUCCESS) ? SMP_SUCCESS : SMP_OOB_FAIL; BTM_LogHistory(kBtmLogTag, bd_addr, "Oob data reply", base::StringPrintf("transport:%s authenticate_status:%s", bt_transport_text(BT_TRANSPORT_LE).c_str(), smp_status_text(res_smp).c_str())); p_dev_rec->sec_flags |= BTM_SEC_LE_AUTHENTICATED; SMP_OobDataReply(bd_addr, res_smp, len, p_data); } Loading @@ -361,14 +382,16 @@ void BTM_BleOobDataReply(const RawAddress& bd_addr, uint8_t res, uint8_t len, void BTM_BleSecureConnectionOobDataReply(const RawAddress& bd_addr, uint8_t* p_c, uint8_t* p_r) { tBTM_SEC_DEV_REC* p_dev_rec = btm_find_dev(bd_addr); BTM_TRACE_DEBUG("%s:", __func__); if (p_dev_rec == NULL) { BTM_TRACE_ERROR("%s: Unknown device", __func__); return; } BTM_LogHistory( kBtmLogTag, bd_addr, "Oob data reply", base::StringPrintf("transport:%s", bt_transport_text(BT_TRANSPORT_LE).c_str())); p_dev_rec->sec_flags |= BTM_SEC_LE_AUTHENTICATED; tSMP_SC_OOB_DATA oob; Loading
system/stack/btm/btm_sec.cc +8 −1 Original line number Diff line number Diff line Loading @@ -1267,8 +1267,15 @@ void BTM_ConfirmReqReply(tBTM_STATUS res, const RawAddress& bd_addr) { /* If timeout already expired or has been canceled, ignore the reply */ if ((btm_cb.pairing_state != BTM_PAIR_STATE_WAIT_NUMERIC_CONFIRM) || (btm_cb.pairing_bda != bd_addr)) (btm_cb.pairing_bda != bd_addr)) { LOG_WARN( "Ignore confirm request reply as bonding has been canceled or timer " "expired"); return; } BTM_LogHistory(kBtmLogTag, bd_addr, "Confirm reply", base::StringPrintf("status:%s", btm_status_text(res).c_str())); btm_sec_change_pairing_state(BTM_PAIR_STATE_WAIT_AUTH_COMPLETE); Loading