Skip to content

Commit c06b3f5

Browse files
authored
Remove mDefaultAdvDelegate in RendezvousParameters.h (project-chip#5255)
`mDefaultAdvDelegate` address is assigned to `mAdvDelegate` and is beeing copied into `RendezvousSession::Init` (https://github.com/project-chip/connectedhomeip/blob/master/src/transport/RendezvousSession.cpp#L49) But if the caller does not hold the `RendezvousParameters` object, `mDefaultAdvDelegate` is released and `RendezvousSession` is not aware of it so it will continue to use it. This PR removes `mDefaultAdvDelegate` so the caller is responsible for setting and maintaining the `RendezvousAdvertisementDelegate` if any.
1 parent 8c6e67b commit c06b3f5

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

src/transport/RendezvousParameters.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ class RendezvousParameters
102102
return *this;
103103
}
104104

105+
bool HasAdvertisementDelegate() const { return mAdvDelegate != nullptr; }
106+
105107
const RendezvousAdvertisementDelegate * GetAdvertisementDelegate() const { return mAdvDelegate; }
106108

107109
RendezvousParameters & SetAdvertisementDelegate(RendezvousAdvertisementDelegate * delegate)
@@ -140,8 +142,7 @@ class RendezvousParameters
140142
PASEVerifier mPASEVerifier;
141143
bool mHasPASEVerifier = false;
142144

143-
RendezvousAdvertisementDelegate mDefaultAdvDelegate;
144-
RendezvousAdvertisementDelegate * mAdvDelegate = &mDefaultAdvDelegate;
145+
RendezvousAdvertisementDelegate * mAdvDelegate = nullptr;
145146

146147
#if CONFIG_NETWORK_LAYER_BLE
147148
Ble::BleLayer * mBleLayer = nullptr;

src/transport/RendezvousSession.cpp

+11-2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ CHIP_ERROR RendezvousSession::Init(const RendezvousParameters & params, Transpor
5252
VerifyOrReturnError(sessionMgr != nullptr, CHIP_ERROR_INVALID_ARGUMENT);
5353
VerifyOrReturnError(admin != nullptr, CHIP_ERROR_INVALID_ARGUMENT);
5454
VerifyOrReturnError(mParams.HasSetupPINCode() || mParams.HasPASEVerifier(), CHIP_ERROR_INVALID_ARGUMENT);
55+
#if CONFIG_NETWORK_LAYER_BLE
56+
VerifyOrReturnError(mParams.HasAdvertisementDelegate(), CHIP_ERROR_INVALID_ARGUMENT);
57+
#endif
5558

5659
mSecureSessionMgr = sessionMgr;
5760
mAdmin = admin;
@@ -289,7 +292,10 @@ void RendezvousSession::UpdateState(RendezvousSession::State newState, CHIP_ERRO
289292
mDelegate->OnRendezvousComplete();
290293
}
291294

292-
mParams.GetAdvertisementDelegate()->RendezvousComplete();
295+
if (mParams.HasAdvertisementDelegate())
296+
{
297+
mParams.GetAdvertisementDelegate()->RendezvousComplete();
298+
}
293299

294300
// Release the admin, as the rendezvous is complete.
295301
mAdmin = nullptr;
@@ -305,7 +311,10 @@ void RendezvousSession::UpdateState(RendezvousSession::State newState, CHIP_ERRO
305311
ReleasePairingSessionHandle();
306312

307313
// Disable rendezvous advertisement
308-
mParams.GetAdvertisementDelegate()->StopAdvertisement();
314+
if (mParams.HasAdvertisementDelegate())
315+
{
316+
mParams.GetAdvertisementDelegate()->StopAdvertisement();
317+
}
309318
if (mTransport)
310319
{
311320
// Free the transport

0 commit comments

Comments
 (0)