Skip to content

Commit d12311a

Browse files
call OnActiveModeNotification out from onCheckInComplete (project-chip#32159)
1 parent d899019 commit d12311a

File tree

7 files changed

+37
-22
lines changed

7 files changed

+37
-22
lines changed

examples/chip-tool/commands/common/CHIPCommand.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,11 @@ CHIP_ERROR CHIPCommand::MaybeSetUpStack()
149149

150150
ReturnErrorOnFailure(GetAttestationTrustStore(mPaaTrustStorePath.ValueOr(nullptr), &sTrustStore));
151151

152-
ReturnLogErrorOnFailure(sCheckInDelegate.Init(&sICDClientStorage));
152+
auto engine = chip::app::InteractionModelEngine::GetInstance();
153+
VerifyOrReturnError(engine != nullptr, CHIP_ERROR_INCORRECT_STATE);
154+
ReturnLogErrorOnFailure(sCheckInDelegate.Init(&sICDClientStorage, engine));
153155
ReturnLogErrorOnFailure(sCheckInHandler.Init(DeviceControllerFactory::GetInstance().GetSystemState()->ExchangeMgr(),
154-
&sICDClientStorage, &sCheckInDelegate));
156+
&sICDClientStorage, &sCheckInDelegate, engine));
155157

156158
CommissionerIdentity nullIdentity{ kIdentityNull, chip::kUndefinedNodeId };
157159
ReturnLogErrorOnFailure(InitializeCommissioner(nullIdentity, kIdentityNullFabricId));

src/app/icd/client/CheckInHandler.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
*
2323
*/
2424

25+
#include <app/AppConfig.h>
26+
#include <app/InteractionModelEngine.h>
2527
#include <app/InteractionModelTimeout.h>
2628
#include <app/icd/client/CheckInHandler.h>
2729
#include <app/icd/client/RefreshKeySender.h>
@@ -44,7 +46,7 @@ inline constexpr uint32_t kKeyRefreshLimit = (1U << 31);
4446
CheckInHandler::CheckInHandler() {}
4547

