Skip to content

Commit

Permalink
Add an optional Dnssd::CommonResolutionData parameters when pairing a…
Browse files Browse the repository at this point in the history
… device using a setup code
  • Loading branch information
vivien-apple committed Apr 19, 2023
1 parent 450294b commit bbbb19a
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 18 deletions.
17 changes: 11 additions & 6 deletions src/controller/CHIPDeviceController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -587,7 +587,7 @@ CHIP_ERROR DeviceCommissioner::GetDeviceBeingCommissioned(NodeId deviceId, Commi
}

CHIP_ERROR DeviceCommissioner::PairDevice(NodeId remoteDeviceId, const char * setUpCode, const CommissioningParameters & params,
DiscoveryType discoveryType)
DiscoveryType discoveryType, Optional<Dnssd::CommonResolutionData> resolutionData)
{
MATTER_TRACE_EVENT_SCOPE("PairDevice", "DeviceCommissioner");
if (mDefaultCommissioner == nullptr)
Expand All @@ -597,13 +597,16 @@ CHIP_ERROR DeviceCommissioner::PairDevice(NodeId remoteDeviceId, const char * se
}
ReturnErrorOnFailure(mDefaultCommissioner->SetCommissioningParameters(params));

return mSetUpCodePairer.PairDevice(remoteDeviceId, setUpCode, SetupCodePairerBehaviour::kCommission, discoveryType);
return mSetUpCodePairer.PairDevice(remoteDeviceId, setUpCode, SetupCodePairerBehaviour::kCommission, discoveryType,
resolutionData);
}

CHIP_ERROR DeviceCommissioner::PairDevice(NodeId remoteDeviceId, const char * setUpCode, DiscoveryType discoveryType)
CHIP_ERROR DeviceCommissioner::PairDevice(NodeId remoteDeviceId, const char * setUpCode, DiscoveryType discoveryType,
Optional<Dnssd::CommonResolutionData> resolutionData)
{
MATTER_TRACE_EVENT_SCOPE("PairDevice", "DeviceCommissioner");
return mSetUpCodePairer.PairDevice(remoteDeviceId, setUpCode, SetupCodePairerBehaviour::kCommission, discoveryType);
return mSetUpCodePairer.PairDevice(remoteDeviceId, setUpCode, SetupCodePairerBehaviour::kCommission, discoveryType,
resolutionData);
}

CHIP_ERROR DeviceCommissioner::PairDevice(NodeId remoteDeviceId, RendezvousParameters & params)
Expand All @@ -621,10 +624,12 @@ CHIP_ERROR DeviceCommissioner::PairDevice(NodeId remoteDeviceId, RendezvousParam
return Commission(remoteDeviceId, commissioningParams);
}

CHIP_ERROR DeviceCommissioner::EstablishPASEConnection(NodeId remoteDeviceId, const char * setUpCode, DiscoveryType discoveryType)
CHIP_ERROR DeviceCommissioner::EstablishPASEConnection(NodeId remoteDeviceId, const char * setUpCode, DiscoveryType discoveryType,
Optional<Dnssd::CommonResolutionData> resolutionData)
{
MATTER_TRACE_EVENT_SCOPE("EstablishPASEConnection", "DeviceCommissioner");
return mSetUpCodePairer.PairDevice(remoteDeviceId, setUpCode, SetupCodePairerBehaviour::kPaseOnly, discoveryType);
return mSetUpCodePairer.PairDevice(remoteDeviceId, setUpCode, SetupCodePairerBehaviour::kPaseOnly, discoveryType,
resolutionData);
}

CHIP_ERROR DeviceCommissioner::EstablishPASEConnection(NodeId remoteDeviceId, RendezvousParameters & params)
Expand Down
13 changes: 9 additions & 4 deletions src/controller/CHIPDeviceController.h
Original file line number Diff line number Diff line change
Expand Up @@ -425,10 +425,13 @@ class DLL_EXPORT DeviceCommissioner : public DeviceController,
* @param[in] remoteDeviceId The remote device Id.
* @param[in] setUpCode The setup code for connecting to the device
* @param[in] discoveryType The network discovery type, defaults to DiscoveryType::kAll.
* @param[in] resolutionData Optional resolution data previously discovered on the network for the target device.
*/
CHIP_ERROR PairDevice(NodeId remoteDeviceId, const char * setUpCode, DiscoveryType discoveryType = DiscoveryType::kAll);
CHIP_ERROR PairDevice(NodeId remoteDeviceId, const char * setUpCode, DiscoveryType discoveryType = DiscoveryType::kAll,
Optional<Dnssd::CommonResolutionData> resolutionData = Optional<Dnssd::CommonResolutionData>::Missing());
CHIP_ERROR PairDevice(NodeId remoteDeviceId, const char * setUpCode, const CommissioningParameters & CommissioningParameters,
DiscoveryType discoveryType = DiscoveryType::kAll);
DiscoveryType discoveryType = DiscoveryType::kAll,
Optional<Dnssd::CommonResolutionData> resolutionData = Optional<Dnssd::CommonResolutionData>::Missing());

