Commands.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. /*
  2. * Copyright (c) 2020 Project CHIP Authors
  3. * All rights reserved.
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. *
  17. */
  18. #pragma once
  19. #include "commands/common/Commands.h"
  20. #include "commands/pairing/GetCommissionerNodeIdCommand.h"
  21. #include "commands/pairing/GetCommissionerRootCertificateCommand.h"
  22. #include "commands/pairing/IssueNOCChainCommand.h"
  23. #include "commands/pairing/OpenCommissioningWindowCommand.h"
  24. #include "commands/pairing/PairingCommand.h"
  25. #include <app/server/Dnssd.h>
  26. #include <commands/common/CredentialIssuerCommands.h>
  27. #include <lib/dnssd/Resolver.h>
  28. class Unpair : public PairingCommand
  29. {
  30. public:
  31. Unpair(CredentialIssuerCommands * credsIssuerConfig) :
  32. PairingCommand("unpair", PairingMode::None, PairingNetworkType::None, credsIssuerConfig)
  33. {}
  34. };
  35. class PairCode : public PairingCommand
  36. {
  37. public:
  38. PairCode(CredentialIssuerCommands * credsIssuerConfig) :
  39. PairingCommand("code", PairingMode::Code, PairingNetworkType::None, credsIssuerConfig)
  40. {}
  41. };
  42. class PairCodePase : public PairingCommand
  43. {
  44. public:
  45. PairCodePase(CredentialIssuerCommands * credsIssuerConfig) :
  46. PairingCommand("code-paseonly", PairingMode::CodePaseOnly, PairingNetworkType::None, credsIssuerConfig)
  47. {}
  48. };
  49. class PairCodeWifi : public PairingCommand
  50. {
  51. public:
  52. PairCodeWifi(CredentialIssuerCommands * credsIssuerConfig) :
  53. PairingCommand("code-wifi", PairingMode::Code, PairingNetworkType::WiFi, credsIssuerConfig)
  54. {}
  55. };
  56. class PairCodeThread : public PairingCommand
  57. {
  58. public:
  59. PairCodeThread(CredentialIssuerCommands * credsIssuerConfig) :
  60. PairingCommand("code-thread", PairingMode::Code, PairingNetworkType::Thread, credsIssuerConfig)
  61. {}
  62. };
  63. class PairOnNetwork : public PairingCommand
  64. {
  65. public:
  66. PairOnNetwork(CredentialIssuerCommands * credsIssuerConfig) :
  67. PairingCommand("onnetwork", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig)
  68. {}
  69. };
  70. class PairOnNetworkShort : public PairingCommand
  71. {
  72. public:
  73. PairOnNetworkShort(CredentialIssuerCommands * credsIssuerConfig) :
  74. PairingCommand("onnetwork-short", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig,
  75. chip::Dnssd::DiscoveryFilterType::kShortDiscriminator)
  76. {}
  77. };
  78. class PairOnNetworkLong : public PairingCommand
  79. {
  80. public:
  81. PairOnNetworkLong(CredentialIssuerCommands * credsIssuerConfig) :
  82. PairingCommand("onnetwork-long", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig,
  83. chip::Dnssd::DiscoveryFilterType::kLongDiscriminator)
  84. {}
  85. };
  86. class PairOnNetworkVendor : public PairingCommand
  87. {
  88. public:
  89. PairOnNetworkVendor(CredentialIssuerCommands * credsIssuerConfig) :
  90. PairingCommand("onnetwork-vendor", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig,
  91. chip::Dnssd::DiscoveryFilterType::kVendorId)
  92. {}
  93. };
  94. class PairOnNetworkFabric : public PairingCommand
  95. {
  96. public:
  97. PairOnNetworkFabric(CredentialIssuerCommands * credsIssuerConfig) :
  98. PairingCommand("onnetwork-fabric", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig,
  99. chip::Dnssd::DiscoveryFilterType::kCompressedFabricId)
  100. {}
  101. };
  102. class PairOnNetworkCommissioningMode : public PairingCommand
  103. {
  104. public:
  105. PairOnNetworkCommissioningMode(CredentialIssuerCommands * credsIssuerConfig) :
  106. PairingCommand("onnetwork-commissioning-mode", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig,
  107. chip::Dnssd::DiscoveryFilterType::kCommissioningMode)
  108. {}
  109. };
  110. class PairOnNetworkCommissioner : public PairingCommand
  111. {
  112. public:
  113. PairOnNetworkCommissioner(CredentialIssuerCommands * credsIssuerConfig) :
  114. PairingCommand("onnetwork-commissioner", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig,
  115. chip::Dnssd::DiscoveryFilterType::kCommissioner)
  116. {}
  117. };
  118. class PairOnNetworkDeviceType : public PairingCommand
  119. {
  120. public:
  121. PairOnNetworkDeviceType(CredentialIssuerCommands * credsIssuerConfig) :
  122. PairingCommand("onnetwork-device-type", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig,
  123. chip::Dnssd::DiscoveryFilterType::kDeviceType)
  124. {}
  125. };
  126. class PairOnNetworkInstanceName : public PairingCommand
  127. {
  128. public:
  129. PairOnNetworkInstanceName(CredentialIssuerCommands * credsIssuerConfig) :
  130. PairingCommand("onnetwork-instance-name", PairingMode::OnNetwork, PairingNetworkType::None, credsIssuerConfig,
  131. chip::Dnssd::DiscoveryFilterType::kInstanceName)
  132. {}
  133. };
  134. class PairBleWiFi : public PairingCommand
  135. {
  136. public:
  137. PairBleWiFi(CredentialIssuerCommands * credsIssuerConfig) :
  138. PairingCommand("ble-wifi", PairingMode::Ble, PairingNetworkType::WiFi, credsIssuerConfig)
  139. {}
  140. };
  141. class PairBleThread : public PairingCommand
  142. {
  143. public:
  144. PairBleThread(CredentialIssuerCommands * credsIssuerConfig) :
  145. PairingCommand("ble-thread", PairingMode::Ble, PairingNetworkType::Thread, credsIssuerConfig)
  146. {}
  147. };
  148. class PairSoftAP : public PairingCommand
  149. {
  150. public:
  151. PairSoftAP(CredentialIssuerCommands * credsIssuerConfig) :
  152. PairingCommand("softap", PairingMode::SoftAP, PairingNetworkType::WiFi, credsIssuerConfig)
  153. {}
  154. };
  155. class PairAlreadyDiscovered : public PairingCommand
  156. {
  157. public:
  158. PairAlreadyDiscovered(CredentialIssuerCommands * credsIssuerConfig) :
  159. PairingCommand("already-discovered", PairingMode::AlreadyDiscovered, PairingNetworkType::None, credsIssuerConfig)
  160. {}
  161. };
  162. class PairAlreadyDiscoveredByIndex : public PairingCommand
  163. {
  164. public:
  165. PairAlreadyDiscoveredByIndex(CredentialIssuerCommands * credsIssuerConfig) :
  166. PairingCommand("already-discovered-by-index", PairingMode::AlreadyDiscoveredByIndex, PairingNetworkType::None,
  167. credsIssuerConfig)
  168. {}
  169. };
  170. class PairAlreadyDiscoveredByIndexWithWiFi : public PairingCommand
  171. {
  172. public:
  173. PairAlreadyDiscoveredByIndexWithWiFi(CredentialIssuerCommands * credsIssuerConfig) :
  174. PairingCommand("already-discovered-by-index-with-wifi", PairingMode::AlreadyDiscoveredByIndex, PairingNetworkType::WiFi,
  175. credsIssuerConfig)
  176. {}
  177. };
  178. class PairAlreadyDiscoveredByIndexWithCode : public PairingCommand
  179. {
  180. public:
  181. PairAlreadyDiscoveredByIndexWithCode(CredentialIssuerCommands * credsIssuerConfig) :
  182. PairingCommand("already-discovered-by-index-with-code", PairingMode::AlreadyDiscoveredByIndexWithCode,
  183. PairingNetworkType::None, credsIssuerConfig)
  184. {}
  185. };
  186. class StartUdcServerCommand : public CHIPCommand
  187. {
  188. public:
  189. StartUdcServerCommand(CredentialIssuerCommands * credsIssuerConfig) : CHIPCommand("start-udc-server", credsIssuerConfig) {}
  190. chip::System::Clock::Timeout GetWaitDuration() const override { return chip::System::Clock::Seconds16(300); }
  191. CHIP_ERROR RunCommand() override
  192. {
  193. chip::app::DnssdServer::Instance().StartServer(chip::Dnssd::CommissioningMode::kDisabled);
  194. return CHIP_NO_ERROR;
  195. }
  196. };
  197. void registerCommandsPairing(Commands & commands, CredentialIssuerCommands * credsIssuerConfig)
  198. {
  199. const char * clusterName = "Pairing";
  200. commands_list clusterCommands = {
  201. make_unique<Unpair>(credsIssuerConfig),
  202. make_unique<PairCode>(credsIssuerConfig),
  203. make_unique<PairCodePase>(credsIssuerConfig),
  204. make_unique<PairCodeWifi>(credsIssuerConfig),
  205. make_unique<PairCodeThread>(credsIssuerConfig),
  206. make_unique<PairBleWiFi>(credsIssuerConfig),
  207. make_unique<PairBleThread>(credsIssuerConfig),
  208. make_unique<PairSoftAP>(credsIssuerConfig),
  209. make_unique<PairAlreadyDiscovered>(credsIssuerConfig),
  210. make_unique<PairAlreadyDiscoveredByIndex>(credsIssuerConfig),
  211. make_unique<PairAlreadyDiscoveredByIndexWithWiFi>(credsIssuerConfig),
  212. make_unique<PairAlreadyDiscoveredByIndexWithCode>(credsIssuerConfig),
  213. make_unique<PairOnNetwork>(credsIssuerConfig),
  214. make_unique<PairOnNetworkShort>(credsIssuerConfig),
  215. make_unique<PairOnNetworkLong>(credsIssuerConfig),
  216. make_unique<PairOnNetworkVendor>(credsIssuerConfig),
  217. make_unique<PairOnNetworkCommissioningMode>(credsIssuerConfig),
  218. make_unique<PairOnNetworkCommissioner>(credsIssuerConfig),
  219. make_unique<PairOnNetworkDeviceType>(credsIssuerConfig),
  220. make_unique<PairOnNetworkInstanceName>(credsIssuerConfig),
  221. // TODO(#13973) - enable CommissionedListCommand once DNS Cache is implemented
  222. // make_unique<CommissionedListCommand>(),
  223. make_unique<StartUdcServerCommand>(credsIssuerConfig),
  224. make_unique<OpenCommissioningWindowCommand>(credsIssuerConfig),
  225. make_unique<GetCommissionerNodeIdCommand>(credsIssuerConfig),
  226. make_unique<GetCommissionerRootCertificateCommand>(credsIssuerConfig),
  227. make_unique<IssueNOCChainCommand>(credsIssuerConfig),
  228. };
  229. commands.RegisterCommandSet(clusterName, clusterCommands, "Commands for commissioning devices.");
  230. }