Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[rendezvous] Add initial support for IP rendezvous #3704

Merged
merged 24 commits into from
Nov 20, 2020
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
4cf3481
[rendezvous] Add initial support for IP rendezvous
erjiaqing Nov 5, 2020
0af05d0
Revert python device ctrl change
erjiaqing Nov 11, 2020
63ac557
Merge remote-tracking branch 'chip/master' into issue_3666_pr_1
erjiaqing Nov 11, 2020
ca625df
Change after merge
erjiaqing Nov 11, 2020
f9a8e72
Fix
erjiaqing Nov 11, 2020
e096d81
Fix
erjiaqing Nov 11, 2020
8ab65dc
Make code clearer
erjiaqing Nov 12, 2020
48217df
Rename variables in tests
erjiaqing Nov 12, 2020
b62d806
Restyled by clang-format
restyled-commits Nov 12, 2020
a79e5da
Add TransportMgrDelegate
erjiaqing Nov 17, 2020
f80eb17
Merge remote-tracking branch 'chip/master' into issue_3666_pr
erjiaqing Nov 17, 2020
2cc7ff4
remove BLEConnectionDelegate which shouldn't in this pr
erjiaqing Nov 17, 2020
1ab9edf
Fix nrf build
erjiaqing Nov 17, 2020
1733c52
Address comments
erjiaqing Nov 18, 2020
ef68193
update delegate code style
erjiaqing Nov 18, 2020
4d0c437
Fix
erjiaqing Nov 18, 2020
c5b32f4
Merge remote-tracking branch 'chip/master' into issue_3666_pr
erjiaqing Nov 18, 2020
6270ac4
Fix tests after merge
erjiaqing Nov 18, 2020
2b2fcbe
Fix ESP32 Build
erjiaqing Nov 18, 2020
38448cd
InitInternal -> Init
erjiaqing Nov 18, 2020
b14034a
Merge remote-tracking branch 'chip/master' into issue_3666_pr
erjiaqing Nov 19, 2020
ddd64be
Merge remote-tracking branch 'chip/master' into issue_3666_pr
erjiaqing Nov 19, 2020
3d208af
Merge remote-tracking branch 'chip/master' into issue_3666_pr
erjiaqing Nov 19, 2020
7fe5b6e
Merge remote-tracking branch 'chip/master' into issue_3666_pr
erjiaqing Nov 20, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 14 additions & 11 deletions examples/all-clusters-app/esp32/main/EchoServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
#include <support/ErrorStr.h>
#include <system/SystemPacketBuffer.h>
#include <transport/SecureSessionMgr.h>
#include <transport/TransportMgr.h>
#include <transport/raw/Tuple.h>
#include <transport/raw/UDP.h>

Expand Down Expand Up @@ -122,7 +123,7 @@ class EchoServerCallback : public SecureSessionMgrDelegate
{
public:
void OnMessageReceived(const PacketHeader & header, const PayloadHeader & payloadHeader, Transport::PeerConnectionState * state,
System::PacketBuffer * buffer, SecureSessionMgrBase * mgr) override
System::PacketBuffer * buffer, SecureSessionMgr * mgr) override
{
CHIP_ERROR err;
const size_t data_len = buffer->DataLength();
Expand Down Expand Up @@ -179,13 +180,13 @@ class EchoServerCallback : public SecureSessionMgrDelegate
}
}

void OnReceiveError(CHIP_ERROR error, const Transport::PeerAddress & source, SecureSessionMgrBase * mgr) override
void OnReceiveError(CHIP_ERROR error, const Transport::PeerAddress & source, SecureSessionMgr * mgr) override
{
ESP_LOGE(TAG, "ERROR: %s\n Got UDP error", ErrorStr(error));
statusLED1.BlinkOnError();
}

void OnNewConnection(Transport::PeerConnectionState * state, SecureSessionMgrBase * mgr) override
void OnNewConnection(Transport::PeerConnectionState * state, SecureSessionMgr * mgr) override
{
ESP_LOGI(TAG, "Received a new connection.");
}
Expand Down Expand Up @@ -218,15 +219,16 @@ class EchoServerCallback : public SecureSessionMgrDelegate

EchoServerCallback gCallbacks;

SecureSessionMgr<Transport::UDP, // IPV6
Transport::UDP // IPV4
>
sessions;
TransportMgr<Transport::UDP, // IPV6
Transport::UDP // IPV4
>
gTransports;
SecureSessionMgr sessions;

} // namespace

