Skip to content

Commit 1448210

Browse files
kghostbzbarsky-apple
authored andcommitted
Message counter implementation (#5389)
* Message counter implementation * move protocols/message_counter to protocols/secure_channel * Resolve comments * Resolve comment from Boris Co-authored-by: Boris Zbarsky <[email protected]> * Follow up fixes * Remove SecureSessionMgr::HandleGroupMessageReceived * Remove packetHeader in retrans table * Resolve conflict * Resolve comments * Apply suggestions from code review Co-authored-by: Boris Zbarsky <[email protected]> Co-authored-by: Boris Zbarsky <[email protected]>
1 parent 2004645 commit 1448210

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+1514
-1335
lines changed

examples/shell/shell_common/cmd_ping.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <messaging/ExchangeMgr.h>
2727
#include <platform/CHIPDeviceLayer.h>
2828
#include <protocols/echo/Echo.h>
29+
#include <protocols/secure_channel/MessageCounterManager.h>
2930
#include <protocols/secure_channel/PASESession.h>
3031
#include <system/SystemPacketBuffer.h>
3132
#include <transport/SecureSessionMgr.h>
@@ -269,7 +270,8 @@ void StartPinging(streamer_t * stream, char * destination)
269270
{
270271
peerAddress = Transport::PeerAddress::TCP(gDestAddr, gPingArguments.GetEchoPort());
271272

272-
err = gSessionManager.Init(kTestControllerNodeId, &DeviceLayer::SystemLayer, &gTCPManager, &admins);
273+
err =
274+
gSessionManager.Init(kTestControllerNodeId, &DeviceLayer::SystemLayer, &gTCPManager, &admins, &gMessageCounterManager);
273275
SuccessOrExit(err);
274276

275277
err = gExchangeManager.Init(&gSessionManager);
@@ -280,13 +282,17 @@ void StartPinging(streamer_t * stream, char * destination)
280282
{
281283
peerAddress = Transport::PeerAddress::UDP(gDestAddr, gPingArguments.GetEchoPort(), INET_NULL_INTERFACEID);
282284

283-
err = gSessionManager.Init(kTestControllerNodeId, &DeviceLayer::SystemLayer, &gUDPManager, &admins);
285+
err =
286+
gSessionManager.Init(kTestControllerNodeId, &DeviceLayer::SystemLayer, &gUDPManager, &admins, &gMessageCounterManager);
284287
SuccessOrExit(err);
285288

286289
err = gExchangeManager.Init(&gSessionManager);
287290
SuccessOrExit(err);
288291
}
289292

293+
err = gMessageCounterManager.Init(&gExchangeManager);
294+
SuccessOrExit(err);
295+
290296
// Start the CHIP connection to the CHIP echo responder.
291297
err = EstablishSecureSession(stream, peerAddress);
292298
SuccessOrExit(err);

examples/shell/shell_common/cmd_send.cpp

+10-8
Original file line numberDiff line numberDiff line change
@@ -256,24 +256,26 @@ void ProcessCommand(streamer_t * stream, char * destination)
256256
{
257257
peerAddress = Transport::PeerAddress::TCP(gDestAddr, gSendArguments.GetPort());
258258

259-
err = gSessionManager.Init(kTestControllerNodeId, &DeviceLayer::SystemLayer, &gTCPManager, &admins);
260-
SuccessOrExit(err);
261-
262-
err = gExchangeManager.Init(&gSessionManager);
259+
err =
260+
gSessionManager.Init(kTestControllerNodeId, &DeviceLayer::SystemLayer, &gTCPManager, &admins, &gMessageCounterManager);
263261
SuccessOrExit(err);
264262
}
265263
else
266264
#endif
267265
{
268266
peerAddress = Transport::PeerAddress::UDP(gDestAddr, gSendArguments.GetPort(), INET_NULL_INTERFACEID);
269267

270-
err = gSessionManager.Init(kTestControllerNodeId, &DeviceLayer::SystemLayer, &gUDPManager, &admins);
271-
SuccessOrExit(err);
272-
273-
err = gExchangeManager.Init(&gSessionManager);
268+
err =
269+
gSessionManager.Init(kTestControllerNodeId, &DeviceLayer::SystemLayer, &gUDPManager, &admins, &gMessageCounterManager);
274270
SuccessOrExit(err);
275271
}
276272

273+
err = gExchangeManager.Init(&gSessionManager);
274+
SuccessOrExit(err);
275+
276+
err = gMessageCounterManager.Init(&gExchangeManager);
277+
SuccessOrExit(err);
278+
277279
// Start the CHIP connection to the CHIP server.
278280
err = EstablishSecureSession(stream, peerAddress);
279281
SuccessOrExit(err);

examples/shell/shell_common/globals.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include <Globals.h>
1919

20+
chip::secure_channel::MessageCounterManager gMessageCounterManager;
2021
chip::Messaging::ExchangeManager gExchangeManager;
2122
chip::SecureSessionMgr gSessionManager;
2223
chip::Inet::IPAddress gDestAddr;

examples/shell/shell_common/include/Globals.h

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include <lib/core/CHIPCore.h>
2121
#include <messaging/ExchangeMgr.h>
22+
#include <protocols/secure_channel/MessageCounterManager.h>
2223
#include <transport/SecureSessionMgr.h>
2324
#include <transport/raw/TCP.h>
2425
#include <transport/raw/UDP.h>
@@ -30,6 +31,7 @@ constexpr size_t kMaxTcpPendingPackets = 4;
3031
constexpr size_t kMaxPayloadSize = 1280;
3132
constexpr size_t kResponseTimeOut = 1000;
3233

34+
extern chip::secure_channel::MessageCounterManager gMessageCounterManager;
3335
extern chip::Messaging::ExchangeManager gExchangeManager;
3436
extern chip::SecureSessionMgr gSessionManager;
3537
extern chip::Inet::IPAddress gDestAddr;

src/app/clusters/operational-credentials-server/operational-credentials-server.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -263,8 +263,7 @@ bool emberAfOperationalCredentialsClusterSetFabricCallback(chip::app::Command *
263263

264264
SuccessOrExit(err = commandObj->PrepareCommand(&cmdParams));
265265
writer = commandObj->GetCommandDataElementTLVWriter();
266-
SuccessOrExit(
267-
err = writer->Put(TLV::ContextTag(0), commandObj->GetExchangeContext()->GetSecureSessionHandle().GetPeerNodeId()));
266+
SuccessOrExit(err = writer->Put(TLV::ContextTag(0), commandObj->GetExchangeContext()->GetSecureSession().GetPeerNodeId()));
268267
SuccessOrExit(err = commandObj->FinishCommand());
269268
}
270269

src/app/server/Server.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include <messaging/ExchangeMgr.h>
3434
#include <platform/CHIPDeviceLayer.h>
3535
#include <platform/KeyValueStoreManager.h>
36+
#include <protocols/secure_channel/MessageCounterManager.h>
3637
#include <setup_payload/SetupPayload.h>
3738
#include <support/CodeUtils.h>
3839
#include <support/ErrorStr.h>
@@ -397,6 +398,7 @@ class ServerCallback : public ExchangeDelegate
397398
SecureSessionMgr * mSessionMgr = nullptr;
398399
};
399400

401+
secure_channel::MessageCounterManager gMessageCounterManager;
400402
ServerCallback gCallbacks;
401403
SecurePairingUsingTestSecret gTestPairing;
402404

@@ -507,11 +509,14 @@ void InitServer(AppDelegate * delegate)
507509

508510
SuccessOrExit(err);
509511

510-
err = gSessions.Init(chip::kTestDeviceNodeId, &DeviceLayer::SystemLayer, &gTransports, &gAdminPairings);
512+
err =
513+
gSessions.Init(chip::kTestDeviceNodeId, &DeviceLayer::SystemLayer, &gTransports, &gAdminPairings, &gMessageCounterManager);
511514
SuccessOrExit(err);
512515

513516
err = gExchangeMgr.Init(&gSessions);
514517
SuccessOrExit(err);
518+
err = gMessageCounterManager.Init(&gExchangeMgr);
519+
SuccessOrExit(err);
515520

516521
err = chip::app::InteractionModelEngine::GetInstance()->Init(&gExchangeMgr, nullptr);
517522
SuccessOrExit(err);

src/app/tests/TestCommandInteraction.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include <messaging/ExchangeMgr.h>
3434
#include <messaging/Flags.h>
3535
#include <platform/CHIPDeviceLayer.h>
36+
#include <protocols/secure_channel/MessageCounterManager.h>
3637
#include <protocols/secure_channel/PASESession.h>
3738
#include <support/ErrorStr.h>
3839
#include <support/UnitTestRegistration.h>
@@ -49,6 +50,7 @@ static System::Layer gSystemLayer;
4950
static SecureSessionMgr gSessionManager;
5051
static Messaging::ExchangeManager gExchangeManager;
5152
static TransportMgr<Transport::UDP> gTransportManager;
53+
static secure_channel::MessageCounterManager gMessageCounterManager;
5254
static Transport::AdminId gAdminId = 0;
5355

5456
namespace app {
@@ -311,12 +313,16 @@ void InitializeChip(nlTestSuite * apSuite)
311313

312314
chip::gSystemLayer.Init(nullptr);
313315

314-
err = chip::gSessionManager.Init(chip::kTestDeviceNodeId, &chip::gSystemLayer, &chip::gTransportManager, &admins);
316+
err = chip::gSessionManager.Init(chip::kTestDeviceNodeId, &chip::gSystemLayer, &chip::gTransportManager, &admins,
317+
&chip::gMessageCounterManager);
315318
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
316319

317320
err = chip::gExchangeManager.Init(&chip::gSessionManager);
318321
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
319322

323+
err = chip::gMessageCounterManager.Init(&chip::gExchangeManager);
324+
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
325+
320326
err = chip::app::InteractionModelEngine::GetInstance()->Init(&chip::gExchangeManager, nullptr);
321327
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
322328
}

src/app/tests/TestEventLogging.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include <messaging/ExchangeMgr.h>
3636
#include <messaging/Flags.h>
3737
#include <platform/CHIPDeviceLayer.h>
38+
#include <protocols/secure_channel/MessageCounterManager.h>
3839
#include <protocols/secure_channel/PASESession.h>
3940
#include <support/ErrorStr.h>
4041
#include <support/UnitTestRegistration.h>
@@ -63,6 +64,7 @@ static chip::app::CircularEventBuffer gCircularEventBuffer[3];
6364

6465
chip::SecureSessionMgr gSessionManager;
6566
chip::Messaging::ExchangeManager gExchangeManager;
67+
chip::secure_channel::MessageCounterManager gMessageCounterManager;
6668

6769
void InitializeChip(nlTestSuite * apSuite)
6870
{
@@ -78,11 +80,14 @@ void InitializeChip(nlTestSuite * apSuite)
7880

7981
gSystemLayer.Init(nullptr);
8082

81-
err = gSessionManager.Init(chip::kTestDeviceNodeId, &gSystemLayer, &gTransportManager, &admins);
83+
err = gSessionManager.Init(chip::kTestDeviceNodeId, &gSystemLayer, &gTransportManager, &admins, &gMessageCounterManager);
8284
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
8385

8486
err = gExchangeManager.Init(&gSessionManager);
8587
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
88+
89+
err = gMessageCounterManager.Init(&gExchangeManager);
90+
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
8691
}
8792

8893
void InitializeEventLogging()

src/app/tests/TestInteractionModelEngine.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include <messaging/ExchangeMgr.h>
3232
#include <messaging/Flags.h>
3333
#include <platform/CHIPDeviceLayer.h>
34+
#include <protocols/secure_channel/MessageCounterManager.h>
3435
#include <protocols/secure_channel/PASESession.h>
3536
#include <support/ErrorStr.h>
3637
#include <support/UnitTestRegistration.h>
@@ -45,6 +46,7 @@ namespace {
4546
static chip::System::Layer gSystemLayer;
4647
static chip::SecureSessionMgr gSessionManager;
4748
static chip::Messaging::ExchangeManager gExchangeManager;
49+
static chip::secure_channel::MessageCounterManager gMessageCounterManager;
4850
static chip::TransportMgr<chip::Transport::UDP> gTransportManager;
4951
static const chip::Transport::AdminId gAdminId = 0;
5052
} // namespace
@@ -117,11 +119,14 @@ void InitializeChip(nlTestSuite * apSuite)
117119

118120
gSystemLayer.Init(nullptr);
119121

120-
err = gSessionManager.Init(chip::kTestDeviceNodeId, &gSystemLayer, &gTransportManager, &admins);
122+
err = gSessionManager.Init(chip::kTestDeviceNodeId, &gSystemLayer, &gTransportManager, &admins, &gMessageCounterManager);
121123
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
122124

123125
err = gExchangeManager.Init(&gSessionManager);
124126
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
127+
128+
err = gMessageCounterManager.Init(&gExchangeManager);
129+
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
125130
}
126131

