Skip to content

Commit 2368700

Browse files
kghostpull[bot]
authored andcommitted
app: Use SessionHandle instead of node id for IM APIs (#10916)
app: Use SessionHandle instead of node id for IM APIs
1 parent 46f9250 commit 2368700

13 files changed

+53
-61
lines changed

src/app/CommandHandler.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ CHIP_ERROR CommandHandler::SendCommandResponse()
8282
ReturnErrorOnFailure(Finalize(commandPacket));
8383
ReturnErrorOnFailure(
8484
mpExchangeCtx->SendMessage(Protocols::InteractionModel::MsgType::InvokeCommandResponse, std::move(commandPacket)));
85+
// The ExchangeContext is automatically freed here, and it makes mpExchangeCtx be temporarily dangling, but in
86+
// all cases, we are going to call Close immediately after this function, which nulls out mpExchangeCtx.
8587

8688
MoveToState(CommandState::CommandSent);
8789

src/app/CommandSender.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ CommandSender::CommandSender(Callback * apCallback, Messaging::ExchangeManager *
3636
mpCallback(apCallback), mpExchangeMgr(apExchangeMgr)
3737
{}
3838

39-
CHIP_ERROR CommandSender::SendCommandRequest(NodeId aNodeId, FabricIndex aFabricIndex, Optional<SessionHandle> secureSession,
40-
System::Clock::Timeout timeout)
39+
CHIP_ERROR CommandSender::SendCommandRequest(SessionHandle session, System::Clock::Timeout timeout)
4140
{
4241
CHIP_ERROR err = CHIP_NO_ERROR;
4342
System::PacketBufferHandle commandPacket;
@@ -48,7 +47,7 @@ CHIP_ERROR CommandSender::SendCommandRequest(NodeId aNodeId, FabricIndex aFabric
4847
SuccessOrExit(err);
4948

5049
// Create a new exchange context.
51-
mpExchangeCtx = mpExchangeMgr->NewContext(secureSession.ValueOr(SessionHandle(aNodeId, 1, 1, aFabricIndex)), this);
50+
mpExchangeCtx = mpExchangeMgr->NewContext(session, this);
5251
VerifyOrExit(mpExchangeCtx != nullptr, err = CHIP_ERROR_NO_MEMORY);
5352

5453
mpExchangeCtx->SetResponseTimeout(timeout);

src/app/CommandSender.h

+1-4
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,6 @@ class CommandSender final : public Command, public Messaging::ExchangeDelegate
137137
return FinishCommand(/* aEndDataStruct = */ false);
138138
}
139139

140-
// TODO: issue #6792 - the secure session parameter should be made non-optional and passed by reference.
141-
//
142140
// Sends a queued up command request to the target encapsulated by the secureSession handle.
143141
//
144142
// Upon successful return from this call, all subsequent errors that occur during this interaction
@@ -155,8 +153,7 @@ class CommandSender final : public Command, public Messaging::ExchangeDelegate
155153
// Client can specify the maximum time to wait for response (in milliseconds) via timeout parameter.
156154
// Default timeout value will be used otherwise.
157155
//
158-
CHIP_ERROR SendCommandRequest(NodeId aNodeId, FabricIndex aFabricIndex, Optional<SessionHandle> secureSession,
159-
System::Clock::Timeout timeout = kImMessageTimeout);
156+
CHIP_ERROR SendCommandRequest(SessionHandle session, System::Clock::Timeout timeout = kImMessageTimeout);
160157

161158
private:
162159
// ExchangeDelegate interface implementation. Private so people won't

src/app/WriteClient.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,7 @@ void WriteClient::ClearState()
242242
MoveToState(State::Uninitialized);
243243
}
244244

245-
CHIP_ERROR WriteClient::SendWriteRequest(NodeId aNodeId, FabricIndex aFabricIndex, Optional<SessionHandle> apSecureSession,
246-
System::Clock::Timeout timeout)
245+
CHIP_ERROR WriteClient::SendWriteRequest(SessionHandle session, System::Clock::Timeout timeout)
247246
{
248247
CHIP_ERROR err = CHIP_NO_ERROR;
249248
System::PacketBufferHandle packet;
@@ -258,7 +257,7 @@ CHIP_ERROR WriteClient::SendWriteRequest(NodeId aNodeId, FabricIndex aFabricInde
258257
ClearExistingExchangeContext();
259258

260259
// Create a new exchange context.
261-
mpExchangeCtx = mpExchangeMgr->NewContext(apSecureSession.ValueOr(SessionHandle(aNodeId, 1, 1, aFabricIndex)), this);
260+
mpExchangeCtx = mpExchangeMgr->NewContext(session, this);
262261
VerifyOrExit(mpExchangeCtx != nullptr, err = CHIP_ERROR_NO_MEMORY);
263262
mpExchangeCtx->SetResponseTimeout(timeout);
264263

@@ -372,10 +371,9 @@ CHIP_ERROR WriteClient::ProcessAttributeStatusIB(AttributeStatusIB::Parser & aAt
372371
return err;
373372
}
374373

375-
CHIP_ERROR WriteClientHandle::SendWriteRequest(NodeId aNodeId, FabricIndex aFabricIndex, Optional<SessionHandle> apSecureSession,
376-
System::Clock::Timeout timeout)
374+
CHIP_ERROR WriteClientHandle::SendWriteRequest(SessionHandle session, System::Clock::Timeout timeout)
377375
{
378-
CHIP_ERROR err = mpWriteClient->SendWriteRequest(aNodeId, aFabricIndex, apSecureSession, timeout);
376+
CHIP_ERROR err = mpWriteClient->SendWriteRequest(session, timeout);
379377

380378
if (err == CHIP_NO_ERROR)
381379
{

src/app/WriteClient.h

+2-4
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,7 @@ class WriteClient : public Messaging::ExchangeDelegate
143143
* If SendWriteRequest is never called, or the call fails, the API
144144
* consumer is responsible for calling Shutdown on the WriteClient.
145145
*/
146-
CHIP_ERROR SendWriteRequest(NodeId aNodeId, FabricIndex aFabricIndex, Optional<SessionHandle> apSecureSession,
147-
System::Clock::Timeout timeout);
146+
CHIP_ERROR SendWriteRequest(SessionHandle session, System::Clock::Timeout timeout);
148147

149148
/**
150149
* Initialize the client object. Within the lifetime
@@ -225,8 +224,7 @@ class WriteClientHandle
225224
* Finalize the message and send it to the desired node. The underlying write object will always be released, and the user
226225
* should not use this object after calling this function.
227226
*/
228-
CHIP_ERROR SendWriteRequest(NodeId aNodeId, FabricIndex aFabricIndex, Optional<SessionHandle> apSecureSession,
229-
System::Clock::Timeout timeout = kImMessageTimeout);
227+
CHIP_ERROR SendWriteRequest(SessionHandle session, System::Clock::Timeout timeout = kImMessageTimeout);
230228

231229
/**
232230
* Encode an attribute value that can be directly encoded using TLVWriter::Put

src/app/tests/TestCommandInteraction.cpp

+14-24
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ using TestContext = chip::Test::AppContext;
4949
namespace chip {
5050

5151
namespace {
52-
FabricIndex gFabricIndex = 0;
5352
bool isCommandDispatched = false;
5453

5554
bool sendResponse = true;
@@ -288,7 +287,7 @@ void TestCommandInteraction::TestCommandSenderWithWrongState(nlTestSuite * apSui
288287
app::CommandSender commandSender(&mockCommandSenderDelegate, &ctx.GetExchangeManager());
289288
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
290289

291-
err = commandSender.SendCommandRequest(kTestDeviceNodeId, gFabricIndex, Optional<SessionHandle>::Missing());
290+
err = commandSender.SendCommandRequest(ctx.GetSessionBobToAlice());
292291
NL_TEST_ASSERT(apSuite, err == CHIP_ERROR_INCORRECT_STATE);
293292
}
294293

@@ -303,11 +302,9 @@ void TestCommandInteraction::TestCommandHandlerWithWrongState(nlTestSuite * apSu
303302
err = commandHandler.PrepareCommand(commandPathParams);
304303
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
305304

306-
auto exchangeCtx = ctx.GetExchangeManager().NewContext(SessionHandle(0, 0, 0, 0), nullptr);
307-
commandHandler.mpExchangeCtx = exchangeCtx;
308305
TestExchangeDelegate delegate;
309-
commandHandler.mpExchangeCtx->SetDelegate(&delegate);
310-
err = commandHandler.SendCommandResponse();
306+
commandHandler.mpExchangeCtx = ctx.NewExchangeToAlice(&delegate);
307+
err = commandHandler.SendCommandResponse();
311308

312309
NL_TEST_ASSERT(apSuite, err == CHIP_ERROR_INCORRECT_STATE);
313310
}
@@ -322,8 +319,7 @@ void TestCommandInteraction::TestCommandSenderWithSendCommand(nlTestSuite * apSu
322319
System::PacketBufferHandle buf = System::PacketBufferHandle::New(System::PacketBuffer::kMaxSize);
323320

324321
AddCommandDataIB(apSuite, apContext, &commandSender, false);
325-
err =
326-
commandSender.SendCommandRequest(0 /* nodeid */, 0 /* fabricindex */, Optional<SessionHandle>(ctx.GetSessionBobToAlice()));
322+
err = commandSender.SendCommandRequest(ctx.GetSessionBobToAlice());
327323
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
328324

329325
GenerateReceivedCommand(apSuite, apContext, buf, true /*aNeedCommandData*/);
@@ -340,17 +336,15 @@ void TestCommandInteraction::TestCommandHandlerWithSendEmptyCommand(nlTestSuite
340336
app::CommandHandler commandHandler(&mockCommandHandlerDelegate);
341337
System::PacketBufferHandle commandDatabuf = System::PacketBufferHandle::New(System::PacketBuffer::kMaxSize);
342338

343-
auto exchangeCtx = ctx.GetExchangeManager().NewContext(SessionHandle(0, 0, 0, 0), nullptr);
344-
commandHandler.mpExchangeCtx = exchangeCtx;
345-
346339
TestExchangeDelegate delegate;
347-
commandHandler.mpExchangeCtx->SetDelegate(&delegate);
348-
err = commandHandler.PrepareCommand(commandPathParams);
340+
commandHandler.mpExchangeCtx = ctx.NewExchangeToAlice(&delegate);
341+
err = commandHandler.PrepareCommand(commandPathParams);
349342
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
350343
err = commandHandler.FinishCommand();
351344
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
352345
err = commandHandler.SendCommandResponse();
353-
NL_TEST_ASSERT(apSuite, err == CHIP_ERROR_NOT_CONNECTED);
346+
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
347+
commandHandler.Close();
354348
}
355349

356350
void TestCommandInteraction::TestCommandSenderWithProcessReceivedMsg(nlTestSuite * apSuite, void * apContext)
@@ -374,11 +368,8 @@ void TestCommandInteraction::ValidateCommandHandlerWithSendCommand(nlTestSuite *
374368
app::CommandHandler commandHandler(&mockCommandHandlerDelegate);
375369
System::PacketBufferHandle commandPacket;
376370

377-
auto exchangeCtx = ctx.GetExchangeManager().NewContext(SessionHandle(0, 0, 0, 0), nullptr);
378-
379-
commandHandler.mpExchangeCtx = exchangeCtx;
380371
TestExchangeDelegate delegate;
381-
commandHandler.mpExchangeCtx->SetDelegate(&delegate);
372+
commandHandler.mpExchangeCtx = ctx.NewExchangeToAlice(&delegate);
382373

383374
AddCommandDataIB(apSuite, apContext, &commandHandler, aNeedStatusCode);
384375
err = commandHandler.Finalize(commandPacket);
@@ -422,9 +413,8 @@ void TestCommandInteraction::TestCommandHandlerCommandDataEncoding(nlTestSuite *
422413
app::CommandHandler commandHandler(nullptr);
423414
System::PacketBufferHandle commandPacket;
424415

425-
commandHandler.mpExchangeCtx = ctx.GetExchangeManager().NewContext(SessionHandle(0, 0, 0, 0), nullptr);
426416
TestExchangeDelegate delegate;
427-
commandHandler.mpExchangeCtx->SetDelegate(&delegate);
417+
commandHandler.mpExchangeCtx = ctx.NewExchangeToAlice(&delegate);
428418

429419
auto path = MakeTestCommandPath();
430420

@@ -503,7 +493,7 @@ void TestCommandInteraction::TestCommandSenderCommandSuccessResponseFlow(nlTestS
503493
app::CommandSender commandSender(&mockCommandSenderDelegate, &ctx.GetExchangeManager());
504494

505495
AddCommandDataIB(apSuite, apContext, &commandSender, false);
506-
err = commandSender.SendCommandRequest(0, 0, Optional<SessionHandle>(ctx.GetSessionBobToAlice()));
496+
err = commandSender.SendCommandRequest(ctx.GetSessionBobToAlice());
507497
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
508498
NL_TEST_ASSERT(apSuite,
509499
mockCommandSenderDelegate.onResponseCalledTimes == 1 && mockCommandSenderDelegate.onFinalCalledTimes == 1 &&
@@ -522,7 +512,7 @@ void TestCommandInteraction::TestCommandSenderCommandSpecificResponseFlow(nlTest
522512
app::CommandSender commandSender(&mockCommandSenderDelegate, &ctx.GetExchangeManager());
523513

524514
AddCommandDataIB(apSuite, apContext, &commandSender, false, kTestCommandIdCommandSpecificResponse);
525-
err = commandSender.SendCommandRequest(0, 0, Optional<SessionHandle>(ctx.GetSessionBobToAlice()));
515+
err = commandSender.SendCommandRequest(ctx.GetSessionBobToAlice());
526516
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
527517
NL_TEST_ASSERT(apSuite,
528518
mockCommandSenderDelegate.onResponseCalledTimes == 1 && mockCommandSenderDelegate.onFinalCalledTimes == 1 &&
@@ -541,7 +531,7 @@ void TestCommandInteraction::TestCommandSenderCommandFailureResponseFlow(nlTestS
541531
app::CommandSender commandSender(&mockCommandSenderDelegate, &ctx.GetExchangeManager());
542532

543533
AddCommandDataIB(apSuite, apContext, &commandSender, false, kTestNonExistCommandId);
544-
err = commandSender.SendCommandRequest(0, 0, Optional<SessionHandle>(ctx.GetSessionBobToAlice()));
534+
err = commandSender.SendCommandRequest(ctx.GetSessionBobToAlice());
545535
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
546536
NL_TEST_ASSERT(apSuite,
547537
mockCommandSenderDelegate.onResponseCalledTimes == 0 && mockCommandSenderDelegate.onFinalCalledTimes == 1 &&
@@ -568,7 +558,7 @@ void TestCommandInteraction::TestCommandSenderAbruptDestruction(nlTestSuite * ap
568558
app::CommandSender commandSender(&mockCommandSenderDelegate, &ctx.GetExchangeManager());
569559

570560
AddCommandDataIB(apSuite, apContext, &commandSender, false, kTestCommandIdCommandSpecificResponse);
571-
err = commandSender.SendCommandRequest(0, 0, Optional<SessionHandle>(ctx.GetSessionBobToAlice()));
561+
err = commandSender.SendCommandRequest(ctx.GetSessionBobToAlice());
572562
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
573563

574564
//

src/app/tests/TestWriteInteraction.cpp

+3-8
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,7 @@ void TestWriteInteraction::TestWriteClient(nlTestSuite * apSuite, void * apConte
224224
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
225225
AddAttributeDataElement(apSuite, apContext, writeClientHandle);
226226

227-
SessionHandle session = ctx.GetSessionBobToAlice();
228-
err = writeClientHandle.SendWriteRequest(ctx.GetAliceNodeId(), ctx.GetFabricIndex(), Optional<SessionHandle>::Value(session));
227+
err = writeClientHandle.SendWriteRequest(ctx.GetSessionBobToAlice());
229228
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
230229
// The internal WriteClient should be nullptr once we SendWriteRequest.
231230
NL_TEST_ASSERT(apSuite, nullptr == writeClientHandle.mpWriteClient);
@@ -317,9 +316,7 @@ void TestWriteInteraction::TestWriteRoundtripWithClusterObjects(nlTestSuite * ap
317316

318317
NL_TEST_ASSERT(apSuite, callback.mOnSuccessCalled == 0);
319318

320-
SessionHandle session = ctx.GetSessionBobToAlice();
321-
322-
err = writeClient.SendWriteRequest(ctx.GetAliceNodeId(), ctx.GetFabricIndex(), Optional<SessionHandle>::Value(session));
319+
err = writeClient.SendWriteRequest(ctx.GetSessionBobToAlice());
323320
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
324321

325322
NL_TEST_ASSERT(apSuite, callback.mOnSuccessCalled == 1);
@@ -370,9 +367,7 @@ void TestWriteInteraction::TestWriteRoundtrip(nlTestSuite * apSuite, void * apCo
370367

371368
NL_TEST_ASSERT(apSuite, callback.mOnSuccessCalled == 0 && callback.mOnErrorCalled == 0 && callback.mOnDoneCalled == 0);
372369

373-
SessionHandle session = ctx.GetSessionBobToAlice();
374-
375-
err = writeClient.SendWriteRequest(ctx.GetAliceNodeId(), ctx.GetFabricIndex(), Optional<SessionHandle>::Value(session));
370+
err = writeClient.SendWriteRequest(ctx.GetSessionBobToAlice());
376371
NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR);
377372

378373
NL_TEST_ASSERT(apSuite, callback.mOnSuccessCalled == 1 && callback.mOnErrorCalled == 0 && callback.mOnDoneCalled == 1);

src/app/tests/integration/chip_im_initiator.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,7 @@ CHIP_ERROR SendCommandRequest(std::unique_ptr<chip::app::CommandSender> && comma
247247
err = commandSender->FinishCommand();
248248
SuccessOrExit(err);
249249

250-
err = commandSender->SendCommandRequest(chip::kTestDeviceNodeId, gFabricIndex, chip::Optional<chip::SessionHandle>::Missing(),
251-
gMessageTimeout);
250+
err = commandSender->SendCommandRequest(gSessionManager.FindSecureSessionForNode(chip::kTestDeviceNodeId), gMessageTimeout);
252251
SuccessOrExit(err);
253252

254253
gCommandCount++;
@@ -284,8 +283,7 @@ CHIP_ERROR SendBadCommandRequest(std::unique_ptr<chip::app::CommandSender> && co
284283
err = commandSender->FinishCommand();
285284
SuccessOrExit(err);
286285

287-
err = commandSender->SendCommandRequest(chip::kTestDeviceNodeId, gFabricIndex, chip::Optional<chip::SessionHandle>::Missing(),
288-
gMessageTimeout);
286+
err = commandSender->SendCommandRequest(gSessionManager.FindSecureSessionForNode(chip::kTestDeviceNodeId), gMessageTimeout);
289287
SuccessOrExit(err);
290288
gCommandCount++;
291289
commandSender.release();
@@ -359,8 +357,8 @@ CHIP_ERROR SendWriteRequest(chip::app::WriteClientHandle & apWriteClient)
359357

360358
SuccessOrExit(err = writer->PutBoolean(chip::TLV::ContextTag(chip::app::AttributeDataElement::kCsTag_Data), true));
361359
SuccessOrExit(err = apWriteClient->FinishAttribute());
362-
SuccessOrExit(err = apWriteClient.SendWriteRequest(chip::kTestDeviceNodeId, gFabricIndex,
363-
chip::Optional<chip::SessionHandle>::Missing(), gMessageTimeout));
360+
SuccessOrExit(
361+
err = apWriteClient.SendWriteRequest(gSessionManager.FindSecureSessionForNode(chip::kTestDeviceNodeId), gMessageTimeout));
364362

365363
gWriteCount++;
366364

src/controller/CHIPDevice.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,10 @@ CHIP_ERROR Device::SendCommands(app::CommandSender * commandObj)
100100
{
101101
bool loadedSecureSession = false;
102102
ReturnErrorOnFailure(LoadSecureSessionParametersIfNeeded(loadedSecureSession));
103+
VerifyOrReturnError(mState == ConnectionState::SecureConnected, CHIP_ERROR_INCORRECT_STATE);
104+
VerifyOrReturnError(GetSecureSession().HasValue(), CHIP_ERROR_INCORRECT_STATE);
103105
VerifyOrReturnError(commandObj != nullptr, CHIP_ERROR_INVALID_ARGUMENT);
104-
return commandObj->SendCommandRequest(mDeviceId, mFabricIndex, mSecureSession);
106+
return commandObj->SendCommandRequest(mSecureSession.Value());
105107
}
106108

107109
CHIP_ERROR Device::Serialize(SerializedDevice & output)
@@ -761,6 +763,8 @@ CHIP_ERROR Device::SendReadAttributeRequest(app::AttributePathParams aPath, Call
761763
aPath.mNodeId = GetDeviceId();
762764

763765
ReturnErrorOnFailure(LoadSecureSessionParametersIfNeeded(loadedSecureSession));
766+
VerifyOrReturnError(mState == ConnectionState::SecureConnected, CHIP_ERROR_INCORRECT_STATE);
767+
VerifyOrReturnError(GetSecureSession().HasValue(), CHIP_ERROR_INCORRECT_STATE);
764768

765769
if (onSuccessCallback != nullptr || onFailureCallback != nullptr)
766770
{
@@ -828,14 +832,16 @@ CHIP_ERROR Device::SendWriteAttributeRequest(app::WriteClientHandle aHandle, Cal
828832
CHIP_ERROR err = CHIP_NO_ERROR;
829833

830834
ReturnErrorOnFailure(LoadSecureSessionParametersIfNeeded(loadedSecureSession));
835+
VerifyOrReturnError(mState == ConnectionState::SecureConnected, CHIP_ERROR_INCORRECT_STATE);
836+
VerifyOrReturnError(GetSecureSession().HasValue(), CHIP_ERROR_INCORRECT_STATE);
831837

832838
app::WriteClient * writeClient = aHandle.Get();
833839

834840
if (onSuccessCallback != nullptr || onFailureCallback != nullptr)
835841
{
836842
AddIMResponseHandler(writeClient, onSuccessCallback, onFailureCallback);
837843
}
838-
if ((err = aHandle.SendWriteRequest(GetDeviceId(), 0, mSecureSession)) != CHIP_NO_ERROR)
844+
if ((err = aHandle.SendWriteRequest(mSecureSession.Value())) != CHIP_NO_ERROR)
839845
{
840846
CancelIMResponseHandler(writeClient);
841847
}

src/controller/InvokeInteraction.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ CHIP_ERROR InvokeCommandRequest(Messaging::ExchangeManager * aExchangeMgr, Sessi
7070
VerifyOrReturnError(commandSender != nullptr, CHIP_ERROR_NO_MEMORY);
7171

7272
ReturnErrorOnFailure(commandSender->AddRequestData(commandPath, requestCommandData));
73-
ReturnErrorOnFailure(commandSender->SendCommandRequest(sessionHandle.GetPeerNodeId(), sessionHandle.GetFabricIndex(),
74-
Optional<SessionHandle>(sessionHandle)));
73+
ReturnErrorOnFailure(commandSender->SendCommandRequest(sessionHandle));
7574

7675
//
7776
// We've effectively transfered ownership of the above allocated objects to CommandSender, and we need to wait for it to call us

src/controller/WriteInteraction.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,7 @@ CHIP_ERROR WriteAttribute(Messaging::ExchangeManager * aExchangeMgr, SessionHand
9494
ReturnErrorOnFailure(handle.EncodeAttributeWritePayload(
9595
chip::app::AttributePathParams(endpointId, AttributeInfo::GetClusterId(), AttributeInfo::GetAttributeId()),
9696
requestCommandData));
97-
ReturnErrorOnFailure(handle.SendWriteRequest(sessionHandle.GetPeerNodeId(), sessionHandle.GetFabricIndex(),
98-
chip::Optional<chip::SessionHandle>(sessionHandle)));
97+
ReturnErrorOnFailure(handle.SendWriteRequest(sessionHandle));
9998

10099
callback.release();
101100
return CHIP_NO_ERROR;

src/transport/SessionManager.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -592,4 +592,12 @@ SecureSession * SessionManager::GetSecureSession(SessionHandle session)
592592
}
593593
}
594594

595+
SessionHandle SessionManager::FindSecureSessionForNode(NodeId peerNodeId)
596+
{
597+
SecureSession * session = mPeerConnections.FindSecureSession(peerNodeId, nullptr);
598+
VerifyOrDie(session != nullptr);
599+
return SessionHandle(session->GetPeerNodeId(), session->GetLocalSessionId(), session->GetPeerSessionId(),
600+
session->GetFabricIndex());
601+
}
602+
595603
} // namespace chip

0 commit comments

Comments
 (0)