namespace chip {
SecureSessionMgrBase & SessionManager()
SecureSessionMgr & SessionManager()
{
return sessions;
}
Expand All @@ -236,9 +238,10 @@ SecureSessionMgrBase & SessionManager()
void startServer(NodeId localNodeId)
{
CHIP_ERROR err = CHIP_NO_ERROR;
err = sessions.Init(localNodeId, &DeviceLayer::SystemLayer,
UdpListenParameters(&DeviceLayer::InetLayer).SetAddressType(kIPAddressType_IPv6).SetInterfaceId(NULL),
UdpListenParameters(&DeviceLayer::InetLayer).SetAddressType(kIPAddressType_IPv4));
err = gTransports.Init(UdpListenParameters(&DeviceLayer::InetLayer).SetAddressType(kIPAddressType_IPv6).SetInterfaceId(nullptr),
UdpListenParameters(&DeviceLayer::InetLayer).SetAddressType(kIPAddressType_IPv4));
SuccessOrExit(err);
err = sessions.Init(localNodeId, &DeviceLayer::SystemLayer, &gTransports);
SuccessOrExit(err);

sessions.SetDelegate(&gCallbacks);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ RendezvousDeviceDelegate::RendezvousDeviceDelegate()
params.SetSetupPINCode(setupPINCode).SetBleLayer(DeviceLayer::ConnectivityMgr().GetBleLayer());

mRendezvousSession = chip::Platform::New<RendezvousSession>(this);
err = mRendezvousSession->Init(params);
err = mRendezvousSession->Init(params, nullptr);

exit:
if (err != CHIP_NO_ERROR)
Expand Down
2 changes: 1 addition & 1 deletion examples/common/chip-app-server/DataModelHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ using namespace ::chip;
* @param [in] buffer The buffer holding the message. This function guarantees
* that it will free the buffer before returning.
*/
void HandleDataModelMessage(const PacketHeader & header, System::PacketBuffer * buffer, SecureSessionMgrBase * mgr)
void HandleDataModelMessage(const PacketHeader & header, System::PacketBuffer * buffer, SecureSessionMgr * mgr)
{
EmberApsFrame frame;
bool ok = extractApsFrame(buffer->Start(), buffer->DataLength(), &frame) > 0;
Expand Down
7 changes: 4 additions & 3 deletions examples/common/chip-app-server/RendezvousServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ namespace chip {

RendezvousServer::RendezvousServer() : mRendezvousSession(this) {}

CHIP_ERROR RendezvousServer::Init(const RendezvousParameters & params)
CHIP_ERROR RendezvousServer::Init(const RendezvousParameters & params, TransportMgrBase * transportMgr)
{
return mRendezvousSession.Init(params);
return mRendezvousSession.Init(params, transportMgr);
}

void RendezvousServer::OnRendezvousError(CHIP_ERROR err)
Expand All @@ -56,7 +56,8 @@ void RendezvousServer::OnRendezvousConnectionClosed()
ChipLogProgress(AppServer, "OnRendezvousConnectionClosed");
}

void RendezvousServer::OnRendezvousMessageReceived(PacketBuffer * buffer)
void RendezvousServer::OnRendezvousMessageReceived(const PacketHeader & packetHeader, const PeerAddress & peerAddress,
PacketBuffer * buffer)
{
chip::System::PacketBuffer::Free(buffer);
}
Expand Down
19 changes: 11 additions & 8 deletions examples/common/chip-app-server/Server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class ServerCallback : public SecureSessionMgrDelegate
{
public:
void OnMessageReceived(const PacketHeader & header, const PayloadHeader & payloadHeader, Transport::PeerConnectionState * state,
System::PacketBuffer * buffer, SecureSessionMgrBase * mgr) override
System::PacketBuffer * buffer, SecureSessionMgr * mgr) override
{
const size_t data_len = buffer->DataLength();
char src_addr[PeerAddress::kMaxToStringSize];
Expand All @@ -73,20 +73,21 @@ class ServerCallback : public SecureSessionMgrDelegate
}
}

void OnNewConnection(Transport::PeerConnectionState * state, SecureSessionMgrBase * mgr) override
void OnNewConnection(Transport::PeerConnectionState * state, SecureSessionMgr * mgr) override
{
ChipLogProgress(AppServer, "Received a new connection.");
}
};

DemoSessionManager gSessions;
DemoTransportMgr gTransports;
SecureSessionMgr gSessions;
ServerCallback gCallbacks;
SecurePairingUsingTestSecret gTestPairing;
RendezvousServer gRendezvousServer;

} // namespace

SecureSessionMgrBase & chip::SessionManager()
SecureSessionMgr & chip::SessionManager()
{
return gSessions;
}
Expand All @@ -100,8 +101,11 @@ void InitServer()

InitDataModelHandler();