127132
// clang-format off

src/app/tests/TestReadInteraction.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include <messaging/ExchangeMgr.h>
3232
#include <messaging/Flags.h>
3333
#include <platform/CHIPDeviceLayer.h>
34+
#include <protocols/secure_channel/MessageCounterManager.h>
3435
#include <protocols/secure_channel/PASESession.h>
3536
#include <support/ErrorStr.h>
3637
#include <support/UnitTestRegistration.h>
@@ -47,6 +48,7 @@ SecureSessionMgr gSessionManager;
4748
Messaging::ExchangeManager gExchangeManager;
4849
TransportMgr<Transport::UDP> gTransportManager;
4950
const Transport::AdminId gAdminId = 0;
51+
secure_channel::MessageCounterManager gMessageCounterManager;
5052

5153
namespace app {
5254
class TestReadInteraction
@@ -157,11 +159,15 @@ void InitializeChip(nlTestSuite * apSuite)
157159

158160
chip::gSystemLayer.Init(nullptr);
159161

160-
err = chip::gSessionManager.Init(chip::kTestDeviceNodeId, &chip::gSystemLayer, &chip::gTransportManager, &admins);
162+
err = chip::gSessionManager.Init(chip::kTestDeviceNodeId, &chip::gSystemLayer, &chip::gTransportManager, &admins,
163+
&chip::gMessageCounterManager);
161164
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
162165

163166
err = chip::gExchangeManager.Init(&chip::gSessionManager);
164167
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
168+
169+
err = chip::gMessageCounterManager.Init(&chip::gExchangeManager);
170+
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
165171
}
166172

