break;
}
has_gotten_io_cap_response_ = true;
+ if (user_confirmation_request_) {
+ this->OnReceive(*user_confirmation_request_);
+ user_confirmation_request_ = std::nullopt;
+ }
}
void ClassicPairingHandler::OnReceive(hci::SimplePairingCompleteView packet) {
*
* The table is on pg 2133 of the Core v5.1 spec.
*/
+
void ClassicPairingHandler::OnReceive(hci::UserConfirmationRequestView packet) {
+ // Ensure we have io cap response otherwise checks will be wrong if it comes late
+ if (!has_gotten_io_cap_response_) {
+ user_confirmation_request_ = std::make_optional<hci::UserConfirmationRequestView>(packet);
+ return;
+ }
ASSERT(packet.IsValid());
LOG_INFO("Received: %s", hci::EventCodeText(packet.GetEventCode()).c_str());
ASSERT_LOG(GetRecord()->GetPseudoAddress()->GetAddress() == packet.GetBdAddr(), "Address mismatch");
bool is_cancelled_ = false;
bool has_gotten_io_cap_response_ = false;
+ std::optional<hci::UserConfirmationRequestView> user_confirmation_request_ = std::nullopt;
hci::ErrorCode last_status_ = hci::ErrorCode::UNKNOWN_HCI_COMMAND;
bool locally_initiated_ = false;