Skip to content

Commit

Permalink
Fix not sending CDC message when passcode is cancelled
Browse files Browse the repository at this point in the history
  • Loading branch information
lazarkov committed Jul 25, 2024
1 parent 34462f1 commit 3db96d3
Showing 1 changed file with 26 additions and 2 deletions.
28 changes: 26 additions & 2 deletions src/controller/CommissionerDiscoveryController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -589,12 +589,36 @@ void CommissionerDiscoveryController::Cancel()
return;
}
UDCClientState * client = mUdcServer->GetUDCClients().FindUDCClientState(mCurrentInstance);
if (client == nullptr || client->GetUDCClientProcessingState() != UDCClientProcessingState::kPromptingUser)

if (client == nullptr)
{
ChipLogError(AppServer, "UX Cancel: client not found");
return;
}

auto state = client->GetUDCClientProcessingState();

bool isCancelableState = (state == UDCClientProcessingState::kPromptingUser ||
state == UDCClientProcessingState::kObtainingOnboardingPayload ||
state == UDCClientProcessingState::kWaitingForCommissionerPasscodeReady);

if (!isCancelableState)
{
ChipLogError(AppServer, "UX Cancel: invalid state for cancel");
ChipLogError(AppServer, "UX Cancel: invalid state for cancel, state: %hhu", static_cast<uint8_t>(state));
return;
}

client->SetUDCClientProcessingState(UDCClientProcessingState::kUserDeclined);

if (state == UDCClientProcessingState::kObtainingOnboardingPayload ||
state == UDCClientProcessingState::kWaitingForCommissionerPasscodeReady)
{
ChipLogDetail(AppServer, "UX Cancel: user cancelled entering PIN code, sending CDC");
CommissionerDeclaration cd;
cd.SetCancelPasscode(true);
mUdcServer->SendCDCMessage(cd, Transport::PeerAddress::UDP(client->GetPeerAddress().GetIPAddress(), client->GetCdPort()));
}

mPendingConsent = false;
ResetState();
}
Expand Down

0 comments on commit 3db96d3

Please sign in to comment.