Skip to content

Commit 51cd0a2

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 51cd0a2

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

src/app/server/CommissioningWindowManager.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,20 @@ CHIP_ERROR CommissioningWindowManager::AdvertiseAndListenForPASE()
302302
return CHIP_NO_ERROR;
303303
}
304304

305+
System::Clock::Seconds32 CommissioningWindowManager::MaxCommissioningTimeout() const
306+
{
307+
#if CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING
308+
/* Allow for extended announcement only if the device is uncomissioned. */
309+
if (mServer->GetFabricTable().FabricCount() == 0)
310+
{
311+
// Specification section 2.3.1 - Extended Announcement Duration up to 48h
312+
return System::Clock::Seconds32(60 * 60 * 48);
313+
}
314+
#endif
315+
// Specification section 5.4.2.3. Announcement Duration says 15 minutes.
316+
return System::Clock::Seconds32(15 * 60);
317+
}
318+
305319
CHIP_ERROR CommissioningWindowManager::OpenBasicCommissioningWindow(Seconds32 commissioningTimeout,
306320
CommissioningWindowAdvertisement advertisementMode)
307321
{

src/app/server/CommissioningWindowManager.h

+1-10
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,7 @@ class CommissioningWindowManager : public Messaging::UnsolicitedMessageHandler,
5858
return CHIP_NO_ERROR;
5959
}
6060

61-
static constexpr System::Clock::Seconds32 MaxCommissioningTimeout()
62-
{
63-
#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
67-
// Specification section 5.4.2.3. Announcement Duration says 15 minutes.
68-
return System::Clock::Seconds32(15 * 60);
69-
#endif
70-
}
61+
System::Clock::Seconds32 MaxCommissioningTimeout() const;
7162

7263
System::Clock::Seconds32 MinCommissioningTimeout() const
7364
{

0 commit comments

Comments
 (0)