Skip to content

Commit

Permalink
[rendezvous] Add initial support for IP rendezvous (#3704)
Browse files Browse the repository at this point in the history
* [rendezvous] Add initial support for IP rendezvous

* Revert python device ctrl change

* Change after merge

* Fix

* Fix

* Make code clearer

* Rename variables in tests

* Restyled by clang-format

* Add TransportMgrDelegate

* remove BLEConnectionDelegate which shouldn't in this pr

* Fix nrf build

* Address comments

* update delegate code style

* Fix

* Fix tests after merge

* Fix ESP32 Build

* InitInternal -> Init

Co-authored-by: Restyled.io <commits@restyled.io>
  • Loading branch information
erjiaqing and restyled-commits authored Nov 20, 2020
1 parent 7d020b8 commit fba2fdc
Show file tree
Hide file tree
Showing 35 changed files with 566 additions and 268 deletions.
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 @@ -123,7 +124,7 @@ class EchoServerCallback : public SecureSessionMgrDelegate
public:
void OnMessageReceived(const PacketHeader & header, const PayloadHeader & payloadHeader,
const Transport::PeerConnectionState * state, System::PacketBuffer * buffer,
SecureSessionMgrBase * mgr) override
SecureSessionMgr * mgr) override
{
CHIP_ERROR err;
const size_t data_len = buffer->DataLength();
Expand Down Expand Up @@ -180,13 +181,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(const Transport::PeerConnectionState * state, SecureSessionMgrBase * mgr) override
void OnNewConnection(const Transport::PeerConnectionState * state, SecureSessionMgr * mgr) override
{
ESP_LOGI(TAG, "Received a new connection.");
}
Expand Down Expand Up @@ -219,15 +220,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 @@ -237,9 +239,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 @@ -47,7 +47,7 @@ class ServerCallback : public SecureSessionMgrDelegate
public:
void OnMessageReceived(const PacketHeader & header, const PayloadHeader & payloadHeader,
const Transport::PeerConnectionState * state, System::PacketBuffer * buffer,
SecureSessionMgrBase * mgr) override
SecureSessionMgr * mgr) override
{
const size_t data_len = buffer->DataLength();
char src_addr[PeerAddress::kMaxToStringSize];
Expand All @@ -74,20 +74,21 @@ class ServerCallback : public SecureSessionMgrDelegate
}
}

void OnNewConnection(const Transport::PeerConnectionState * state, SecureSessionMgrBase * mgr) override
void OnNewConnection(const 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 @@ -101,8 +102,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 @@ -116,7 +120,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 @@ -125,7 +129,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
26 changes: 14 additions & 12 deletions examples/temperature-measurement-app/esp32/main/ResponseServer.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 All @@ -62,7 +63,7 @@ class ResponseServerCallback : public SecureSessionMgrDelegate
public:
void OnMessageReceived(const PacketHeader & header, const PayloadHeader & payloadHeader,
const Transport::PeerConnectionState * state, System::PacketBuffer * buffer,
SecureSessionMgrBase * mgr) override
SecureSessionMgr * mgr) override
{
CHIP_ERROR err;
const size_t data_len = buffer->DataLength();
Expand Down Expand Up @@ -91,12 +92,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(const Transport::PeerConnectionState * state, SecureSessionMgrBase * mgr) override
void OnNewConnection(const Transport::PeerConnectionState * state, SecureSessionMgr * mgr) override
{
ESP_LOGI(TAG, "Received a new connection.");
}
Expand Down Expand Up @@ -128,16 +129,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 @@ -147,9 +148,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
5 changes: 2 additions & 3 deletions src/controller/CHIPDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,7 @@ CHIP_ERROR Device::Deserialize(const SerializedDevice & input)
}

void Device::OnMessageReceived(const PacketHeader & header, const PayloadHeader & payloadHeader,
const Transport::PeerConnectionState * state, System::PacketBuffer * msgBuf,
SecureSessionMgrBase * mgr)
const Transport::PeerConnectionState * state, System::PacketBuffer * msgBuf, SecureSessionMgr * mgr)
{
if (mState == ConnectionState::SecureConnected)
{
Expand Down Expand Up @@ -233,7 +232,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

0 comments on commit fba2fdc

Please sign in to comment.