/**
* @brief
Expand Down Expand Up @@ -490,9 +493,11 @@ class DLL_EXPORT DeviceCommissioner : public DeviceController,
* @param[in] remoteDeviceId The remote device Id.
* @param[in] setUpCode The setup code for connecting to the device
* @param[in] discoveryType The network discovery type, defaults to DiscoveryType::kAll.
* @param[in] resolutionData Optional resolution data previously discovered on the network for the target device.
*/
CHIP_ERROR EstablishPASEConnection(NodeId remoteDeviceId, const char * setUpCode,
DiscoveryType discoveryType = DiscoveryType::kAll);
CHIP_ERROR EstablishPASEConnection(
NodeId remoteDeviceId, const char * setUpCode, DiscoveryType discoveryType = DiscoveryType::kAll,
Optional<Dnssd::CommonResolutionData> resolutionData = Optional<Dnssd::CommonResolutionData>::Missing());

/**
* @brief
Expand Down
25 changes: 19 additions & 6 deletions src/controller/SetUpCodePairer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,13 @@ namespace chip {
namespace Controller {

CHIP_ERROR SetUpCodePairer::PairDevice(NodeId remoteId, const char * setUpCode, SetupCodePairerBehaviour commission,
DiscoveryType discoveryType)
DiscoveryType discoveryType, Optional<Dnssd::CommonResolutionData> resolutionData)
{
VerifyOrReturnError(mSystemLayer != nullptr, CHIP_ERROR_INCORRECT_STATE);
if (resolutionData.HasValue())
{
VerifyOrReturnError(discoveryType != DiscoveryType::kAll, CHIP_ERROR_INVALID_ARGUMENT);
}

SetupPayload payload;
mConnectionType = commission;
Expand All @@ -62,12 +66,18 @@ CHIP_ERROR SetUpCodePairer::PairDevice(NodeId remoteId, const char * setUpCode,

ResetDiscoveryState();

ReturnErrorOnFailure(Connect(payload));
if (resolutionData.HasValue())
{
ReturnErrorOnFailure(mSystemLayer->StartTimer(System::Clock::Milliseconds32(kDeviceDiscoveredTimeout),
OnDeviceDiscoveredTimeoutCallback, this));
NotifyCommissionableDeviceDiscovered(resolutionData.Value());
return CHIP_NO_ERROR;
}

ReturnErrorOnFailure(Connect(payload));
return mSystemLayer->StartTimer(System::Clock::Milliseconds32(kDeviceDiscoveredTimeout), OnDeviceDiscoveredTimeoutCallback,
this);
}

CHIP_ERROR SetUpCodePairer::Connect(SetupPayload & payload)
{
CHIP_ERROR err = CHIP_NO_ERROR;
Expand Down Expand Up @@ -347,20 +357,23 @@ void SetUpCodePairer::NotifyCommissionableDeviceDiscovered(const Dnssd::Discover

ChipLogProgress(Controller, "Discovered device to be commissioned over DNS-SD");

auto & resolutionData = nodeData.resolutionData;
NotifyCommissionableDeviceDiscovered(nodeData.resolutionData);
}

void SetUpCodePairer::NotifyCommissionableDeviceDiscovered(const Dnssd::CommonResolutionData & resolutionData)
{
if (mDiscoveryType == DiscoveryType::kDiscoveryNetworkOnlyWithoutPASEAutoRetry)
{
// If the discovery type does not want the PASE auto retry mechanism, we will just store
// a single IP. So the discovery process is stopped as it won't be of any help anymore.
StopConnectOverIP();
mDiscoveredParameters.emplace_back(nodeData.resolutionData, 0);
mDiscoveredParameters.emplace_back(resolutionData, 0);
}
else
{
for (size_t i = 0; i < resolutionData.numIPs; i++)
{
mDiscoveredParameters.emplace_back(nodeData.resolutionData, i);
mDiscoveredParameters.emplace_back(resolutionData, i);
}
}

Expand Down
7 changes: 5 additions & 2 deletions src/controller/SetUpCodePairer.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,9 @@ class DLL_EXPORT SetUpCodePairer : public DevicePairingDelegate
virtual ~SetUpCodePairer() {}

CHIP_ERROR PairDevice(chip::NodeId remoteId, const char * setUpCode,
SetupCodePairerBehaviour connectionType = SetupCodePairerBehaviour::kCommission,
DiscoveryType discoveryType = DiscoveryType::kAll);
SetupCodePairerBehaviour connectionType = SetupCodePairerBehaviour::kCommission,
DiscoveryType discoveryType = DiscoveryType::kAll,
Optional<Dnssd::CommonResolutionData> resolutionData = Optional<Dnssd::CommonResolutionData>::Missing());

// Called by the DeviceCommissioner to notify that we have discovered a new device.
void NotifyCommissionableDeviceDiscovered(const chip::Dnssd::DiscoveredNodeData & nodeData);
Expand Down Expand Up @@ -151,6 +152,8 @@ class DLL_EXPORT SetUpCodePairer : public DevicePairingDelegate
kTransportTypeCount,
};

void NotifyCommissionableDeviceDiscovered(const chip::Dnssd::CommonResolutionData & resolutionData);

static void OnDeviceDiscoveredTimeoutCallback(System::Layer * layer, void * context);

#if CONFIG_NETWORK_LAYER_BLE
Expand Down

0 comments on commit bbbb19a

Please sign in to comment.