Skip to content

Commit 339f980

Browse files
Fix max timeout for open commissioning window
Commissioning window can be opened using timeout exceeding the maximum value of 900 s defined by the spec. This can happen if selected transport is IP, but the device uses BLE extended announcement feature. Added checking if device is commissioned to be able to determine what max timeout should be used for the particular scenario. Fixes: project-chip#35505
1 parent 83d345e commit 339f980

File tree

3 files changed

+9
-7
lines changed

3 files changed

+9
-7
lines changed

src/app/clusters/administrator-commissioning-server/administrator-commissioning-server.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ bool emberAfAdministratorCommissioningClusterOpenCommissioningWindowCallback(
114114
VerifyOrExit(commissioningTimeout >= commissionMgr.MinCommissioningTimeout(), globalStatus = Status::InvalidCommand);
115115
VerifyOrExit(discriminator <= kMaxDiscriminatorValue, globalStatus = Status::InvalidCommand);
116116

117-
VerifyOrExit(verifier.Deserialize(pakeVerifier) == CHIP_NO_ERROR, status.Emplace(StatusCode::kPAKEParameterError));
118117
VerifyOrExit(commissionMgr.OpenEnhancedCommissioningWindow(commissioningTimeout, discriminator, verifier, iterations, salt,
119118
fabricIndex, fabricInfo->GetVendorId()) == CHIP_NO_ERROR,
120119
status.Emplace(StatusCode::kPAKEParameterError));

src/app/server/CommissioningWindowManager.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ CHIP_ERROR CommissioningWindowManager::OpenEnhancedCommissioningWindow(Seconds32
362362

363363
mUseECM = true;
364364

365-
CHIP_ERROR err = OpenCommissioningWindow(commissioningTimeout);
365+
CHIP_ERROR err = OpenCommissioningWindow(commissioningTimeout, false);
366366
if (err != CHIP_NO_ERROR)
367367
{
368368
Cleanup();

src/app/server/CommissioningWindowManager.h

+8-5
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,18 @@ class CommissioningWindowManager : public Messaging::UnsolicitedMessageHandler,
5858
return CHIP_NO_ERROR;
5959
}
6060

61-
static constexpr System::Clock::Seconds32 MaxCommissioningTimeout()
61+
static constexpr System::Clock::Seconds32 MaxCommissioningTimeout(bool isCommissioned)
6262
{
6363
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
64-
// Specification section 2.3.1 - Extended Announcement Duration up to 48h
65-
return System::Clock::Seconds32(60 * 60 * 48);
66-
#else
64+
/* Allow for extended announcement only when device is uncomissioned. */
65+
if (GetFabricTable().FabricCount() == 0)
66+
{
67+
// Specification section 2.3.1 - Extended Announcement Duration up to 48h
68+
return System::Clock::Seconds32(60 * 60 * 48);
69+
}
70+
#endif
6771
// Specification section 5.4.2.3. Announcement Duration says 15 minutes.
6872
return System::Clock::Seconds32(15 * 60);
69-
#endif
7073
}
7174

7275
System::Clock::Seconds32 MinCommissioningTimeout() const

0 commit comments

Comments
 (0)