Skip to content

Commit 81ac82f

Browse files
committedApr 30, 2024
TCP connection setup/management and CASESession association.
Add TCPConnect()/TCPDisconnect() API for explicit connection setup. Currently, connecting to a peer is coupled with sending a message to the peer. This decouples the two and creates a clear API for connecting to a peer address. Goes along with the existing Disconnect() API. This would be essential during activation of retained sessions by solely connecting to the peer and associating with the retained session. Surface Connection completion and Closure callbacks and hook them through SessionManager(TransportMgr delegate) and CASESession. Mark SecureSession as defunct on connection closures. Modify ActiveConnectionState in TCPBase to hold state for each connection, so that it is able to handle the various control flow paths. Associate a session with a connection object. Associate the PeerAddress with the session early. Pass the PeerAddress in the Find APIs. This helps check against the correct TransportType when searching for a Sesssion in the SessionTable. Add a `large payload` flag in EstablishSession() and Session lookup functions to create/associate with the correct session and transport. Have default configurations for TCP in a separate TCPConfig.h. Refactor echo_requester.cpp and echo_responder.cpp to use the session associated with the connection. Handle Connection closure at ExchangeMgr and uplevel to corresponding ExchangeContext using the corresponding session handle. Add tests around connection establishment in TestTCP.
1 parent 1b9d971 commit 81ac82f

Some content is hidden

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

44 files changed

+2063
-367
lines changed
 

‎examples/shell/shell_common/include/Globals.h

+2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
#include <protocols/secure_channel/MessageCounterManager.h>
2525
#include <transport/SessionHolder.h>
2626
#include <transport/SessionManager.h>
27+
#if INET_CONFIG_ENABLE_TCP_ENDPOINT
2728
#include <transport/raw/TCP.h>
29+
#endif // INET_CONFIG_ENABLE_TCP_ENDPOINT
2830
#include <transport/raw/UDP.h>
2931

3032
#if INET_CONFIG_ENABLE_TCP_ENDPOINT

‎src/app/CASESessionManager.cpp

+30-35
Original file line numberDiff line numberDiff line change
@@ -30,62 +30,55 @@ CHIP_ERROR CASESessionManager::Init(chip::System::Layer * systemLayer, const CAS
3030
}
3131

3232
void CASESessionManager::FindOrEstablishSession(const ScopedNodeId & peerId, Callback::Callback<OnDeviceConnected> * onConnection,
33-
Callback::Callback<OnDeviceConnectionFailure> * onFailure
33+
Callback::Callback<OnDeviceConnectionFailure> * onFailure,
3434
#if CHIP_DEVICE_CONFIG_ENABLE_AUTOMATIC_CASE_RETRIES
35-
,
36-
uint8_t attemptCount, Callback::Callback<OnDeviceConnectionRetry> * onRetry
35+
uint8_t attemptCount, Callback::Callback<OnDeviceConnectionRetry> * onRetry,
3736
#endif // CHIP_DEVICE_CONFIG_ENABLE_AUTOMATIC_CASE_RETRIES
38-
)
37+
TransportPayloadCapability transportPayloadCapability)
3938
{
40-
FindOrEstablishSessionHelper(peerId, onConnection, onFailure, nullptr
39+
FindOrEstablishSessionHelper(peerId, onConnection, onFailure, nullptr,
4140
#if CHIP_DEVICE_CONFIG_ENABLE_AUTOMATIC_CASE_RETRIES
42-
,
43-
attemptCount, onRetry
41+
attemptCount, onRetry,
4442
#endif
45-
);
43+
transportPayloadCapability);
4644
}
4745

4846
void CASESessionManager::FindOrEstablishSession(const ScopedNodeId & peerId, Callback::Callback<OnDeviceConnected> * onConnection,
49-
Callback::Callback<OperationalSessionSetup::OnSetupFailure> * onSetupFailure
47+
Callback::Callback<OperationalSessionSetup::OnSetupFailure> * onSetupFailure,
5048
#if CHIP_DEVICE_CONFIG_ENABLE_AUTOMATIC_CASE_RETRIES
51-
,
52-
uint8_t attemptCount, Callback::Callback<OnDeviceConnectionRetry> * onRetry
49+
uint8_t attemptCount, Callback::Callback<OnDeviceConnectionRetry> * onRetry,
5350
#endif
54-
)
51+
TransportPayloadCapability transportPayloadCapability)
5552
{
56-
FindOrEstablishSessionHelper(peerId, onConnection, nullptr, onSetupFailure
53+
FindOrEstablishSessionHelper(peerId, onConnection, nullptr, onSetupFailure,
5754
#if CHIP_DEVICE_CONFIG_ENABLE_AUTOMATIC_CASE_RETRIES
58-
,
59-
attemptCount, onRetry
55+
attemptCount, onRetry,
6056
#endif
61-
);
57+
transportPayloadCapability);
6258
}
6359