err = gSessions.Init(chip::kTestDeviceNodeId, &DeviceLayer::SystemLayer,
UdpListenParameters(&DeviceLayer::InetLayer).SetAddressType(kIPAddressType_IPv6));
// Init transport before operations with secure session mgr.
err = gTransports.Init(UdpListenParameters(&DeviceLayer::InetLayer).SetAddressType(kIPAddressType_IPv6));
SuccessOrExit(err);

err = gSessions.Init(chip::kTestDeviceNodeId, &DeviceLayer::SystemLayer, &gTransports);
SuccessOrExit(err);

// This flag is used to bypass BLE in the cirque test
Expand All @@ -115,7 +119,7 @@ void InitServer()
params.SetSetupPINCode(pinCode)
.SetLocalNodeId(chip::kTestDeviceNodeId)
.SetBleLayer(DeviceLayer::ConnectivityMgr().GetBleLayer());
SuccessOrExit(err = gRendezvousServer.Init(params));
SuccessOrExit(err = gRendezvousServer.Init(params, &gTransports));
}
#endif

Expand All @@ -124,7 +128,6 @@ void InitServer()

gSessions.SetDelegate(&gCallbacks);
chip::Mdns::DiscoveryManager::GetInstance().StartPublishDevice(chip::Inet::kIPAddressType_IPv6);