4648
CHIP_ERROR CheckInHandler::Init(Messaging::ExchangeManager * exchangeManager, ICDClientStorage * clientStorage,
47-
CheckInDelegate * delegate)
49+
CheckInDelegate * delegate, InteractionModelEngine * engine)
4850
{
4951
VerifyOrReturnError(exchangeManager != nullptr, CHIP_ERROR_INVALID_ARGUMENT);
5052
VerifyOrReturnError(clientStorage != nullptr, CHIP_ERROR_INVALID_ARGUMENT);
@@ -54,7 +56,7 @@ CHIP_ERROR CheckInHandler::Init(Messaging::ExchangeManager * exchangeManager, IC
5456
mpExchangeManager = exchangeManager;
5557
mpICDClientStorage = clientStorage;
5658
mpCheckInDelegate = delegate;
57-
59+
mpImEngine = engine;
5860
return mpExchangeManager->RegisterUnsolicitedMessageHandlerForType(Protocols::SecureChannel::MsgType::ICD_CheckIn, this);
5961
}
6062

@@ -127,6 +129,9 @@ CHIP_ERROR CheckInHandler::OnMessageReceived(Messaging::ExchangeContext * ec, co
127129
else
128130
{
129131
mpCheckInDelegate->OnCheckInComplete(clientInfo);
132+
#if CHIP_CONFIG_ENABLE_READ_CLIENT
133+
mpImEngine->OnActiveModeNotification(clientInfo.peer_node);
134+
#endif // CHIP_CONFIG_ENABLE_READ_CLIENT
130135
}
131136

132137
return CHIP_NO_ERROR;

src/app/icd/client/CheckInHandler.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,13 @@
3636

3737
namespace chip {
3838
namespace app {
39-
39+
class InteractionModelEngine;
4040
class CheckInHandler : public Messaging::ExchangeDelegate, public Messaging::UnsolicitedMessageHandler
4141
{
4242

4343
public:
44-
CHIP_ERROR Init(Messaging::ExchangeManager * exchangeManager, ICDClientStorage * clientStorage, CheckInDelegate * delegate);
44+
CHIP_ERROR Init(Messaging::ExchangeManager * exchangeManager, ICDClientStorage * clientStorage, CheckInDelegate * delegate,
45+
InteractionModelEngine * engine);
4546
void Shutdown();
4647

4748
CheckInHandler();
@@ -87,6 +88,7 @@ class CheckInHandler : public Messaging::ExchangeDelegate, public Messaging::Uns
8788
Messaging::ExchangeManager * mpExchangeManager = nullptr;
8889
CheckInDelegate * mpCheckInDelegate = nullptr;
8990
ICDClientStorage * mpICDClientStorage = nullptr;
91+
InteractionModelEngine * mpImEngine = nullptr;
9092
};
9193

9294
} // namespace app

src/app/icd/client/DefaultCheckInDelegate.cpp

+4-7
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
* limitations under the License.
1616
*/
1717

18-
#include <app/InteractionModelEngine.h>
1918
#include <app/icd/client/DefaultCheckInDelegate.h>
2019
#include <app/icd/client/RefreshKeySender.h>
2120
#include <crypto/CHIPCryptoPAL.h>
@@ -25,11 +24,12 @@
2524
namespace chip {
2625
namespace app {
2726

28-
CHIP_ERROR DefaultCheckInDelegate::Init(ICDClientStorage * storage)
27+
CHIP_ERROR DefaultCheckInDelegate::Init(ICDClientStorage * storage, InteractionModelEngine * engine)
2928
{
3029
VerifyOrReturnError(storage != nullptr, CHIP_ERROR_INVALID_ARGUMENT);
3130
VerifyOrReturnError(mpStorage == nullptr, CHIP_ERROR_INCORRECT_STATE);
32-
mpStorage = storage;
31+
mpStorage = storage;
32+
mpImEngine = engine;
3333
return CHIP_NO_ERROR;
3434
}
3535

@@ -38,9 +38,6 @@ void DefaultCheckInDelegate::OnCheckInComplete(const ICDClientInfo & clientInfo)
3838
ChipLogProgress(
3939
ICD, "Check In Message processing complete: start_counter=%" PRIu32 " offset=%" PRIu32 " nodeid=" ChipLogFormatScopedNodeId,
4040
clientInfo.start_icd_counter, clientInfo.offset, ChipLogValueScopedNodeId(clientInfo.peer_node));
41-
#if CHIP_CONFIG_ENABLE_READ_CLIENT
42-
InteractionModelEngine::GetInstance()->OnActiveModeNotification(clientInfo.peer_node);
43-
#endif
4441
}
4542

4643
RefreshKeySender * DefaultCheckInDelegate::OnKeyRefreshNeeded(ICDClientInfo & clientInfo, ICDClientStorage * clientStorage)
@@ -55,7 +52,7 @@ RefreshKeySender * DefaultCheckInDelegate::OnKeyRefreshNeeded(ICDClientInfo & cl
5552
return nullptr;
5653
}
5754

58-
auto refreshKeySender = Platform::New<RefreshKeySender>(this, clientInfo, clientStorage, newKey);
55+
auto refreshKeySender = Platform::New<RefreshKeySender>(this, clientInfo, clientStorage, mpImEngine, newKey);
5956
if (refreshKeySender == nullptr)
6057
{
6158
return nullptr;

src/app/icd/client/DefaultCheckInDelegate.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,21 @@ namespace app {
2626

2727
using namespace std;
2828

29+
class InteractionModelEngine;
30+
2931
/// Callbacks for check in protocol
3032
class DefaultCheckInDelegate : public CheckInDelegate
3133
{
3234
public:
3335
virtual ~DefaultCheckInDelegate() {}
34-
CHIP_ERROR Init(ICDClientStorage * storage);
36+
CHIP_ERROR Init(ICDClientStorage * storage, InteractionModelEngine * engine);
3537
void OnCheckInComplete(const ICDClientInfo & clientInfo) override;
3638
RefreshKeySender * OnKeyRefreshNeeded(ICDClientInfo & clientInfo, ICDClientStorage * clientStorage) override;
3739
void OnKeyRefreshDone(RefreshKeySender * refreshKeySender, CHIP_ERROR error) override;
3840

3941
private:
40-
ICDClientStorage * mpStorage = nullptr;
42+
ICDClientStorage * mpStorage = nullptr;
43+
InteractionModelEngine * mpImEngine = nullptr;
4144
};
4245

4346
} // namespace app

src/app/icd/client/RefreshKeySender.cpp

+9-4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "CheckInDelegate.h"
2020
#include "controller/InvokeInteraction.h"
2121
#include <app-common/zap-generated/cluster-objects.h>
22+
#include <app/AppConfig.h>
2223
#include <app/CommandPathParams.h>
2324
#include <app/InteractionModelEngine.h>
2425
#include <app/OperationalSessionSetup.h>
@@ -28,10 +29,11 @@ namespace chip {
2829
namespace app {
2930

3031
RefreshKeySender::RefreshKeySender(CheckInDelegate * checkInDelegate, const ICDClientInfo & icdClientInfo,
31-
ICDClientStorage * icdClientStorage, const RefreshKeyBuffer & refreshKeyBuffer) :
32-
mICDClientInfo(icdClientInfo),
33-
mpICDClientStorage(icdClientStorage), mpCheckInDelegate(checkInDelegate), mOnConnectedCallback(HandleDeviceConnected, this),
34-
mOnConnectionFailureCallback(HandleDeviceConnectionFailure, this)
32+
ICDClientStorage * icdClientStorage, InteractionModelEngine * engine,
33+
const RefreshKeyBuffer & refreshKeyBuffer) :
34+
mpCheckInDelegate(checkInDelegate),
35+
mICDClientInfo(icdClientInfo), mpICDClientStorage(icdClientStorage), mpImEngine(engine),
36+
mOnConnectedCallback(HandleDeviceConnected, this), mOnConnectionFailureCallback(HandleDeviceConnectionFailure, this)
3537

3638
{
3739
mNewKey = refreshKeyBuffer;
@@ -64,6 +66,9 @@ CHIP_ERROR RefreshKeySender::RegisterClientWithNewKey(Messaging::ExchangeManager
6466
}
6567

6668
mpCheckInDelegate->OnCheckInComplete(mICDClientInfo);
69+
#if CHIP_CONFIG_ENABLE_READ_CLIENT
70+
mpImEngine->OnActiveModeNotification(mICDClientInfo.peer_node);
71+
#endif // CHIP_CONFIG_ENABLE_READ_CLIENT
6772
mpCheckInDelegate->OnKeyRefreshDone(this, CHIP_NO_ERROR);
6873
};
6974

src/app/icd/client/RefreshKeySender.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace chip {
3434
namespace app {
3535

3636
class CheckInDelegate;
37-
37+
class InteractionModelEngine;
3838
/**
3939
* @brief RefreshKeySender contains all the data and methods needed for key refresh and re-registration of an ICD client.
4040
*/
@@ -44,7 +44,7 @@ class RefreshKeySender
4444
typedef Crypto::SensitiveDataBuffer<Crypto::kAES_CCM128_Key_Length> RefreshKeyBuffer;
4545

4646
RefreshKeySender(CheckInDelegate * checkInDelegate, const ICDClientInfo & icdClientInfo, ICDClientStorage * icdClientStorage,
47-
const RefreshKeyBuffer & refreshKeyBuffer);
47+
InteractionModelEngine * engine, const RefreshKeyBuffer & refreshKeyBuffer);
4848

4949
/**
5050
* @brief Sets up a CASE session to the peer for re-registering a client with the peer when a key refresh is required to avoid
@@ -82,9 +82,10 @@ class RefreshKeySender
8282
*/
8383
CHIP_ERROR RegisterClientWithNewKey(Messaging::ExchangeManager & exchangeMgr, const SessionHandle & sessionHandle);
8484

85+
CheckInDelegate * mpCheckInDelegate = nullptr;
8586
ICDClientInfo mICDClientInfo;
8687
ICDClientStorage * mpICDClientStorage = nullptr;
87-
CheckInDelegate * mpCheckInDelegate = nullptr;
88+
InteractionModelEngine * mpImEngine = nullptr;
8889
RefreshKeyBuffer mNewKey;
8990
Callback::Callback<OnDeviceConnected> mOnConnectedCallback;
9091
Callback::Callback<OnDeviceConnectionFailure> mOnConnectionFailureCallback;

0 commit comments

Comments
 (0)