6460
void CASESessionManager::FindOrEstablishSession(const ScopedNodeId & peerId, Callback::Callback<OnDeviceConnected> * onConnection,
65-
std::nullptr_t
61+
std::nullptr_t,
6662
#if CHIP_DEVICE_CONFIG_ENABLE_AUTOMATIC_CASE_RETRIES
67-
,
68-
uint8_t attemptCount, Callback::Callback<OnDeviceConnectionRetry> * onRetry
63+
uint8_t attemptCount, Callback::Callback<OnDeviceConnectionRetry> * onRetry,
6964
#endif
70-
)
65+
TransportPayloadCapability transportPayloadCapability)
7166
{
72-
FindOrEstablishSessionHelper(peerId, onConnection, nullptr, nullptr
67+
FindOrEstablishSessionHelper(peerId, onConnection, nullptr, nullptr,
7368
#if CHIP_DEVICE_CONFIG_ENABLE_AUTOMATIC_CASE_RETRIES
74-
,
75-
attemptCount, onRetry
69+
attemptCount, onRetry,
7670
#endif
77-
);
71+
transportPayloadCapability);
7872
}
7973

8074
void CASESessionManager::FindOrEstablishSessionHelper(const ScopedNodeId & peerId,
8175
Callback::Callback<OnDeviceConnected> * onConnection,
8276
Callback::Callback<OnDeviceConnectionFailure> * onFailure,
83-
Callback::Callback<OperationalSessionSetup::OnSetupFailure> * onSetupFailure
77+
Callback::Callback<OperationalSessionSetup::OnSetupFailure> * onSetupFailure,
8478
#if CHIP_DEVICE_CONFIG_ENABLE_AUTOMATIC_CASE_RETRIES
85-
,
86-
uint8_t attemptCount, Callback::Callback<OnDeviceConnectionRetry> * onRetry
79+
uint8_t attemptCount, Callback::Callback<OnDeviceConnectionRetry> * onRetry,
8780
#endif
88-
)
81+
TransportPayloadCapability transportPayloadCapability)
8982
{
9083
ChipLogDetail(CASESessionManager, "FindOrEstablishSession: PeerId = [%d:" ChipLogFormatX64 "]", peerId.GetFabricIndex(),
9184
ChipLogValueX64(peerId.GetNodeId()));
@@ -124,12 +117,12 @@ void CASESessionManager::FindOrEstablishSessionHelper(const ScopedNodeId & peerI
124117

125118
if (onFailure != nullptr)
126119
{
127-
session->Connect(onConnection, onFailure);
120+
session->Connect(onConnection, onFailure, transportPayloadCapability);
128121
}
129122

130123
if (onSetupFailure != nullptr)
131124
{
132-
session->Connect(onConnection, onSetupFailure);
125+
session->Connect(onConnection, onSetupFailure, transportPayloadCapability);
133126
}
134127
}
135128

@@ -143,10 +136,11 @@ void CASESessionManager::ReleaseAllSessions()
143136
mConfig.sessionSetupPool->ReleaseAllSessionSetup();
144137
}
145138

146-
CHIP_ERROR CASESessionManager::GetPeerAddress(const ScopedNodeId & peerId, Transport::PeerAddress & addr)
139+
CHIP_ERROR CASESessionManager::GetPeerAddress(const ScopedNodeId & peerId, Transport::PeerAddress & addr,
140+
TransportPayloadCapability transportPayloadCapability)
147141
{
148142
ReturnErrorOnFailure(mConfig.sessionInitParams.Validate());
149-
auto optionalSessionHandle = FindExistingSession(peerId);
143+
auto optionalSessionHandle = FindExistingSession(peerId, transportPayloadCapability);
150144
ReturnErrorCodeIf(!optionalSessionHandle.HasValue(), CHIP_ERROR_NOT_CONNECTED);
151145
addr = optionalSessionHandle.Value()->AsSecureSession()->GetPeerAddress();
152146
return CHIP_NO_ERROR;
@@ -182,10 +176,11 @@ OperationalSessionSetup * CASESessionManager::FindExistingSessionSetup(const Sco
182176
return mConfig.sessionSetupPool->FindSessionSetup(peerId, forAddressUpdate);
183177
}
184178

185-
Optional<SessionHandle> CASESessionManager::FindExistingSession(const ScopedNodeId & peerId) const
179+
Optional<SessionHandle> CASESessionManager::FindExistingSession(const ScopedNodeId & peerId,
180+
const TransportPayloadCapability transportPayloadCapability) const
186181
{
187-
return mConfig.sessionInitParams.sessionManager->FindSecureSessionForNode(peerId,
188-
MakeOptional(Transport::SecureSession::Type::kCASE));
182+
return mConfig.sessionInitParams.sessionManager->FindSecureSessionForNode(
183+
peerId, MakeOptional(Transport::SecureSession::Type::kCASE), transportPayloadCapability);
189184
}
190185

191186
void CASESessionManager::ReleaseSession(OperationalSessionSetup * session)

0 commit comments

Comments
 (0)