Skip to content

Commit 3db96d3

Browse files
committed
Fix not sending CDC message when passcode is cancelled
1 parent 34462f1 commit 3db96d3

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

src/controller/CommissionerDiscoveryController.cpp

+26-2
Original file line numberDiff line numberDiff line change
@@ -589,12 +589,36 @@ void CommissionerDiscoveryController::Cancel()
589589
return;
590590
}
591591
UDCClientState * client = mUdcServer->GetUDCClients().FindUDCClientState(mCurrentInstance);
592-
if (client == nullptr || client->GetUDCClientProcessingState() != UDCClientProcessingState::kPromptingUser)
592+
593+
if (client == nullptr)
594+
{
595+
ChipLogError(AppServer, "UX Cancel: client not found");
596+
return;
597+
}
598+
599+
auto state = client->GetUDCClientProcessingState();
600+
601+
bool isCancelableState = (state == UDCClientProcessingState::kPromptingUser ||
602+
state == UDCClientProcessingState::kObtainingOnboardingPayload ||
603+
state == UDCClientProcessingState::kWaitingForCommissionerPasscodeReady);
604+
605+
if (!isCancelableState)
593606
{
594-
ChipLogError(AppServer, "UX Cancel: invalid state for cancel");
607+
ChipLogError(AppServer, "UX Cancel: invalid state for cancel, state: %hhu", static_cast<uint8_t>(state));
595608
return;
596609
}
610+
597611
client->SetUDCClientProcessingState(UDCClientProcessingState::kUserDeclined);
612+
613+
if (state == UDCClientProcessingState::kObtainingOnboardingPayload ||
614+
state == UDCClientProcessingState::kWaitingForCommissionerPasscodeReady)
615+
{
616+
ChipLogDetail(AppServer, "UX Cancel: user cancelled entering PIN code, sending CDC");
617+
CommissionerDeclaration cd;
618+
cd.SetCancelPasscode(true);
619+
mUdcServer->SendCDCMessage(cd, Transport::PeerAddress::UDP(client->GetPeerAddress().GetIPAddress(), client->GetCdPort()));
620+
}
621+
598622
mPendingConsent = false;
599623
ResetState();
600624
}

0 commit comments

Comments
 (0)