@@ -514,7 +514,7 @@ CHIP_ERROR CASESession::EstablishSession(SessionManager & sessionManager, Fabric
514
514
515
515
// We are setting the exchange context specifically before checking for error.
516
516
// This is to make sure the exchange will get closed if Init() returned an error.
517
- mExchangeCtxt = exchangeCtxt;
517
+ mExchangeCtxt . Emplace (* exchangeCtxt) ;
518
518
519
519
// From here onwards, let's go to exit on error, as some state might have already
520
520
// been initialized
@@ -527,7 +527,7 @@ CHIP_ERROR CASESession::EstablishSession(SessionManager & sessionManager, Fabric
527
527
mSessionResumptionStorage = sessionResumptionStorage;
528
528
mLocalMRPConfig = mrpLocalConfig.ValueOr (GetDefaultMRPConfig ());
529
529
530
- mExchangeCtxt ->UseSuggestedResponseTimeout (kExpectedSigma1ProcessingTime );
530
+ mExchangeCtxt . Value () ->UseSuggestedResponseTimeout (kExpectedSigma1ProcessingTime );
531
531
mPeerNodeId = peerScopedNodeId.GetNodeId ();
532
532
mLocalNodeId = fabricInfo->GetNodeId ();
533
533
@@ -549,7 +549,8 @@ void CASESession::OnResponseTimeout(ExchangeContext * ec)
549
549
{
550
550
MATTER_TRACE_SCOPE (" OnResponseTimeout" , " CASESession" );
551
551
VerifyOrReturn (ec != nullptr , ChipLogError (SecureChannel, " CASESession::OnResponseTimeout was called by null exchange" ));
552
- VerifyOrReturn (mExchangeCtxt == ec, ChipLogError (SecureChannel, " CASESession::OnResponseTimeout exchange doesn't match" ));
552
+ VerifyOrReturn (mExchangeCtxt .HasValue () && (&mExchangeCtxt .Value ().Get () == ec),
553
+ ChipLogError (SecureChannel, " CASESession::OnResponseTimeout exchange doesn't match" ));
553
554
ChipLogError (SecureChannel, " CASESession timed out while waiting for a response from the peer. Current state was %u" ,
554
555
to_underlying (mState ));
555
556
MATTER_TRACE_COUNTER (" CASETimeout" );
@@ -735,8 +736,8 @@ CHIP_ERROR CASESession::SendSigma1()
735
736
ReturnErrorOnFailure (mCommissioningHash .AddData (ByteSpan{ msg_R1->Start (), msg_R1->DataLength () }));
736
737
737
738
// Call delegate to send the msg to peer
738
- ReturnErrorOnFailure (mExchangeCtxt ->SendMessage (Protocols::SecureChannel::MsgType::CASE_Sigma1, std::move (msg_R1),
739
- SendFlags (SendMessageFlags::kExpectResponse )));
739
+ ReturnErrorOnFailure (mExchangeCtxt . Value () ->SendMessage (Protocols::SecureChannel::MsgType::CASE_Sigma1, std::move (msg_R1),
740
+ SendFlags (SendMessageFlags::kExpectResponse )));
740
741
741
742
mState = resuming ? State::kSentSigma1Resume : State::kSentSigma1 ;
742
743
@@ -959,8 +960,9 @@ CHIP_ERROR CASESession::SendSigma2Resume()
959
960
ReturnErrorOnFailure (tlvWriter.Finalize (&msg_R2_resume));
960
961
961
962
// Call delegate to send the msg to peer
962
- ReturnErrorOnFailure (mExchangeCtxt ->SendMessage (Protocols::SecureChannel::MsgType::CASE_Sigma2Resume, std::move (msg_R2_resume),
963
- SendFlags (SendMessageFlags::kExpectResponse )));
963
+ ReturnErrorOnFailure (mExchangeCtxt .Value ()->SendMessage (Protocols::SecureChannel::MsgType::CASE_Sigma2Resume,
964
+ std::move (msg_R2_resume),
965
+ SendFlags (SendMessageFlags::kExpectResponse )));
964
966
965
967
mState = State::kSentSigma2Resume ;
966
968
@@ -1096,8 +1098,8 @@ CHIP_ERROR CASESession::SendSigma2()
1096
1098
ReturnErrorOnFailure (mCommissioningHash .AddData (ByteSpan{ msg_R2->Start (), msg_R2->DataLength () }));
1097
1099
1098
1100
// Call delegate to send the msg to peer
1099
- ReturnErrorOnFailure (mExchangeCtxt ->SendMessage (Protocols::SecureChannel::MsgType::CASE_Sigma2, std::move (msg_R2),
1100
- SendFlags (SendMessageFlags::kExpectResponse )));
1101
+ ReturnErrorOnFailure (mExchangeCtxt . Value () ->SendMessage (Protocols::SecureChannel::MsgType::CASE_Sigma2, std::move (msg_R2),
1102
+ SendFlags (SendMessageFlags::kExpectResponse )));
1101
1103
1102
1104
mState = State::kSentSigma2 ;
1103
1105
@@ -1148,7 +1150,8 @@ CHIP_ERROR CASESession::HandleSigma2Resume(System::PacketBufferHandle && msg)
1148
1150
if (tlvReader.Next () != CHIP_END_OF_TLV)
1149
1151
{
1150
1152
SuccessOrExit (err = DecodeMRPParametersIfPresent (TLV::ContextTag (4 ), tlvReader));
1151
- mExchangeCtxt ->GetSessionHandle ()->AsUnauthenticatedSession ()->SetRemoteSessionParameters (GetRemoteSessionParameters ());
1153
+ mExchangeCtxt .Value ()->GetSessionHandle ()->AsUnauthenticatedSession ()->SetRemoteSessionParameters (
1154
+ GetRemoteSessionParameters ());
1152
1155
}
1153
1156
1154
1157
ChipLogDetail (SecureChannel, " Peer assigned session session ID %d" , responderSessionId);
@@ -1341,7 +1344,8 @@ CHIP_ERROR CASESession::HandleSigma2(System::PacketBufferHandle && msg)
1341
1344
if (tlvReader.Next () != CHIP_END_OF_TLV)
1342
1345
{
1343
1346
SuccessOrExit (err = DecodeMRPParametersIfPresent (TLV::ContextTag (kTag_Sigma2_ResponderMRPParams ), tlvReader));
1344
- mExchangeCtxt ->GetSessionHandle ()->AsUnauthenticatedSession ()->SetRemoteSessionParameters (GetRemoteSessionParameters ());
1347
+ mExchangeCtxt .Value ()->GetSessionHandle ()->AsUnauthenticatedSession ()->SetRemoteSessionParameters (
1348
+ GetRemoteSessionParameters ());
1345
1349
}
1346
1350
1347
1351
exit :
@@ -1410,7 +1414,7 @@ CHIP_ERROR CASESession::SendSigma3a()
1410
1414
{
1411
1415
SuccessOrExit (err = helper->ScheduleWork ());
1412
1416
mSendSigma3Helper = helper;
1413
- mExchangeCtxt ->WillSendMessage ();
1417
+ mExchangeCtxt . Value () ->WillSendMessage ();
1414
1418
mState = State::kSendSigma3Pending ;
1415
1419
}
1416
1420
else
@@ -1537,8 +1541,8 @@ CHIP_ERROR CASESession::SendSigma3c(SendSigma3Data & data, CHIP_ERROR status)
1537
1541
SuccessOrExit (err);
1538
1542
1539
1543
// Call delegate to send the Msg3 to peer
1540
- err = mExchangeCtxt ->SendMessage (Protocols::SecureChannel::MsgType::CASE_Sigma3, std::move (msg_R3),
1541
- SendFlags (SendMessageFlags::kExpectResponse ));
1544
+ err = mExchangeCtxt . Value () ->SendMessage (Protocols::SecureChannel::MsgType::CASE_Sigma3, std::move (msg_R3),
1545
+ SendFlags (SendMessageFlags::kExpectResponse ));
1542
1546
SuccessOrExit (err);
1543
1547
1544
1548
ChipLogProgress (SecureChannel, " Sent Sigma3 msg" );
@@ -1704,7 +1708,7 @@ CHIP_ERROR CASESession::HandleSigma3a(System::PacketBufferHandle && msg)
1704
1708
1705
1709
SuccessOrExit (err = helper->ScheduleWork ());
1706
1710
mHandleSigma3Helper = helper;
1707
- mExchangeCtxt ->WillSendMessage ();
1711
+ mExchangeCtxt . Value () ->WillSendMessage ();
1708
1712
mState = State::kHandleSigma3Pending ;
1709
1713
}
1710
1714
@@ -2036,7 +2040,8 @@ CHIP_ERROR CASESession::ParseSigma1(TLV::ContiguousBufferTLVReader & tlvReader,
2036
2040
if (err == CHIP_NO_ERROR && tlvReader.GetTag () == ContextTag (kInitiatorMRPParamsTag ))
2037
2041
{
2038
2042
ReturnErrorOnFailure (DecodeMRPParametersIfPresent (TLV::ContextTag (kInitiatorMRPParamsTag ), tlvReader));
2039
- mExchangeCtxt ->GetSessionHandle ()->AsUnauthenticatedSession ()->SetRemoteSessionParameters (GetRemoteSessionParameters ());
2043
+ mExchangeCtxt .Value ()->GetSessionHandle ()->AsUnauthenticatedSession ()->SetRemoteSessionParameters (
2044
+ GetRemoteSessionParameters ());
2040
2045
err = tlvReader.Next ();
2041
2046
}
2042
2047
@@ -2092,18 +2097,19 @@ CHIP_ERROR CASESession::ValidateReceivedMessage(ExchangeContext * ec, const Payl
2092
2097
// mExchangeCtxt can be nullptr if this is the first message (CASE_Sigma1) received by CASESession
2093
2098
// via UnsolicitedMessageHandler. The exchange context is allocated by exchange manager and provided
2094
2099
// to the handler (CASESession object).
2095
- if (mExchangeCtxt != nullptr )
2100
+ if (mExchangeCtxt . HasValue () )
2096
2101
{
2097
- if (mExchangeCtxt != ec)
2102
+ if (& mExchangeCtxt . Value (). Get () != ec)
2098
2103
{
2099
2104
ReturnErrorOnFailure (CHIP_ERROR_INVALID_ARGUMENT);
2100
2105
}
2101
2106
}
2102
2107
else
2103
2108
{
2104
- mExchangeCtxt = ec;
2109
+ mExchangeCtxt .SetValue (ExchangeHandle (*ec));
2110
+ mExchangeCtxt .Emplace (*ec);
2105
2111
}
2106
- mExchangeCtxt ->UseSuggestedResponseTimeout (kExpectedHighProcessingTime );
2112
+ mExchangeCtxt . Value () ->UseSuggestedResponseTimeout (kExpectedHighProcessingTime );
2107
2113
2108
2114
VerifyOrReturnError (!msg.IsNull (), CHIP_ERROR_INVALID_ARGUMENT);
2109
2115
return CHIP_NO_ERROR;
@@ -2128,7 +2134,7 @@ CHIP_ERROR CASESession::OnMessageReceived(ExchangeContext * ec, const PayloadHea
2128
2134
//
2129
2135
// Should you need to resume the CASESession, you could theoretically pass along the msg to a callback that gets
2130
2136
// registered when setting mStopHandshakeAtState.
2131
- mExchangeCtxt ->WillSendMessage ();
2137
+ mExchangeCtxt . Value () ->WillSendMessage ();
2132
2138
return CHIP_NO_ERROR;
2133
2139
}
2134
2140
#endif // CONFIG_BUILD_FOR_HOST_UNIT_TEST
@@ -2138,7 +2144,7 @@ CHIP_ERROR CASESession::OnMessageReceived(ExchangeContext * ec, const PayloadHea
2138
2144
msgType == Protocols::SecureChannel::MsgType::CASE_Sigma2Resume ||
2139
2145
msgType == Protocols::SecureChannel::MsgType::CASE_Sigma3)
2140
2146
{
2141
- SuccessOrExit (err = mExchangeCtxt ->FlushAcks ());
2147
+ SuccessOrExit (err = mExchangeCtxt . Value () ->FlushAcks ());
2142
2148
}
2143
2149
#endif // CHIP_CONFIG_SLOW_CRYPTO
2144
2150
0 commit comments