Skip to content

Commit 6336670

Browse files
committed
[chip-tool] Add TermsAndConditions support to chip-tool pairing code command
1 parent 6724d74 commit 6336670

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

examples/chip-tool/commands/pairing/PairingCommand.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
#include <setup_payload/ManualSetupPayloadParser.h>
2929
#include <setup_payload/QRCodeSetupPayloadParser.h>
3030

31+
#include "../dcl/DCLClient.h"
32+
#include "../dcl/DisplayTermsAndConditions.h"
33+
3134
#include <string>
3235

3336
using namespace ::chip;
@@ -232,6 +235,7 @@ CHIP_ERROR PairingCommand::PairWithCode(NodeId remoteId)
232235
discoveryType = DiscoveryType::kDiscoveryNetworkOnlyWithoutPASEAutoRetry;
233236
}
234237

238+
ReturnErrorOnFailure(MaybeDisplayTermsAndConditions(commissioningParams));
235239
return CurrentCommissioner().PairDevice(remoteId, mOnboardingPayload, commissioningParams, discoveryType);
236240
}
237241

@@ -585,3 +589,26 @@ void PairingCommand::OnDeviceAttestationCompleted(Controller::DeviceCommissioner
585589
SetCommandExitStatus(err);
586590
}
587591
}
592+
593+
CHIP_ERROR PairingCommand::MaybeDisplayTermsAndConditions(CommissioningParameters & params)
594+
{
595+
VerifyOrReturnError(mUseDCL.ValueOr(false), CHIP_NO_ERROR);
596+
597+
Json::Value tc;
598+
auto client = tool::dcl::DCLClient(mDCLHostName, mDCLPort);
599+
ReturnErrorOnFailure(client.TermsAndConditions(mOnboardingPayload, tc));
600+
if (tc != Json::nullValue)
601+
{
602+
uint16_t version = 0;
603+
uint16_t userResponse = 0;
604+
ReturnErrorOnFailure(tool::dcl::DisplayTermsAndConditions(tc, version, userResponse, mCountryCode));
605+
606+
TermsAndConditionsAcknowledgement termsAndConditionsAcknowledgement = {
607+
.acceptedTermsAndConditions = userResponse,
608+
.acceptedTermsAndConditionsVersion = version,
609+
};
610+
params.SetTermsAndConditionsAcknowledgement(termsAndConditionsAcknowledgement);
611+
}
612+
613+
return CHIP_NO_ERROR;
614+
}

examples/chip-tool/commands/pairing/PairingCommand.h

+8
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ class PairingCommand : public CHIPCommand,
106106
break;
107107
case PairingMode::Code:
108108
AddArgument("skip-commissioning-complete", 0, 1, &mSkipCommissioningComplete);
109+
AddArgument("dcl-hostname", &mDCLHostName,
110+
"Hostname of the DCL server to fetch information from. Defaults to 'on.dcl.csa-iot.org'.");
111+
AddArgument("dcl-port", 0, UINT16_MAX, &mDCLPort, "Port number for connecting to the DCL server. Defaults to '443'.");
112+
AddArgument("use-dcl", 0, 1, &mUseDCL, "Use DCL to fetch onboarding information");
109113
FALLTHROUGH;
110114
case PairingMode::CodePaseOnly:
111115
AddArgument("payload", &mOnboardingPayload);
@@ -247,6 +251,7 @@ class PairingCommand : public CHIPCommand,
247251
CHIP_ERROR PairWithMdnsOrBleByIndexWithCode(NodeId remoteId, uint16_t index);
248252
CHIP_ERROR Unpair(NodeId remoteId);
249253
chip::Controller::CommissioningParameters GetCommissioningParameters();
254+
CHIP_ERROR MaybeDisplayTermsAndConditions(chip::Controller::CommissioningParameters & params);
250255

251256
const PairingMode mPairingMode;
252257
const PairingNetworkType mNetworkType;
@@ -269,6 +274,9 @@ class PairingCommand : public CHIPCommand,
269274
chip::Optional<uint32_t> mICDStayActiveDurationMsec;
270275
chip::Optional<uint16_t> mTCAcknowledgements;
271276
chip::Optional<uint16_t> mTCAcknowledgementVersion;
277+
chip::Optional<char *> mDCLHostName;
278+
chip::Optional<uint16_t> mDCLPort;
279+
chip::Optional<bool> mUseDCL;
272280
chip::app::DataModel::List<chip::app::Clusters::TimeSynchronization::Structs::TimeZoneStruct::Type> mTimeZoneList;
273281
TypedComplexArgument<chip::app::DataModel::List<chip::app::Clusters::TimeSynchronization::Structs::TimeZoneStruct::Type>>
274282
mComplex_TimeZones;

0 commit comments

Comments
 (0)