From 177695e4f88c2dd6c0c245962ff97c056cca98cd Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 6 Aug 2024 16:43:23 -0700 Subject: [PATCH 01/27] Keep MTRDeviceController.mm --- ...TRDeviceController.mm-move-to-MTRDeviceController_Concrete.mm} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/darwin/Framework/CHIP/{MTRDeviceController.mm => MTRDeviceController.mm-move-to-MTRDeviceController_Concrete.mm} (100%) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm-move-to-MTRDeviceController_Concrete.mm similarity index 100% rename from src/darwin/Framework/CHIP/MTRDeviceController.mm rename to src/darwin/Framework/CHIP/MTRDeviceController.mm-move-to-MTRDeviceController_Concrete.mm From 162d16216f6c45f85c29968afbd602a84cef1b53 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 6 Aug 2024 16:43:23 -0700 Subject: [PATCH 02/27] Copy MTRDeviceController.mm into MTRDeviceController_Concrete.mm --- .../{MTRDeviceController.mm => MTRDeviceController_Concrete.mm} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/darwin/Framework/CHIP/{MTRDeviceController.mm => MTRDeviceController_Concrete.mm} (100%) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm similarity index 100% rename from src/darwin/Framework/CHIP/MTRDeviceController.mm rename to src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm From b056fceec03547a97567577ab8ad23fb7f8c0454 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 6 Aug 2024 16:43:23 -0700 Subject: [PATCH 03/27] Set back MTRDeviceController.mm file --- ...-to-MTRDeviceController_Concrete.mm => MTRDeviceController.mm} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/darwin/Framework/CHIP/{MTRDeviceController.mm-move-to-MTRDeviceController_Concrete.mm => MTRDeviceController.mm} (100%) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm-move-to-MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm similarity index 100% rename from src/darwin/Framework/CHIP/MTRDeviceController.mm-move-to-MTRDeviceController_Concrete.mm rename to src/darwin/Framework/CHIP/MTRDeviceController.mm From c42b2f5ecea940f6702f95d9c12f5d6c1d875f8e Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 6 Aug 2024 16:43:29 -0700 Subject: [PATCH 04/27] Keep MTRDeviceController.h --- ... MTRDeviceController.h-move-to-MTRDeviceController_Concrete.h} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/darwin/Framework/CHIP/{MTRDeviceController.h => MTRDeviceController.h-move-to-MTRDeviceController_Concrete.h} (100%) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.h b/src/darwin/Framework/CHIP/MTRDeviceController.h-move-to-MTRDeviceController_Concrete.h similarity index 100% rename from src/darwin/Framework/CHIP/MTRDeviceController.h rename to src/darwin/Framework/CHIP/MTRDeviceController.h-move-to-MTRDeviceController_Concrete.h From 478be89b57f4f6925045e65d5203cdf43926a459 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 6 Aug 2024 16:43:29 -0700 Subject: [PATCH 05/27] Copy MTRDeviceController.h into MTRDeviceController_Concrete.h --- .../{MTRDeviceController.h => MTRDeviceController_Concrete.h} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/darwin/Framework/CHIP/{MTRDeviceController.h => MTRDeviceController_Concrete.h} (100%) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.h b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h similarity index 100% rename from src/darwin/Framework/CHIP/MTRDeviceController.h rename to src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h From fea5da665fd189e69f4fce5a2795dace6b5365a6 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 6 Aug 2024 16:43:30 -0700 Subject: [PATCH 06/27] Set back MTRDeviceController.h file --- ...ve-to-MTRDeviceController_Concrete.h => MTRDeviceController.h} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/darwin/Framework/CHIP/{MTRDeviceController.h-move-to-MTRDeviceController_Concrete.h => MTRDeviceController.h} (100%) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.h-move-to-MTRDeviceController_Concrete.h b/src/darwin/Framework/CHIP/MTRDeviceController.h similarity index 100% rename from src/darwin/Framework/CHIP/MTRDeviceController.h-move-to-MTRDeviceController_Concrete.h rename to src/darwin/Framework/CHIP/MTRDeviceController.h From 3b98dcf0f8cb01f014debec0c09935278892ad46 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 6 Aug 2024 16:56:21 -0700 Subject: [PATCH 07/27] add `MTRDeviceController_Concrete` files --- src/darwin/Framework/Matter.xcodeproj/project.pbxproj | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index 055a6c9efbcc3e..26e928eff14fe1 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -302,6 +302,8 @@ 99AECC802798A57F00B6355B /* MTRCommissioningParameters.mm in Sources */ = {isa = PBXBuildFile; fileRef = 99AECC7F2798A57E00B6355B /* MTRCommissioningParameters.mm */; }; 99C65E10267282F1003402F6 /* MTRControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C65E0F267282F1003402F6 /* MTRControllerTests.m */; }; 99D466E12798936D0089A18F /* MTRCommissioningParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 99D466E02798936D0089A18F /* MTRCommissioningParameters.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B231B042C62EF650030EB37 /* MTRDeviceController_Concrete.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B231B022C62EF650030EB37 /* MTRDeviceController_Concrete.h */; }; + 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */; }; AF1CB86E2874B03B00865A96 /* MTROTAProviderDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1CB86D2874B03B00865A96 /* MTROTAProviderDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; AF1CB8702874B04C00865A96 /* MTROTAProviderDelegateBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1CB86F2874B04C00865A96 /* MTROTAProviderDelegateBridge.h */; }; AF5F90FF2878D351005503FA /* MTROTAProviderDelegateBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = AF5F90FE2878D351005503FA /* MTROTAProviderDelegateBridge.mm */; }; @@ -729,6 +731,8 @@ 99AECC7F2798A57E00B6355B /* MTRCommissioningParameters.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRCommissioningParameters.mm; sourceTree = ""; }; 99C65E0F267282F1003402F6 /* MTRControllerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRControllerTests.m; sourceTree = ""; }; 99D466E02798936D0089A18F /* MTRCommissioningParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRCommissioningParameters.h; sourceTree = ""; }; + 9B231B022C62EF650030EB37 /* MTRDeviceController_Concrete.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceController_Concrete.h; sourceTree = ""; }; + 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceController_Concrete.mm; sourceTree = ""; }; AF1CB86D2874B03B00865A96 /* MTROTAProviderDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTROTAProviderDelegate.h; sourceTree = ""; }; AF1CB86F2874B04C00865A96 /* MTROTAProviderDelegateBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTROTAProviderDelegateBridge.h; sourceTree = ""; }; AF5F90FE2878D351005503FA /* MTROTAProviderDelegateBridge.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTROTAProviderDelegateBridge.mm; sourceTree = ""; }; @@ -1238,6 +1242,8 @@ B202528F2459E34F00F97062 /* CHIP */ = { isa = PBXGroup; children = ( + 9B231B022C62EF650030EB37 /* MTRDeviceController_Concrete.h */, + 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */, 88E07D602B9A89A4005FD53E /* MTRMetricKeys.h */, 88FA798B2B7B257100CD4B6F /* MTRMetricsCollector.h */, 88FA798C2B7B257100CD4B6F /* MTRMetricsCollector.mm */, @@ -1669,6 +1675,7 @@ 51E51FC0282AD37A00FC978D /* MTRDeviceControllerStartupParams_Internal.h in Headers */, 3DECCB702934AECD00585AEC /* MTRLogging.h in Headers */, 1E4D654E29C208DD00BC3478 /* MTRCommissionableBrowserResult.h in Headers */, + 9B231B042C62EF650030EB37 /* MTRDeviceController_Concrete.h in Headers */, 515BE4ED2B72C0C5000BC1FD /* MTRUnfairLock.h in Headers */, 998F286F26D55EC5001846C6 /* MTRP256KeypairBridge.h in Headers */, 2C222ADF255C811800E446B9 /* MTRBaseDevice_Internal.h in Headers */, @@ -1979,6 +1986,7 @@ 511913FB28C100EF009235E9 /* MTRBaseSubscriptionCallback.mm in Sources */, 510470FB2A2F7DF60053EA7E /* MTRBackwardsCompatShims.mm in Sources */, 5173A47629C0E2ED00F67F48 /* MTRFabricInfo.mm in Sources */, + 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */, 5ACDDD7D27CD16D200EFD68A /* MTRClusterStateCacheContainer.mm in Sources */, 75B3269E2BCDB9EA00E17C4E /* MTRDeviceConnectivityMonitor.mm in Sources */, 513DDB8A2761F6F900DAA01A /* MTRAttributeTLVValueDecoder.mm in Sources */, From 0df0bad8bd79acfb6c4e12068a5503520bd71fae Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 6 Aug 2024 18:12:44 -0700 Subject: [PATCH 08/27] WIP: bring up `MTRDeviceController_Concrete` --- .../CHIP/MTRDeviceController_Concrete.h | 8 +- .../CHIP/MTRDeviceController_Concrete.mm | 185 ++++++++++-------- .../CHIP/MTRDeviceController_Internal.h | 21 ++ 3 files changed, 132 insertions(+), 82 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h index eaae1fcf7d4c6a..ac85b2faa50a52 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h @@ -38,14 +38,14 @@ typedef void (^MTRDeviceConnectionCallback)(MTRBaseDevice * _Nullable device, NS @protocol MTRDeviceControllerDelegate; MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) -@interface MTRDeviceController : NSObject +@interface MTRDeviceController_Concrete : MTRDeviceController /** * Controllers are created via the MTRDeviceControllerFactory object or * initialized via initWithParameters:error:. */ -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; +//- (instancetype)init NS_UNAVAILABLE; +//+ (instancetype)new NS_UNAVAILABLE; /** * Initialize a device controller with the provided parameters. This will: @@ -262,7 +262,7 @@ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) @end -@interface MTRDeviceController (Deprecated) +@interface MTRDeviceController_Concrete (Deprecated) @property (readonly, nonatomic, nullable) NSNumber * controllerNodeId MTR_DEPRECATED( "Please use controllerNodeID", ios(16.1, 16.4), macos(13.0, 13.3), watchos(9.1, 9.4), tvos(16.1, 16.4)); diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 2e4bb6d4fb0400..e22c8477b14ea2 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -26,6 +26,7 @@ #import "MTRCommissionableBrowserResult_Internal.h" #import "MTRCommissioningParameters.h" #import "MTRConversion.h" +#import "MTRDeviceController_Concrete.h" #import "MTRDeviceControllerDelegateBridge.h" #import "MTRDeviceControllerFactory_Internal.h" #import "MTRDeviceControllerLocalTestStorage.h" @@ -78,59 +79,87 @@ #import -static NSString * const kErrorCommissionerInit = @"Init failure while initializing a commissioner"; -static NSString * const kErrorIPKInit = @"Init failure while initializing IPK"; -static NSString * const kErrorSigningKeypairInit = @"Init failure while creating signing keypair bridge"; -static NSString * const kErrorOperationalCredentialsInit = @"Init failure while creating operational credentials delegate"; -static NSString * const kErrorOperationalKeypairInit = @"Init failure while creating operational keypair bridge"; -static NSString * const kErrorPairingInit = @"Init failure while creating a pairing delegate"; -static NSString * const kErrorPartialDacVerifierInit = @"Init failure while creating a partial DAC verifier"; -static NSString * const kErrorPairDevice = @"Failure while pairing the device"; -static NSString * const kErrorStopPairing = @"Failure while trying to stop the pairing process"; -static NSString * const kErrorOpenPairingWindow = @"Open Pairing Window failed"; -static NSString * const kErrorNotRunning = @"Controller is not running. Call startup first."; -static NSString * const kErrorSetupCodeGen = @"Generating Manual Pairing Code failed"; -static NSString * const kErrorGenerateNOC = @"Generating operational certificate failed"; -static NSString * const kErrorKeyAllocation = @"Generating new operational key failed"; -static NSString * const kErrorCSRValidation = @"Extracting public key from CSR failed"; -static NSString * const kErrorGetCommissionee = @"Failure obtaining device being commissioned"; -static NSString * const kErrorGetAttestationChallenge = @"Failure getting attestation challenge"; -static NSString * const kErrorSpake2pVerifierGenerationFailed = @"PASE verifier generation failed"; -static NSString * const kErrorSpake2pVerifierSerializationFailed = @"PASE verifier serialization failed"; -static NSString * const kErrorCDCertStoreInit = @"Init failure while initializing Certificate Declaration Signing Keys store"; - typedef void (^SyncWorkQueueBlock)(void); typedef id (^SyncWorkQueueBlockWithReturnValue)(void); typedef BOOL (^SyncWorkQueueBlockWithBoolReturnValue)(void); using namespace chip::Tracing::DarwinFramework; -@implementation MTRDeviceController { - // Atomic because it can be touched from multiple threads. - std::atomic _storedFabricIndex; - // queue used to serialize all work performed by the MTRDeviceController - dispatch_queue_t _chipWorkQueue; +@interface MTRDeviceController_Concrete () - chip::Controller::DeviceCommissioner * _cppCommissioner; - chip::Credentials::PartialDACVerifier * _partialDACVerifier; - chip::Credentials::DefaultDACVerifier * _defaultDACVerifier; - MTRDeviceControllerDelegateBridge * _deviceControllerDelegateBridge; - MTROperationalCredentialsDelegate * _operationalCredentialsDelegate; - MTRP256KeypairBridge _signingKeypairBridge; - MTRP256KeypairBridge _operationalKeypairBridge; - MTRDeviceAttestationDelegateBridge * _deviceAttestationDelegateBridge; - MTRDeviceControllerFactory * _factory; - NSMapTable * _nodeIDToDeviceMap; - os_unfair_lock _deviceMapLock; // protects nodeIDToDeviceMap - MTRCommissionableBrowser * _commissionableBrowser; - MTRAttestationTrustStoreBridge * _attestationTrustStoreBridge; +// MTRDeviceController ivar internal access - // _serverEndpoints is only touched on the Matter queue. - NSMutableArray * _serverEndpoints; +//@property (nonatomic, readonly) std::atomic storedFabricIndex; + +@property (nonatomic, readonly) chip::Controller::DeviceCommissioner * cppCommissioner; +@property (nonatomic, readonly) chip::Credentials::PartialDACVerifier * partialDACVerifier; +@property (nonatomic, readonly) chip::Credentials::DefaultDACVerifier * defaultDACVerifier; +@property (nonatomic, readonly) MTRDeviceControllerDelegateBridge * deviceControllerDelegateBridge; +@property (nonatomic, readonly) MTROperationalCredentialsDelegate * operationalCredentialsDelegate; +@property (nonatomic, readonly) MTRP256KeypairBridge signingKeypairBridge; +@property (nonatomic, readonly) MTRP256KeypairBridge operationalKeypairBridge; +@property (nonatomic, readonly) MTRDeviceAttestationDelegateBridge * deviceAttestationDelegateBridge; +@property (nonatomic, readwrite) NSUUID * uniqueIdentifier; +@property (nonatomic, readwrite) dispatch_queue_t chipWorkQueue; +@property (nonatomic, readwrite, nullable) MTRDeviceControllerFactory * factory; +@property (nonatomic, readwrite, nullable) NSMapTable * nodeIDToDeviceMap; +@property (nonatomic, readwrite) os_unfair_lock deviceMapLock; +@property (nonatomic, readonly, nullable) id otaProviderDelegate; +@property (nonatomic, readonly, nullable) dispatch_queue_t otaProviderDelegateQueue; +@property (nonatomic, readonly, nullable) MTRCommissionableBrowser * commissionableBrowser; +@property (nonatomic, readonly, nullable) MTRAttestationTrustStoreBridge * attestationTrustStoreBridge; +@property (nonatomic, readonly, nullable) NSMutableArray * serverEndpoints; + +@property (nonatomic, readonly) MTRAsyncWorkQueue * concurrentSubscriptionPool; + +@property (nonatomic, readonly) MTRDeviceStorageBehaviorConfiguration * storageBehaviorConfiguration; + + +@end + + +@implementation MTRDeviceController_Concrete { +// // Atomic because it can be touched from multiple threads. +// std::atomic _storedFabricIndex; +// +// // queue used to serialize all work performed by the MTRDeviceController +// dispatch_queue_t _chipWorkQueue; +// +// chip::Controller::DeviceCommissioner * _cppCommissioner; +// chip::Credentials::PartialDACVerifier * _partialDACVerifier; +// chip::Credentials::DefaultDACVerifier * _defaultDACVerifier; +// MTRDeviceControllerDelegateBridge * _deviceControllerDelegateBridge; +// MTROperationalCredentialsDelegate * _operationalCredentialsDelegate; +// MTRP256KeypairBridge _signingKeypairBridge; +// MTRP256KeypairBridge _operationalKeypairBridge; +// MTRDeviceAttestationDelegateBridge * _deviceAttestationDelegateBridge; +// MTRDeviceControllerFactory * _factory; +// NSMapTable * _nodeIDToDeviceMap; +// os_unfair_lock _deviceMapLock; // protects nodeIDToDeviceMap +// MTRCommissionableBrowser * _commissionableBrowser; +// MTRAttestationTrustStoreBridge * _attestationTrustStoreBridge; +// +// // _serverEndpoints is only touched on the Matter queue. +// NSMutableArray * _serverEndpoints; +// +// MTRDeviceStorageBehaviorConfiguration * _storageBehaviorConfiguration; +} + +// MTRDeviceController ivar internal access +@synthesize uniqueIdentifier = _uniqueIdentifier; +@synthesize chipWorkQueue = _chipWorkQueue; +@synthesize controllerDataStore = _controllerDataStore; +@synthesize factory = _factory; +@synthesize deviceMapLock = _deviceMapLock; +@synthesize otaProviderDelegate = _otaProviderDelegate; +@synthesize otaProviderDelegateQueue = _otaProviderDelegateQueue; +@synthesize commissionableBrowser = _commissionableBrowser; +@synthesize concurrentSubscriptionPool = _concurrentSubscriptionPool; + + +//@synthesize uniqueIdentifier = _uniqueIdentifier; - MTRDeviceStorageBehaviorConfiguration * _storageBehaviorConfiguration; -} - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { @@ -241,17 +270,17 @@ - (instancetype)initWithFactory:(MTRDeviceControllerFactory *)factory _commissionableBrowser = nil; _deviceControllerDelegateBridge = new MTRDeviceControllerDelegateBridge(); - if ([self checkForInitError:(_deviceControllerDelegateBridge != nullptr) logMsg:kErrorPairingInit]) { + if ([self checkForInitError:(_deviceControllerDelegateBridge != nullptr) logMsg:kDeviceControllerErrorPairingInit]) { return nil; } _partialDACVerifier = new chip::Credentials::PartialDACVerifier(); - if ([self checkForInitError:(_partialDACVerifier != nullptr) logMsg:kErrorPartialDacVerifierInit]) { + if ([self checkForInitError:(_partialDACVerifier != nullptr) logMsg:kDeviceControllerErrorPartialDacVerifierInit]) { return nil; } _operationalCredentialsDelegate = new MTROperationalCredentialsDelegate(self); - if ([self checkForInitError:(_operationalCredentialsDelegate != nullptr) logMsg:kErrorOperationalCredentialsInit]) { + if ([self checkForInitError:(_operationalCredentialsDelegate != nullptr) logMsg:kDeviceControllerErrorOperationalCredentialsInit]) { return nil; } @@ -437,14 +466,14 @@ - (BOOL)startup:(MTRDeviceControllerStartupParamsInternal *)startupParams chip::Crypto::P256Keypair * signingKeypair = nullptr; if (startupParams.nocSigner) { errorCode = _signingKeypairBridge.Init(startupParams.nocSigner); - if ([self checkForStartError:errorCode logMsg:kErrorSigningKeypairInit]) { + if ([self checkForStartError:errorCode logMsg:kDeviceControllerErrorSigningKeypairInit]) { return; } signingKeypair = &_signingKeypairBridge; } errorCode = _operationalCredentialsDelegate->Init( signingKeypair, startupParams.ipk, startupParams.rootCertificate, startupParams.intermediateCertificate); - if ([self checkForStartError:errorCode logMsg:kErrorOperationalCredentialsInit]) { + if ([self checkForStartError:errorCode logMsg:kDeviceControllerErrorOperationalCredentialsInit]) { return; } @@ -468,7 +497,7 @@ - (BOOL)startup:(MTRDeviceControllerStartupParamsInternal *)startupParams if (startupParams.operationalKeypair != nil) { errorCode = _operationalKeypairBridge.Init(startupParams.operationalKeypair); - if ([self checkForStartError:errorCode logMsg:kErrorOperationalKeypairInit]) { + if ([self checkForStartError:errorCode logMsg:kDeviceControllerErrorOperationalKeypairInit]) { return; } commissionerParams.operationalKeypair = &_operationalKeypairBridge; @@ -493,7 +522,7 @@ - (BOOL)startup:(MTRDeviceControllerStartupParamsInternal *)startupParams errorCode = _operationalCredentialsDelegate->GenerateNOC(startupParams.nodeID.unsignedLongLongValue, startupParams.fabricID.unsignedLongLongValue, cats, commissionerParams.operationalKeypair->Pubkey(), noc); - if ([self checkForStartError:errorCode logMsg:kErrorGenerateNOC]) { + if ([self checkForStartError:errorCode logMsg:kDeviceControllerErrorGenerateNOC]) { return; } } else { @@ -501,20 +530,20 @@ - (BOOL)startup:(MTRDeviceControllerStartupParamsInternal *)startupParams uint8_t csrBuffer[chip::Crypto::kMIN_CSR_Buffer_Size]; chip::MutableByteSpan csr(csrBuffer); errorCode = startupParams.fabricTable->AllocatePendingOperationalKey(startupParams.fabricIndex, csr); - if ([self checkForStartError:errorCode logMsg:kErrorKeyAllocation]) { + if ([self checkForStartError:errorCode logMsg:kDeviceControllerErrorKeyAllocation]) { return; } chip::Crypto::P256PublicKey pubKey; errorCode = VerifyCertificateSigningRequest(csr.data(), csr.size(), pubKey); - if ([self checkForStartError:errorCode logMsg:kErrorCSRValidation]) { + if ([self checkForStartError:errorCode logMsg:kDeviceControllerErrorCSRValidation]) { return; } errorCode = _operationalCredentialsDelegate->GenerateNOC( startupParams.nodeID.unsignedLongLongValue, startupParams.fabricID.unsignedLongLongValue, cats, pubKey, noc); - if ([self checkForStartError:errorCode logMsg:kErrorGenerateNOC]) { + if ([self checkForStartError:errorCode logMsg:kDeviceControllerErrorGenerateNOC]) { return; } } @@ -552,13 +581,13 @@ - (BOOL)startup:(MTRDeviceControllerStartupParamsInternal *)startupParams if (cdTrustStore == nullptr) { errorCode = CHIP_ERROR_INCORRECT_STATE; } - if ([self checkForStartError:errorCode logMsg:kErrorCDCertStoreInit]) { + if ([self checkForStartError:errorCode logMsg:kDeviceControllerErrorCDCertStoreInit]) { return; } for (NSData * cdSigningCert in startupParams.certificationDeclarationCertificates) { errorCode = cdTrustStore->AddTrustedKey(AsByteSpan(cdSigningCert)); - if ([self checkForStartError:errorCode logMsg:kErrorCDCertStoreInit]) { + if ([self checkForStartError:errorCode logMsg:kDeviceControllerErrorCDCertStoreInit]) { return; } } @@ -569,7 +598,7 @@ - (BOOL)startup:(MTRDeviceControllerStartupParamsInternal *)startupParams auto & factory = chip::Controller::DeviceControllerFactory::GetInstance(); errorCode = factory.SetupCommissioner(commissionerParams, *_cppCommissioner); - if ([self checkForStartError:errorCode logMsg:kErrorCommissionerInit]) { + if ([self checkForStartError:errorCode logMsg:kDeviceControllerErrorCommissionerInit]) { return; } @@ -578,13 +607,13 @@ - (BOOL)startup:(MTRDeviceControllerStartupParamsInternal *)startupParams uint8_t compressedIdBuffer[sizeof(uint64_t)]; chip::MutableByteSpan compressedId(compressedIdBuffer); errorCode = _cppCommissioner->GetCompressedFabricIdBytes(compressedId); - if ([self checkForStartError:errorCode logMsg:kErrorIPKInit]) { + if ([self checkForStartError:errorCode logMsg:kDeviceControllerErrorIPKInit]) { return; } errorCode = chip::Credentials::SetSingleIpkEpochKey( _factory.groupDataProvider, fabricIdx, _operationalCredentialsDelegate->GetIPK(), compressedId); - if ([self checkForStartError:errorCode logMsg:kErrorIPKInit]) { + if ([self checkForStartError:errorCode logMsg:kDeviceControllerErrorIPKInit]) { return; } @@ -687,7 +716,7 @@ - (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload } if (pairingCode == nil) { errorCode = CHIP_ERROR_INVALID_ARGUMENT; - return ![MTRDeviceController checkForError:errorCode logMsg:kErrorSetupCodeGen error:error]; + return ![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorSetupCodeGen error:error]; } chip::NodeId nodeId = [newNodeID unsignedLongLongValue]; @@ -701,7 +730,7 @@ - (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload MATTER_LOG_METRIC_END(kMetricSetupPASESession, errorCode); } - return ![MTRDeviceController checkForError:errorCode logMsg:kErrorPairDevice error:error]; + return ![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorPairDevice error:error]; }; auto success = [self syncRunOnWorkQueueWithBoolReturnValue:block error:error]; @@ -757,7 +786,7 @@ - (BOOL)setupCommissioningSessionWithDiscoveredDevice:(MTRCommissionableBrowserR } if (pairingCode == nil) { errorCode = CHIP_ERROR_INVALID_ARGUMENT; - return ![MTRDeviceController checkForError:errorCode logMsg:kErrorSetupCodeGen error:error]; + return ![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorSetupCodeGen error:error]; } for (id key in discoveredDevice.interfaces) { @@ -778,7 +807,7 @@ - (BOOL)setupCommissioningSessionWithDiscoveredDevice:(MTRCommissionableBrowserR } } - return ![MTRDeviceController checkForError:errorCode logMsg:kErrorPairDevice error:error]; + return ![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorPairDevice error:error]; }; auto success = [self syncRunOnWorkQueueWithBoolReturnValue:block error:error]; @@ -885,7 +914,7 @@ - (BOOL)commissionNodeWithID:(NSNumber *)nodeID self->_operationalCredentialsDelegate->SetDeviceID(deviceId); auto errorCode = self->_cppCommissioner->Commission(deviceId, params); MATTER_LOG_METRIC(kMetricCommissionNode, errorCode); - return ![MTRDeviceController checkForError:errorCode logMsg:kErrorPairDevice error:error]; + return ![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorPairDevice error:error]; }; return [self syncRunOnWorkQueueWithBoolReturnValue:block error:error]; @@ -905,7 +934,7 @@ - (BOOL)continueCommissioningDevice:(void *)device ignoreAttestationFailure ? chip::Credentials::AttestationVerificationResult::kSuccess : lastAttestationResult); // Emit metric on stage after continuing post attestation MATTER_LOG_METRIC(kMetricContinueCommissioningAfterAttestation, errorCode); - return ![MTRDeviceController checkForError:errorCode logMsg:kErrorPairDevice error:error]; + return ![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorPairDevice error:error]; }; return [self syncRunOnWorkQueueWithBoolReturnValue:block error:error]; @@ -918,7 +947,7 @@ - (BOOL)cancelCommissioningForNodeID:(NSNumber *)nodeID error:(NSError * __autor auto errorCode = self->_cppCommissioner->StopPairing([nodeID unsignedLongLongValue]); // Emit metric on status of cancel MATTER_LOG_METRIC(kMetricCancelCommissioning, errorCode); - return ![MTRDeviceController checkForError:errorCode logMsg:kErrorStopPairing error:error]; + return ![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorStopPairing error:error]; }; return [self syncRunOnWorkQueueWithBoolReturnValue:block error:error]; @@ -968,7 +997,7 @@ - (MTRBaseDevice *)deviceBeingCommissionedWithNodeID:(NSNumber *)nodeID error:(N auto errorCode = self->_cppCommissioner->GetDeviceBeingCommissioned(nodeID.unsignedLongLongValue, &deviceProxy); MATTER_LOG_METRIC(kMetricDeviceBeingCommissioned, errorCode); - VerifyOrReturnValue(![MTRDeviceController checkForError:errorCode logMsg:kErrorGetCommissionee error:error], nil); + VerifyOrReturnValue(![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorGetCommissionee error:error], nil); return [[MTRBaseDevice alloc] initWithPASEDevice:deviceProxy controller:self]; }; @@ -1104,14 +1133,14 @@ + (nullable NSData *)computePASEVerifierForSetupPasscode:(NSNumber *)setupPassco MATTER_LOG_METRIC_SCOPE(kMetricPASEVerifierForSetupCode, err); - if ([MTRDeviceController checkForError:err logMsg:kErrorSpake2pVerifierGenerationFailed error:error]) { + if ([MTRDeviceController_Concrete checkForError:err logMsg:kDeviceControllerErrorSpake2pVerifierGenerationFailed error:error]) { return nil; } uint8_t serializedBuffer[chip::Crypto::kSpake2p_VerifierSerialized_Length]; chip::MutableByteSpan serializedBytes(serializedBuffer); err = verifier.Serialize(serializedBytes); - if ([MTRDeviceController checkForError:err logMsg:kErrorSpake2pVerifierSerializationFailed error:error]) { + if ([MTRDeviceController_Concrete checkForError:err logMsg:kDeviceControllerErrorSpake2pVerifierSerializationFailed error:error]) { return nil; } @@ -1128,13 +1157,13 @@ - (NSData * _Nullable)attestationChallengeForDeviceID:(NSNumber *)deviceID MATTER_LOG_METRIC_SCOPE(kMetricAttestationChallengeForDevice, errorCode); errorCode = self->_cppCommissioner->GetDeviceBeingCommissioned([deviceID unsignedLongLongValue], &deviceProxy); - VerifyOrReturnValue(![MTRDeviceController checkForError:errorCode logMsg:kErrorGetCommissionee error:nil], nil); + VerifyOrReturnValue(![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorGetCommissionee error:nil], nil); uint8_t challengeBuffer[chip::Crypto::kAES_CCM128_Key_Length]; chip::ByteSpan challenge(challengeBuffer); errorCode = deviceProxy->GetAttestationChallenge(challenge); - VerifyOrReturnValue(![MTRDeviceController checkForError:errorCode logMsg:kErrorGetAttestationChallenge error:nil], nil); + VerifyOrReturnValue(![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorGetAttestationChallenge error:nil], nil); return AsData(challenge); }; @@ -1271,7 +1300,7 @@ - (BOOL)checkIsRunning:(NSError * __autoreleasing *)error return YES; } - MTR_LOG_ERROR("MTRDeviceController: %@ Error: %s", self, [kErrorNotRunning UTF8String]); + MTR_LOG_ERROR("MTRDeviceController: %@ Error: %s", self, [kDeviceControllerErrorNotRunning UTF8String]); if (error) { *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE]; } @@ -1699,7 +1728,7 @@ - (void)issueOperationalCertificateForRequest:(MTROperationalCSRInfo *)csrInfo @end -@implementation MTRDeviceController (Deprecated) +@implementation MTRDeviceController_Concrete (Deprecated) - (NSNumber *)controllerNodeId { @@ -1767,7 +1796,7 @@ - (BOOL)pairDevice:(uint64_t)deviceID payload.setUpPINCode = setupPINCode; errorCode = chip::ManualSetupPayloadGenerator(payload).payloadDecimalStringRepresentation(manualPairingCode); - VerifyOrReturnValue(![MTRDeviceController checkForError:errorCode logMsg:kErrorSetupCodeGen error:error], NO); + VerifyOrReturnValue(![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorSetupCodeGen error:error], NO); self->_operationalCredentialsDelegate->SetDeviceID(deviceID); @@ -1779,7 +1808,7 @@ - (BOOL)pairDevice:(uint64_t)deviceID MATTER_LOG_METRIC_END(kMetricSetupPASESession, errorCode); } - return ![MTRDeviceController checkForError:errorCode logMsg:kErrorPairDevice error:error]; + return ![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorPairDevice error:error]; }; auto success = [self syncRunOnWorkQueueWithBoolReturnValue:block error:error]; @@ -1824,7 +1853,7 @@ - (BOOL)pairDevice:(uint64_t)deviceID MATTER_LOG_METRIC_END(kMetricSetupPASESession, errorCode); } - return ![MTRDeviceController checkForError:errorCode logMsg:kErrorPairDevice error:error]; + return ![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorPairDevice error:error]; }; auto success = [self syncRunOnWorkQueueWithBoolReturnValue:block error:error]; @@ -1860,7 +1889,7 @@ - (BOOL)pairDevice:(uint64_t)deviceID onboardingPayload:(NSString *)onboardingPa MATTER_LOG_METRIC_END(kMetricSetupPASESession, errorCode); } - return ![MTRDeviceController checkForError:errorCode logMsg:kErrorPairDevice error:error]; + return ![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorPairDevice error:error]; }; auto success = [self syncRunOnWorkQueueWithBoolReturnValue:block error:error]; @@ -1903,7 +1932,7 @@ - (BOOL)openPairingWindow:(uint64_t)deviceID duration:(NSUInteger)duration error errorCode = chip::Controller::AutoCommissioningWindowOpener::OpenBasicCommissioningWindow( self->_cppCommissioner, deviceID, chip::System::Clock::Seconds16(static_cast(duration))); - return ![MTRDeviceController checkForError:errorCode logMsg:kErrorOpenPairingWindow error:error]; + return ![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorOpenPairingWindow error:error]; }; return [self syncRunOnWorkQueueWithBoolReturnValue:block error:error]; @@ -1951,7 +1980,7 @@ - (NSString *)openPairingWindowWithPIN:(uint64_t)deviceID static_cast(discriminator), chip::MakeOptional(static_cast(setupPIN)), chip::NullOptional, setupPayload); - VerifyOrReturnValue(![MTRDeviceController checkForError:errorCode logMsg:kErrorOpenPairingWindow error:error], nil); + VerifyOrReturnValue(![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorOpenPairingWindow error:error], nil); chip::ManualSetupPayloadGenerator generator(setupPayload); std::string outCode; diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h index 925bbb284f3ab4..565b502acf22ae 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h @@ -277,4 +277,25 @@ NS_ASSUME_NONNULL_BEGIN @end +static NSString * const kDeviceControllerErrorCommissionerInit = @"Init failure while initializing a commissioner"; +static NSString * const kDeviceControllerErrorIPKInit = @"Init failure while initializing IPK"; +static NSString * const kDeviceControllerErrorSigningKeypairInit = @"Init failure while creating signing keypair bridge"; +static NSString * const kDeviceControllerErrorOperationalCredentialsInit = @"Init failure while creating operational credentials delegate"; +static NSString * const kDeviceControllerErrorOperationalKeypairInit = @"Init failure while creating operational keypair bridge"; +static NSString * const kDeviceControllerErrorPairingInit = @"Init failure while creating a pairing delegate"; +static NSString * const kDeviceControllerErrorPartialDacVerifierInit = @"Init failure while creating a partial DAC verifier"; +static NSString * const kDeviceControllerErrorPairDevice = @"Failure while pairing the device"; +static NSString * const kDeviceControllerErrorStopPairing = @"Failure while trying to stop the pairing process"; +static NSString * const kDeviceControllerErrorOpenPairingWindow = @"Open Pairing Window failed"; +static NSString * const kDeviceControllerErrorNotRunning = @"Controller is not running. Call startup first."; +static NSString * const kDeviceControllerErrorSetupCodeGen = @"Generating Manual Pairing Code failed"; +static NSString * const kDeviceControllerErrorGenerateNOC = @"Generating operational certificate failed"; +static NSString * const kDeviceControllerErrorKeyAllocation = @"Generating new operational key failed"; +static NSString * const kDeviceControllerErrorCSRValidation = @"Extracting public key from CSR failed"; +static NSString * const kDeviceControllerErrorGetCommissionee = @"Failure obtaining device being commissioned"; +static NSString * const kDeviceControllerErrorGetAttestationChallenge = @"Failure getting attestation challenge"; +static NSString * const kDeviceControllerErrorSpake2pVerifierGenerationFailed = @"PASE verifier generation failed"; +static NSString * const kDeviceControllerErrorSpake2pVerifierSerializationFailed = @"PASE verifier serialization failed"; +static NSString * const kDeviceControllerErrorCDCertStoreInit = @"Init failure while initializing Certificate Declaration Signing Keys store"; + NS_ASSUME_NONNULL_END From ccd72dde0573814255aff2cc127e534b5eb41aea Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Wed, 7 Aug 2024 17:06:33 -0700 Subject: [PATCH 09/27] temporary init implementation --- src/darwin/Framework/CHIP/MTRDeviceController.mm | 10 ++++++++++ .../Framework/CHIP/MTRDeviceController_Concrete.mm | 2 +- .../Framework/CHIP/MTRDeviceController_Internal.h | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm index 6c312d510a93a7..e5256000441fa3 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm @@ -133,6 +133,16 @@ @implementation MTRDeviceController { MTRDeviceStorageBehaviorConfiguration * _storageBehaviorConfiguration; } + +- (instancetype)initForSubclasses +{ + if (self = [super init]) { + // nothing, as superclass of MTRDeviceController is NSObject + } + + return self; +} + - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index e22c8477b14ea2..ca9db42cbb35ff 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -186,7 +186,7 @@ - (instancetype)initWithFactory:(MTRDeviceControllerFactory *)factory concurrentSubscriptionPoolSize:(NSUInteger)concurrentSubscriptionPoolSize storageBehaviorConfiguration:(MTRDeviceStorageBehaviorConfiguration *)storageBehaviorConfiguration { - if (self = [super init]) { + if (self = [super initForSubclasses]) { // Make sure our storage is all set up to work as early as possible, // before we start doing anything else with the controller. _uniqueIdentifier = uniqueIdentifier; diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h index 565b502acf22ae..9a407145c6d9f0 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h @@ -57,6 +57,8 @@ NS_ASSUME_NONNULL_BEGIN @interface MTRDeviceController () +- (instancetype)initForSubclasses; + #pragma mark - MTRDeviceControllerFactory methods /** From 6357e6a06ba81ade3e0234fdfbe59f54441db1e3 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Wed, 7 Aug 2024 17:08:41 -0700 Subject: [PATCH 10/27] only vend `MTRDeviceController` pointers not concrete class (`instancetype`) pointers --- src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h | 2 +- src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h index ac85b2faa50a52..419a154cc7929e 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h @@ -57,7 +57,7 @@ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) * Once this returns non-nil, it's the caller's responsibility to call shutdown * on the controller to avoid leaking it. */ -- (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters +- (nullable MTRDeviceController *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error MTR_AVAILABLE(ios(17.6), macos(14.6), watchos(10.6), tvos(17.6)); /** diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index ca9db42cbb35ff..10c73b3759ee26 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -161,7 +161,7 @@ @implementation MTRDeviceController_Concrete { //@synthesize uniqueIdentifier = _uniqueIdentifier; -- (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error +- (nullable MTRDeviceController *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); From 805ed081e78292a9d45f13c9e69f24cdc6cf154e Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Wed, 7 Aug 2024 17:45:21 -0700 Subject: [PATCH 11/27] add `storedFabricIndex` (currently broken) --- src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 10c73b3759ee26..86fa595c664b01 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -90,8 +90,7 @@ @interface MTRDeviceController_Concrete () // MTRDeviceController ivar internal access -//@property (nonatomic, readonly) std::atomic storedFabricIndex; - +@property (nonatomic, readonly) std::atomic storedFabricIndex; @property (nonatomic, readonly) chip::Controller::DeviceCommissioner * cppCommissioner; @property (nonatomic, readonly) chip::Credentials::PartialDACVerifier * partialDACVerifier; @property (nonatomic, readonly) chip::Credentials::DefaultDACVerifier * defaultDACVerifier; @@ -156,7 +155,7 @@ @implementation MTRDeviceController_Concrete { @synthesize otaProviderDelegateQueue = _otaProviderDelegateQueue; @synthesize commissionableBrowser = _commissionableBrowser; @synthesize concurrentSubscriptionPool = _concurrentSubscriptionPool; - +@synthesize storedFabricIndex = _storedFabricIndex; //@synthesize uniqueIdentifier = _uniqueIdentifier; From 1d24e092e275e1a27b83a876a5814da41432077e Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 9 Aug 2024 10:20:25 -0700 Subject: [PATCH 12/27] reduce access of internal properties --- src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index f5d8e9f9f24a8b..cefdcf2488f48c 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -101,10 +101,10 @@ @interface MTRDeviceController_Concrete () @property (nonatomic, readonly) MTRP256KeypairBridge operationalKeypairBridge; @property (nonatomic, readonly) MTRDeviceAttestationDelegateBridge * deviceAttestationDelegateBridge; @property (nonatomic, readwrite) NSUUID * uniqueIdentifier; -@property (nonatomic, readwrite) dispatch_queue_t chipWorkQueue; -@property (nonatomic, readwrite, nullable) MTRDeviceControllerFactory * factory; -@property (nonatomic, readwrite, nullable) NSMapTable * nodeIDToDeviceMap; -@property (nonatomic, readwrite) os_unfair_lock deviceMapLock; +@property (nonatomic, readonly) dispatch_queue_t chipWorkQueue; +@property (nonatomic, readonly, nullable) MTRDeviceControllerFactory * factory; +@property (nonatomic, readonly, nullable) NSMapTable * nodeIDToDeviceMap; +@property (nonatomic, readonly) os_unfair_lock deviceMapLock; @property (nonatomic, readonly, nullable) id otaProviderDelegate; @property (nonatomic, readonly, nullable) dispatch_queue_t otaProviderDelegateQueue; @property (nonatomic, readonly, nullable) MTRCommissionableBrowser * commissionableBrowser; From e1234a378c48416f723cea594711328051cc80f6 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 9 Aug 2024 11:47:48 -0700 Subject: [PATCH 13/27] move C++-style fabric index and keypairs to protected ivars --- src/darwin/Framework/CHIP/MTRDeviceController.mm | 6 ------ .../Framework/CHIP/MTRDeviceController_Concrete.mm | 3 --- src/darwin/Framework/CHIP/MTRDeviceController_Internal.h | 9 ++++++++- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm index dec393855668a3..42597d8b60c352 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm @@ -108,10 +108,6 @@ using namespace chip::Tracing::DarwinFramework; @implementation MTRDeviceController { - // Atomic because they can be touched from multiple threads. - std::atomic _storedFabricIndex; - std::atomic> _storedCompressedFabricID; - // queue used to serialize all work performed by the MTRDeviceController dispatch_queue_t _chipWorkQueue; @@ -120,8 +116,6 @@ @implementation MTRDeviceController { chip::Credentials::DefaultDACVerifier * _defaultDACVerifier; MTRDeviceControllerDelegateBridge * _deviceControllerDelegateBridge; MTROperationalCredentialsDelegate * _operationalCredentialsDelegate; - MTRP256KeypairBridge _signingKeypairBridge; - MTRP256KeypairBridge _operationalKeypairBridge; MTRDeviceAttestationDelegateBridge * _deviceAttestationDelegateBridge; MTRDeviceControllerFactory * _factory; NSMapTable * _nodeIDToDeviceMap; diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index cefdcf2488f48c..e36759aa23618f 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -91,14 +91,11 @@ @interface MTRDeviceController_Concrete () // MTRDeviceController ivar internal access -@property (nonatomic, readonly) std::atomic storedFabricIndex; @property (nonatomic, readonly) chip::Controller::DeviceCommissioner * cppCommissioner; @property (nonatomic, readonly) chip::Credentials::PartialDACVerifier * partialDACVerifier; @property (nonatomic, readonly) chip::Credentials::DefaultDACVerifier * defaultDACVerifier; @property (nonatomic, readonly) MTRDeviceControllerDelegateBridge * deviceControllerDelegateBridge; @property (nonatomic, readonly) MTROperationalCredentialsDelegate * operationalCredentialsDelegate; -@property (nonatomic, readonly) MTRP256KeypairBridge signingKeypairBridge; -@property (nonatomic, readonly) MTRP256KeypairBridge operationalKeypairBridge; @property (nonatomic, readonly) MTRDeviceAttestationDelegateBridge * deviceAttestationDelegateBridge; @property (nonatomic, readwrite) NSUUID * uniqueIdentifier; @property (nonatomic, readonly) dispatch_queue_t chipWorkQueue; diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h index 64cbc50dba57e7..cdfe9442ac722d 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h @@ -34,6 +34,8 @@ #import "MTRDeviceControllerDataStore.h" #import "MTRDeviceStorageBehaviorConfiguration.h" +#import "MTRP256KeypairBridge.h" + #import #import #import @@ -55,7 +57,12 @@ namespace Controller { NS_ASSUME_NONNULL_BEGIN -@interface MTRDeviceController () +@interface MTRDeviceController () { +@protected + std::atomic _storedFabricIndex; + MTRP256KeypairBridge _signingKeypairBridge; + MTRP256KeypairBridge _operationalKeypairBridge; +} - (instancetype)initForSubclasses; From 6f9cad773b7457b511bc41bf02026095aea18a6b Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 9 Aug 2024 11:49:44 -0700 Subject: [PATCH 14/27] return base class pointer from constructors rather than `instancetype` --- src/darwin/Framework/CHIP/MTRDeviceController.h | 2 +- src/darwin/Framework/CHIP/MTRDeviceController.mm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.h b/src/darwin/Framework/CHIP/MTRDeviceController.h index eaae1fcf7d4c6a..adf4d7b7382687 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController.h @@ -57,7 +57,7 @@ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) * Once this returns non-nil, it's the caller's responsibility to call shutdown * on the controller to avoid leaking it. */ -- (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters +- (nullable MTRDeviceController *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error MTR_AVAILABLE(ios(17.6), macos(14.6), watchos(10.6), tvos(17.6)); /** diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm index 42597d8b60c352..eef837bee430ea 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm @@ -139,7 +139,7 @@ - (instancetype)initForSubclasses return self; } -- (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error +- (nullable MTRDeviceController *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); From f2ce12a776c55fdba91e045fe4b8dcfc800d4ee6 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 9 Aug 2024 11:50:29 -0700 Subject: [PATCH 15/27] clean up property synthesis/ivars in concrete --- .../CHIP/MTRDeviceController_Concrete.mm | 31 +------------------ 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index e36759aa23618f..853b4951cf4d9a 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -116,32 +116,7 @@ @interface MTRDeviceController_Concrete () @end -@implementation MTRDeviceController_Concrete { -// // Atomic because it can be touched from multiple threads. -// std::atomic _storedFabricIndex; -// -// // queue used to serialize all work performed by the MTRDeviceController -// dispatch_queue_t _chipWorkQueue; -// -// chip::Controller::DeviceCommissioner * _cppCommissioner; -// chip::Credentials::PartialDACVerifier * _partialDACVerifier; -// chip::Credentials::DefaultDACVerifier * _defaultDACVerifier; -// MTRDeviceControllerDelegateBridge * _deviceControllerDelegateBridge; -// MTROperationalCredentialsDelegate * _operationalCredentialsDelegate; -// MTRP256KeypairBridge _signingKeypairBridge; -// MTRP256KeypairBridge _operationalKeypairBridge; -// MTRDeviceAttestationDelegateBridge * _deviceAttestationDelegateBridge; -// MTRDeviceControllerFactory * _factory; -// NSMapTable * _nodeIDToDeviceMap; -// os_unfair_lock _deviceMapLock; // protects nodeIDToDeviceMap -// MTRCommissionableBrowser * _commissionableBrowser; -// MTRAttestationTrustStoreBridge * _attestationTrustStoreBridge; -// -// // _serverEndpoints is only touched on the Matter queue. -// NSMutableArray * _serverEndpoints; -// -// MTRDeviceStorageBehaviorConfiguration * _storageBehaviorConfiguration; -} +@implementation MTRDeviceController_Concrete // MTRDeviceController ivar internal access @synthesize uniqueIdentifier = _uniqueIdentifier; @@ -153,10 +128,6 @@ @implementation MTRDeviceController_Concrete { @synthesize otaProviderDelegateQueue = _otaProviderDelegateQueue; @synthesize commissionableBrowser = _commissionableBrowser; @synthesize concurrentSubscriptionPool = _concurrentSubscriptionPool; -@synthesize storedFabricIndex = _storedFabricIndex; - -//@synthesize uniqueIdentifier = _uniqueIdentifier; - - (nullable MTRDeviceController *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { From fac9668289f7241f65f1164e6c1ee57080bee628 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 9 Aug 2024 12:58:50 -0700 Subject: [PATCH 16/27] update merged code --- src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm | 2 +- src/darwin/Framework/CHIP/MTRDeviceController_Internal.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 853b4951cf4d9a..74aa7185a1737b 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -1125,7 +1125,7 @@ - (NSData * _Nullable)attestationChallengeForDeviceID:(NSNumber *)deviceID MATTER_LOG_METRIC_SCOPE(kMetricAttestationChallengeForDevice, errorCode); errorCode = self->_cppCommissioner->GetDeviceBeingCommissioned([deviceID unsignedLongLongValue], &deviceProxy); - VerifyOrReturnValue(![MTRDeviceController checkForError:errorCode logMsg:kErrorGetCommissionee error:nil], nil); + VerifyOrReturnValue(![MTRDeviceController_Concrete checkForError:errorCode logMsg:kDeviceControllerErrorGetCommissionee error:nil], nil); uint8_t challengeBuffer[chip::Crypto::kAES_CCM128_Key_Length]; chip::ByteSpan challenge(challengeBuffer); diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h index cdfe9442ac722d..5fbfb258403f00 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h @@ -60,6 +60,7 @@ NS_ASSUME_NONNULL_BEGIN @interface MTRDeviceController () { @protected std::atomic _storedFabricIndex; + std::atomic> _storedCompressedFabricID; MTRP256KeypairBridge _signingKeypairBridge; MTRP256KeypairBridge _operationalKeypairBridge; } From b0977850ec673e5d1bcb8e80db3c38eec2d2908e Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Mon, 12 Aug 2024 09:55:51 -0700 Subject: [PATCH 17/27] WIP: get us building again, plus plan comments --- .../Framework/CHIP/MTRDeviceController.mm | 9 -- .../CHIP/MTRDeviceControllerFactory.h | 3 +- .../CHIP/MTRDeviceControllerFactory.mm | 4 +- .../CHIP/MTRDeviceController_Concrete.h | 1 + .../CHIP/MTRDeviceController_Concrete.mm | 144 +++++------------- .../CHIP/MTRDeviceController_Internal.h | 12 ++ 6 files changed, 51 insertions(+), 122 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm index eef837bee430ea..c4f38efbdc2eab 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm @@ -1579,15 +1579,6 @@ + (void)forceLocalhostAdvertisingOnly @end -/** - * Shim to allow us to treat an MTRDevicePairingDelegate as an - * MTRDeviceControllerDelegate. - */ -@interface MTRDevicePairingDelegateShim : NSObject -@property (nonatomic, readonly) id delegate; -- (instancetype)initWithDelegate:(id)delegate; -@end - @implementation MTRDevicePairingDelegateShim - (instancetype)initWithDelegate:(id)delegate { diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.h b/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.h index 0f9de90363f821..fb652b932e572a 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.h +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.h @@ -23,6 +23,7 @@ #import #import #import +#import NS_ASSUME_NONNULL_BEGIN @@ -31,7 +32,7 @@ NS_ASSUME_NONNULL_BEGIN @protocol MTROTAProviderDelegate; @protocol MTRKeypair; -@class MTRDeviceController; +//@class MTRDeviceController; @class MTRDeviceControllerStartupParams; @class MTRFabricInfo; diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm index 18128249376e21..3b7658fc56010d 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm @@ -732,7 +732,7 @@ - (MTRDeviceController * _Nullable)createControllerOnNewFabric:(MTRDeviceControl return nil; } - return [self _startDeviceController:[MTRDeviceController alloc] + return [self _startDeviceController:[MTRDeviceController alloc] // wat startupParams:startupParams fabricChecker:^MTRDeviceControllerStartupParamsInternal *( FabricTable * fabricTable, MTRDeviceController * controller, CHIP_ERROR & fabricError) { @@ -1133,7 +1133,7 @@ - (void)operationalInstanceAdded:(chip::PeerId &)operationalID } } -- (MTRDeviceController * _Nullable)initializeController:(MTRDeviceController *)controller +- (nullable MTRDeviceController *)initializeController:(MTRDeviceController *)controller withParameters:(MTRDeviceControllerParameters *)parameters error:(NSError * __autoreleasing *)error { diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h index 419a154cc7929e..8a17086eb9945f 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h @@ -20,6 +20,7 @@ #import #import #import +#import "MTRDeviceController.h" @class MTRBaseDevice; @class MTRServerEndpoint; // Defined in MTRServerEndpoint.h, which imports MTRAccessGrant.h, which imports MTRBaseClusters.h, which imports this file, so we can't import it. diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 74aa7185a1737b..12cd4bd5cca904 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -26,6 +26,7 @@ #import "MTRCommissionableBrowserResult_Internal.h" #import "MTRCommissioningParameters.h" #import "MTRConversion.h" +#import "MTRDeviceController.h" #import "MTRDeviceController_Concrete.h" #import "MTRDeviceControllerDelegateBridge.h" #import "MTRDeviceControllerFactory_Internal.h" @@ -129,7 +130,34 @@ @implementation MTRDeviceController_Concrete @synthesize commissionableBrowser = _commissionableBrowser; @synthesize concurrentSubscriptionPool = _concurrentSubscriptionPool; -- (nullable MTRDeviceController *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error +- (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters + error:(NSError * __autoreleasing *)error +{ + // parameters here are a bit late, tbh, but maybe we're gonna have to + // create an XPC obj...? + if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { + MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); + if (error) { + *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INVALID_ARGUMENT]; + } + return nil; + } +// else if ([is XPC Thing]) { +// // create XPC MatterDeviceController when it exists +// // return XPC MatterDeviceController? O_O +// } + auto * controllerParameters = static_cast(parameters); + + // or, if necessary, MTRDeviceControllerFactory will auto-start in per-controller-storage mode if necessary + MTRDeviceControllerFactory * factory = MTRDeviceControllerFactory.sharedInstance; + id controller = [factory initializeController:self // either self or XPC + withParameters:controllerParameters + error:error]; + return controller; +} + +- (nullable MTRDeviceController *)bogusWithParameters:(MTRDeviceControllerAbstractParameters *)parameters + error:(NSError * __autoreleasing *)error { if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); @@ -141,7 +169,11 @@ - (nullable MTRDeviceController *)initWithParameters:(MTRDeviceControllerAbstrac auto * controllerParameters = static_cast(parameters); // MTRDeviceControllerFactory will auto-start in per-controller-storage mode if necessary - return [MTRDeviceControllerFactory.sharedInstance initializeController:self withParameters:controllerParameters error:error]; + MTRDeviceControllerFactory * factory = MTRDeviceControllerFactory.sharedInstance; + MTRDeviceController * controller = [factory initializeController:self + withParameters:controllerParameters + error:error]; + return controller; } - (instancetype)initWithFactory:(MTRDeviceControllerFactory *)factory @@ -1578,63 +1610,6 @@ + (void)forceLocalhostAdvertisingOnly @end -/** - * Shim to allow us to treat an MTRDevicePairingDelegate as an - * MTRDeviceControllerDelegate. - */ -@interface MTRDevicePairingDelegateShim : NSObject -@property (nonatomic, readonly) id delegate; -- (instancetype)initWithDelegate:(id)delegate; -@end - -@implementation MTRDevicePairingDelegateShim -- (instancetype)initWithDelegate:(id)delegate -{ - if (self = [super init]) { - _delegate = delegate; - } - return self; -} - -- (BOOL)respondsToSelector:(SEL)selector -{ - if (selector == @selector(controller:statusUpdate:)) { - return [self.delegate respondsToSelector:@selector(onStatusUpdate:)]; - } - - if (selector == @selector(controller:commissioningSessionEstablishmentDone:)) { - return [self.delegate respondsToSelector:@selector(onPairingComplete:)]; - } - - if (selector == @selector(controller:commissioningComplete:)) { - return [self.delegate respondsToSelector:@selector(onCommissioningComplete:)]; - } - - return [super respondsToSelector:selector]; -} - -- (void)controller:(MTRDeviceController *)controller statusUpdate:(MTRCommissioningStatus)status -{ - [self.delegate onStatusUpdate:static_cast(status)]; -} - -- (void)controller:(MTRDeviceController *)controller commissioningSessionEstablishmentDone:(NSError * _Nullable)error -{ - [self.delegate onPairingComplete:error]; -} - -- (void)controller:(MTRDeviceController *)controller commissioningComplete:(NSError * _Nullable)error -{ - [self.delegate onCommissioningComplete:error]; -} - -- (void)onPairingDeleted:(NSError * _Nullable)error -{ - [self.delegate onPairingDeleted:error]; -} - -@end - /** * Shim to allow us to treat an MTRNOCChainIssuer as an * MTROperationalCertificateIssuer. @@ -1645,57 +1620,6 @@ @interface MTROperationalCertificateChainIssuerShim : NSObject )nocChainIssuer; @end -@implementation MTROperationalCertificateChainIssuerShim -- (instancetype)initWithIssuer:(id)nocChainIssuer -{ - if (self = [super init]) { - _nocChainIssuer = nocChainIssuer; - _shouldSkipAttestationCertificateValidation = YES; - } - return self; -} - -- (void)issueOperationalCertificateForRequest:(MTROperationalCSRInfo *)csrInfo - attestationInfo:(MTRDeviceAttestationInfo *)attestationInfo - controller:(MTRDeviceController *)controller - completion:(void (^)(MTROperationalCertificateChain * _Nullable info, - NSError * _Nullable error))completion -{ - CSRInfo * oldCSRInfo = [[CSRInfo alloc] initWithNonce:csrInfo.csrNonce - elements:csrInfo.csrElementsTLV - elementsSignature:csrInfo.attestationSignature - csr:csrInfo.csr]; - NSData * _Nullable firmwareInfo = attestationInfo.firmwareInfo; - if (firmwareInfo == nil) { - firmwareInfo = [NSData data]; - } - AttestationInfo * oldAttestationInfo = - [[AttestationInfo alloc] initWithChallenge:attestationInfo.challenge - nonce:attestationInfo.nonce - elements:attestationInfo.elementsTLV - elementsSignature:attestationInfo.elementsSignature - dac:attestationInfo.deviceAttestationCertificate - pai:attestationInfo.productAttestationIntermediateCertificate - certificationDeclaration:attestationInfo.certificationDeclaration - firmwareInfo:firmwareInfo]; - [self.nocChainIssuer - onNOCChainGenerationNeeded:oldCSRInfo - attestationInfo:oldAttestationInfo - onNOCChainGenerationComplete:^(NSData * operationalCertificate, NSData * intermediateCertificate, NSData * rootCertificate, - NSData * _Nullable ipk, NSNumber * _Nullable adminSubject, NSError * __autoreleasing * error) { - auto * chain = [[MTROperationalCertificateChain alloc] initWithOperationalCertificate:operationalCertificate - intermediateCertificate:intermediateCertificate - rootCertificate:rootCertificate - adminSubject:adminSubject]; - completion(chain, nil); - if (error != nil) { - *error = nil; - } - }]; -} - -@end - @implementation MTRDeviceController_Concrete (Deprecated) - (NSNumber *)controllerNodeId diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h index 5fbfb258403f00..3b22cdd6929f4a 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h @@ -32,6 +32,7 @@ #import "MTRBaseDevice.h" #import "MTRDeviceController.h" #import "MTRDeviceControllerDataStore.h" +#import "MTRDeviceControllerDelegate.h" #import "MTRDeviceStorageBehaviorConfiguration.h" #import "MTRP256KeypairBridge.h" @@ -46,6 +47,8 @@ @class MTRDeviceControllerFactory; @class MTRDevice; @class MTRAsyncWorkQueue; +@protocol MTRDevicePairingDelegate; +@protocol MTRDeviceControllerDelegate; namespace chip { class FabricTable; @@ -283,6 +286,15 @@ NS_ASSUME_NONNULL_BEGIN @end +/** + * Shim to allow us to treat an MTRDevicePairingDelegate as an + * MTRDeviceControllerDelegate. + */ +@interface MTRDevicePairingDelegateShim : NSObject +@property (nonatomic, readonly) id delegate; +- (instancetype)initWithDelegate:(id)delegate; +@end + static NSString * const kDeviceControllerErrorCommissionerInit = @"Init failure while initializing a commissioner"; static NSString * const kDeviceControllerErrorIPKInit = @"Init failure while initializing IPK"; static NSString * const kDeviceControllerErrorSigningKeypairInit = @"Init failure while creating signing keypair bridge"; From 224a9b50f7434f936c54226b987ade800aee0f33 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Mon, 12 Aug 2024 10:39:42 -0700 Subject: [PATCH 18/27] remove superfluous comments --- .../Framework/CHIP/MTRDeviceControllerFactory.mm | 2 +- .../Framework/CHIP/MTRDeviceController_Concrete.mm | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm index 3b7658fc56010d..5e5da32983ce11 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm @@ -732,7 +732,7 @@ - (MTRDeviceController * _Nullable)createControllerOnNewFabric:(MTRDeviceControl return nil; } - return [self _startDeviceController:[MTRDeviceController alloc] // wat + return [self _startDeviceController:[MTRDeviceController alloc] startupParams:startupParams fabricChecker:^MTRDeviceControllerStartupParamsInternal *( FabricTable * fabricTable, MTRDeviceController * controller, CHIP_ERROR & fabricError) { diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 12cd4bd5cca904..9fd06aad08bb2b 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -133,8 +133,6 @@ @implementation MTRDeviceController_Concrete - (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { - // parameters here are a bit late, tbh, but maybe we're gonna have to - // create an XPC obj...? if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); if (error) { @@ -142,17 +140,13 @@ - (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControll } return nil; } -// else if ([is XPC Thing]) { -// // create XPC MatterDeviceController when it exists -// // return XPC MatterDeviceController? O_O -// } auto * controllerParameters = static_cast(parameters); // or, if necessary, MTRDeviceControllerFactory will auto-start in per-controller-storage mode if necessary MTRDeviceControllerFactory * factory = MTRDeviceControllerFactory.sharedInstance; - id controller = [factory initializeController:self // either self or XPC - withParameters:controllerParameters - error:error]; + id controller = [factory initializeController:self + withParameters:controllerParameters + error:error]; return controller; } From 7a572d9904be7108478529cfc787f30314578e49 Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Mon, 12 Aug 2024 13:09:29 -0700 Subject: [PATCH 19/27] Update src/darwin/Framework/CHIP/MTRDeviceControllerFactory.h --- src/darwin/Framework/CHIP/MTRDeviceControllerFactory.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.h b/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.h index fb652b932e572a..5d1fc4c1809874 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.h +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.h @@ -32,7 +32,6 @@ NS_ASSUME_NONNULL_BEGIN @protocol MTROTAProviderDelegate; @protocol MTRKeypair; -//@class MTRDeviceController; @class MTRDeviceControllerStartupParams; @class MTRFabricInfo; From 3cac77a56825f410d2790c6b7e8e67e4ef15a823 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Mon, 12 Aug 2024 20:10:07 +0000 Subject: [PATCH 20/27] Restyled by clang-format --- src/darwin/Framework/CHIP/MTRDeviceController.h | 2 +- src/darwin/Framework/CHIP/MTRDeviceController.mm | 1 - src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm | 4 ++-- src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h | 4 ++-- .../Framework/CHIP/MTRDeviceController_Concrete.mm | 9 +++------ 5 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.h b/src/darwin/Framework/CHIP/MTRDeviceController.h index adf4d7b7382687..9e2c833f6ef93b 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController.h @@ -58,7 +58,7 @@ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) * on the controller to avoid leaking it. */ - (nullable MTRDeviceController *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters - error:(NSError * __autoreleasing *)error MTR_AVAILABLE(ios(17.6), macos(14.6), watchos(10.6), tvos(17.6)); + error:(NSError * __autoreleasing *)error MTR_AVAILABLE(ios(17.6), macos(14.6), watchos(10.6), tvos(17.6)); /** * If true, the controller has not been shut down yet. diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm index c4f38efbdc2eab..4bbf71f8cf3382 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm @@ -129,7 +129,6 @@ @implementation MTRDeviceController { MTRDeviceStorageBehaviorConfiguration * _storageBehaviorConfiguration; } - - (instancetype)initForSubclasses { if (self = [super init]) { diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm index 5e5da32983ce11..5b089b392074e6 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm @@ -1134,8 +1134,8 @@ - (void)operationalInstanceAdded:(chip::PeerId &)operationalID } - (nullable MTRDeviceController *)initializeController:(MTRDeviceController *)controller - withParameters:(MTRDeviceControllerParameters *)parameters - error:(NSError * __autoreleasing *)error + withParameters:(MTRDeviceControllerParameters *)parameters + error:(NSError * __autoreleasing *)error { [self _assertCurrentQueueIsNotMatterQueue]; diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h index 8a17086eb9945f..4fe798de5ebd17 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h @@ -17,10 +17,10 @@ #import +#import "MTRDeviceController.h" #import #import #import -#import "MTRDeviceController.h" @class MTRBaseDevice; @class MTRServerEndpoint; // Defined in MTRServerEndpoint.h, which imports MTRAccessGrant.h, which imports MTRBaseClusters.h, which imports this file, so we can't import it. @@ -59,7 +59,7 @@ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) * on the controller to avoid leaking it. */ - (nullable MTRDeviceController *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters - error:(NSError * __autoreleasing *)error MTR_AVAILABLE(ios(17.6), macos(14.6), watchos(10.6), tvos(17.6)); + error:(NSError * __autoreleasing *)error MTR_AVAILABLE(ios(17.6), macos(14.6), watchos(10.6), tvos(17.6)); /** * If true, the controller has not been shut down yet. diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 9fd06aad08bb2b..ec2c7eb6623a62 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -27,12 +27,12 @@ #import "MTRCommissioningParameters.h" #import "MTRConversion.h" #import "MTRDeviceController.h" -#import "MTRDeviceController_Concrete.h" #import "MTRDeviceControllerDelegateBridge.h" #import "MTRDeviceControllerFactory_Internal.h" #import "MTRDeviceControllerLocalTestStorage.h" #import "MTRDeviceControllerStartupParams.h" #import "MTRDeviceControllerStartupParams_Internal.h" +#import "MTRDeviceController_Concrete.h" #import "MTRDevice_Concrete.h" #import "MTRDevice_Internal.h" #import "MTRError_Internal.h" @@ -87,7 +87,6 @@ using namespace chip::Tracing::DarwinFramework; - @interface MTRDeviceController_Concrete () // MTRDeviceController ivar internal access @@ -113,10 +112,8 @@ @interface MTRDeviceController_Concrete () @property (nonatomic, readonly) MTRDeviceStorageBehaviorConfiguration * storageBehaviorConfiguration; - @end - @implementation MTRDeviceController_Concrete // MTRDeviceController ivar internal access @@ -131,7 +128,7 @@ @implementation MTRDeviceController_Concrete @synthesize concurrentSubscriptionPool = _concurrentSubscriptionPool; - (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters - error:(NSError * __autoreleasing *)error + error:(NSError * __autoreleasing *)error { if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); @@ -151,7 +148,7 @@ - (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControll } - (nullable MTRDeviceController *)bogusWithParameters:(MTRDeviceControllerAbstractParameters *)parameters - error:(NSError * __autoreleasing *)error + error:(NSError * __autoreleasing *)error { if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); From 8d2cdf4ee286112a15389b54d6978a53ada30290 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Mon, 12 Aug 2024 18:55:58 -0700 Subject: [PATCH 21/27] move MTRDeviceController protected ivars to standard `MTRDeviceController.h` header --- src/darwin/Framework/CHIP/MTRDeviceController.h | 16 ++++++++++++++++ .../CHIP/MTRDeviceController_Internal.h | 11 +++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.h b/src/darwin/Framework/CHIP/MTRDeviceController.h index 9e2c833f6ef93b..076b063498effd 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController.h @@ -17,9 +17,16 @@ #import +#include +#include + + #import #import #import +#import + + @class MTRBaseDevice; @class MTRServerEndpoint; // Defined in MTRServerEndpoint.h, which imports MTRAccessGrant.h, which imports MTRBaseClusters.h, which imports this file, so we can't import it. @@ -340,4 +347,13 @@ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) macos(13.0, 13.3), watchos(9.1, 9.4), tvos(16.1, 16.4)); @end +@interface MTRDeviceController () { +@protected + std::atomic _storedFabricIndex; + std::atomic> _storedCompressedFabricID; + MTRP256KeypairBridge _signingKeypairBridge; + MTRP256KeypairBridge _operationalKeypairBridge; +} +@end + NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h index 3b22cdd6929f4a..a5ae9f44ed0e27 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h @@ -35,7 +35,7 @@ #import "MTRDeviceControllerDelegate.h" #import "MTRDeviceStorageBehaviorConfiguration.h" -#import "MTRP256KeypairBridge.h" +#import #import #import @@ -49,6 +49,7 @@ @class MTRAsyncWorkQueue; @protocol MTRDevicePairingDelegate; @protocol MTRDeviceControllerDelegate; +@class MTRDevice_Concrete; namespace chip { class FabricTable; @@ -60,13 +61,7 @@ namespace Controller { NS_ASSUME_NONNULL_BEGIN -@interface MTRDeviceController () { -@protected - std::atomic _storedFabricIndex; - std::atomic> _storedCompressedFabricID; - MTRP256KeypairBridge _signingKeypairBridge; - MTRP256KeypairBridge _operationalKeypairBridge; -} +@interface MTRDeviceController () - (instancetype)initForSubclasses; From 0d59aa19f30c2a926ea655f49a18085a1c48fde2 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Mon, 12 Aug 2024 18:56:24 -0700 Subject: [PATCH 22/27] `MTRDeviceController_Concrete` isn't public API thus no `MTR_AVAILABLE` --- src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h index 4fe798de5ebd17..7ed13796198c17 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h @@ -17,7 +17,7 @@ #import -#import "MTRDeviceController.h" +#import #import #import #import @@ -38,7 +38,6 @@ typedef void (^MTRDeviceConnectionCallback)(MTRBaseDevice * _Nullable device, NS @protocol MTRDevicePairingDelegate; @protocol MTRDeviceControllerDelegate; -MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) @interface MTRDeviceController_Concrete : MTRDeviceController /** From 83bb862daa4970cdb1b5f392adb196cba89edf7b Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Mon, 12 Aug 2024 21:12:30 -0700 Subject: [PATCH 23/27] remove commented code --- src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h index 7ed13796198c17..338dda052dff16 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h @@ -40,13 +40,6 @@ typedef void (^MTRDeviceConnectionCallback)(MTRBaseDevice * _Nullable device, NS @interface MTRDeviceController_Concrete : MTRDeviceController -/** - * Controllers are created via the MTRDeviceControllerFactory object or - * initialized via initWithParameters:error:. - */ -//- (instancetype)init NS_UNAVAILABLE; -//+ (instancetype)new NS_UNAVAILABLE; - /** * Initialize a device controller with the provided parameters. This will: * From c4d2c1c6274facc1285693365c931b329e4922b4 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 09:22:58 -0700 Subject: [PATCH 24/27] move ivar extension back to internal header --- src/darwin/Framework/CHIP/MTRDeviceController.h | 16 ---------------- .../CHIP/MTRDeviceController_Internal.h | 9 +++++++++ 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.h b/src/darwin/Framework/CHIP/MTRDeviceController.h index 076b063498effd..9e2c833f6ef93b 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController.h @@ -17,16 +17,9 @@ #import -#include -#include - - #import #import #import -#import - - @class MTRBaseDevice; @class MTRServerEndpoint; // Defined in MTRServerEndpoint.h, which imports MTRAccessGrant.h, which imports MTRBaseClusters.h, which imports this file, so we can't import it. @@ -347,13 +340,4 @@ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) macos(13.0, 13.3), watchos(9.1, 9.4), tvos(16.1, 16.4)); @end -@interface MTRDeviceController () { -@protected - std::atomic _storedFabricIndex; - std::atomic> _storedCompressedFabricID; - MTRP256KeypairBridge _signingKeypairBridge; - MTRP256KeypairBridge _operationalKeypairBridge; -} -@end - NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h index a5ae9f44ed0e27..2c4231bae8fcfd 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h @@ -311,4 +311,13 @@ static NSString * const kDeviceControllerErrorSpake2pVerifierGenerationFailed = static NSString * const kDeviceControllerErrorSpake2pVerifierSerializationFailed = @"PASE verifier serialization failed"; static NSString * const kDeviceControllerErrorCDCertStoreInit = @"Init failure while initializing Certificate Declaration Signing Keys store"; +@interface MTRDeviceController () { +@protected + std::atomic _storedFabricIndex; + std::atomic> _storedCompressedFabricID; + MTRP256KeypairBridge _signingKeypairBridge; + MTRP256KeypairBridge _operationalKeypairBridge; +} +@end + NS_ASSUME_NONNULL_END From 8004fa95163aa01bc59cf04cbf753a60a26135c2 Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Wed, 14 Aug 2024 22:01:33 -0700 Subject: [PATCH 25/27] Fixing TAPI --- .../Framework/CHIP/MTRDeviceController.mm | 4 ++++ .../CHIP/MTRDeviceController_Concrete.mm | 18 +++++++++++------- .../CHIP/MTRDeviceController_Internal.h | 9 --------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm index 4bbf71f8cf3382..ee8cc2b7549190 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm @@ -127,6 +127,10 @@ @implementation MTRDeviceController { NSMutableArray * _serverEndpoints; MTRDeviceStorageBehaviorConfiguration * _storageBehaviorConfiguration; + std::atomic _storedFabricIndex; + std::atomic> _storedCompressedFabricID; + MTRP256KeypairBridge _signingKeypairBridge; + MTRP256KeypairBridge _operationalKeypairBridge; } - (instancetype)initForSubclasses diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index ec2c7eb6623a62..052771a8865558 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -114,7 +114,13 @@ @interface MTRDeviceController_Concrete () @end -@implementation MTRDeviceController_Concrete +@implementation MTRDeviceController_Concrete { + // queue used to serialize all work performed by the MTRDeviceController + std::atomic _storedFabricIndex; + std::atomic> _storedCompressedFabricID; + MTRP256KeypairBridge _signingKeypairBridge; + MTRP256KeypairBridge _operationalKeypairBridge; +} // MTRDeviceController ivar internal access @synthesize uniqueIdentifier = _uniqueIdentifier; @@ -126,6 +132,7 @@ @implementation MTRDeviceController_Concrete @synthesize otaProviderDelegateQueue = _otaProviderDelegateQueue; @synthesize commissionableBrowser = _commissionableBrowser; @synthesize concurrentSubscriptionPool = _concurrentSubscriptionPool; +@synthesize storageBehaviorConfiguration = _storageBehaviorConfiguration; - (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error @@ -981,8 +988,7 @@ - (void)preWarmCommissioningSession - (MTRBaseDevice *)deviceBeingCommissionedWithNodeID:(NSNumber *)nodeID error:(NSError * __autoreleasing *)error { - auto block = ^MTRBaseDevice * - { + auto block = ^MTRBaseDevice * { chip::CommissioneeDeviceProxy * deviceProxy; auto errorCode = self->_cppCommissioner->GetDeviceBeingCommissioned(nodeID.unsignedLongLongValue, &deviceProxy); @@ -1140,8 +1146,7 @@ + (nullable NSData *)computePASEVerifierForSetupPasscode:(NSNumber *)setupPassco - (NSData * _Nullable)attestationChallengeForDeviceID:(NSNumber *)deviceID { - auto block = ^NSData * - { + auto block = ^NSData * { chip::CommissioneeDeviceProxy * deviceProxy; auto errorCode = CHIP_NO_ERROR; @@ -1855,8 +1860,7 @@ - (NSString *)openPairingWindowWithPIN:(uint64_t)deviceID return nil; } - auto block = ^NSString * - { + auto block = ^NSString * { chip::SetupPayload setupPayload; errorCode = chip::Controller::AutoCommissioningWindowOpener::OpenCommissioningWindow(self->_cppCommissioner, deviceID, chip::System::Clock::Seconds16(static_cast(duration)), chip::Crypto::kSpake2p_Min_PBKDF_Iterations, diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h index 2c4231bae8fcfd..a5ae9f44ed0e27 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h @@ -311,13 +311,4 @@ static NSString * const kDeviceControllerErrorSpake2pVerifierGenerationFailed = static NSString * const kDeviceControllerErrorSpake2pVerifierSerializationFailed = @"PASE verifier serialization failed"; static NSString * const kDeviceControllerErrorCDCertStoreInit = @"Init failure while initializing Certificate Declaration Signing Keys store"; -@interface MTRDeviceController () { -@protected - std::atomic _storedFabricIndex; - std::atomic> _storedCompressedFabricID; - MTRP256KeypairBridge _signingKeypairBridge; - MTRP256KeypairBridge _operationalKeypairBridge; -} -@end - NS_ASSUME_NONNULL_END From f798530442e24c5469d59a4f85c5f6ed0b56286b Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Thu, 15 Aug 2024 05:01:52 +0000 Subject: [PATCH 26/27] Restyled by whitespace --- src/darwin/Framework/CHIP/MTRDeviceController_Internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h index a5ae9f44ed0e27..d943775d43475d 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Internal.h @@ -61,7 +61,7 @@ namespace Controller { NS_ASSUME_NONNULL_BEGIN -@interface MTRDeviceController () +@interface MTRDeviceController () - (instancetype)initForSubclasses; From 9037d3a631d06e3d4689852e9dd9b96568b2f288 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Thu, 15 Aug 2024 05:01:54 +0000 Subject: [PATCH 27/27] Restyled by clang-format --- src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h | 2 +- .../Framework/CHIP/MTRDeviceController_Concrete.mm | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h index 338dda052dff16..c9587e910d3b1a 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.h @@ -17,9 +17,9 @@ #import -#import #import #import +#import #import @class MTRBaseDevice; diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 052771a8865558..c7ccab25e1cdc4 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -988,7 +988,8 @@ - (void)preWarmCommissioningSession - (MTRBaseDevice *)deviceBeingCommissionedWithNodeID:(NSNumber *)nodeID error:(NSError * __autoreleasing *)error { - auto block = ^MTRBaseDevice * { + auto block = ^MTRBaseDevice * + { chip::CommissioneeDeviceProxy * deviceProxy; auto errorCode = self->_cppCommissioner->GetDeviceBeingCommissioned(nodeID.unsignedLongLongValue, &deviceProxy); @@ -1146,7 +1147,8 @@ + (nullable NSData *)computePASEVerifierForSetupPasscode:(NSNumber *)setupPassco - (NSData * _Nullable)attestationChallengeForDeviceID:(NSNumber *)deviceID { - auto block = ^NSData * { + auto block = ^NSData * + { chip::CommissioneeDeviceProxy * deviceProxy; auto errorCode = CHIP_NO_ERROR; @@ -1860,7 +1862,8 @@ - (NSString *)openPairingWindowWithPIN:(uint64_t)deviceID return nil; } - auto block = ^NSString * { + auto block = ^NSString * + { chip::SetupPayload setupPayload; errorCode = chip::Controller::AutoCommissioningWindowOpener::OpenCommissioningWindow(self->_cppCommissioner, deviceID, chip::System::Clock::Seconds16(static_cast(duration)), chip::Crypto::kSpake2p_Min_PBKDF_Iterations,