mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-25 15:41:00 +00:00
extracted sm_init_setup
This commit is contained in:
parent
fe9e7f880a
commit
6731b28f11
111
ble/sm.c
111
ble/sm.c
@ -1392,10 +1392,64 @@ static void sm_handle_random_result(uint8_t * data){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
static void sm_init_setup(sm_connection_t * sm_conn){
|
||||||
|
|
||||||
|
// fill in sm setup
|
||||||
|
sm_reset_tk();
|
||||||
|
|
||||||
|
// query client for OOB data
|
||||||
|
int have_oob_data = 0;
|
||||||
|
if (sm_get_oob_data) {
|
||||||
|
have_oob_data = (*sm_get_oob_data)(sm_conn->sm_peer_addr_type, &sm_conn->sm_peer_address, setup->sm_tk);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sm_conn->sm_role){
|
||||||
|
// slave
|
||||||
|
hci_le_advertisement_address(&setup->sm_s_addr_type, &setup->sm_s_address);
|
||||||
|
setup->sm_m_addr_type = sm_conn->sm_peer_addr_type;
|
||||||
|
memcpy(setup->sm_m_address, sm_conn->sm_peer_address, 6);
|
||||||
|
setup->sm_s_pres.io_capability = sm_io_capabilities;
|
||||||
|
setup->sm_s_pres.oob_data_flag = have_oob_data;
|
||||||
|
setup->sm_s_pres.auth_req = sm_auth_req;
|
||||||
|
setup->sm_s_pres.max_encryption_key_size = sm_max_encryption_key_size;
|
||||||
|
sm_conn->sm_engine_state = SM_RESPONDER_PH1_W4_PAIRING_REQUEST;
|
||||||
|
} else {
|
||||||
|
// master
|
||||||
|
hci_le_advertisement_address(&setup->sm_m_addr_type, &setup->sm_m_address);
|
||||||
|
|
||||||
|
log_info("hci_le_advertisement_address type %u", setup->sm_m_addr_type);
|
||||||
|
setup->sm_s_addr_type = sm_conn->sm_peer_addr_type;
|
||||||
|
memcpy(setup->sm_s_address, sm_conn->sm_peer_address, 6);
|
||||||
|
setup->sm_m_preq.io_capability = sm_io_capabilities;
|
||||||
|
setup->sm_m_preq.oob_data_flag = have_oob_data;
|
||||||
|
setup->sm_m_preq.auth_req = sm_auth_req;
|
||||||
|
setup->sm_m_preq.max_encryption_key_size = sm_max_encryption_key_size;
|
||||||
|
setup->sm_m_preq.initiator_key_distribution = 0x07;
|
||||||
|
setup->sm_m_preq.responder_key_distribution = 0x07;
|
||||||
|
sm_conn->sm_engine_state = SM_INITIATOR_CONNECTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
// request security if we're slave and requested by app
|
||||||
|
if (sm_conn->sm_role == 0x01 && sm_slave_request_security){
|
||||||
|
sm_conn->sm_engine_state = SM_RESPONDER_SEND_SECURITY_REQUEST;
|
||||||
|
}
|
||||||
|
|
||||||
|
// hack (probablu) start security if requested before
|
||||||
|
if (sm_conn->sm_role == 0x00 && sm_authenticate_outgoing_connections){
|
||||||
|
sm_conn->sm_engine_state = SM_INITIATOR_PH1_SEND_PAIRING_REQUEST;
|
||||||
|
}
|
||||||
|
|
||||||
|
// prepare CSRK lookup
|
||||||
|
sm_conn->sm_csrk_lookup_state = CSRK_LOOKUP_W4_READY;
|
||||||
|
if (!sm_central_device_lookup_active()){
|
||||||
|
// try to lookup device
|
||||||
|
sm_central_device_start_lookup(sm_conn, sm_conn->sm_peer_addr_type, sm_conn->sm_peer_address);
|
||||||
|
sm_conn->sm_csrk_lookup_state = CSRK_LOOKUP_STARTED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void sm_event_packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
|
static void sm_event_packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
|
||||||
|
|
||||||
int have_oob_data;
|
|
||||||
sm_connection_t * sm_conn;
|
sm_connection_t * sm_conn;
|
||||||
uint16_t handle;
|
uint16_t handle;
|
||||||
|
|
||||||
@ -1439,58 +1493,9 @@ static void sm_event_packet_handler (uint8_t packet_type, uint16_t channel, uint
|
|||||||
sm_conn->sm_connection_authenticated = 0;
|
sm_conn->sm_connection_authenticated = 0;
|
||||||
sm_conn->sm_connection_authorization_state = AUTHORIZATION_UNKNOWN;
|
sm_conn->sm_connection_authorization_state = AUTHORIZATION_UNKNOWN;
|
||||||
|
|
||||||
// fill in sm setup
|
// just connected -> sm_run()
|
||||||
sm_reset_tk();
|
// sm_conn->sm_engine_state = SM_GENERAL_CONNECTED;
|
||||||
|
sm_init_setup(sm_conn);
|
||||||
// query client for OOB data
|
|
||||||
have_oob_data = 0;
|
|
||||||
if (sm_get_oob_data) {
|
|
||||||
have_oob_data = (*sm_get_oob_data)(sm_conn->sm_peer_addr_type, &sm_conn->sm_peer_address, setup->sm_tk);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sm_conn->sm_role){
|
|
||||||
// slave
|
|
||||||
hci_le_advertisement_address(&setup->sm_s_addr_type, &setup->sm_s_address);
|
|
||||||
setup->sm_m_addr_type = packet[7];
|
|
||||||
bt_flip_addr(setup->sm_m_address, &packet[8]);
|
|
||||||
setup->sm_s_pres.io_capability = sm_io_capabilities;
|
|
||||||
setup->sm_s_pres.oob_data_flag = have_oob_data;
|
|
||||||
setup->sm_s_pres.auth_req = sm_auth_req;
|
|
||||||
setup->sm_s_pres.max_encryption_key_size = sm_max_encryption_key_size;
|
|
||||||
sm_conn->sm_engine_state = SM_RESPONDER_PH1_W4_PAIRING_REQUEST;
|
|
||||||
} else {
|
|
||||||
// master
|
|
||||||
hci_le_advertisement_address(&setup->sm_m_addr_type, &setup->sm_m_address);
|
|
||||||
|
|
||||||
log_info("hci_le_advertisement_address type %u", setup->sm_m_addr_type);
|
|
||||||
setup->sm_s_addr_type = packet[7];
|
|
||||||
bt_flip_addr(setup->sm_s_address, &packet[8]);
|
|
||||||
setup->sm_m_preq.io_capability = sm_io_capabilities;
|
|
||||||
setup->sm_m_preq.oob_data_flag = have_oob_data;
|
|
||||||
setup->sm_m_preq.auth_req = sm_auth_req;
|
|
||||||
setup->sm_m_preq.max_encryption_key_size = sm_max_encryption_key_size;
|
|
||||||
setup->sm_m_preq.initiator_key_distribution = 0x07;
|
|
||||||
setup->sm_m_preq.responder_key_distribution = 0x07;
|
|
||||||
sm_conn->sm_engine_state = SM_INITIATOR_CONNECTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
// request security if we're slave and requested by app
|
|
||||||
if (sm_conn->sm_role == 0x01 && sm_slave_request_security){
|
|
||||||
sm_conn->sm_engine_state = SM_RESPONDER_SEND_SECURITY_REQUEST;
|
|
||||||
}
|
|
||||||
|
|
||||||
// hack (probablu) start security if requested before
|
|
||||||
if (sm_conn->sm_role == 0x00 && sm_authenticate_outgoing_connections){
|
|
||||||
sm_conn->sm_engine_state = SM_INITIATOR_PH1_SEND_PAIRING_REQUEST;
|
|
||||||
}
|
|
||||||
|
|
||||||
// prepare CSRK lookup
|
|
||||||
sm_conn->sm_csrk_lookup_state = CSRK_LOOKUP_W4_READY;
|
|
||||||
if (!sm_central_device_lookup_active()){
|
|
||||||
// try to lookup device
|
|
||||||
sm_central_device_start_lookup(sm_conn, sm_conn->sm_peer_addr_type, sm_conn->sm_peer_address);
|
|
||||||
sm_conn->sm_csrk_lookup_state = CSRK_LOOKUP_STARTED;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HCI_SUBEVENT_LE_LONG_TERM_KEY_REQUEST:
|
case HCI_SUBEVENT_LE_LONG_TERM_KEY_REQUEST:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user