| /* |
| * Copyright (c) 2024 Project CHIP Authors |
| * All rights reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| |
| #pragma once |
| |
| #include <commands/common/Commands.h> |
| #include <commands/common/CredentialIssuerCommands.h> |
| #include <commands/pairing/GetCommissionerNodeIdCommand.h> |
| #include <commands/pairing/GetCommissionerRootCertificateCommand.h> |
| #include <commands/pairing/IssueNOCChainCommand.h> |
| #include <commands/pairing/OpenCommissioningWindowCommand.h> |
| #include <commands/pairing/PairingCommand.h> |
| |
| #include <app/server/Dnssd.h> |
| #include <lib/dnssd/Resolver.h> |
| |
| class Unpair : public PairingCommand |
| { |
| public: |
| Unpair(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("unpair", PairingMode::None, PairingNetworkType::None, credsIssuerConfig) |
| {} |
| }; |
| |
| class PairCode : public PairingCommand |
| { |
| public: |
| PairCode(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("code", PairingMode::Code, PairingNetworkType::None, credsIssuerConfig) |
| {} |
| }; |
| |
| class PairCodePase : public PairingCommand |
| { |
| public: |
| PairCodePase(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("code-paseonly", PairingMode::CodePaseOnly, PairingNetworkType::None, credsIssuerConfig) |
| {} |
| }; |
| |
| class PairCodeWifi : public PairingCommand |
| { |
| public: |
| PairCodeWifi(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("code-wifi", PairingMode::Code, PairingNetworkType::WiFi, credsIssuerConfig) |
| {} |
| }; |
| |
| class PairCodeThread : public PairingCommand |
| { |
| public: |
| PairCodeThread(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("code-thread", PairingMode::Code, PairingNetworkType::Thread, credsIssuerConfig) |
| {} |
| }; |
| |
| class PairOnNetwork : public PairingCommand |
| { |
| public: |
| PairOnNetwork(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("onnetwork", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig) |
| {} |
| }; |
| |
| class PairOnNetworkShort : public PairingCommand |
| { |
| public: |
| PairOnNetworkShort(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("onnetwork-short", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig, |
| chip::Dnssd::DiscoveryFilterType::kShortDiscriminator) |
| {} |
| }; |
| |
| class PairOnNetworkLong : public PairingCommand |
| { |
| public: |
| PairOnNetworkLong(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("onnetwork-long", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig, |
| chip::Dnssd::DiscoveryFilterType::kLongDiscriminator) |
| {} |
| }; |
| |
| class PairOnNetworkVendor : public PairingCommand |
| { |
| public: |
| PairOnNetworkVendor(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("onnetwork-vendor", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig, |
| chip::Dnssd::DiscoveryFilterType::kVendorId) |
| {} |
| }; |
| |
| class PairOnNetworkFabric : public PairingCommand |
| { |
| public: |
| PairOnNetworkFabric(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("onnetwork-fabric", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig, |
| chip::Dnssd::DiscoveryFilterType::kCompressedFabricId) |
| {} |
| }; |
| |
| class PairOnNetworkCommissioningMode : public PairingCommand |
| { |
| public: |
| PairOnNetworkCommissioningMode(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("onnetwork-commissioning-mode", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig, |
| chip::Dnssd::DiscoveryFilterType::kCommissioningMode) |
| {} |
| }; |
| |
| class PairOnNetworkCommissioner : public PairingCommand |
| { |
| public: |
| PairOnNetworkCommissioner(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("onnetwork-commissioner", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig, |
| chip::Dnssd::DiscoveryFilterType::kCommissioner) |
| {} |
| }; |
| |
| class PairOnNetworkDeviceType : public PairingCommand |
| { |
| public: |
| PairOnNetworkDeviceType(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("onnetwork-device-type", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig, |
| chip::Dnssd::DiscoveryFilterType::kDeviceType) |
| {} |
| }; |
| |
| class PairOnNetworkInstanceName : public PairingCommand |
| { |
| public: |
| PairOnNetworkInstanceName(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("onnetwork-instance-name", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig, |
| chip::Dnssd::DiscoveryFilterType::kInstanceName) |
| {} |
| }; |
| |
| class PairBleWiFi : public PairingCommand |
| { |
| public: |
| PairBleWiFi(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("ble-wifi", PairingMode::Ble, PairingNetworkType::WiFi, credsIssuerConfig) |
| {} |
| }; |
| |
| class PairBleThread : public PairingCommand |
| { |
| public: |
| PairBleThread(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("ble-thread", PairingMode::Ble, PairingNetworkType::Thread, credsIssuerConfig) |
| {} |
| }; |
| |
| class PairSoftAP : public PairingCommand |
| { |
| public: |
| PairSoftAP(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("softap", PairingMode::SoftAP, PairingNetworkType::WiFi, credsIssuerConfig) |
| {} |
| }; |
| |
| class PairAlreadyDiscovered : public PairingCommand |
| { |
| public: |
| PairAlreadyDiscovered(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("already-discovered", PairingMode::AlreadyDiscovered, PairingNetworkType::None, credsIssuerConfig) |
| {} |
| }; |
| |
| class PairAlreadyDiscoveredByIndex : public PairingCommand |
| { |
| public: |
| PairAlreadyDiscoveredByIndex(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("already-discovered-by-index", PairingMode::AlreadyDiscoveredByIndex, PairingNetworkType::None, |
| credsIssuerConfig) |
| {} |
| }; |
| |
| class PairAlreadyDiscoveredByIndexWithWiFi : public PairingCommand |
| { |
| public: |
| PairAlreadyDiscoveredByIndexWithWiFi(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("already-discovered-by-index-with-wifi", PairingMode::AlreadyDiscoveredByIndex, PairingNetworkType::WiFi, |
| credsIssuerConfig) |
| {} |
| }; |
| |
| class PairAlreadyDiscoveredByIndexWithCode : public PairingCommand |
| { |
| public: |
| PairAlreadyDiscoveredByIndexWithCode(CredentialIssuerCommands * credsIssuerConfig) : |
| PairingCommand("already-discovered-by-index-with-code", PairingMode::AlreadyDiscoveredByIndexWithCode, |
| PairingNetworkType::None, credsIssuerConfig) |
| {} |
| }; |
| |
| class StartUdcServerCommand : public CHIPCommand |
| { |
| public: |
| StartUdcServerCommand(CredentialIssuerCommands * credsIssuerConfig) : CHIPCommand("start-udc-server", credsIssuerConfig) {} |
| chip::System::Clock::Timeout GetWaitDuration() const override { return chip::System::Clock::Seconds16(300); } |
| |
| CHIP_ERROR RunCommand() override |
| { |
| chip::app::DnssdServer::Instance().StartServer(chip::Dnssd::CommissioningMode::kDisabled); |
| return CHIP_NO_ERROR; |
| } |
| }; |
| |
| void registerCommandsPairing(Commands & commands, CredentialIssuerCommands * credsIssuerConfig) |
| { |
| const char * clusterName = "Pairing"; |
| |
| commands_list clusterCommands = { |
| make_unique<Unpair>(credsIssuerConfig), |
| make_unique<PairCode>(credsIssuerConfig), |
| make_unique<PairCodePase>(credsIssuerConfig), |
| make_unique<PairCodeWifi>(credsIssuerConfig), |
| make_unique<PairCodeThread>(credsIssuerConfig), |
| make_unique<PairBleWiFi>(credsIssuerConfig), |
| make_unique<PairBleThread>(credsIssuerConfig), |
| make_unique<PairSoftAP>(credsIssuerConfig), |
| make_unique<PairAlreadyDiscovered>(credsIssuerConfig), |
| make_unique<PairAlreadyDiscoveredByIndex>(credsIssuerConfig), |
| make_unique<PairAlreadyDiscoveredByIndexWithWiFi>(credsIssuerConfig), |
| make_unique<PairAlreadyDiscoveredByIndexWithCode>(credsIssuerConfig), |
| make_unique<PairOnNetwork>(credsIssuerConfig), |
| make_unique<PairOnNetworkShort>(credsIssuerConfig), |
| make_unique<PairOnNetworkLong>(credsIssuerConfig), |
| make_unique<PairOnNetworkVendor>(credsIssuerConfig), |
| make_unique<PairOnNetworkCommissioningMode>(credsIssuerConfig), |
| make_unique<PairOnNetworkCommissioner>(credsIssuerConfig), |
| make_unique<PairOnNetworkDeviceType>(credsIssuerConfig), |
| make_unique<PairOnNetworkInstanceName>(credsIssuerConfig), |
| // TODO(#13973) - enable CommissionedListCommand once DNS Cache is implemented |
| // make_unique<CommissionedListCommand>(), |
| make_unique<StartUdcServerCommand>(credsIssuerConfig), |
| make_unique<OpenCommissioningWindowCommand>(credsIssuerConfig), |
| make_unique<GetCommissionerNodeIdCommand>(credsIssuerConfig), |
| make_unique<GetCommissionerRootCertificateCommand>(credsIssuerConfig), |
| make_unique<IssueNOCChainCommand>(credsIssuerConfig), |
| }; |
| |
| commands.RegisterCommandSet(clusterName, clusterCommands, "Commands for commissioning devices."); |
| } |