blob: 171c91c889a493d685b6fc852c3ad1526ce3dd18 [file] [log] [blame]
/**
* 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 <Matter/MTRDefines.h>
#import <Matter/MTRDeviceControllerStorageDelegate.h>
#import <Matter/MTRDeviceStorageBehaviorConfiguration.h>
#import <Matter/MTROTAProviderDelegate.h>
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<MTRCertificateDERBytes> * 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<MTRCertificateDERBytes> * 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<MTROperationalCertificateIssuer>)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<MTROTAProviderDelegate>)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<MTRDeviceControllerStorageDelegate>)storageDelegate
storageDelegateQueue:(dispatch_queue_t)storageDelegateQueue
uniqueIdentifier:(NSUUID *)uniqueIdentifier
ipk:(NSData *)ipk
vendorID:(NSNumber *)vendorID
operationalKeypair:(id<MTRKeypair>)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 indended 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