167173
/**

src/app/tests/TestReportingEngine.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <messaging/ExchangeMgr.h>
3333
#include <messaging/Flags.h>
3434
#include <platform/CHIPDeviceLayer.h>
35+
#include <protocols/secure_channel/MessageCounterManager.h>
3536
#include <protocols/secure_channel/PASESession.h>
3637
#include <support/ErrorStr.h>
3738
#include <support/UnitTestRegistration.h>
@@ -47,6 +48,7 @@ static System::Layer gSystemLayer;
4748
static SecureSessionMgr gSessionManager;
4849
static Messaging::ExchangeManager gExchangeManager;
4950
static TransportMgr<Transport::UDP> gTransportManager;
51+
static secure_channel::MessageCounterManager gMessageCounterManager;
5052
static const Transport::AdminId gAdminId = 0;
5153
constexpr ClusterId kTestClusterId = 6;
5254
constexpr EndpointId kTestEndpointId = 1;
@@ -153,11 +155,15 @@ void InitializeChip(nlTestSuite * apSuite)
153155

154156
chip::gSystemLayer.Init(nullptr);
155157

156-
err = chip::gSessionManager.Init(chip::kTestDeviceNodeId, &chip::gSystemLayer, &chip::gTransportManager, &admins);
158+
err = chip::gSessionManager.Init(chip::kTestDeviceNodeId, &chip::gSystemLayer, &chip::gTransportManager, &admins,
159+
&chip::gMessageCounterManager);
157160
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
158161

159162
err = chip::gExchangeManager.Init(&chip::gSessionManager);
160163
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
164+
165+
err = chip::gMessageCounterManager.Init(&chip::gExchangeManager);
166+
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
161167
}
162168

163169
// clang-format off

src/app/tests/integration/chip_im_initiator.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include <core/CHIPCore.h>
3434
#include <mutex>
3535
#include <platform/CHIPDeviceLayer.h>
36+
#include <protocols/secure_channel/MessageCounterManager.h>
3637
#include <protocols/secure_channel/PASESession.h>
3738
#include <support/ErrorStr.h>
3839
#include <system/SystemPacketBuffer.h>
@@ -56,8 +57,8 @@ chip::app::CommandSender * gpCommandSender = nullptr;
5657
chip::app::ReadClient * gpReadClient = nullptr;
5758

5859
chip::TransportMgr<chip::Transport::UDP> gTransportManager;
59-
6060
chip::SecureSessionMgr gSessionManager;
61+
chip::secure_channel::MessageCounterManager gMessageCounterManager;
6162

6263
chip::Inet::IPAddress gDestAddr;
6364

@@ -317,12 +318,16 @@ int main(int argc, char * argv[])
317318
.SetListenPort(IM_CLIENT_PORT));
318319
SuccessOrExit(err);
319320

320-
err = gSessionManager.Init(chip::kTestControllerNodeId, &chip::DeviceLayer::SystemLayer, &gTransportManager, &admins);
321+
err = gSessionManager.Init(chip::kTestControllerNodeId, &chip::DeviceLayer::SystemLayer, &gTransportManager, &admins,
322+
&gMessageCounterManager);
321323
SuccessOrExit(err);
322324

323325
err = gExchangeManager.Init(&gSessionManager);
324326
SuccessOrExit(err);
325327

328+
err = gMessageCounterManager.Init(&gExchangeManager);
329+
SuccessOrExit(err);
330+
326331
err = chip::app::InteractionModelEngine::GetInstance()->Init(&gExchangeManager, &mockDelegate);
327332
SuccessOrExit(err);
328333

src/app/tests/integration/chip_im_responder.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include <messaging/ExchangeMgr.h>
3636
#include <messaging/Flags.h>
3737
#include <platform/CHIPDeviceLayer.h>
38+
#include <protocols/secure_channel/MessageCounterManager.h>
3839
#include <protocols/secure_channel/PASESession.h>
3940
#include <support/ErrorStr.h>
4041
#include <system/SystemPacketBuffer.h>
@@ -125,6 +126,7 @@ namespace {
125126
chip::TransportMgr<chip::Transport::UDP> gTransportManager;
126127
chip::SecureSessionMgr gSessionManager;
127128
chip::SecurePairingUsingTestSecret gTestPairing;
129+
chip::secure_channel::MessageCounterManager gMessageCounterManager;
128130
LivenessEventGenerator gLivenessGenerator;
129131

130132
uint8_t gDebugEventBuffer[2048];
@@ -162,12 +164,16 @@ int main(int argc, char * argv[])
162164
chip::Transport::UdpListenParameters(&chip::DeviceLayer::InetLayer).SetAddressType(chip::Inet::kIPAddressType_IPv4));
163165
SuccessOrExit(err);
164166

165-
err = gSessionManager.Init(chip::kTestDeviceNodeId, &chip::DeviceLayer::SystemLayer, &gTransportManager, &admins);
167+
err = gSessionManager.Init(chip::kTestDeviceNodeId, &chip::DeviceLayer::SystemLayer, &gTransportManager, &admins,
168+
&gMessageCounterManager);
166169
SuccessOrExit(err);
167170

168171
err = gExchangeManager.Init(&gSessionManager);
169172
SuccessOrExit(err);
170173

174+
err = gMessageCounterManager.Init(&gExchangeManager);
175+
SuccessOrExit(err);
176+
171177
err = chip::app::InteractionModelEngine::GetInstance()->Init(&gExchangeManager, &mockDelegate);
172178
SuccessOrExit(err);
173179

0 commit comments

Comments
 (0)