From 3db96d3ee3f1c86c139e85d0e0264262c823cb1e Mon Sep 17 00:00:00 2001 From: Lazar Kovacic Date: Thu, 25 Jul 2024 12:45:03 +0200 Subject: [PATCH 1/5] Fix not sending CDC message when passcode is cancelled --- .../CommissionerDiscoveryController.cpp | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/controller/CommissionerDiscoveryController.cpp b/src/controller/CommissionerDiscoveryController.cpp index 7f13a4323d2f5c..9b26ff93fbc6a8 100644 --- a/src/controller/CommissionerDiscoveryController.cpp +++ b/src/controller/CommissionerDiscoveryController.cpp @@ -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(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(); } From b47e9471b3ab9abc81432ca17a518547709bdb62 Mon Sep 17 00:00:00 2001 From: Lazar Kovacic Date: Thu, 25 Jul 2024 15:16:43 +0200 Subject: [PATCH 2/5] Update logic --- .../UserDirectedCommissioning.h | 9 +++++++++ .../UserDirectedCommissioningClient.cpp | 3 +++ 2 files changed, 12 insertions(+) diff --git a/src/protocols/user_directed_commissioning/UserDirectedCommissioning.h b/src/protocols/user_directed_commissioning/UserDirectedCommissioning.h index cf9a55365b9191..afbcf03951fdfa 100644 --- a/src/protocols/user_directed_commissioning/UserDirectedCommissioning.h +++ b/src/protocols/user_directed_commissioning/UserDirectedCommissioning.h @@ -349,6 +349,9 @@ class DLL_EXPORT CommissionerDeclaration void SetQRCodeDisplayed(bool newValue) { mQRCodeDisplayed = newValue; }; bool GetQRCodeDisplayed() const { return mQRCodeDisplayed; }; + void SetCancelPasscode(bool newValue) { mCancelPasscode = newValue; }; + bool GetCancelPasscode() const { return mCancelPasscode; }; + /** * Writes the CommissionerDeclaration message to the given buffer. * @@ -390,6 +393,10 @@ class DLL_EXPORT CommissionerDeclaration { ChipLogDetail(AppServer, "\tQR code displayed: true"); } + if (mCancelPasscode) + { + ChipLogDetail(AppServer, "\tQR code displayed: true"); + } ChipLogDetail(AppServer, "---- Commissioner Declaration End ----"); } @@ -403,6 +410,7 @@ class DLL_EXPORT CommissionerDeclaration kPasscodeDialogDisplayedTag, kCommissionerPasscodeTag, kQRCodeDisplayedTag, + kCancelPasscodeTag, kMaxNum = UINT8_MAX }; @@ -413,6 +421,7 @@ class DLL_EXPORT CommissionerDeclaration bool mPasscodeDialogDisplayed = false; bool mCommissionerPasscode = false; bool mQRCodeDisplayed = false; + bool mCancelPasscode = false; }; class DLL_EXPORT InstanceNameResolver diff --git a/src/protocols/user_directed_commissioning/UserDirectedCommissioningClient.cpp b/src/protocols/user_directed_commissioning/UserDirectedCommissioningClient.cpp index aeb5691be2554c..f0ee3bbe69abfd 100644 --- a/src/protocols/user_directed_commissioning/UserDirectedCommissioningClient.cpp +++ b/src/protocols/user_directed_commissioning/UserDirectedCommissioningClient.cpp @@ -223,6 +223,9 @@ CHIP_ERROR CommissionerDeclaration::ReadPayload(uint8_t * udcPayload, size_t pay case kQRCodeDisplayedTag: err = reader.Get(mQRCodeDisplayed); break; + case kCancelPasscodeTag: + err = reader.Get(mCancelPasscode); + break; } } From e4484b4cdb063b716efee8f59bc1ebf3f53631d6 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Thu, 25 Jul 2024 13:23:40 +0000 Subject: [PATCH 3/5] Restyled by whitespace --- src/controller/CommissionerDiscoveryController.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controller/CommissionerDiscoveryController.cpp b/src/controller/CommissionerDiscoveryController.cpp index 9b26ff93fbc6a8..58645e8a728992 100644 --- a/src/controller/CommissionerDiscoveryController.cpp +++ b/src/controller/CommissionerDiscoveryController.cpp @@ -598,7 +598,7 @@ void CommissionerDiscoveryController::Cancel() auto state = client->GetUDCClientProcessingState(); - bool isCancelableState = (state == UDCClientProcessingState::kPromptingUser || + bool isCancelableState = (state == UDCClientProcessingState::kPromptingUser || state == UDCClientProcessingState::kObtainingOnboardingPayload || state == UDCClientProcessingState::kWaitingForCommissionerPasscodeReady); @@ -610,7 +610,7 @@ void CommissionerDiscoveryController::Cancel() client->SetUDCClientProcessingState(UDCClientProcessingState::kUserDeclined); - if (state == UDCClientProcessingState::kObtainingOnboardingPayload || + if (state == UDCClientProcessingState::kObtainingOnboardingPayload || state == UDCClientProcessingState::kWaitingForCommissionerPasscodeReady) { ChipLogDetail(AppServer, "UX Cancel: user cancelled entering PIN code, sending CDC"); From 215e4fe8801d93b3689a172e4e98abe7f5af1e2d Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Thu, 25 Jul 2024 13:23:40 +0000 Subject: [PATCH 4/5] Restyled by clang-format --- src/controller/CommissionerDiscoveryController.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/controller/CommissionerDiscoveryController.cpp b/src/controller/CommissionerDiscoveryController.cpp index 58645e8a728992..09a22e03e0bcd2 100644 --- a/src/controller/CommissionerDiscoveryController.cpp +++ b/src/controller/CommissionerDiscoveryController.cpp @@ -598,9 +598,9 @@ void CommissionerDiscoveryController::Cancel() auto state = client->GetUDCClientProcessingState(); - bool isCancelableState = (state == UDCClientProcessingState::kPromptingUser || - state == UDCClientProcessingState::kObtainingOnboardingPayload || - state == UDCClientProcessingState::kWaitingForCommissionerPasscodeReady); + bool isCancelableState = + (state == UDCClientProcessingState::kPromptingUser || state == UDCClientProcessingState::kObtainingOnboardingPayload || + state == UDCClientProcessingState::kWaitingForCommissionerPasscodeReady); if (!isCancelableState) { From 645c625664749bf5cb0d9f3e6d50e183e672b99f Mon Sep 17 00:00:00 2001 From: Lazar Kovacic Date: Thu, 25 Jul 2024 15:52:16 +0200 Subject: [PATCH 5/5] Update code --- .../user_directed_commissioning/UserDirectedCommissioning.h | 3 +-- .../UserDirectedCommissioningServer.cpp | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/protocols/user_directed_commissioning/UserDirectedCommissioning.h b/src/protocols/user_directed_commissioning/UserDirectedCommissioning.h index afbcf03951fdfa..fb1aedc03e8d6e 100644 --- a/src/protocols/user_directed_commissioning/UserDirectedCommissioning.h +++ b/src/protocols/user_directed_commissioning/UserDirectedCommissioning.h @@ -227,7 +227,6 @@ class DLL_EXPORT IdentificationDeclaration { ChipLogDetail(AppServer, "\tpairing hint: %d", mPairingHint); } - if (mNoPasscode) { ChipLogDetail(AppServer, "\tno passcode: true"); @@ -395,7 +394,7 @@ class DLL_EXPORT CommissionerDeclaration } if (mCancelPasscode) { - ChipLogDetail(AppServer, "\tQR code displayed: true"); + ChipLogDetail(AppServer, "\tPasscode cancelled: true"); } ChipLogDetail(AppServer, "---- Commissioner Declaration End ----"); } diff --git a/src/protocols/user_directed_commissioning/UserDirectedCommissioningServer.cpp b/src/protocols/user_directed_commissioning/UserDirectedCommissioningServer.cpp index fb31049d1d99a9..118ba7c7c524e4 100644 --- a/src/protocols/user_directed_commissioning/UserDirectedCommissioningServer.cpp +++ b/src/protocols/user_directed_commissioning/UserDirectedCommissioningServer.cpp @@ -435,6 +435,8 @@ uint32_t CommissionerDeclaration::WritePayload(uint8_t * payloadBuffer, size_t p LogErrorOnFailure(err)); VerifyOrExit(CHIP_NO_ERROR == (err = writer.PutBoolean(chip::TLV::ContextTag(kQRCodeDisplayedTag), mQRCodeDisplayed)), LogErrorOnFailure(err)); + VerifyOrExit(CHIP_NO_ERROR == (err = writer.PutBoolean(chip::TLV::ContextTag(kCancelPasscodeTag), mCancelPasscode)), + LogErrorOnFailure(err)); VerifyOrExit(CHIP_NO_ERROR == (err = writer.EndContainer(outerContainerType)), LogErrorOnFailure(err)); VerifyOrExit(CHIP_NO_ERROR == (err = writer.Finalize()), LogErrorOnFailure(err));