mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-29 22:20:37 +00:00
sm: introduce SM_RESPONDER_PH1_PAIRING_REQUEST_RECEIVED_W4_IRK to wait for IRK after receiving Pairing Request
This commit is contained in:
parent
7af5dcd58a
commit
212d735ee7
26
src/ble/sm.c
26
src/ble/sm.c
@ -1288,11 +1288,15 @@ static void sm_address_resolution_handle_event(address_resolution_event_t event)
|
|||||||
|
|
||||||
if (sm_connection->sm_role) {
|
if (sm_connection->sm_role) {
|
||||||
#ifdef ENABLE_LE_PERIPHERAL
|
#ifdef ENABLE_LE_PERIPHERAL
|
||||||
// LTK request received before, IRK required -> start LTK calculation
|
// IRK required before, continue
|
||||||
if (sm_connection->sm_engine_state == SM_RESPONDER_PH0_RECEIVED_LTK_W4_IRK){
|
if (sm_connection->sm_engine_state == SM_RESPONDER_PH0_RECEIVED_LTK_W4_IRK){
|
||||||
sm_connection->sm_engine_state = SM_RESPONDER_PH0_RECEIVED_LTK_REQUEST;
|
sm_connection->sm_engine_state = SM_RESPONDER_PH0_RECEIVED_LTK_REQUEST;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (sm_connection->sm_engine_state == SM_RESPONDER_PH1_PAIRING_REQUEST_RECEIVED_W4_IRK){
|
||||||
|
sm_connection->sm_engine_state = SM_RESPONDER_PH1_PAIRING_REQUEST_RECEIVED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
bool trigger_security_request = (sm_connection->sm_pairing_requested != 0) || (sm_slave_request_security != 0);
|
bool trigger_security_request = (sm_connection->sm_pairing_requested != 0) || (sm_slave_request_security != 0);
|
||||||
sm_connection->sm_pairing_requested = 0;
|
sm_connection->sm_pairing_requested = 0;
|
||||||
#ifdef ENABLE_LE_PROACTIVE_AUTHENTICATION
|
#ifdef ENABLE_LE_PROACTIVE_AUTHENTICATION
|
||||||
@ -3781,6 +3785,9 @@ static void sm_pdu_handler(uint8_t packet_type, hci_con_handle_t con_handle, uin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int have_ltk;
|
||||||
|
uint8_t ltk[16];
|
||||||
|
|
||||||
switch (sm_conn->sm_engine_state){
|
switch (sm_conn->sm_engine_state){
|
||||||
|
|
||||||
// a sm timeout requires a new physical connection
|
// a sm timeout requires a new physical connection
|
||||||
@ -3797,8 +3804,6 @@ static void sm_pdu_handler(uint8_t packet_type, hci_con_handle_t con_handle, uin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IRK complete?
|
// IRK complete?
|
||||||
int have_ltk;
|
|
||||||
uint8_t ltk[16];
|
|
||||||
switch (sm_conn->sm_irk_lookup_state){
|
switch (sm_conn->sm_irk_lookup_state){
|
||||||
case IRK_LOOKUP_FAILED:
|
case IRK_LOOKUP_FAILED:
|
||||||
// start pairing
|
// start pairing
|
||||||
@ -3932,9 +3937,18 @@ static void sm_pdu_handler(uint8_t packet_type, hci_con_handle_t con_handle, uin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// store pairing request
|
// store pairing request
|
||||||
(void)memcpy(&sm_conn->sm_m_preq, packet,
|
(void)memcpy(&sm_conn->sm_m_preq, packet, sizeof(sm_pairing_packet_t));
|
||||||
sizeof(sm_pairing_packet_t));
|
|
||||||
sm_conn->sm_engine_state = SM_RESPONDER_PH1_PAIRING_REQUEST_RECEIVED;
|
// check if IRK completed
|
||||||
|
switch (sm_conn->sm_irk_lookup_state){
|
||||||
|
case IRK_LOOKUP_SUCCEEDED:
|
||||||
|
case IRK_LOOKUP_FAILED:
|
||||||
|
sm_conn->sm_engine_state = SM_RESPONDER_PH1_PAIRING_REQUEST_RECEIVED;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sm_conn->sm_engine_state = SM_RESPONDER_PH1_PAIRING_REQUEST_RECEIVED_W4_IRK;
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -330,6 +330,7 @@ typedef enum {
|
|||||||
SM_RESPONDER_PH0_SEND_LTK_REQUESTED_NEGATIVE_REPLY,
|
SM_RESPONDER_PH0_SEND_LTK_REQUESTED_NEGATIVE_REPLY,
|
||||||
SM_RESPONDER_PH1_W4_PAIRING_REQUEST,
|
SM_RESPONDER_PH1_W4_PAIRING_REQUEST,
|
||||||
SM_RESPONDER_PH1_PAIRING_REQUEST_RECEIVED,
|
SM_RESPONDER_PH1_PAIRING_REQUEST_RECEIVED,
|
||||||
|
SM_RESPONDER_PH1_PAIRING_REQUEST_RECEIVED_W4_IRK,
|
||||||
SM_RESPONDER_PH1_SEND_PAIRING_RESPONSE,
|
SM_RESPONDER_PH1_SEND_PAIRING_RESPONSE,
|
||||||
SM_RESPONDER_PH1_W4_PAIRING_CONFIRM,
|
SM_RESPONDER_PH1_W4_PAIRING_CONFIRM,
|
||||||
SM_RESPONDER_PH2_W4_PAIRING_RANDOM,
|
SM_RESPONDER_PH2_W4_PAIRING_RANDOM,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user