exit:
if (err != CHIP_NO_ERROR)
{
Expand Down
3 changes: 1 addition & 2 deletions examples/common/chip-app-server/include/DataModelHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,5 @@
* @param [in] buffer The buffer holding the message. This function guarantees
* that it will free the buffer before returning.
*/
void HandleDataModelMessage(const chip::PacketHeader & header, chip::System::PacketBuffer * buffer,
chip::SecureSessionMgrBase * mgr);
void HandleDataModelMessage(const chip::PacketHeader & header, chip::System::PacketBuffer * buffer, chip::SecureSessionMgr * mgr);
void InitDataModelHandler();
6 changes: 4 additions & 2 deletions examples/common/chip-app-server/include/RendezvousServer.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,18 @@ class RendezvousServer : public RendezvousSessionDelegate
public:
RendezvousServer();

CHIP_ERROR Init(const RendezvousParameters & params);
CHIP_ERROR Init(const RendezvousParameters & params, TransportMgrBase * transportMgr);

//////////////// RendezvousSessionDelegate Implementation ///////////////////

void OnRendezvousConnectionOpened() override;
void OnRendezvousConnectionClosed() override;
void OnRendezvousError(CHIP_ERROR err) override;
void OnRendezvousMessageReceived(System::PacketBuffer * buffer) override;
void OnRendezvousMessageReceived(const PacketHeader & packetHeader, const Transport::PeerAddress & peerAddress,
System::PacketBuffer * buffer) override;
void OnRendezvousComplete() override;
void OnRendezvousStatusUpdate(Status status, CHIP_ERROR err) override;
RendezvousSession * GetRendezvousSession() { return &mRendezvousSession; };

private:
RendezvousSession mRendezvousSession;
Expand Down
4 changes: 2 additions & 2 deletions examples/common/chip-app-server/include/Server.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@

#pragma once

#include <transport/SecureSessionMgr.h>
#include <transport/TransportMgr.h>
#include <transport/raw/UDP.h>

using DemoSessionManager = chip::SecureSessionMgr<chip::Transport::UDP>;
using DemoTransportMgr = chip::TransportMgr<chip::Transport::UDP>;

/**
* Initialize DataModelHandler and start CHIP datamodel server, the server
Expand Down
2 changes: 1 addition & 1 deletion examples/common/chip-app-server/include/SessionManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@
#include <transport/SecureSessionMgr.h>

namespace chip {
SecureSessionMgrBase & SessionManager();
SecureSessionMgr & SessionManager();
} // namespace chip
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ RendezvousDeviceDelegate::RendezvousDeviceDelegate()
params.SetSetupPINCode(setupPINCode).SetLocalNodeId(kLocalNodeId).SetBleLayer(DeviceLayer::ConnectivityMgr().GetBleLayer());

mRendezvousSession = new RendezvousSession(this);
err = mRendezvousSession->Init(params);
err = mRendezvousSession->Init(params, nullptr);

exit:
if (err != CHIP_NO_ERROR)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
#include <support/ErrorStr.h>
#include <system/SystemPacketBuffer.h>
#include <transport/SecureSessionMgr.h>
#include <transport/TransportMgr.h>
#include <transport/raw/Tuple.h>
#include <transport/raw/UDP.h>

Expand All @@ -61,7 +62,7 @@ class ResponseServerCallback : public SecureSessionMgrDelegate
{
public:
void OnMessageReceived(const PacketHeader & header, const PayloadHeader & payloadHeader, Transport::PeerConnectionState * state,
System::PacketBuffer * buffer, SecureSessionMgrBase * mgr) override
System::PacketBuffer * buffer, SecureSessionMgr * mgr) override
{
CHIP_ERROR err;
const size_t data_len = buffer->DataLength();
Expand Down Expand Up @@ -90,12 +91,12 @@ class ResponseServerCallback : public SecureSessionMgrDelegate
}
}

void OnReceiveError(CHIP_ERROR error, const Transport::PeerAddress & source, SecureSessionMgrBase * mgr) override
void OnReceiveError(CHIP_ERROR error, const Transport::PeerAddress & source, SecureSessionMgr * mgr) override
{
ESP_LOGE(TAG, "ERROR: %s\n Got UDP error", ErrorStr(error));
}

void OnNewConnection(Transport::PeerConnectionState * state, SecureSessionMgrBase * mgr) override
void OnNewConnection(Transport::PeerConnectionState * state, SecureSessionMgr * mgr) override
{
ESP_LOGI(TAG, "Received a new connection.");
}
Expand Down Expand Up @@ -127,16 +128,16 @@ class ResponseServerCallback : public SecureSessionMgrDelegate
};

ResponseServerCallback gCallbacks;

SecureSessionMgr<Transport::UDP, // IPV6
Transport::UDP // IPV4
>
sessions;
TransportMgr<Transport::UDP, // IPV6
Transport::UDP // IPV4
>
gTransports;
SecureSessionMgr sessions;

} // namespace

namespace chip {
SecureSessionMgrBase & SessionManager()
SecureSessionMgr & SessionManager()
{
return sessions;
}
Expand All @@ -146,9 +147,10 @@ SecureSessionMgrBase & SessionManager()
void startServer(NodeId localNodeId)
{
CHIP_ERROR err = CHIP_NO_ERROR;
err = sessions.Init(localNodeId, &DeviceLayer::SystemLayer,
UdpListenParameters(&DeviceLayer::InetLayer).SetAddressType(kIPAddressType_IPv6).SetInterfaceId(nullptr),
UdpListenParameters(&DeviceLayer::InetLayer).SetAddressType(kIPAddressType_IPv4));
err = gTransports.Init(UdpListenParameters(&DeviceLayer::InetLayer).SetAddressType(kIPAddressType_IPv6).SetInterfaceId(nullptr),
UdpListenParameters(&DeviceLayer::InetLayer).SetAddressType(kIPAddressType_IPv4));
SuccessOrExit(err);
err = sessions.Init(localNodeId, &DeviceLayer::SystemLayer, &gTransports);
SuccessOrExit(err);

sessions.SetDelegate(&gCallbacks);
Expand Down
4 changes: 2 additions & 2 deletions src/app/util/chip-message-send.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
#include <assert.h>
#include <inet/InetLayer.h> // PacketBuffer and the like
#include <support/logging/CHIPLogging.h>
#include <transport/SecureSessionMgr.h> // For SecureSessionMgrBase
#include <transport/SecureSessionMgr.h> // For SecureSessionMgr

using namespace chip;

Expand All @@ -35,7 +35,7 @@ using namespace chip;
//
// https://github.com/project-chip/connectedhomeip/issues/2566 tracks that API.
namespace chip {
extern SecureSessionMgrBase & SessionManager();
extern SecureSessionMgr & SessionManager();
}

EmberStatus chipSendUnicast(NodeId destination, EmberApsFrame * apsFrame, uint16_t messageLength, uint8_t * message)
Expand Down
4 changes: 2 additions & 2 deletions src/controller/CHIPDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ CHIP_ERROR Device::Deserialize(const SerializedDevice & input)
}

void Device::OnMessageReceived(const PacketHeader & header, const PayloadHeader & payloadHeader,
Transport::PeerConnectionState * state, System::PacketBuffer * msgBuf, SecureSessionMgrBase * mgr)
Transport::PeerConnectionState * state, System::PacketBuffer * msgBuf, SecureSessionMgr * mgr)
{
if (mState == ConnectionState::SecureConnected && mStatusDelegate != nullptr)
{
Expand All @@ -186,7 +186,7 @@ CHIP_ERROR Device::LoadSecureSessionParameters()
err = pairingSession.FromSerializable(mPairing);
SuccessOrExit(err);

err = mSessionManager->ResetTransport(Transport::UdpListenParameters(mInetLayer).SetAddressType(mDeviceAddr.Type()));
err = mTransportMgr->ResetTransport(Transport::UdpListenParameters(mInetLayer).SetAddressType(mDeviceAddr.Type()));
SuccessOrExit(err);

err = mSessionManager->NewPairing(
Expand Down
Loading