ble_error_t btle_getLinkSecurity(Gap::Handle_t connectionHandle, SecurityManager::LinkSecurityStatus_t *securityStatusP) { ret_code_t rc; dm_handle_t dmHandle = { .appl_id = applicationInstance, }; if ((rc = dm_handle_get(connectionHandle, &dmHandle)) != NRF_SUCCESS) { if (rc == NRF_ERROR_NOT_FOUND) { return BLE_ERROR_INVALID_PARAM; } else { return BLE_ERROR_UNSPECIFIED; } } if ((rc = dm_security_status_req(&dmHandle, reinterpret_cast<dm_security_status_t *>(securityStatusP))) != NRF_SUCCESS) { switch (rc) { case NRF_ERROR_INVALID_STATE: return BLE_ERROR_INVALID_STATE; case NRF_ERROR_NO_MEM: return BLE_ERROR_NO_MEM; default: return BLE_ERROR_UNSPECIFIED; } } return BLE_ERROR_NONE; }
/**@brief Function for handling the security request timer time-out. * * @details This function is called each time the security request timer expires. * * @param[in] p_context Pointer used for passing context information from the * app_start_timer() call to the time-out handler. */ static void sec_req_timeout_handler(void * p_context) { uint32_t err_code; dm_security_status_t status; if (m_conn_handle != BLE_CONN_HANDLE_INVALID) { err_code = dm_security_status_req(&m_peer_handle, &status); APP_ERROR_CHECK(err_code); // If the link is still not secured by the peer, initiate security procedure. if (status == NOT_ENCRYPTED) { err_code = dm_security_setup_req(&m_peer_handle); APP_ERROR_CHECK(err_code); } } }
/**@brief Function for handling the Security Request timer timeout. * * @details This function will be called each time the Security Request timer expires. * * @param[in] p_context Pointer used for passing some arbitrary information (context) from the * app_start_timer() call to the timeout handler. */ static void sec_req_timeout_handler(void * p_context) { uint32_t err_code; dm_security_status_t status; if (m_conn_handle != BLE_CONN_HANDLE_INVALID) { err_code = dm_security_status_req(&m_dm_handle, &status); APP_ERROR_CHECK(err_code); // In case the link is secured by the peer during timeout, the request is not sent. if (status == NOT_ENCRYPTED) { err_code = dm_security_setup_req(&m_dm_handle); APP_ERROR_CHECK(err_code); } } }