/** * Copyright (c) 2023 Project CHIP Authors * * 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. */ #import #import #import #import NS_ASSUME_NONNULL_BEGIN /** * Parameters that can be used to initialize an MTRDeviceController. Specific * interfaces inheriting from this one should be used to actually do the * initialization. */ MTR_AVAILABLE(ios(17.6), macos(14.6), watchos(10.6), tvos(17.6)) @interface MTRDeviceControllerAbstractParameters : NSObject - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; /** * Whether the controller should start out suspended. * * Defaults to NO. */ @property (nonatomic, assign) BOOL startSuspended; @end /** * Parameters that can be used to initialize an MTRDeviceController which * has a node identity. */ MTR_AVAILABLE(ios(17.6), macos(14.6), watchos(10.6), tvos(17.6)) @interface MTRDeviceControllerParameters : MTRDeviceControllerAbstractParameters /** * The Product Attestation Authority certificates that are trusted to sign * device attestation information (and in particular to sign Product Attestation * Intermediate certificates, which then sign Device Attestation Certificates). * * Defaults to nil. */ @property (nonatomic, copy, nullable) NSArray * productAttestationAuthorityCertificates; /** * The Certification Declaration certificates whose public keys correspond to * private keys that are trusted to sign certification declarations. Defaults * to nil. * * These certificates are used in addition to, not replacing, the default set of * well-known certification declaration signing keys. */ @property (nonatomic, copy, nullable) NSArray * certificationDeclarationCertificates; /** * Whether the controller should advertise its operational identity. Defaults * to NO. */ @property (nonatomic, assign) BOOL shouldAdvertiseOperational; /** * Set an MTROperationalCertificateIssuer to call (on the provided queue) when * operational certificates need to be provided during commissioning. */ - (void)setOperationalCertificateIssuer:(id)operationalCertificateIssuer queue:(dispatch_queue_t)queue; /** * Set an MTROTAProviderDelegate to call (on the provided queue). Only needs to * be called if this controller should be able to handle OTA for devices. */ - (void)setOTAProviderDelegate:(id)otaProviderDelegate queue:(dispatch_queue_t)queue; /** * Sets the maximum simultaneous subscription establishments that can be happening * at one time for devices on Thread. This defaults to a large number. * * If this value is 0, the maximum subscription establishments allowed at a time will be set to 1. */ @property (nonatomic, assign) NSUInteger concurrentSubscriptionEstablishmentsAllowedOnThread MTR_AVAILABLE(ios(17.6), macos(14.6), watchos(10.6), tvos(17.6)); /** * Sets the storage behavior configuration - see MTRDeviceStorageBehaviorConfiguration.h for details * * If this value is nil, a default storage behavior configuration will be used. */ @property (nonatomic, copy, nullable) MTRDeviceStorageBehaviorConfiguration * storageBehaviorConfiguration; @end MTR_AVAILABLE(ios(17.6), macos(14.6), watchos(10.6), tvos(17.6)) @interface MTRDeviceControllerExternalCertificateParameters : MTRDeviceControllerParameters - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; /** * Prepare to initialize a controller that is not able to sign operational * certificates itself, and therefore needs to be provided with a complete * operational certificate chain. * * A controller created from MTRDeviceControllerStartupParams initialized with * this method will not be able to commission devices unless * operationalCertificateIssuer and operationalCertificateIssuerQueue are set. * * The fabric id and node id to use for the controller will be derived from the provided * operationalCertificate. * * @param storageDelegate The storage to use for the controller. This will be * called into on storageDelegateQueue. * * @param storageDelegateQueue The queue for calls into storageDelegate. See * MTRDeviceControllerStorageDelegate documentation * for the rules about what work is allowed to be * done on this queue. * * @param uniqueIdentifier The unique id to assign to the controller. * * @param vendorID The vendor ID (allocated by the Connectivity Standards Alliance) for * this controller. Must not be the "standard" vendor id (0). * * @param ipk The Identity Protection Key. Must be 16 bytes in length. * * @param intermediateCertificate Must be nil if operationalCertificate is * directly signed by rootCertificate. Otherwise * must be the certificate that signed * operationalCertificate. */ - (instancetype)initWithStorageDelegate:(id)storageDelegate storageDelegateQueue:(dispatch_queue_t)storageDelegateQueue uniqueIdentifier:(NSUUID *)uniqueIdentifier ipk:(NSData *)ipk vendorID:(NSNumber *)vendorID operationalKeypair:(id)operationalKeypair operationalCertificate:(MTRCertificateDERBytes)operationalCertificate intermediateCertificate:(MTRCertificateDERBytes _Nullable)intermediateCertificate rootCertificate:(MTRCertificateDERBytes)rootCertificate; /** * The root certificate we were initialized with. */ @property (nonatomic, copy, readonly) MTRCertificateDERBytes rootCertificate MTR_NEWLY_AVAILABLE; @end MTR_NEWLY_AVAILABLE @interface MTRXPCDeviceControllerParameters : MTRDeviceControllerAbstractParameters - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; /** * A controller created from this way will connect to a remote instance of an MTRDeviceController loaded in an XPC Service * * @param xpcConnectionBlock The XPC Connection block that will return an NSXPCConnection to the intended listener. * * @param uniqueIdentifier The unique id to assign to the controller. * */ - (instancetype)initWithXPConnectionBlock:(NSXPCConnection * (^)(void) )xpcConnectionBlock uniqueIdentifier:(NSUUID *)uniqueIdentifier; @property (atomic, readonly, retain) NSUUID * uniqueIdentifier MTR_NEWLY_AVAILABLE; @property (readonly, strong, nonatomic) NSXPCConnection * (^xpcConnectionBlock)(void) MTR_NEWLY_AVAILABLE; @end NS_ASSUME_NONNULL_END