From 72072417242acb54cc122607d45cd4f2d310e65e Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 10:14:40 -0700 Subject: [PATCH 01/75] empty xpc service files --- src/darwin/Framework/CHIP/MTRXPCService.h | 27 +++++++++++++++++++ src/darwin/Framework/CHIP/MTRXPCService.m | 22 +++++++++++++++ .../Framework/CHIP/MTRXPCServiceProtocol.h | 26 ++++++++++++++++++ .../Matter.xcodeproj/project.pbxproj | 12 +++++++++ 4 files changed, 87 insertions(+) create mode 100644 src/darwin/Framework/CHIP/MTRXPCService.h create mode 100644 src/darwin/Framework/CHIP/MTRXPCService.m create mode 100644 src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h diff --git a/src/darwin/Framework/CHIP/MTRXPCService.h b/src/darwin/Framework/CHIP/MTRXPCService.h new file mode 100644 index 00000000000000..4eb644db7a4422 --- /dev/null +++ b/src/darwin/Framework/CHIP/MTRXPCService.h @@ -0,0 +1,27 @@ +// +/** + * Copyright (c) 2023 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import "MTRXPCServiceProtocol.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface MTRXPCService : NSObject + +@end + +NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/MTRXPCService.m b/src/darwin/Framework/CHIP/MTRXPCService.m new file mode 100644 index 00000000000000..f3b33a185824b5 --- /dev/null +++ b/src/darwin/Framework/CHIP/MTRXPCService.m @@ -0,0 +1,22 @@ +// +/** + * 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 "MTRXPCService.h" + +@implementation MTRXPCService + +@end diff --git a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h new file mode 100644 index 00000000000000..114f45ce5a36eb --- /dev/null +++ b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h @@ -0,0 +1,26 @@ +// +/** + * 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 + +NS_ASSUME_NONNULL_BEGIN + +@protocol MTRXPCServiceProtocol + +@end + +NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index 69ef3bdc71d81b..91a8025ca6a0d9 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -303,7 +303,10 @@ 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 */; }; + 9BC064942C6BCB6F00996FEF /* MTRXPCService.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */; }; + 9BC064952C6BCB6F00996FEF /* MTRXPCService.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064932C6BCB6F00996FEF /* MTRXPCService.m */; }; 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */; }; + 9BC064972C6BCBAE00996FEF /* MTRXPCServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */; }; 9BDA2A062C5D9AF800A32BDD /* MTRDevice_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */; }; 9BDA2A082C5D9AFB00A32BDD /* MTRDevice_Concrete.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */; }; AF1CB86E2874B03B00865A96 /* MTROTAProviderDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1CB86D2874B03B00865A96 /* MTROTAProviderDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -736,7 +739,10 @@ 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 = ""; }; + 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCService.h; sourceTree = ""; }; + 9BC064932C6BCB6F00996FEF /* MTRXPCService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCService.m; sourceTree = ""; }; 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceController_Concrete.mm; sourceTree = ""; }; + 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceProtocol.h; sourceTree = ""; }; 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDevice_Concrete.mm; sourceTree = ""; }; 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDevice_Concrete.h; sourceTree = ""; }; AF1CB86D2874B03B00865A96 /* MTROTAProviderDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTROTAProviderDelegate.h; sourceTree = ""; }; @@ -1316,6 +1322,9 @@ 7596A84A287636C1004DAE0E /* MTRDevice_Internal.h */, 7596A84228762729004DAE0E /* MTRDevice.h */, 7596A84328762729004DAE0E /* MTRDevice.mm */, + 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */, + 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */, + 9BC064932C6BCB6F00996FEF /* MTRXPCService.m */, 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */, 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */, 88EBF8CB27FABDD500686BC1 /* MTRDeviceAttestationDelegate.h */, @@ -1616,6 +1625,7 @@ 514C7A042B6436D500DD6D7B /* MTRServerCluster_Internal.h in Headers */, 88E6C9472B6334ED001A1FE0 /* MTRMetrics_Internal.h in Headers */, 5A6FEC9927B5C88900F25F42 /* MTRDeviceOverXPC.h in Headers */, + 9BC064942C6BCB6F00996FEF /* MTRXPCService.h in Headers */, B4FCD5732B611EB300832859 /* MTRDiagnosticLogsDownloader.h in Headers */, 51B22C222740CB1D008D5055 /* MTRCommandPayloadsObjc.h in Headers */, 51B22C1E2740CB0A008D5055 /* MTRStructsObjc.h in Headers */, @@ -1688,6 +1698,7 @@ 51D0B1382B618CC6006E3511 /* MTRServerAttribute.h in Headers */, 1EC4CE6425CC276600D7304F /* MTRBaseClusters.h in Headers */, 3D843712294977000070D20A /* MTRCallbackBridgeBase.h in Headers */, + 9BC064972C6BCBAE00996FEF /* MTRXPCServiceProtocol.h in Headers */, 3DECCB742934C21B00585AEC /* MTRDefines.h in Headers */, 51C659D92BA3787500C54922 /* MTRTimeUtils.h in Headers */, 75139A702B7FE68C00E3A919 /* MTRDeviceControllerLocalTestStorage.h in Headers */, @@ -2019,6 +2030,7 @@ 5A7947E427C0129600434CF2 /* MTRDeviceController+XPC.mm in Sources */, 5A6FEC9027B563D900F25F42 /* MTRDeviceControllerOverXPC.mm in Sources */, 516415FC2B6ACA8300D5CE11 /* MTRServerAccessControl.mm in Sources */, + 9BC064952C6BCB6F00996FEF /* MTRXPCService.m in Sources */, B289D4222639C0D300D4E314 /* MTROnboardingPayloadParser.mm in Sources */, 3CF134AD289D8E570017A19E /* MTRDeviceAttestationInfo.mm in Sources */, 2C1B027A2641DB4E00780EF1 /* MTROperationalCredentialsDelegate.mm in Sources */, From 9434b6827939d62663c53141771a13dfec4e2c50 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 12:08:05 -0700 Subject: [PATCH 02/75] XPC service needs to be C++ to use MTRLogging --- .../Framework/CHIP/{MTRXPCService.m => MTRXPCService.mm} | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) rename src/darwin/Framework/CHIP/{MTRXPCService.m => MTRXPCService.mm} (87%) diff --git a/src/darwin/Framework/CHIP/MTRXPCService.m b/src/darwin/Framework/CHIP/MTRXPCService.mm similarity index 87% rename from src/darwin/Framework/CHIP/MTRXPCService.m rename to src/darwin/Framework/CHIP/MTRXPCService.mm index f3b33a185824b5..d44dbb60fea341 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.m +++ b/src/darwin/Framework/CHIP/MTRXPCService.mm @@ -16,7 +16,11 @@ */ #import "MTRXPCService.h" +#import "MTRLogging.h" +#import "MTRLogging_Internal.h" @implementation MTRXPCService - +- (void)ping { + MTR_LOG_DEBUG("PING!"); +} @end From f5e31656efd28b0fec78d4ad3a878f0196099dec Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 12:08:54 -0700 Subject: [PATCH 03/75] add tests; stub method signature --- src/darwin/Framework/CHIP/MTRXPCService.h | 2 +- .../Framework/CHIPTests/MTRXPCServiceTests.m | 46 +++++++++++++++++++ .../Matter.xcodeproj/project.pbxproj | 14 ++++-- 3 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m diff --git a/src/darwin/Framework/CHIP/MTRXPCService.h b/src/darwin/Framework/CHIP/MTRXPCService.h index 4eb644db7a4422..2de3f2437246c8 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.h +++ b/src/darwin/Framework/CHIP/MTRXPCService.h @@ -21,7 +21,7 @@ NS_ASSUME_NONNULL_BEGIN @interface MTRXPCService : NSObject - +- (void)ping; @end NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m new file mode 100644 index 00000000000000..fe9aff88b6ed56 --- /dev/null +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -0,0 +1,46 @@ +// +/** + * 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 + +@interface MTRXPCServiceTests : XCTestCase + +@end + +@implementation MTRXPCServiceTests + +- (void)setUp { + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index 91a8025ca6a0d9..9ba4f8feadfd06 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -304,9 +304,10 @@ 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 */; }; 9BC064942C6BCB6F00996FEF /* MTRXPCService.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */; }; - 9BC064952C6BCB6F00996FEF /* MTRXPCService.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064932C6BCB6F00996FEF /* MTRXPCService.m */; }; + 9BC064952C6BCB6F00996FEF /* MTRXPCService.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064932C6BCB6F00996FEF /* MTRXPCService.mm */; }; 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */; }; 9BC064972C6BCBAE00996FEF /* MTRXPCServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */; }; + 9BC064992C6BCEA000996FEF /* MTRXPCServiceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */; }; 9BDA2A062C5D9AF800A32BDD /* MTRDevice_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */; }; 9BDA2A082C5D9AFB00A32BDD /* MTRDevice_Concrete.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */; }; AF1CB86E2874B03B00865A96 /* MTROTAProviderDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1CB86D2874B03B00865A96 /* MTROTAProviderDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -738,11 +739,11 @@ 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 = ""; }; 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCService.h; sourceTree = ""; }; 9BC064932C6BCB6F00996FEF /* MTRXPCService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCService.m; sourceTree = ""; }; 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceController_Concrete.mm; sourceTree = ""; }; 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceProtocol.h; sourceTree = ""; }; + 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCServiceTests.m; sourceTree = ""; }; 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDevice_Concrete.mm; sourceTree = ""; }; 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDevice_Concrete.h; sourceTree = ""; }; AF1CB86D2874B03B00865A96 /* MTROTAProviderDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTROTAProviderDelegate.h; sourceTree = ""; }; @@ -1324,7 +1325,7 @@ 7596A84328762729004DAE0E /* MTRDevice.mm */, 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */, 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */, - 9BC064932C6BCB6F00996FEF /* MTRXPCService.m */, + 9BC064932C6BCB6F00996FEF /* MTRXPCService.mm */, 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */, 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */, 88EBF8CB27FABDD500686BC1 /* MTRDeviceAttestationDelegate.h */, @@ -1459,6 +1460,7 @@ 5A7947DD27BEC3F500434CF2 /* MTRXPCListenerSampleTests.m */, 5A6FEC9C27B5E48800F25F42 /* MTRXPCProtocolTests.m */, 51189FC72A33ACE900184508 /* TestHelpers */, + 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */, ); path = CHIPTests; sourceTree = ""; @@ -2030,7 +2032,7 @@ 5A7947E427C0129600434CF2 /* MTRDeviceController+XPC.mm in Sources */, 5A6FEC9027B563D900F25F42 /* MTRDeviceControllerOverXPC.mm in Sources */, 516415FC2B6ACA8300D5CE11 /* MTRServerAccessControl.mm in Sources */, - 9BC064952C6BCB6F00996FEF /* MTRXPCService.m in Sources */, + 9BC064952C6BCB6F00996FEF /* MTRXPCService.mm in Sources */, B289D4222639C0D300D4E314 /* MTROnboardingPayloadParser.mm in Sources */, 3CF134AD289D8E570017A19E /* MTRDeviceAttestationInfo.mm in Sources */, 2C1B027A2641DB4E00780EF1 /* MTROperationalCredentialsDelegate.mm in Sources */, @@ -2100,6 +2102,7 @@ 5165A4B32C5AB978002B9799 /* MTRClusterNamesTests.m in Sources */, 51E95DF82A78110900A434F0 /* MTRPerControllerStorageTests.m in Sources */, 51D9CB0B2BA37DCE0049D6DB /* MTRDSTOffsetTests.m in Sources */, + 9BC064992C6BCEA000996FEF /* MTRXPCServiceTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2422,6 +2425,7 @@ buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = N42PSN93C7; "HEADER_SEARCH_PATHS[arch=*]" = "$(PROJECT_DIR)/../../../src"; INFOPLIST_FILE = CHIPTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -2592,7 +2596,7 @@ buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = N42PSN93C7; "HEADER_SEARCH_PATHS[arch=*]" = "$(PROJECT_DIR)/../../../src"; INFOPLIST_FILE = CHIPTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( From cb9c9a85318e47b61c54fe252025fd0d8b91db48 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 12:25:42 -0700 Subject: [PATCH 04/75] start configuring test XPC listener --- src/darwin/Framework/CHIP/MTRXPCService.h | 1 + src/darwin/Framework/CHIP/MTRXPCService.mm | 9 +++++ .../Framework/CHIPTests/MTRXPCServiceTests.m | 35 ++++++++++++++++++- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRXPCService.h b/src/darwin/Framework/CHIP/MTRXPCService.h index 2de3f2437246c8..1a0be79291c58b 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.h +++ b/src/darwin/Framework/CHIP/MTRXPCService.h @@ -22,6 +22,7 @@ NS_ASSUME_NONNULL_BEGIN @interface MTRXPCService : NSObject - (void)ping; ++ (NSXPCInterface *)xpcInterfaceForServiceServerProtocol; @end NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/MTRXPCService.mm b/src/darwin/Framework/CHIP/MTRXPCService.mm index d44dbb60fea341..8b48bc9c0c6485 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.mm +++ b/src/darwin/Framework/CHIP/MTRXPCService.mm @@ -18,8 +18,17 @@ #import "MTRXPCService.h" #import "MTRLogging.h" #import "MTRLogging_Internal.h" +#import "MTRXPCServiceProtocol.h" @implementation MTRXPCService + ++ (NSXPCInterface *)xpcInterfaceForServiceServerProtocol +{ + NSXPCInterface * xpcInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; + // TODO: add types for each selector + return xpcInterface; +} + - (void)ping { MTR_LOG_DEBUG("PING!"); } diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index fe9aff88b6ed56..a7c8e49cb43c1e 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -18,13 +18,46 @@ #import @interface MTRXPCServiceTests : XCTestCase - +@property (nonatomic, readwrite, strong) NSXPCListener * xpcListener; +@property (nonatomic, readwrite, strong) NSXPCInterface * serviceInterface; +@property (nonatomic, readwrite, strong) NSXPCInterface * clientInterface; +@property (readwrite, strong) NSXPCConnection * xpcConnection; @end @implementation MTRXPCServiceTests +// NSXPCListenerDelegate +- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection +{ + XCTAssertNil(_xpcConnection); + XCTAssertNotNil(newConnection); + NSLog(@"XPC listener accepting connection"); +// newConnection.exportedInterface = _serviceInterface; +// newConnection.remoteObjectInterface = _clientInterface; +// newConnection.exportedObject = self; +// newConnection.invalidationHandler = ^{ +// dispatch_async(dispatch_get_main_queue(), ^{ +// NSLog(@"XPC connection disconnected"); +// self.xpcConnection = nil; +// if (self.xpcDisconnectExpectation) { +// [self.xpcDisconnectExpectation fulfill]; +// self.xpcDisconnectExpectation = nil; +// } +// }); +// }; +// dispatch_async(dispatch_get_main_queue(), ^{ +// self.xpcConnection = newConnection; +// [newConnection resume]; +// }); + return YES; +} + - (void)setUp { // Put setup code here. This method is called before the invocation of each test method in the class. + _xpcListener = [NSXPCListener anonymousListener]; + [_xpcListener setDelegate:(id)self]; + _serviceInterface = [MTRXPCService xpcInterfaceForServiceServerProtocol]; + [_xpcListener resume]; } - (void)tearDown { From 325169d06cdaa52437e278e06da1626cf54830e4 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 12:47:33 -0700 Subject: [PATCH 05/75] add first test method to XPC service protocol --- src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h index 114f45ce5a36eb..e1d3a34e6f4392 100644 --- a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h +++ b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h @@ -20,7 +20,7 @@ NS_ASSUME_NONNULL_BEGIN @protocol MTRXPCServiceProtocol - +- (void)ping; @end NS_ASSUME_NONNULL_END From 1e88fab98f27e664a73d4bd2c5b83505cdb41386 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 12:48:07 -0700 Subject: [PATCH 06/75] tests: remove peformance test; add headers --- src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index a7c8e49cb43c1e..4ff465ab43beb3 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -16,6 +16,8 @@ */ #import +#import +#import "MTRXPCService.h" @interface MTRXPCServiceTests : XCTestCase @property (nonatomic, readwrite, strong) NSXPCListener * xpcListener; @@ -69,11 +71,4 @@ - (void)testExample { // Use XCTAssert and related functions to verify your tests produce the correct results. } -- (void)testPerformanceExample { - // This is an example of a performance test case. - [self measureBlock:^{ - // Put the code you want to measure the time of here. - }]; -} - @end From 205ccc3eedb7e786a06b21cc9390821b55885dda Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 14:12:39 -0700 Subject: [PATCH 07/75] make MTRXPCService testable --- src/darwin/Framework/CHIP/MTRXPCService.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/darwin/Framework/CHIP/MTRXPCService.h b/src/darwin/Framework/CHIP/MTRXPCService.h index 1a0be79291c58b..87339669ca5193 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.h +++ b/src/darwin/Framework/CHIP/MTRXPCService.h @@ -17,9 +17,11 @@ #import #import "MTRXPCServiceProtocol.h" +#import "MTRDefines_Internal.h" // MTR_TESTABLE NS_ASSUME_NONNULL_BEGIN +MTR_TESTABLE @interface MTRXPCService : NSObject - (void)ping; + (NSXPCInterface *)xpcInterfaceForServiceServerProtocol; From 94eccf4fa2d27e8f3a0b78db3dc9c6876e73f3fb Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 14:13:02 -0700 Subject: [PATCH 08/75] more working lines of XPC listener setup --- .../Framework/CHIPTests/MTRXPCServiceTests.m | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index 4ff465ab43beb3..a3252825fbaf76 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -34,23 +34,23 @@ - (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConne XCTAssertNil(_xpcConnection); XCTAssertNotNil(newConnection); NSLog(@"XPC listener accepting connection"); -// newConnection.exportedInterface = _serviceInterface; + newConnection.exportedInterface = _serviceInterface; // newConnection.remoteObjectInterface = _clientInterface; // newConnection.exportedObject = self; -// newConnection.invalidationHandler = ^{ -// dispatch_async(dispatch_get_main_queue(), ^{ -// NSLog(@"XPC connection disconnected"); -// self.xpcConnection = nil; + newConnection.invalidationHandler = ^{ + dispatch_async(dispatch_get_main_queue(), ^{ + NSLog(@"XPC connection disconnected"); + self.xpcConnection = nil; // if (self.xpcDisconnectExpectation) { // [self.xpcDisconnectExpectation fulfill]; // self.xpcDisconnectExpectation = nil; // } -// }); -// }; -// dispatch_async(dispatch_get_main_queue(), ^{ -// self.xpcConnection = newConnection; -// [newConnection resume]; -// }); + }); + }; + dispatch_async(dispatch_get_main_queue(), ^{ + self.xpcConnection = newConnection; + [newConnection resume]; + }); return YES; } From 2bee8fb86dfe50d01f06c51e7ab55a8aa67a6ed5 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 15:35:36 -0700 Subject: [PATCH 09/75] add dummy XPC service for testing --- .../MTRXPCServiceTestsDummyService.h | 29 +++++++++++++++ .../MTRXPCServiceTestsDummyService.m | 35 +++++++++++++++++++ .../Matter.xcodeproj/project.pbxproj | 6 ++++ 3 files changed, 70 insertions(+) create mode 100644 src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h create mode 100644 src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h new file mode 100644 index 00000000000000..3fef1a93ea40e3 --- /dev/null +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h @@ -0,0 +1,29 @@ +// +/** + * 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 +//@protocol MTRXPCServiceProtocol; +#import "MTRXPCServiceProtocol.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface MTRXPCServiceTestsDummyService: NSObject { + +} +@end + +NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m new file mode 100644 index 00000000000000..ce56a0484456ac --- /dev/null +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m @@ -0,0 +1,35 @@ +// +/** + * 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 "MTRXPCServiceTestsDummyService.h" +#import "MTRXPCServiceProtocol.h" + +@implementation MTRXPCServiceTestsDummyService { + +} + +- (void)ping { + NSLog(@"PONG! %s", __PRETTY_FUNCTION__); +} + +- (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply +{ + NSLog(@"gesticulating mimes in %s", __PRETTY_FUNCTION__); + reply(42); +} + +@end diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index 9ba4f8feadfd06..f28d1a67169b11 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -308,6 +308,7 @@ 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */; }; 9BC064972C6BCBAE00996FEF /* MTRXPCServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */; }; 9BC064992C6BCEA000996FEF /* MTRXPCServiceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */; }; + 9BC0649C2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC0649B2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m */; }; 9BDA2A062C5D9AF800A32BDD /* MTRDevice_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */; }; 9BDA2A082C5D9AFB00A32BDD /* MTRDevice_Concrete.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */; }; AF1CB86E2874B03B00865A96 /* MTROTAProviderDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1CB86D2874B03B00865A96 /* MTROTAProviderDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -744,6 +745,8 @@ 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceController_Concrete.mm; sourceTree = ""; }; 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceProtocol.h; sourceTree = ""; }; 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCServiceTests.m; sourceTree = ""; }; + 9BC0649A2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceTestsDummyService.h; sourceTree = ""; }; + 9BC0649B2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCServiceTestsDummyService.m; sourceTree = ""; }; 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDevice_Concrete.mm; sourceTree = ""; }; 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDevice_Concrete.h; sourceTree = ""; }; AF1CB86D2874B03B00865A96 /* MTROTAProviderDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTROTAProviderDelegate.h; sourceTree = ""; }; @@ -1461,6 +1464,8 @@ 5A6FEC9C27B5E48800F25F42 /* MTRXPCProtocolTests.m */, 51189FC72A33ACE900184508 /* TestHelpers */, 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */, + 9BC0649A2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.h */, + 9BC0649B2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m */, ); path = CHIPTests; sourceTree = ""; @@ -2102,6 +2107,7 @@ 5165A4B32C5AB978002B9799 /* MTRClusterNamesTests.m in Sources */, 51E95DF82A78110900A434F0 /* MTRPerControllerStorageTests.m in Sources */, 51D9CB0B2BA37DCE0049D6DB /* MTRDSTOffsetTests.m in Sources */, + 9BC0649C2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m in Sources */, 9BC064992C6BCEA000996FEF /* MTRXPCServiceTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; From bd74185ddcb948626038d0f9a5fb428fb336dee0 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 15:45:09 -0700 Subject: [PATCH 10/75] add replying method to service protocol / implementation --- src/darwin/Framework/CHIP/MTRXPCService.mm | 11 +++++++++-- src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h | 3 +++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRXPCService.mm b/src/darwin/Framework/CHIP/MTRXPCService.mm index 8b48bc9c0c6485..9c2a11e4eb2a5a 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.mm +++ b/src/darwin/Framework/CHIP/MTRXPCService.mm @@ -29,7 +29,14 @@ + (NSXPCInterface *)xpcInterfaceForServiceServerProtocol return xpcInterface; } -- (void)ping { - MTR_LOG_DEBUG("PING!"); +- (void)ping +{ + MTR_LOG_DEBUG("PONG! %s", __PRETTY_FUNCTION__); } + +- (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply +{ + reply(42); +} + @end diff --git a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h index e1d3a34e6f4392..24bcd1bbbfe329 100644 --- a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h +++ b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h @@ -19,8 +19,11 @@ NS_ASSUME_NONNULL_BEGIN +typedef void(^MTRXPCServiceIntReplyBlock)(int); + @protocol MTRXPCServiceProtocol - (void)ping; +- (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply; @end NS_ASSUME_NONNULL_END From 633c6d86983734b9689c195f32c994f8a93505de Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 15:45:29 -0700 Subject: [PATCH 11/75] remove log - reply contents can be asserted --- src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m | 1 - 1 file changed, 1 deletion(-) diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m index ce56a0484456ac..613d606b993484 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m @@ -28,7 +28,6 @@ - (void)ping { - (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply { - NSLog(@"gesticulating mimes in %s", __PRETTY_FUNCTION__); reply(42); } From 5fa05025709a93b423b28fcf590b55474ab9dc61 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 15:45:53 -0700 Subject: [PATCH 12/75] make test interesting --- .../Framework/CHIPTests/MTRXPCServiceTests.m | 52 ++++++++++++++++--- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index a3252825fbaf76..064eb2e91bec56 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -18,28 +18,40 @@ #import #import #import "MTRXPCService.h" +#import "MTRXPCServiceProtocol.h" +#import "MTRXPCServiceTestsDummyService.h" @interface MTRXPCServiceTests : XCTestCase + @property (nonatomic, readwrite, strong) NSXPCListener * xpcListener; @property (nonatomic, readwrite, strong) NSXPCInterface * serviceInterface; @property (nonatomic, readwrite, strong) NSXPCInterface * clientInterface; @property (readwrite, strong) NSXPCConnection * xpcConnection; + +@property (nonatomic, readwrite, strong) MTRXPCServiceTestsDummyService * dummyService; + @end + + + @implementation MTRXPCServiceTests // NSXPCListenerDelegate - (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection { + NSLog(@"%s: XPC listener accepting connection", __PRETTY_FUNCTION__); + XCTAssertNil(_xpcConnection); XCTAssertNotNil(newConnection); - NSLog(@"XPC listener accepting connection"); + XCTAssertNotNil(_dummyService); + newConnection.exportedInterface = _serviceInterface; -// newConnection.remoteObjectInterface = _clientInterface; -// newConnection.exportedObject = self; + newConnection.exportedObject = _dummyService; +// newConnection.remoteObjectInterface = _serviceInterface; newConnection.invalidationHandler = ^{ dispatch_async(dispatch_get_main_queue(), ^{ - NSLog(@"XPC connection disconnected"); + NSLog(@"%s: XPC connection disconnected", __PRETTY_FUNCTION__); self.xpcConnection = nil; // if (self.xpcDisconnectExpectation) { // [self.xpcDisconnectExpectation fulfill]; @@ -54,21 +66,45 @@ - (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConne return YES; } +// end NSXPCListenerDelegate + - (void)setUp { - // Put setup code here. This method is called before the invocation of each test method in the class. + _dummyService = [[MTRXPCServiceTestsDummyService alloc] init]; _xpcListener = [NSXPCListener anonymousListener]; [_xpcListener setDelegate:(id)self]; _serviceInterface = [MTRXPCService xpcInterfaceForServiceServerProtocol]; [_xpcListener resume]; + XCTAssertNotNil(_xpcListener); + NSLog(@"%s: done", __PRETTY_FUNCTION__); } - (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. + _xpcListener.delegate = nil; + _xpcListener = nil; + _serviceInterface = nil; + _dummyService = nil; } - (void)testExample { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. + NSLog(@"%s", __PRETTY_FUNCTION__); + + XCTAssertNotNil(_xpcListener); + XCTAssertNotNil(_xpcListener.endpoint); + NSXPCConnection * serviceConnection = [[NSXPCConnection alloc] initWithListenerEndpoint:_xpcListener.endpoint]; + serviceConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; + id obj = serviceConnection.remoteObjectProxy; + + [serviceConnection resume]; + + XCTAssertNotNil(obj); + + [obj ping]; + + [obj getMeaningOfLifeWithReplyBlock:^(int meaning) { + XCTAssertEqual(meaning, 42); + }]; + + NSLog(@"done with %s", __PRETTY_FUNCTION__); } @end From d21d1b196e612d664ad0638bfc0168fb7a8e21be Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 15:46:04 -0700 Subject: [PATCH 13/75] linty formatty --- .../Framework/CHIPTests/MTRXPCServiceTestsDummyService.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h index 3fef1a93ea40e3..f882e9d2b7587b 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h @@ -16,13 +16,12 @@ */ #import -//@protocol MTRXPCServiceProtocol; #import "MTRXPCServiceProtocol.h" NS_ASSUME_NONNULL_BEGIN -@interface MTRXPCServiceTestsDummyService: NSObject { - +@interface MTRXPCServiceTestsDummyService: NSObject +{ } @end From 82667bbb753f2ce030e7910120550b89fb3eb28b Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 15:59:37 -0700 Subject: [PATCH 14/75] remove personal development team from pbxproj --- src/darwin/Framework/Matter.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index f28d1a67169b11..70b27c61c54e1f 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -2431,7 +2431,7 @@ buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = N42PSN93C7; + DEVELOPMENT_TEAM = ""; "HEADER_SEARCH_PATHS[arch=*]" = "$(PROJECT_DIR)/../../../src"; INFOPLIST_FILE = CHIPTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -2602,7 +2602,7 @@ buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = N42PSN93C7; + DEVELOPMENT_TEAM = ""; "HEADER_SEARCH_PATHS[arch=*]" = "$(PROJECT_DIR)/../../../src"; INFOPLIST_FILE = CHIPTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( From b1b6ba0916033e1f4e5801a35a60076ce47955ed Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 16:08:15 -0700 Subject: [PATCH 15/75] fix new file headers --- src/darwin/Framework/CHIP/MTRXPCService.h | 3 +-- src/darwin/Framework/CHIP/MTRXPCService.mm | 3 +-- src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h | 3 +-- src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m | 3 +-- .../Framework/CHIPTests/MTRXPCServiceTestsDummyService.h | 3 +-- .../Framework/CHIPTests/MTRXPCServiceTestsDummyService.m | 3 +-- 6 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRXPCService.h b/src/darwin/Framework/CHIP/MTRXPCService.h index 87339669ca5193..1e68ab464262a9 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.h +++ b/src/darwin/Framework/CHIP/MTRXPCService.h @@ -1,6 +1,5 @@ -// /** - * Copyright (c) 2023 Project CHIP Authors + * Copyright (c) 2024 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. diff --git a/src/darwin/Framework/CHIP/MTRXPCService.mm b/src/darwin/Framework/CHIP/MTRXPCService.mm index 9c2a11e4eb2a5a..a4d2d8ef7b4048 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.mm +++ b/src/darwin/Framework/CHIP/MTRXPCService.mm @@ -1,6 +1,5 @@ -// /** - * Copyright (c) 2023 Project CHIP Authors + * Copyright (c) 2024 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. diff --git a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h index 24bcd1bbbfe329..f3253cf8164ed7 100644 --- a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h +++ b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h @@ -1,6 +1,5 @@ -// /** - * Copyright (c) 2023 Project CHIP Authors + * Copyright (c) 2024 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. diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index 064eb2e91bec56..f4726702aab056 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -1,6 +1,5 @@ -// /** - * Copyright (c) 2023 Project CHIP Authors + * Copyright (c) 2024 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. diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h index f882e9d2b7587b..1e60bc1e7280da 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h @@ -1,6 +1,5 @@ -// /** - * Copyright (c) 2023 Project CHIP Authors + * Copyright (c) 2024 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. diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m index 613d606b993484..2585e9720608d9 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m @@ -1,6 +1,5 @@ -// /** - * Copyright (c) 2023 Project CHIP Authors + * Copyright (c) 2024 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. From 6988477c239c5f3856a8698b0c8014d429f59243 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Tue, 13 Aug 2024 16:10:04 -0700 Subject: [PATCH 16/75] less whitespace --- src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index f4726702aab056..9093b66d143bc1 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -31,9 +31,6 @@ @interface MTRXPCServiceTests : XCTestCase @end - - - @implementation MTRXPCServiceTests // NSXPCListenerDelegate From 3470b659767eb9b9e6aa5ea6785ed0bad2d3fa36 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Tue, 13 Aug 2024 23:10:25 +0000 Subject: [PATCH 17/75] Restyled by whitespace --- src/darwin/Framework/CHIP/MTRXPCService.mm | 2 +- src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRXPCService.mm b/src/darwin/Framework/CHIP/MTRXPCService.mm index a4d2d8ef7b4048..4600e4d411811b 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.mm +++ b/src/darwin/Framework/CHIP/MTRXPCService.mm @@ -28,7 +28,7 @@ + (NSXPCInterface *)xpcInterfaceForServiceServerProtocol return xpcInterface; } -- (void)ping +- (void)ping { MTR_LOG_DEBUG("PONG! %s", __PRETTY_FUNCTION__); } diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index 9093b66d143bc1..973a7f56a139ba 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -83,7 +83,7 @@ - (void)tearDown { - (void)testExample { NSLog(@"%s", __PRETTY_FUNCTION__); - + XCTAssertNotNil(_xpcListener); XCTAssertNotNil(_xpcListener.endpoint); NSXPCConnection * serviceConnection = [[NSXPCConnection alloc] initWithListenerEndpoint:_xpcListener.endpoint]; @@ -95,7 +95,7 @@ - (void)testExample { XCTAssertNotNil(obj); [obj ping]; - + [obj getMeaningOfLifeWithReplyBlock:^(int meaning) { XCTAssertEqual(meaning, 42); }]; From b00bec3d9a5c8e405a4875786cde495ae3027f42 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Tue, 13 Aug 2024 23:10:26 +0000 Subject: [PATCH 18/75] Restyled by clang-format --- src/darwin/Framework/CHIP/MTRXPCService.h | 6 ++--- .../Framework/CHIP/MTRXPCServiceProtocol.h | 2 +- .../Framework/CHIPTests/MTRXPCServiceTests.m | 25 +++++++++++-------- .../MTRXPCServiceTestsDummyService.h | 5 ++-- .../MTRXPCServiceTestsDummyService.m | 4 +-- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRXPCService.h b/src/darwin/Framework/CHIP/MTRXPCService.h index 1e68ab464262a9..da1091ac62c350 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.h +++ b/src/darwin/Framework/CHIP/MTRXPCService.h @@ -14,14 +14,14 @@ * limitations under the License. */ -#import +#import "MTRDefines_Internal.h" // MTR_TESTABLE #import "MTRXPCServiceProtocol.h" -#import "MTRDefines_Internal.h" // MTR_TESTABLE +#import NS_ASSUME_NONNULL_BEGIN MTR_TESTABLE -@interface MTRXPCService : NSObject +@interface MTRXPCService : NSObject - (void)ping; + (NSXPCInterface *)xpcInterfaceForServiceServerProtocol; @end diff --git a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h index f3253cf8164ed7..8e317c3d3bcb57 100644 --- a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h +++ b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h @@ -18,7 +18,7 @@ NS_ASSUME_NONNULL_BEGIN -typedef void(^MTRXPCServiceIntReplyBlock)(int); +typedef void (^MTRXPCServiceIntReplyBlock)(int); @protocol MTRXPCServiceProtocol - (void)ping; diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index 973a7f56a139ba..c6eb62c98daf0d 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -14,11 +14,11 @@ * limitations under the License. */ -#import -#import #import "MTRXPCService.h" #import "MTRXPCServiceProtocol.h" #import "MTRXPCServiceTestsDummyService.h" +#import +#import @interface MTRXPCServiceTests : XCTestCase @@ -44,15 +44,15 @@ - (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConne newConnection.exportedInterface = _serviceInterface; newConnection.exportedObject = _dummyService; -// newConnection.remoteObjectInterface = _serviceInterface; + // newConnection.remoteObjectInterface = _serviceInterface; newConnection.invalidationHandler = ^{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"%s: XPC connection disconnected", __PRETTY_FUNCTION__); self.xpcConnection = nil; -// if (self.xpcDisconnectExpectation) { -// [self.xpcDisconnectExpectation fulfill]; -// self.xpcDisconnectExpectation = nil; -// } + // if (self.xpcDisconnectExpectation) { + // [self.xpcDisconnectExpectation fulfill]; + // self.xpcDisconnectExpectation = nil; + // } }); }; dispatch_async(dispatch_get_main_queue(), ^{ @@ -64,24 +64,27 @@ - (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConne // end NSXPCListenerDelegate -- (void)setUp { +- (void)setUp +{ _dummyService = [[MTRXPCServiceTestsDummyService alloc] init]; _xpcListener = [NSXPCListener anonymousListener]; - [_xpcListener setDelegate:(id)self]; + [_xpcListener setDelegate:(id) self]; _serviceInterface = [MTRXPCService xpcInterfaceForServiceServerProtocol]; [_xpcListener resume]; XCTAssertNotNil(_xpcListener); NSLog(@"%s: done", __PRETTY_FUNCTION__); } -- (void)tearDown { +- (void)tearDown +{ _xpcListener.delegate = nil; _xpcListener = nil; _serviceInterface = nil; _dummyService = nil; } -- (void)testExample { +- (void)testExample +{ NSLog(@"%s", __PRETTY_FUNCTION__); XCTAssertNotNil(_xpcListener); diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h index 1e60bc1e7280da..d78389316d03d0 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h @@ -14,13 +14,12 @@ * limitations under the License. */ -#import #import "MTRXPCServiceProtocol.h" +#import NS_ASSUME_NONNULL_BEGIN -@interface MTRXPCServiceTestsDummyService: NSObject -{ +@interface MTRXPCServiceTestsDummyService : NSObject { } @end diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m index 2585e9720608d9..3d39e94c6a3777 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m @@ -18,10 +18,10 @@ #import "MTRXPCServiceProtocol.h" @implementation MTRXPCServiceTestsDummyService { - } -- (void)ping { +- (void)ping +{ NSLog(@"PONG! %s", __PRETTY_FUNCTION__); } From 109d81df5911828f3a0588d5ece411ca8c4e3a6c Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Wed, 14 Aug 2024 12:03:57 -0700 Subject: [PATCH 19/75] add new XPC device controller --- .../Framework/CHIP/MTRDeviceController_XPC.h | 26 +++++++++++++++++ .../Framework/CHIP/MTRDeviceController_XPC.mm | 29 +++++++++++++++++++ .../Matter.xcodeproj/project.pbxproj | 8 +++++ 3 files changed, 63 insertions(+) create mode 100644 src/darwin/Framework/CHIP/MTRDeviceController_XPC.h create mode 100644 src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h new file mode 100644 index 00000000000000..4b6332864a2ad8 --- /dev/null +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import "MTRDeviceController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface MTRDeviceController_XPC : MTRDeviceController + +@end + +NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm new file mode 100644 index 00000000000000..b404afb70c4210 --- /dev/null +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2024 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 "MTRDeviceController_XPC.h" +#import "MTRLogging_Internal.h" + +@implementation MTRDeviceController_XPC + +- (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters + error:(NSError * __autoreleasing *)error +{ + MTR_LOG_ERROR("unimplemented method %s called", __PRETTY_FUNCTION__); + return nil; +} + +@end diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index 70b27c61c54e1f..445994253a0fcb 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -311,6 +311,8 @@ 9BC0649C2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC0649B2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m */; }; 9BDA2A062C5D9AF800A32BDD /* MTRDevice_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */; }; 9BDA2A082C5D9AFB00A32BDD /* MTRDevice_Concrete.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */; }; + 9BFE5D502C6D3075007D4319 /* MTRDeviceController_XPC.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BFE5D4E2C6D3075007D4319 /* MTRDeviceController_XPC.h */; }; + 9BFE5D512C6D3075007D4319 /* MTRDeviceController_XPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BFE5D4F2C6D3075007D4319 /* MTRDeviceController_XPC.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 */; }; @@ -749,6 +751,8 @@ 9BC0649B2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCServiceTestsDummyService.m; sourceTree = ""; }; 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDevice_Concrete.mm; sourceTree = ""; }; 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDevice_Concrete.h; sourceTree = ""; }; + 9BFE5D4E2C6D3075007D4319 /* MTRDeviceController_XPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceController_XPC.h; sourceTree = ""; }; + 9BFE5D4F2C6D3075007D4319 /* MTRDeviceController_XPC.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceController_XPC.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 = ""; }; @@ -1341,6 +1345,8 @@ 75B3269B2BCDB9D600E17C4E /* MTRDeviceConnectivityMonitor.h */, 75B3269D2BCDB9EA00E17C4E /* MTRDeviceConnectivityMonitor.mm */, 991DC0822475F45400C13860 /* MTRDeviceController.h */, + 9BFE5D4E2C6D3075007D4319 /* MTRDeviceController_XPC.h */, + 9BFE5D4F2C6D3075007D4319 /* MTRDeviceController_XPC.mm */, 5136660F28067D540025EDAE /* MTRDeviceController_Internal.h */, 991DC0872475F47D00C13860 /* MTRDeviceController.mm */, 5A7947E227C0101200434CF2 /* MTRDeviceController+XPC.h */, @@ -1663,6 +1669,7 @@ 7596A84F2877E6A9004DAE0E /* MTRCluster_Internal.h in Headers */, 991DC0842475F45400C13860 /* MTRDeviceController.h in Headers */, 88FA798D2B7B257100CD4B6F /* MTRMetricsCollector.h in Headers */, + 9BFE5D502C6D3075007D4319 /* MTRDeviceController_XPC.h in Headers */, 88E6C9462B6334ED001A1FE0 /* MTRMetrics.h in Headers */, AF1CB86E2874B03B00865A96 /* MTROTAProviderDelegate.h in Headers */, 51D0B1402B61B3A4006E3511 /* MTRServerCluster.h in Headers */, @@ -2019,6 +2026,7 @@ 51D0B12F2B617800006E3511 /* MTRAccessGrant.mm in Sources */, 88E6C9482B6334ED001A1FE0 /* MTRMetrics.mm in Sources */, 1ED276E226C5812A00547A89 /* MTRCluster.mm in Sources */, + 9BFE5D512C6D3075007D4319 /* MTRDeviceController_XPC.mm in Sources */, B2E0D7B3245B0B5C003C5B48 /* MTRError.mm in Sources */, 51E51FC1282AD37A00FC978D /* MTRDeviceControllerStartupParams.mm in Sources */, 51565CAE2A79D42100469F18 /* MTRConversion.mm in Sources */, From 46cd30b67a616b566cbc931339518031a9155cb3 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Wed, 14 Aug 2024 13:32:29 -0700 Subject: [PATCH 20/75] sketch out a first XPC method --- .../Framework/CHIP/MTRDeviceController_XPC.mm | 26 +++++++++++++++++++ .../Framework/CHIP/MTRXPCServiceProtocol.h | 11 ++++++++ 2 files changed, 37 insertions(+) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index b404afb70c4210..92aac591a31756 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -17,13 +17,39 @@ #import "MTRDeviceController_XPC.h" #import "MTRLogging_Internal.h" +@interface MTRDeviceController_XPC () +@property (nonatomic, strong) NSXPCConnection * xpcConnection; +@end + @implementation MTRDeviceController_XPC - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { MTR_LOG_ERROR("unimplemented method %s called", __PRETTY_FUNCTION__); + // initiate XPC connection? kmo 14 aug 2024 12h35 return nil; } +- (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload + newNodeID:(NSNumber *)newNodeID + error:(NSError * __autoreleasing *)error +{ + // xpc things obviously! kmo 14 aug 2024 12h35 + // transform async work to sync work + + MTR_LOG_ERROR("unimplemented method %s called", __PRETTY_FUNCTION__); + return false; +} + +typedef void (^BoolReplyBlock)(bool); +- (void)_xpc_setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload + newNodeID:(NSNumber *)newNodeID + error:(NSError * __autoreleasing *)error + reply:(BoolReplyBlock)reply +{ + MTR_LOG_ERROR("unimplemented XPC method %s called", __PRETTY_FUNCTION__); + reply(false); +} + @end diff --git a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h index 8e317c3d3bcb57..3b35cd182b7f3c 100644 --- a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h +++ b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h @@ -16,13 +16,24 @@ #import +@class MTRSetupPayload; + NS_ASSUME_NONNULL_BEGIN typedef void (^MTRXPCServiceIntReplyBlock)(int); +typedef void (^MTRXPCServiceBoolReplyBlock)(BOOL); @protocol MTRXPCServiceProtocol - (void)ping; - (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply; + +// these real methods will be optional for now, but not when we are done building here. +@optional +- (void)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload +newNodeID:(NSNumber *)newNodeID +error:(NSError * __autoreleasing *)error +reply:(MTRXPCServiceBoolReplyBlock)reply; + @end NS_ASSUME_NONNULL_END From 1e4db9daf9d24c10ae88041bb4ff73e1dadcecec Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Thu, 15 Aug 2024 09:50:59 -0700 Subject: [PATCH 21/75] store WIP for rebase --- .../Framework/CHIP/MTRDeviceController_XPC.h | 2 +- .../Framework/CHIP/MTRDeviceController_XPC.mm | 61 ++++++++++++++----- src/darwin/Framework/CHIP/MTRXPCService.mm | 14 ++++- .../Framework/CHIP/MTRXPCServiceProtocol.h | 19 ++++-- .../MTRXPCServiceTestsDummyService.m | 10 +++ .../Matter.xcodeproj/project.pbxproj | 2 + 6 files changed, 84 insertions(+), 24 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h index 4b6332864a2ad8..50f18684b3d13c 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h @@ -19,7 +19,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface MTRDeviceController_XPC : MTRDeviceController +@interface MTRDeviceController_XPC : MTRDeviceController // temporarily XPCListenerDelegate @end diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index 92aac591a31756..cfc8edc9045465 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -15,14 +15,56 @@ */ #import "MTRDeviceController_XPC.h" +#import "MTRXPCServiceProtocol.h" #import "MTRLogging_Internal.h" +#import "MTRDeviceController_Internal.h" @interface MTRDeviceController_XPC () -@property (nonatomic, strong) NSXPCConnection * xpcConnection; +@property (retain, readwrite) NSXPCConnection * xpcConnection; +@property (retain, readwrite) id xpcRemoteObjectProxy; + +// testing only +@property (retain, readwrite) NSXPCListener * testListener; + +@end + +@implementation MTRDeviceController_XPC (TestXPCListener) + @end @implementation MTRDeviceController_XPC +- (id)initWithTestXPCListener { + // TODO: update with well-known service name +// self.xpcConnection = [[NSXPCConnection alloc] initWithServiceName:@"wellknown"]; + + // testing mode + self.testListener = [NSXPCListener anonymousListener]; + [self.testListener setDelegate:self]; + [self.testListener resume]; + NSXPCConnection * xpcConnection = [[NSXPCConnection alloc] initWithListenerEndpoint:self.testListener.endpoint]; + + return [self initWithXPCConnection:xpcConnection]; +} + +- (id)initWithXPCConnection:(NSXPCConnection *)newConnection +{ +// if (!(self = [super initForSubclasses])) { +// return nil; +// } + + self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; + self.xpcRemoteObjectProxy = self.xpcConnection.remoteObjectProxy; + [self.xpcConnection resume]; + + // ping and meaning of life just as a test + [self.xpcRemoteObjectProxy ping]; + NSNumber * lifeMeaning = [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; + NSLog(@"meaning of life appears to be %@", lifeMeaning); + + return self; +} + - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { @@ -35,21 +77,8 @@ - (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload newNodeID:(NSNumber *)newNodeID error:(NSError * __autoreleasing *)error { - // xpc things obviously! kmo 14 aug 2024 12h35 - // transform async work to sync work - - MTR_LOG_ERROR("unimplemented method %s called", __PRETTY_FUNCTION__); - return false; -} - -typedef void (^BoolReplyBlock)(bool); -- (void)_xpc_setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload - newNodeID:(NSNumber *)newNodeID - error:(NSError * __autoreleasing *)error - reply:(BoolReplyBlock)reply -{ - MTR_LOG_ERROR("unimplemented XPC method %s called", __PRETTY_FUNCTION__); - reply(false); + MTR_LOG_DEBUG("called XPC stub %s", __PRETTY_FUNCTION__); + return [self.xpcRemoteObjectProxy setupCommissioningSessionWithPayload:payload newNodeID:newNodeID error:error]; } @end diff --git a/src/darwin/Framework/CHIP/MTRXPCService.mm b/src/darwin/Framework/CHIP/MTRXPCService.mm index 4600e4d411811b..ed7eb62ed3be01 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.mm +++ b/src/darwin/Framework/CHIP/MTRXPCService.mm @@ -33,9 +33,21 @@ - (void)ping MTR_LOG_DEBUG("PONG! %s", __PRETTY_FUNCTION__); } -- (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply +- (nonnull NSNumber *)synchronouslyGetMeaningOfLife { + return @(42); +} + +- (void)getMeaningOfLifeWithReplyBlock:(nonnull MTRXPCServiceIntReplyBlock)reply { reply(42); } +- (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload + newNodeID:(NSNumber *)newNodeID + error:(NSError * __autoreleasing *)error +{ + // temporary stub implementation + return false; +} + @end diff --git a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h index 3b35cd182b7f3c..0bc1be1d98fff7 100644 --- a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h +++ b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h @@ -25,14 +25,21 @@ typedef void (^MTRXPCServiceBoolReplyBlock)(BOOL); @protocol MTRXPCServiceProtocol - (void)ping; +- (NSNumber *)synchronouslyGetMeaningOfLife; - (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply; -// these real methods will be optional for now, but not when we are done building here. -@optional -- (void)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload -newNodeID:(NSNumber *)newNodeID -error:(NSError * __autoreleasing *)error -reply:(MTRXPCServiceBoolReplyBlock)reply; +// temporary inclusion +- (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload + newNodeID:(NSNumber *)newNodeID + error:(NSError * __autoreleasing *)error; + +@end + +@protocol MTRXPCServiceDeviceControllerProtocol + +- (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload + newNodeID:(NSNumber *)newNodeID + error:(NSError * __autoreleasing *)error; @end diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m index 3d39e94c6a3777..18b0214cc8290f 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m @@ -30,4 +30,14 @@ - (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply reply(42); } +- (BOOL)setupCommissioningSessionWithPayload:(nonnull MTRSetupPayload *)payload newNodeID:(nonnull NSNumber *)newNodeID error:(NSError *__autoreleasing _Nullable * _Nullable)error { + return false; +} + + +- (nonnull NSNumber *)synchronouslyGetMeaningOfLife { + return @42; +} + + @end diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index 445994253a0fcb..aa5f122f37287c 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -303,6 +303,7 @@ 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 */; }; + 9B4143812C6E662300B86FBD /* MTRXPCServiceTestsDummyService.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC0649B2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m */; }; 9BC064942C6BCB6F00996FEF /* MTRXPCService.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */; }; 9BC064952C6BCB6F00996FEF /* MTRXPCService.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064932C6BCB6F00996FEF /* MTRXPCService.mm */; }; 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */; }; @@ -2039,6 +2040,7 @@ 5ACDDD7D27CD16D200EFD68A /* MTRClusterStateCacheContainer.mm in Sources */, 75B3269E2BCDB9EA00E17C4E /* MTRDeviceConnectivityMonitor.mm in Sources */, 513DDB8A2761F6F900DAA01A /* MTRAttributeTLVValueDecoder.mm in Sources */, + 9B4143812C6E662300B86FBD /* MTRXPCServiceTestsDummyService.m in Sources */, 5117DD3829A931AE00FFA1AA /* MTROperationalBrowser.mm in Sources */, 514C79F02B62ADDA00DD6D7B /* descriptor.cpp in Sources */, 3D843757294AD25A0070D20A /* MTRCertificateInfo.mm in Sources */, From ff7d8b9282a4d8fb8fa021b14e82a64cfbad5f0a Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Thu, 15 Aug 2024 10:07:48 -0700 Subject: [PATCH 22/75] fix pbxproj merge mistake --- .../Framework/Matter.xcodeproj/project.pbxproj | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index aa5f122f37287c..c0d724d82bf95f 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -302,11 +302,11 @@ 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 */; }; + 9B231B042C62EF650030EB37 /* (null) in Headers */ = {isa = PBXBuildFile; }; + 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */; }; 9B4143812C6E662300B86FBD /* MTRXPCServiceTestsDummyService.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC0649B2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m */; }; + 9B5CCB572C6E6CC9009DD99B /* MTRXPCService.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */; }; 9BC064942C6BCB6F00996FEF /* MTRXPCService.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */; }; - 9BC064952C6BCB6F00996FEF /* MTRXPCService.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064932C6BCB6F00996FEF /* MTRXPCService.mm */; }; - 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */; }; 9BC064972C6BCBAE00996FEF /* MTRXPCServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */; }; 9BC064992C6BCEA000996FEF /* MTRXPCServiceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */; }; 9BC0649C2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC0649B2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m */; }; @@ -743,9 +743,9 @@ 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 = ""; }; - 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCService.h; sourceTree = ""; }; - 9BC064932C6BCB6F00996FEF /* MTRXPCService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCService.m; sourceTree = ""; }; 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceController_Concrete.mm; sourceTree = ""; }; + 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRXPCService.mm; sourceTree = ""; }; + 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCService.h; sourceTree = ""; }; 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceProtocol.h; sourceTree = ""; }; 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCServiceTests.m; sourceTree = ""; }; 9BC0649A2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceTestsDummyService.h; sourceTree = ""; }; @@ -1333,7 +1333,7 @@ 7596A84328762729004DAE0E /* MTRDevice.mm */, 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */, 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */, - 9BC064932C6BCB6F00996FEF /* MTRXPCService.mm */, + 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */, 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */, 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */, 88EBF8CB27FABDD500686BC1 /* MTRDeviceAttestationDelegate.h */, @@ -1723,7 +1723,7 @@ 51E51FC0282AD37A00FC978D /* MTRDeviceControllerStartupParams_Internal.h in Headers */, 3DECCB702934AECD00585AEC /* MTRLogging.h in Headers */, 1E4D654E29C208DD00BC3478 /* MTRCommissionableBrowserResult.h in Headers */, - 9B231B042C62EF650030EB37 /* MTRDeviceController_Concrete.h in Headers */, + 9B231B042C62EF650030EB37 /* (null) in Headers */, 515BE4ED2B72C0C5000BC1FD /* MTRUnfairLock.h in Headers */, 998F286F26D55EC5001846C6 /* MTRP256KeypairBridge.h in Headers */, 2C222ADF255C811800E446B9 /* MTRBaseDevice_Internal.h in Headers */, @@ -2047,13 +2047,13 @@ 5A7947E427C0129600434CF2 /* MTRDeviceController+XPC.mm in Sources */, 5A6FEC9027B563D900F25F42 /* MTRDeviceControllerOverXPC.mm in Sources */, 516415FC2B6ACA8300D5CE11 /* MTRServerAccessControl.mm in Sources */, - 9BC064952C6BCB6F00996FEF /* MTRXPCService.mm in Sources */, B289D4222639C0D300D4E314 /* MTROnboardingPayloadParser.mm in Sources */, 3CF134AD289D8E570017A19E /* MTRDeviceAttestationInfo.mm in Sources */, 2C1B027A2641DB4E00780EF1 /* MTROperationalCredentialsDelegate.mm in Sources */, 754784652BFE65CB0089C372 /* MTRDeviceStorageBehaviorConfiguration.mm in Sources */, 7560FD1C27FBBD3F005E85B3 /* MTREventTLVValueDecoder.mm in Sources */, 5178E67E2AE098210069DF72 /* MTRCommandTimedCheck.mm in Sources */, + 9B5CCB572C6E6CC9009DD99B /* MTRXPCService.mm in Sources */, 7596A84928762783004DAE0E /* MTRAsyncCallbackWorkQueue.mm in Sources */, B2E0D7B9245B0B5C003C5B48 /* MTRSetupPayload.mm in Sources */, E04AC67F2BEEA17F00BA409B /* ember-global-attribute-access-interface.cpp in Sources */, From e18075611078fae844fc34a0ab2ec6cfb8402bcb Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Thu, 15 Aug 2024 10:07:59 -0700 Subject: [PATCH 23/75] make WIP slightly more sensible --- src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index cfc8edc9045465..ccd645ce1ccc83 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -49,9 +49,9 @@ - (id)initWithTestXPCListener { - (id)initWithXPCConnection:(NSXPCConnection *)newConnection { -// if (!(self = [super initForSubclasses])) { -// return nil; -// } + if (!(self = [super initForSubclasses])) { + return nil; + } self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; self.xpcRemoteObjectProxy = self.xpcConnection.remoteObjectProxy; From 12867fa9ec99550564f6ee841bd614e06731f6d5 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Thu, 15 Aug 2024 10:56:14 -0700 Subject: [PATCH 24/75] WIP: remote proxy obj in `MTRDeviceController_XPC` --- .../Framework/CHIP/MTRDeviceController_XPC.h | 4 +- .../Framework/CHIP/MTRDeviceController_XPC.mm | 37 +++++++------------ .../CHIP/MTRDeviceController_XPC_Internal.h | 26 +++++++++++++ .../Framework/CHIPTests/MTRXPCServiceTests.m | 13 +++++++ .../Matter.xcodeproj/project.pbxproj | 6 ++- 5 files changed, 59 insertions(+), 27 deletions(-) create mode 100644 src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h index 50f18684b3d13c..2251a3cfdae86f 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h @@ -16,10 +16,12 @@ #import #import "MTRDeviceController.h" +#import "MTRDefines_Internal.h" // MTR_TESTABLE NS_ASSUME_NONNULL_BEGIN -@interface MTRDeviceController_XPC : MTRDeviceController // temporarily XPCListenerDelegate +MTR_TESTABLE +@interface MTRDeviceController_XPC : MTRDeviceController @end diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index ccd645ce1ccc83..0c3d53f21483c4 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -23,30 +23,10 @@ @interface MTRDeviceController_XPC () @property (retain, readwrite) NSXPCConnection * xpcConnection; @property (retain, readwrite) id xpcRemoteObjectProxy; -// testing only -@property (retain, readwrite) NSXPCListener * testListener; - -@end - -@implementation MTRDeviceController_XPC (TestXPCListener) - @end @implementation MTRDeviceController_XPC -- (id)initWithTestXPCListener { - // TODO: update with well-known service name -// self.xpcConnection = [[NSXPCConnection alloc] initWithServiceName:@"wellknown"]; - - // testing mode - self.testListener = [NSXPCListener anonymousListener]; - [self.testListener setDelegate:self]; - [self.testListener resume]; - NSXPCConnection * xpcConnection = [[NSXPCConnection alloc] initWithListenerEndpoint:self.testListener.endpoint]; - - return [self initWithXPCConnection:xpcConnection]; -} - - (id)initWithXPCConnection:(NSXPCConnection *)newConnection { if (!(self = [super initForSubclasses])) { @@ -56,13 +36,22 @@ - (id)initWithXPCConnection:(NSXPCConnection *)newConnection self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; self.xpcRemoteObjectProxy = self.xpcConnection.remoteObjectProxy; [self.xpcConnection resume]; + + // TODO: something seems wrong at this point so clearly subsequent `xpcRemoteObjectProxy` calls won't + // fare much better. kmo 15 aug 2024 10h52 + NSNumber * postInitMeaningOfLife = [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; + NSLog(@"%s: postInitMeaningOfLife = %@", __PRETTY_FUNCTION__, postInitMeaningOfLife); + + return self; +} - // ping and meaning of life just as a test +- (void)testPing { + NSLog(@"pinging via %s", __PRETTY_FUNCTION__); [self.xpcRemoteObjectProxy ping]; - NSNumber * lifeMeaning = [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; - NSLog(@"meaning of life appears to be %@", lifeMeaning); +} - return self; +- (NSNumber *)meaningOfLife { + return [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; } - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h new file mode 100644 index 00000000000000..75213b519944d7 --- /dev/null +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2024 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 "MTRDeviceController_XPC.h" + +@interface MTRDeviceController_XPC (Internal) + +- (id)initWithXPCConnection:(NSXPCConnection *)newConnection; +- (id)initWithTestXPCListener; +- (void)testPing; +- (NSNumber *)meaningOfLife; + +@end diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index c6eb62c98daf0d..2d204868a2e6b4 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -17,6 +17,8 @@ #import "MTRXPCService.h" #import "MTRXPCServiceProtocol.h" #import "MTRXPCServiceTestsDummyService.h" +#import "MTRDeviceController_XPC.h" +#import "MTRDeviceController_XPC_Internal.h" #import #import @@ -106,4 +108,15 @@ - (void)testExample NSLog(@"done with %s", __PRETTY_FUNCTION__); } +- (void)testMTRXPCServiceSetup +{ + NSXPCConnection * serviceConnection = [[NSXPCConnection alloc] initWithListenerEndpoint:_xpcListener.endpoint]; + serviceConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; + MTRDeviceController_XPC * deviceController = [[MTRDeviceController_XPC alloc] initWithXPCConnection:self.xpcConnection]; + + [deviceController testPing]; + NSNumber * lifeMeaning = [deviceController meaningOfLife]; + NSLog(@"%s: lifeMeaning = %@", __PRETTY_FUNCTION__, lifeMeaning); +} + @end diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index c0d724d82bf95f..ca63981b5acf15 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -304,8 +304,8 @@ 99D466E12798936D0089A18F /* MTRCommissioningParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 99D466E02798936D0089A18F /* MTRCommissioningParameters.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9B231B042C62EF650030EB37 /* (null) in Headers */ = {isa = PBXBuildFile; }; 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */; }; - 9B4143812C6E662300B86FBD /* MTRXPCServiceTestsDummyService.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC0649B2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m */; }; 9B5CCB572C6E6CC9009DD99B /* MTRXPCService.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */; }; + 9B5CCB592C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */; }; 9BC064942C6BCB6F00996FEF /* MTRXPCService.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */; }; 9BC064972C6BCBAE00996FEF /* MTRXPCServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */; }; 9BC064992C6BCEA000996FEF /* MTRXPCServiceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */; }; @@ -745,6 +745,7 @@ 99D466E02798936D0089A18F /* MTRCommissioningParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRCommissioningParameters.h; sourceTree = ""; }; 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceController_Concrete.mm; sourceTree = ""; }; 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRXPCService.mm; sourceTree = ""; }; + 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceController_XPC_Internal.h; sourceTree = ""; }; 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCService.h; sourceTree = ""; }; 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceProtocol.h; sourceTree = ""; }; 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCServiceTests.m; sourceTree = ""; }; @@ -1347,6 +1348,7 @@ 75B3269D2BCDB9EA00E17C4E /* MTRDeviceConnectivityMonitor.mm */, 991DC0822475F45400C13860 /* MTRDeviceController.h */, 9BFE5D4E2C6D3075007D4319 /* MTRDeviceController_XPC.h */, + 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */, 9BFE5D4F2C6D3075007D4319 /* MTRDeviceController_XPC.mm */, 5136660F28067D540025EDAE /* MTRDeviceController_Internal.h */, 991DC0872475F47D00C13860 /* MTRDeviceController.mm */, @@ -1634,6 +1636,7 @@ 517BF3F0282B62B800A8B7DB /* MTRCertificates.h in Headers */, 51E51FBF282AD37A00FC978D /* MTRDeviceControllerStartupParams.h in Headers */, 5136661628067D550025EDAE /* MTRDeviceControllerFactory.h in Headers */, + 9B5CCB592C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h in Headers */, 5178E6812AE098520069DF72 /* MTRCommandTimedCheck.h in Headers */, 7596A84B287636C1004DAE0E /* MTRDevice_Internal.h in Headers */, 514C7A042B6436D500DD6D7B /* MTRServerCluster_Internal.h in Headers */, @@ -2040,7 +2043,6 @@ 5ACDDD7D27CD16D200EFD68A /* MTRClusterStateCacheContainer.mm in Sources */, 75B3269E2BCDB9EA00E17C4E /* MTRDeviceConnectivityMonitor.mm in Sources */, 513DDB8A2761F6F900DAA01A /* MTRAttributeTLVValueDecoder.mm in Sources */, - 9B4143812C6E662300B86FBD /* MTRXPCServiceTestsDummyService.m in Sources */, 5117DD3829A931AE00FFA1AA /* MTROperationalBrowser.mm in Sources */, 514C79F02B62ADDA00DD6D7B /* descriptor.cpp in Sources */, 3D843757294AD25A0070D20A /* MTRCertificateInfo.mm in Sources */, From b717259421930de5ee949f3876ca341c91631d13 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Thu, 15 Aug 2024 12:10:18 -0700 Subject: [PATCH 25/75] more experiments --- .../Framework/CHIP/MTRDeviceController_XPC.mm | 11 +++++++-- .../CHIP/MTRDeviceController_XPC_Internal.h | 2 +- .../Framework/CHIP/MTRXPCServiceProtocol.h | 21 ++++++++++++---- .../Framework/CHIPTests/MTRXPCServiceTests.m | 24 +++++++++++++------ 4 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index 0c3d53f21483c4..231bc83773ac35 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -27,18 +27,25 @@ @interface MTRDeviceController_XPC () @implementation MTRDeviceController_XPC -- (id)initWithXPCConnection:(NSXPCConnection *)newConnection +- (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEndpoint { if (!(self = [super initForSubclasses])) { return nil; } - + self.xpcConnection = [[NSXPCConnection alloc] initWithListenerEndpoint:listenerEndpoint]; self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; + + // maybe poor architecture to store this instead of access it thru XPC connection every time kmo 15 aug 2024 +// self.xpcRemoteObjectProxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { +// NSLog(@"%s: it's not my fault! XPC remote object proxy error.", __PRETTY_FUNCTION__); +// }]; self.xpcRemoteObjectProxy = self.xpcConnection.remoteObjectProxy; + [self.xpcConnection resume]; // TODO: something seems wrong at this point so clearly subsequent `xpcRemoteObjectProxy` calls won't // fare much better. kmo 15 aug 2024 10h52 +// NSNumber * postInitMeaningOfLife = [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; NSNumber * postInitMeaningOfLife = [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; NSLog(@"%s: postInitMeaningOfLife = %@", __PRETTY_FUNCTION__, postInitMeaningOfLife); diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h index 75213b519944d7..73673be1e55638 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h @@ -18,7 +18,7 @@ @interface MTRDeviceController_XPC (Internal) -- (id)initWithXPCConnection:(NSXPCConnection *)newConnection; +- (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEndpoint; - (id)initWithTestXPCListener; - (void)testPing; - (NSNumber *)meaningOfLife; diff --git a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h index 0bc1be1d98fff7..cf0efec65d122b 100644 --- a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h +++ b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h @@ -28,6 +28,8 @@ typedef void (^MTRXPCServiceBoolReplyBlock)(BOOL); - (NSNumber *)synchronouslyGetMeaningOfLife; - (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply; +// identify "who i am" +// need invalidation and disconnect // temporary inclusion - (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload newNodeID:(NSNumber *)newNodeID @@ -35,12 +37,21 @@ typedef void (^MTRXPCServiceBoolReplyBlock)(BOOL); @end -@protocol MTRXPCServiceDeviceControllerProtocol +// Add client protocol for e.g. attribute reports coming back not in response to a method call +// it will look an awful lot like the delegate! +// allow server to request UUID for reflection +// need invalidation and disconnect much like on service side +// TODO: see how much of Woody's work covers this -- (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload - newNodeID:(NSNumber *)newNodeID - error:(NSError * __autoreleasing *)error; -@end + +//@protocol MTRXPCServiceDeviceControllerProtocol + +// +//- (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload +// newNodeID:(NSNumber *)newNodeID +// error:(NSError * __autoreleasing *)error; +// +//@end NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index 2d204868a2e6b4..c0b00910cf05df 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -100,19 +100,29 @@ - (void)testExample XCTAssertNotNil(obj); [obj ping]; - - [obj getMeaningOfLifeWithReplyBlock:^(int meaning) { - XCTAssertEqual(meaning, 42); + +// NSNumber * lifeMeaning = [obj synchronouslyGetMeaningOfLife]; +// +// NSLog(@"test got lifeMeaning = %@", lifeMeaning); + + XCTestExpectation * expectation = [[XCTestExpectation alloc] initWithDescription:@"should get meaning of life"]; + __block NSNumber * asyncLifeMeaning; + [obj getMeaningOfLifeWithReplyBlock:^(int reply) { + asyncLifeMeaning = @(reply); + NSLog(@"got async life meaning %@", asyncLifeMeaning); + [expectation fulfill]; }]; - + + [self waitForExpectations:@[expectation] timeout:1.0]; NSLog(@"done with %s", __PRETTY_FUNCTION__); } - (void)testMTRXPCServiceSetup { - NSXPCConnection * serviceConnection = [[NSXPCConnection alloc] initWithListenerEndpoint:_xpcListener.endpoint]; - serviceConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; - MTRDeviceController_XPC * deviceController = [[MTRDeviceController_XPC alloc] initWithXPCConnection:self.xpcConnection]; + XCTAssertNotNil(_xpcListener); + XCTAssertNotNil(_dummyService); + + MTRDeviceController_XPC * deviceController = [[MTRDeviceController_XPC alloc] initWithXPCListenerEndpointForTesting:_xpcListener.endpoint]; [deviceController testPing]; NSNumber * lifeMeaning = [deviceController meaningOfLife]; From 8304c4e51eb35ba04962785e7917ae1e14e0b3c4 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Thu, 15 Aug 2024 12:53:19 -0700 Subject: [PATCH 26/75] WIP: return type issue run `MTRXPCServiceTests testMTRXPCServiceSetup` and see selection of proxy object method in `MTRDeviceController_XPC.m`/`initWithXPCListenerEndpointForTesting` around line 44 to see the problem. --- .../Framework/CHIP/MTRDeviceController_XPC.mm | 31 ++++++++++++++++--- .../CHIP/MTRDeviceController_XPC_Internal.h | 1 + .../Framework/CHIPTests/MTRXPCServiceTests.m | 9 ++++-- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index 231bc83773ac35..52935332a460f7 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -27,6 +27,10 @@ @interface MTRDeviceController_XPC () @implementation MTRDeviceController_XPC +// KMO TODO: +// startup parameters for XPC version of controller +// MTRDevice_XPC.h/.mm + - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEndpoint { if (!(self = [super initForSubclasses])) { @@ -36,11 +40,15 @@ - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEnd self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; // maybe poor architecture to store this instead of access it thru XPC connection every time kmo 15 aug 2024 -// self.xpcRemoteObjectProxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { -// NSLog(@"%s: it's not my fault! XPC remote object proxy error.", __PRETTY_FUNCTION__); -// }]; - self.xpcRemoteObjectProxy = self.xpcConnection.remoteObjectProxy; - + + // REVIEWERS: both of below inits result in proxies that complain: + // "Return type of methods sent over this proxy must be 'void' or 'NSProgress *'" + // which Internets seem to suggest is true. kmo 15 aug 2024 + self.xpcRemoteObjectProxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { + NSLog(@"%s: it's not my fault! XPC remote object proxy error.", __PRETTY_FUNCTION__); + }];; + // self.xpcRemoteObjectProxy = self.xpcConnection.remoteObjectProxy; + [self.xpcConnection resume]; // TODO: something seems wrong at this point so clearly subsequent `xpcRemoteObjectProxy` calls won't @@ -57,10 +65,23 @@ - (void)testPing { [self.xpcRemoteObjectProxy ping]; } +// this blows up. kmo 15 aug 2024 12h29 - (NSNumber *)meaningOfLife { return [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; } +- (NSNumber *)internallyAsyncMeaningOfLife { + __block int result; + // semaphores probably not ultimately the right way to do this? kmo 15 aug 2024 + auto semaphore = dispatch_semaphore_create(0); + [self.xpcRemoteObjectProxy getMeaningOfLifeWithReplyBlock:^(int reply) { + result = reply; + }]; + dispatch_semaphore_wait(semaphore, 1.0); + // so, this will return an undefined value if timed out? kmo 15 aug 2024 12h21 + return @(result); +} + - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h index 73673be1e55638..11fc52c1103a72 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h @@ -22,5 +22,6 @@ - (id)initWithTestXPCListener; - (void)testPing; - (NSNumber *)meaningOfLife; +- (NSNumber *)internallyAsyncMeaningOfLife; @end diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index c0b00910cf05df..9e687e96b016a1 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -125,8 +125,13 @@ - (void)testMTRXPCServiceSetup MTRDeviceController_XPC * deviceController = [[MTRDeviceController_XPC alloc] initWithXPCListenerEndpointForTesting:_xpcListener.endpoint]; [deviceController testPing]; - NSNumber * lifeMeaning = [deviceController meaningOfLife]; - NSLog(@"%s: lifeMeaning = %@", __PRETTY_FUNCTION__, lifeMeaning); + NSNumber * internallyAsyncLifeMeaning = [deviceController internallyAsyncMeaningOfLife]; + NSLog(@"internallyAsyncLifeMeaning: %@", internallyAsyncLifeMeaning); +// XCTestExpectation * expectation = [[XCTestExpectation alloc] initWithDescription:@"should get meaning of life"]; +// __block NSNumber * asyncLifeMeaning; +// +// +// [self waitForExpectations:@[expectation] timeout:1.0]; } @end From 19f04872c70db49600c424858abb4a7972e30898 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Thu, 15 Aug 2024 16:47:36 -0700 Subject: [PATCH 27/75] add `MTRDevice_XPC` nothing exciting yet --- src/darwin/Framework/CHIP/MTRDevice_XPC.h | 26 +++++++++++++++++++ src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 22 ++++++++++++++++ .../Matter.xcodeproj/project.pbxproj | 8 ++++++ 3 files changed, 56 insertions(+) create mode 100644 src/darwin/Framework/CHIP/MTRDevice_XPC.h create mode 100644 src/darwin/Framework/CHIP/MTRDevice_XPC.mm diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.h b/src/darwin/Framework/CHIP/MTRDevice_XPC.h new file mode 100644 index 00000000000000..6a2e9f3b9d932f --- /dev/null +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.h @@ -0,0 +1,26 @@ +// +/** + * 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 + +NS_ASSUME_NONNULL_BEGIN + +@interface MTRDevice_XPC : MTRDevice + +@end + +NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm new file mode 100644 index 00000000000000..65b65543f2dda2 --- /dev/null +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -0,0 +1,22 @@ +// +/** + * 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 "MTRDevice_XPC.h" + +@implementation MTRDevice_XPC + +@end diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index ca63981b5acf15..dad1a6b94b46bc 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -306,6 +306,8 @@ 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */; }; 9B5CCB572C6E6CC9009DD99B /* MTRXPCService.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */; }; 9B5CCB592C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */; }; + 9B5CCB5C2C6EC890009DD99B /* MTRDevice_XPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB5B2C6EC890009DD99B /* MTRDevice_XPC.mm */; }; + 9B5CCB5D2C6EC890009DD99B /* MTRDevice_XPC.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB5A2C6EC890009DD99B /* MTRDevice_XPC.h */; }; 9BC064942C6BCB6F00996FEF /* MTRXPCService.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */; }; 9BC064972C6BCBAE00996FEF /* MTRXPCServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */; }; 9BC064992C6BCEA000996FEF /* MTRXPCServiceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */; }; @@ -746,6 +748,8 @@ 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceController_Concrete.mm; sourceTree = ""; }; 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRXPCService.mm; sourceTree = ""; }; 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceController_XPC_Internal.h; sourceTree = ""; }; + 9B5CCB5A2C6EC890009DD99B /* MTRDevice_XPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDevice_XPC.h; sourceTree = ""; }; + 9B5CCB5B2C6EC890009DD99B /* MTRDevice_XPC.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDevice_XPC.mm; sourceTree = ""; }; 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCService.h; sourceTree = ""; }; 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceProtocol.h; sourceTree = ""; }; 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCServiceTests.m; sourceTree = ""; }; @@ -1335,6 +1339,8 @@ 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */, 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */, 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */, + 9B5CCB5A2C6EC890009DD99B /* MTRDevice_XPC.h */, + 9B5CCB5B2C6EC890009DD99B /* MTRDevice_XPC.mm */, 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */, 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */, 88EBF8CB27FABDD500686BC1 /* MTRDeviceAttestationDelegate.h */, @@ -1734,6 +1740,7 @@ 511913FC28C100EF009235E9 /* MTRBaseSubscriptionCallback.h in Headers */, 51565CB12A7AD77600469F18 /* MTRDeviceControllerDataStore.h in Headers */, 3D843713294977000070D20A /* NSDataSpanConversion.h in Headers */, + 9B5CCB5D2C6EC890009DD99B /* MTRDevice_XPC.h in Headers */, 991DC08B247704DC00C13860 /* MTRLogging_Internal.h in Headers */, 51FE723F2ACDEF3E00437032 /* MTRCommandPayloadExtensions_Internal.h in Headers */, 51D0B12E2B6177FD006E3511 /* MTRAccessGrant.h in Headers */, @@ -2042,6 +2049,7 @@ 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */, 5ACDDD7D27CD16D200EFD68A /* MTRClusterStateCacheContainer.mm in Sources */, 75B3269E2BCDB9EA00E17C4E /* MTRDeviceConnectivityMonitor.mm in Sources */, + 9B5CCB5C2C6EC890009DD99B /* MTRDevice_XPC.mm in Sources */, 513DDB8A2761F6F900DAA01A /* MTRAttributeTLVValueDecoder.mm in Sources */, 5117DD3829A931AE00FFA1AA /* MTROperationalBrowser.mm in Sources */, 514C79F02B62ADDA00DD6D7B /* descriptor.cpp in Sources */, From 4a1c25ba6ce08f9d79663fcd5f84e363edc5109a Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Thu, 15 Aug 2024 19:11:22 -0700 Subject: [PATCH 28/75] add device controller over XPC parameters stub --- .../MTRDeviceControllerOverXPCParameters.h | 25 +++++++++++++++++++ .../MTRDeviceControllerOverXPCParameters.m | 21 ++++++++++++++++ .../Matter.xcodeproj/project.pbxproj | 8 ++++++ 3 files changed, 54 insertions(+) create mode 100644 src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.h create mode 100644 src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.m diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.h b/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.h new file mode 100644 index 00000000000000..10748918fbb5d0 --- /dev/null +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.h @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2024 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 + +NS_ASSUME_NONNULL_BEGIN + +@interface MTRDeviceControllerOverXPCParameters : MTRDeviceControllerAbstractParameters + +@end + +NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.m b/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.m new file mode 100644 index 00000000000000..7bf390c5fe097f --- /dev/null +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.m @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2024 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 "MTRDeviceControllerOverXPCParameters.h" + +@implementation MTRDeviceControllerOverXPCParameters + +@end diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index dad1a6b94b46bc..2338a52ec5b226 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -308,6 +308,8 @@ 9B5CCB592C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */; }; 9B5CCB5C2C6EC890009DD99B /* MTRDevice_XPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB5B2C6EC890009DD99B /* MTRDevice_XPC.mm */; }; 9B5CCB5D2C6EC890009DD99B /* MTRDevice_XPC.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB5A2C6EC890009DD99B /* MTRDevice_XPC.h */; }; + 9B5CCB602C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.m */; }; + 9B5CCB612C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.h */; }; 9BC064942C6BCB6F00996FEF /* MTRXPCService.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */; }; 9BC064972C6BCBAE00996FEF /* MTRXPCServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */; }; 9BC064992C6BCEA000996FEF /* MTRXPCServiceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */; }; @@ -750,6 +752,8 @@ 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceController_XPC_Internal.h; sourceTree = ""; }; 9B5CCB5A2C6EC890009DD99B /* MTRDevice_XPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDevice_XPC.h; sourceTree = ""; }; 9B5CCB5B2C6EC890009DD99B /* MTRDevice_XPC.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDevice_XPC.mm; sourceTree = ""; }; + 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceControllerOverXPCParameters.h; sourceTree = ""; }; + 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRDeviceControllerOverXPCParameters.m; sourceTree = ""; }; 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCService.h; sourceTree = ""; }; 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceProtocol.h; sourceTree = ""; }; 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCServiceTests.m; sourceTree = ""; }; @@ -1377,6 +1381,8 @@ 51E51FBD282AD37A00FC978D /* MTRDeviceControllerStartupParams_Internal.h */, 51E51FBE282AD37A00FC978D /* MTRDeviceControllerStartupParams.mm */, 51565CB52A7B0D6600469F18 /* MTRDeviceControllerParameters.h */, + 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.h */, + 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.m */, 51565CB32A7AD78D00469F18 /* MTRDeviceControllerStorageDelegate.h */, 5A6FEC9427B5976200F25F42 /* MTRDeviceControllerXPCConnection.h */, 5A6FEC9527B5983000F25F42 /* MTRDeviceControllerXPCConnection.mm */, @@ -1677,6 +1683,7 @@ 88EBF8CE27FABDD500686BC1 /* MTRDeviceAttestationDelegate.h in Headers */, 2C222AD0255C620600E446B9 /* MTRBaseDevice.h in Headers */, 7596A84F2877E6A9004DAE0E /* MTRCluster_Internal.h in Headers */, + 9B5CCB612C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.h in Headers */, 991DC0842475F45400C13860 /* MTRDeviceController.h in Headers */, 88FA798D2B7B257100CD4B6F /* MTRMetricsCollector.h in Headers */, 9BFE5D502C6D3075007D4319 /* MTRDeviceController_XPC.h in Headers */, @@ -2010,6 +2017,7 @@ 51D0B1392B618CC6006E3511 /* MTRServerAttribute.mm in Sources */, 51B22C2A2740CB47008D5055 /* MTRCommandPayloadsObjc.mm in Sources */, 51F522682AE70734000C4050 /* MTRDeviceTypeMetadata.mm in Sources */, + 9B5CCB602C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.m in Sources */, 75B765C32A1D82D30014719B /* MTRAttributeSpecifiedCheck.mm in Sources */, AF5F90FF2878D351005503FA /* MTROTAProviderDelegateBridge.mm in Sources */, 516415FF2B6B132200D5CE11 /* DataModelHandler.cpp in Sources */, From 7a05546c607636389d7ceb8f8cd122ee6761ab48 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Thu, 15 Aug 2024 19:12:01 -0700 Subject: [PATCH 29/75] add init split for XPC device controllers not yet implemented, but there --- .../CHIP/MTRDeviceController_Concrete.mm | 41 ++++++++----------- .../Framework/CHIP/MTRDeviceController_XPC.mm | 1 - 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index c7ccab25e1cdc4..cfbfd5c45c7092 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -30,6 +30,7 @@ #import "MTRDeviceControllerDelegateBridge.h" #import "MTRDeviceControllerFactory_Internal.h" #import "MTRDeviceControllerLocalTestStorage.h" +#import "MTRDeviceControllerOverXPCParameters.h" #import "MTRDeviceControllerStartupParams.h" #import "MTRDeviceControllerStartupParams_Internal.h" #import "MTRDeviceController_Concrete.h" @@ -137,41 +138,31 @@ @implementation MTRDeviceController_Concrete { - (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { - if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { - MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); + if ([parameters isKindOfClass:MTRDeviceControllerParameters.class]) { + 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 + withParameters:controllerParameters + error:error]; + return controller; + } + else if ([parameters isKindOfClass:MTRDeviceControllerOverXPCParameters.class]) { + MTR_LOG_ERROR("XPC Device Controller init not yet implemented"); if (error) { - *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INVALID_ARGUMENT]; + *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_NOT_IMPLEMENTED]; } return nil; } - 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 - withParameters:controllerParameters - error:error]; - return controller; -} - -- (nullable MTRDeviceController *)bogusWithParameters:(MTRDeviceControllerAbstractParameters *)parameters - error:(NSError * __autoreleasing *)error -{ - if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { + else { + // way out of our league MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); if (error) { *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INVALID_ARGUMENT]; } return nil; } - auto * controllerParameters = static_cast(parameters); - - // MTRDeviceControllerFactory will auto-start in per-controller-storage mode if necessary - MTRDeviceControllerFactory * factory = MTRDeviceControllerFactory.sharedInstance; - MTRDeviceController * controller = [factory initializeController:self - withParameters:controllerParameters - error:error]; - return controller; } - (instancetype)initWithFactory:(MTRDeviceControllerFactory *)factory diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index 52935332a460f7..e0a9c891ee3927 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -29,7 +29,6 @@ @implementation MTRDeviceController_XPC // KMO TODO: // startup parameters for XPC version of controller -// MTRDevice_XPC.h/.mm - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEndpoint { From cc0312e076d3229c85548b4c8de1ffa2afac7978 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Thu, 15 Aug 2024 20:14:48 -0700 Subject: [PATCH 30/75] rename new XPC parameters class `OverXPC` is already taken / means something else --- ...ters.h => MTRDeviceControllerXPCParameters.h} | 2 +- ...ters.m => MTRDeviceControllerXPCParameters.m} | 4 ++-- .../CHIP/MTRDeviceController_Concrete.mm | 4 ++-- .../Framework/Matter.xcodeproj/project.pbxproj | 16 ++++++++-------- 4 files changed, 13 insertions(+), 13 deletions(-) rename src/darwin/Framework/CHIP/{MTRDeviceControllerOverXPCParameters.h => MTRDeviceControllerXPCParameters.h} (89%) rename src/darwin/Framework/CHIP/{MTRDeviceControllerOverXPCParameters.m => MTRDeviceControllerXPCParameters.m} (86%) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.h b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h similarity index 89% rename from src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.h rename to src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h index 10748918fbb5d0..09a31527736a1d 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.h +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h @@ -18,7 +18,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface MTRDeviceControllerOverXPCParameters : MTRDeviceControllerAbstractParameters +@interface MTRDeviceControllerXPCParameters : MTRDeviceControllerAbstractParameters @end diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.m b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.m similarity index 86% rename from src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.m rename to src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.m index 7bf390c5fe097f..d21d979d12459f 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPCParameters.m +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.m @@ -14,8 +14,8 @@ * limitations under the License. */ -#import "MTRDeviceControllerOverXPCParameters.h" +#import "MTRDeviceControllerXPCParameters.h" -@implementation MTRDeviceControllerOverXPCParameters +@implementation MTRDeviceControllerXPCParameters @end diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index cfbfd5c45c7092..8ea17432627c8b 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -30,7 +30,7 @@ #import "MTRDeviceControllerDelegateBridge.h" #import "MTRDeviceControllerFactory_Internal.h" #import "MTRDeviceControllerLocalTestStorage.h" -#import "MTRDeviceControllerOverXPCParameters.h" +#import "MTRDeviceControllerXPCParameters.h" #import "MTRDeviceControllerStartupParams.h" #import "MTRDeviceControllerStartupParams_Internal.h" #import "MTRDeviceController_Concrete.h" @@ -148,7 +148,7 @@ - (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControll error:error]; return controller; } - else if ([parameters isKindOfClass:MTRDeviceControllerOverXPCParameters.class]) { + else if ([parameters isKindOfClass:MTRDeviceControllerXPCParameters.class]) { MTR_LOG_ERROR("XPC Device Controller init not yet implemented"); if (error) { *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_NOT_IMPLEMENTED]; diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index 2338a52ec5b226..1bf97cffa0a3be 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -308,8 +308,8 @@ 9B5CCB592C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */; }; 9B5CCB5C2C6EC890009DD99B /* MTRDevice_XPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB5B2C6EC890009DD99B /* MTRDevice_XPC.mm */; }; 9B5CCB5D2C6EC890009DD99B /* MTRDevice_XPC.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB5A2C6EC890009DD99B /* MTRDevice_XPC.h */; }; - 9B5CCB602C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.m */; }; - 9B5CCB612C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.h */; }; + 9B5CCB602C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.m */; }; + 9B5CCB612C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.h */; }; 9BC064942C6BCB6F00996FEF /* MTRXPCService.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */; }; 9BC064972C6BCBAE00996FEF /* MTRXPCServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */; }; 9BC064992C6BCEA000996FEF /* MTRXPCServiceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */; }; @@ -752,8 +752,8 @@ 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceController_XPC_Internal.h; sourceTree = ""; }; 9B5CCB5A2C6EC890009DD99B /* MTRDevice_XPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDevice_XPC.h; sourceTree = ""; }; 9B5CCB5B2C6EC890009DD99B /* MTRDevice_XPC.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDevice_XPC.mm; sourceTree = ""; }; - 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceControllerOverXPCParameters.h; sourceTree = ""; }; - 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRDeviceControllerOverXPCParameters.m; sourceTree = ""; }; + 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceControllerXPCParameters.h; sourceTree = ""; }; + 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRDeviceControllerXPCParameters.m; sourceTree = ""; }; 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCService.h; sourceTree = ""; }; 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceProtocol.h; sourceTree = ""; }; 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCServiceTests.m; sourceTree = ""; }; @@ -1381,8 +1381,8 @@ 51E51FBD282AD37A00FC978D /* MTRDeviceControllerStartupParams_Internal.h */, 51E51FBE282AD37A00FC978D /* MTRDeviceControllerStartupParams.mm */, 51565CB52A7B0D6600469F18 /* MTRDeviceControllerParameters.h */, - 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.h */, - 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.m */, + 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.h */, + 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.m */, 51565CB32A7AD78D00469F18 /* MTRDeviceControllerStorageDelegate.h */, 5A6FEC9427B5976200F25F42 /* MTRDeviceControllerXPCConnection.h */, 5A6FEC9527B5983000F25F42 /* MTRDeviceControllerXPCConnection.mm */, @@ -1683,7 +1683,7 @@ 88EBF8CE27FABDD500686BC1 /* MTRDeviceAttestationDelegate.h in Headers */, 2C222AD0255C620600E446B9 /* MTRBaseDevice.h in Headers */, 7596A84F2877E6A9004DAE0E /* MTRCluster_Internal.h in Headers */, - 9B5CCB612C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.h in Headers */, + 9B5CCB612C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.h in Headers */, 991DC0842475F45400C13860 /* MTRDeviceController.h in Headers */, 88FA798D2B7B257100CD4B6F /* MTRMetricsCollector.h in Headers */, 9BFE5D502C6D3075007D4319 /* MTRDeviceController_XPC.h in Headers */, @@ -2017,7 +2017,7 @@ 51D0B1392B618CC6006E3511 /* MTRServerAttribute.mm in Sources */, 51B22C2A2740CB47008D5055 /* MTRCommandPayloadsObjc.mm in Sources */, 51F522682AE70734000C4050 /* MTRDeviceTypeMetadata.mm in Sources */, - 9B5CCB602C6EE29E009DD99B /* MTRDeviceControllerOverXPCParameters.m in Sources */, + 9B5CCB602C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.m in Sources */, 75B765C32A1D82D30014719B /* MTRAttributeSpecifiedCheck.mm in Sources */, AF5F90FF2878D351005503FA /* MTROTAProviderDelegateBridge.mm in Sources */, 516415FF2B6B132200D5CE11 /* DataModelHandler.cpp in Sources */, From 7ff8f0a2de58ddd7c0e9cca9b3de14dde04f5e61 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Fri, 16 Aug 2024 03:15:24 +0000 Subject: [PATCH 31/75] Restyled by whitespace --- src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm | 4 ++-- src/darwin/Framework/CHIP/MTRXPCService.mm | 2 +- src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m | 6 +++--- .../Framework/CHIPTests/MTRXPCServiceTestsDummyService.m | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index e0a9c891ee3927..aff228e6af9e8e 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -49,7 +49,7 @@ - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEnd // self.xpcRemoteObjectProxy = self.xpcConnection.remoteObjectProxy; [self.xpcConnection resume]; - + // TODO: something seems wrong at this point so clearly subsequent `xpcRemoteObjectProxy` calls won't // fare much better. kmo 15 aug 2024 10h52 // NSNumber * postInitMeaningOfLife = [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; @@ -82,7 +82,7 @@ - (NSNumber *)internallyAsyncMeaningOfLife { } - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters - error:(NSError * __autoreleasing *)error + error:(NSError * __autoreleasing *)error { MTR_LOG_ERROR("unimplemented method %s called", __PRETTY_FUNCTION__); // initiate XPC connection? kmo 14 aug 2024 12h35 diff --git a/src/darwin/Framework/CHIP/MTRXPCService.mm b/src/darwin/Framework/CHIP/MTRXPCService.mm index ed7eb62ed3be01..c024bcd4c46f3a 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.mm +++ b/src/darwin/Framework/CHIP/MTRXPCService.mm @@ -33,7 +33,7 @@ - (void)ping MTR_LOG_DEBUG("PONG! %s", __PRETTY_FUNCTION__); } -- (nonnull NSNumber *)synchronouslyGetMeaningOfLife { +- (nonnull NSNumber *)synchronouslyGetMeaningOfLife { return @(42); } diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index 9e687e96b016a1..32710883655e83 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -100,9 +100,9 @@ - (void)testExample XCTAssertNotNil(obj); [obj ping]; - + // NSNumber * lifeMeaning = [obj synchronouslyGetMeaningOfLife]; -// +// // NSLog(@"test got lifeMeaning = %@", lifeMeaning); XCTestExpectation * expectation = [[XCTestExpectation alloc] initWithDescription:@"should get meaning of life"]; @@ -112,7 +112,7 @@ - (void)testExample NSLog(@"got async life meaning %@", asyncLifeMeaning); [expectation fulfill]; }]; - + [self waitForExpectations:@[expectation] timeout:1.0]; NSLog(@"done with %s", __PRETTY_FUNCTION__); } diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m index 18b0214cc8290f..bcaac339d43890 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m @@ -30,12 +30,12 @@ - (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply reply(42); } -- (BOOL)setupCommissioningSessionWithPayload:(nonnull MTRSetupPayload *)payload newNodeID:(nonnull NSNumber *)newNodeID error:(NSError *__autoreleasing _Nullable * _Nullable)error { +- (BOOL)setupCommissioningSessionWithPayload:(nonnull MTRSetupPayload *)payload newNodeID:(nonnull NSNumber *)newNodeID error:(NSError *__autoreleasing _Nullable * _Nullable)error { return false; } -- (nonnull NSNumber *)synchronouslyGetMeaningOfLife { +- (nonnull NSNumber *)synchronouslyGetMeaningOfLife { return @42; } From b4a2c427f0c13f7c14e040cc27c44d225a3b44f0 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Fri, 16 Aug 2024 03:15:36 +0000 Subject: [PATCH 32/75] Restyled by clang-format --- .../CHIP/MTRDeviceController_Concrete.mm | 8 +++---- .../Framework/CHIP/MTRDeviceController_XPC.h | 4 ++-- .../Framework/CHIP/MTRDeviceController_XPC.mm | 18 +++++++++------ src/darwin/Framework/CHIP/MTRXPCService.mm | 3 ++- .../Framework/CHIP/MTRXPCServiceProtocol.h | 2 -- .../Framework/CHIPTests/MTRXPCServiceTests.m | 22 +++++++++---------- .../MTRXPCServiceTestsDummyService.m | 8 +++---- 7 files changed, 33 insertions(+), 32 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 8ea17432627c8b..428c9f8d74c530 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -30,9 +30,9 @@ #import "MTRDeviceControllerDelegateBridge.h" #import "MTRDeviceControllerFactory_Internal.h" #import "MTRDeviceControllerLocalTestStorage.h" -#import "MTRDeviceControllerXPCParameters.h" #import "MTRDeviceControllerStartupParams.h" #import "MTRDeviceControllerStartupParams_Internal.h" +#import "MTRDeviceControllerXPCParameters.h" #import "MTRDeviceController_Concrete.h" #import "MTRDevice_Concrete.h" #import "MTRDevice_Internal.h" @@ -147,15 +147,13 @@ - (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControll withParameters:controllerParameters error:error]; return controller; - } - else if ([parameters isKindOfClass:MTRDeviceControllerXPCParameters.class]) { + } else if ([parameters isKindOfClass:MTRDeviceControllerXPCParameters.class]) { MTR_LOG_ERROR("XPC Device Controller init not yet implemented"); if (error) { *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_NOT_IMPLEMENTED]; } return nil; - } - else { + } else { // way out of our league MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); if (error) { diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h index 2251a3cfdae86f..2cc4d92feb6ed2 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h @@ -14,9 +14,9 @@ * limitations under the License. */ -#import -#import "MTRDeviceController.h" #import "MTRDefines_Internal.h" // MTR_TESTABLE +#import "MTRDeviceController.h" +#import NS_ASSUME_NONNULL_BEGIN diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index aff228e6af9e8e..c45e95a555b719 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -15,9 +15,9 @@ */ #import "MTRDeviceController_XPC.h" -#import "MTRXPCServiceProtocol.h" -#import "MTRLogging_Internal.h" #import "MTRDeviceController_Internal.h" +#import "MTRLogging_Internal.h" +#import "MTRXPCServiceProtocol.h" @interface MTRDeviceController_XPC () @property (retain, readwrite) NSXPCConnection * xpcConnection; @@ -45,31 +45,35 @@ - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEnd // which Internets seem to suggest is true. kmo 15 aug 2024 self.xpcRemoteObjectProxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { NSLog(@"%s: it's not my fault! XPC remote object proxy error.", __PRETTY_FUNCTION__); - }];; + }]; + ; // self.xpcRemoteObjectProxy = self.xpcConnection.remoteObjectProxy; [self.xpcConnection resume]; // TODO: something seems wrong at this point so clearly subsequent `xpcRemoteObjectProxy` calls won't // fare much better. kmo 15 aug 2024 10h52 -// NSNumber * postInitMeaningOfLife = [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; + // NSNumber * postInitMeaningOfLife = [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; NSNumber * postInitMeaningOfLife = [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; NSLog(@"%s: postInitMeaningOfLife = %@", __PRETTY_FUNCTION__, postInitMeaningOfLife); return self; } -- (void)testPing { +- (void)testPing +{ NSLog(@"pinging via %s", __PRETTY_FUNCTION__); [self.xpcRemoteObjectProxy ping]; } // this blows up. kmo 15 aug 2024 12h29 -- (NSNumber *)meaningOfLife { +- (NSNumber *)meaningOfLife +{ return [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; } -- (NSNumber *)internallyAsyncMeaningOfLife { +- (NSNumber *)internallyAsyncMeaningOfLife +{ __block int result; // semaphores probably not ultimately the right way to do this? kmo 15 aug 2024 auto semaphore = dispatch_semaphore_create(0); diff --git a/src/darwin/Framework/CHIP/MTRXPCService.mm b/src/darwin/Framework/CHIP/MTRXPCService.mm index c024bcd4c46f3a..164c6f948bd625 100644 --- a/src/darwin/Framework/CHIP/MTRXPCService.mm +++ b/src/darwin/Framework/CHIP/MTRXPCService.mm @@ -33,7 +33,8 @@ - (void)ping MTR_LOG_DEBUG("PONG! %s", __PRETTY_FUNCTION__); } -- (nonnull NSNumber *)synchronouslyGetMeaningOfLife { +- (nonnull NSNumber *)synchronouslyGetMeaningOfLife +{ return @(42); } diff --git a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h index cf0efec65d122b..886f288a3f7e67 100644 --- a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h +++ b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h @@ -43,8 +43,6 @@ typedef void (^MTRXPCServiceBoolReplyBlock)(BOOL); // need invalidation and disconnect much like on service side // TODO: see how much of Woody's work covers this - - //@protocol MTRXPCServiceDeviceControllerProtocol // diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index 32710883655e83..c3a85fd0147bac 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -14,11 +14,11 @@ * limitations under the License. */ +#import "MTRDeviceController_XPC.h" +#import "MTRDeviceController_XPC_Internal.h" #import "MTRXPCService.h" #import "MTRXPCServiceProtocol.h" #import "MTRXPCServiceTestsDummyService.h" -#import "MTRDeviceController_XPC.h" -#import "MTRDeviceController_XPC_Internal.h" #import #import @@ -101,9 +101,9 @@ - (void)testExample [obj ping]; -// NSNumber * lifeMeaning = [obj synchronouslyGetMeaningOfLife]; -// -// NSLog(@"test got lifeMeaning = %@", lifeMeaning); + // NSNumber * lifeMeaning = [obj synchronouslyGetMeaningOfLife]; + // + // NSLog(@"test got lifeMeaning = %@", lifeMeaning); XCTestExpectation * expectation = [[XCTestExpectation alloc] initWithDescription:@"should get meaning of life"]; __block NSNumber * asyncLifeMeaning; @@ -113,7 +113,7 @@ - (void)testExample [expectation fulfill]; }]; - [self waitForExpectations:@[expectation] timeout:1.0]; + [self waitForExpectations:@[ expectation ] timeout:1.0]; NSLog(@"done with %s", __PRETTY_FUNCTION__); } @@ -127,11 +127,11 @@ - (void)testMTRXPCServiceSetup [deviceController testPing]; NSNumber * internallyAsyncLifeMeaning = [deviceController internallyAsyncMeaningOfLife]; NSLog(@"internallyAsyncLifeMeaning: %@", internallyAsyncLifeMeaning); -// XCTestExpectation * expectation = [[XCTestExpectation alloc] initWithDescription:@"should get meaning of life"]; -// __block NSNumber * asyncLifeMeaning; -// -// -// [self waitForExpectations:@[expectation] timeout:1.0]; + // XCTestExpectation * expectation = [[XCTestExpectation alloc] initWithDescription:@"should get meaning of life"]; + // __block NSNumber * asyncLifeMeaning; + // + // + // [self waitForExpectations:@[expectation] timeout:1.0]; } @end diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m index bcaac339d43890..ee33bd9ad97b7c 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m @@ -30,14 +30,14 @@ - (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply reply(42); } -- (BOOL)setupCommissioningSessionWithPayload:(nonnull MTRSetupPayload *)payload newNodeID:(nonnull NSNumber *)newNodeID error:(NSError *__autoreleasing _Nullable * _Nullable)error { +- (BOOL)setupCommissioningSessionWithPayload:(nonnull MTRSetupPayload *)payload newNodeID:(nonnull NSNumber *)newNodeID error:(NSError * __autoreleasing _Nullable * _Nullable)error +{ return false; } - -- (nonnull NSNumber *)synchronouslyGetMeaningOfLife { +- (nonnull NSNumber *)synchronouslyGetMeaningOfLife +{ return @42; } - @end From a1508934fca8e5ac729acfe3a9597a786f61c464 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Thu, 15 Aug 2024 20:19:26 -0700 Subject: [PATCH 33/75] remove failing exploratory test --- .../Framework/CHIPTests/MTRXPCServiceTests.m | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m index c3a85fd0147bac..83053c9222c822 100644 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m @@ -117,21 +117,4 @@ - (void)testExample NSLog(@"done with %s", __PRETTY_FUNCTION__); } -- (void)testMTRXPCServiceSetup -{ - XCTAssertNotNil(_xpcListener); - XCTAssertNotNil(_dummyService); - - MTRDeviceController_XPC * deviceController = [[MTRDeviceController_XPC alloc] initWithXPCListenerEndpointForTesting:_xpcListener.endpoint]; - - [deviceController testPing]; - NSNumber * internallyAsyncLifeMeaning = [deviceController internallyAsyncMeaningOfLife]; - NSLog(@"internallyAsyncLifeMeaning: %@", internallyAsyncLifeMeaning); - // XCTestExpectation * expectation = [[XCTestExpectation alloc] initWithDescription:@"should get meaning of life"]; - // __block NSNumber * asyncLifeMeaning; - // - // - // [self waitForExpectations:@[expectation] timeout:1.0]; -} - @end From 7af4e947f347f582842ea0462efa1c3926dabd84 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Thu, 15 Aug 2024 20:40:50 -0700 Subject: [PATCH 34/75] lintfix --- src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index c45e95a555b719..08a30cb34154f1 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -44,25 +44,20 @@ - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEnd // "Return type of methods sent over this proxy must be 'void' or 'NSProgress *'" // which Internets seem to suggest is true. kmo 15 aug 2024 self.xpcRemoteObjectProxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { - NSLog(@"%s: it's not my fault! XPC remote object proxy error.", __PRETTY_FUNCTION__); + MTR_LOG_ERROR("%s: XPC remote object proxy error.", __PRETTY_FUNCTION__); }]; ; - // self.xpcRemoteObjectProxy = self.xpcConnection.remoteObjectProxy; [self.xpcConnection resume]; - // TODO: something seems wrong at this point so clearly subsequent `xpcRemoteObjectProxy` calls won't - // fare much better. kmo 15 aug 2024 10h52 - // NSNumber * postInitMeaningOfLife = [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; - NSNumber * postInitMeaningOfLife = [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; - NSLog(@"%s: postInitMeaningOfLife = %@", __PRETTY_FUNCTION__, postInitMeaningOfLife); + // TODO: something seems wrong at this point so clearly subsequent `xpcRemoteObjectProxy` calls won't fare much better return self; } - (void)testPing { - NSLog(@"pinging via %s", __PRETTY_FUNCTION__); + MTR_LOG_DEBUG("pinging via %s", __PRETTY_FUNCTION__); [self.xpcRemoteObjectProxy ping]; } From 724f7121cec288e8c1cd4b9c08a36cf415b4d958 Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Thu, 15 Aug 2024 22:46:01 -0700 Subject: [PATCH 35/75] Examples --- src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 129 +++++++++++++++++++++ 1 file changed, 129 insertions(+) diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm index 65b65543f2dda2..7160f6daa9ac52 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -17,6 +17,135 @@ #import "MTRDevice_XPC.h" +// Need to move these to PCHs... +#import +#import + +#import "MTRDeviceController_Internal.h" + +#import "MTRAsyncWorkQueue.h" +#import "MTRAttestationTrustStoreBridge.h" +#import "MTRBaseDevice_Internal.h" +#import "MTRCommissionableBrowser.h" +#import "MTRCommissionableBrowserResult_Internal.h" +#import "MTRCommissioningParameters.h" +#import "MTRConversion.h" +#import "MTRDeviceController.h" +#import "MTRDeviceControllerDelegateBridge.h" +#import "MTRDeviceControllerFactory_Internal.h" +#import "MTRDeviceControllerLocalTestStorage.h" +#import "MTRDeviceControllerStartupParams.h" +#import "MTRDeviceControllerStartupParams_Internal.h" +#import "MTRDeviceControllerXPCParameters.h" +#import "MTRDeviceController_Concrete.h" +#import "MTRDevice_Concrete.h" +#import "MTRDevice_Internal.h" +#import "MTRError_Internal.h" +#import "MTRKeypair.h" +#import "MTRLogging_Internal.h" +#import "MTRMetricKeys.h" +#import "MTRMetricsCollector.h" +#import "MTROperationalCredentialsDelegate.h" +#import "MTRP256KeypairBridge.h" +#import "MTRPersistentStorageDelegateBridge.h" +#import "MTRServerEndpoint_Internal.h" +#import "MTRSetupPayload.h" +#import "MTRTimeUtils.h" +#import "MTRUnfairLock.h" +#import "NSDataSpanConversion.h" +#import "NSStringSpanConversion.h" +#import +#import +#import + +#import "MTRDeviceAttestationDelegateBridge.h" +#import "MTRDeviceConnectionBridge.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#import + +#define MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ +\ +- (TYPE) NAME { \ + __block TYPE outValue = DEFAULT_VALUE; \ +\ + NSXPCConnection * xpcConnection = nil; \ +\ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] deviceController:[[self deviceController] uniqueIdentifier] \ + nodeID:[self nodeID] \ + GETTER_NAME:^(TYPE returnValue) { \ + outValue = returnValue; \ + }]; \ + \ + return outValue;\ +} \ + + @implementation MTRDevice_XPC + +MTR_SIMPLE_REMOTE_XPC_GETTER(state, MTRDeviceState, MTRDeviceStateUnknown, getStateWithReply) +MTR_SIMPLE_REMOTE_XPC_GETTER(deviceCachePrimed, BOOL, NO, getDeviceCachePrimedWithReply) +MTR_SIMPLE_REMOTE_XPC_GETTER(estimatedStartTime, NSDate *, nil, getEstimatedStartTimeWithReply) +MTR_SIMPLE_REMOTE_XPC_GETTER(estimatedSubscriptionLatency, NSNumber *, nil, getEstimatedSubscriptionLatencyWithReply) + + +- (NSDictionary *) readAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID params:(MTRReadParams * _Nullable)params { + __block NSDictionary * outValue = nil; + + NSXPCConnection * xpcConnection = nil; + + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { + MTR_LOG_ERROR("Error: %@", error); + }] deviceController:[[self deviceController] uniqueIdentifier] + nodeID:[self nodeID] + readAttributeWithEndpointID: endpointID + clusterID: clusterID + attributeID: attributeID + params: params // TODO: PARAMS NEEDS TO CONORM TO NSCODER + withReply: ^(NSDictionary * returnValue) { + outValue = returnValue; + }]; + + return outValue; +} + +- (void) writeAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID value:(id)value expectedValueInterval:(NSNumber *)expectedValueInterval timedWriteTimeout:(NSNumber * _Nullable)timeout { + __block NSDictionary * outValue = nil; + + NSXPCConnection * xpcConnection = nil; + + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { + MTR_LOG_ERROR("Error: %@", error); + }] deviceController:[[self deviceController] uniqueIdentifier] + nodeID:[self nodeID] + writeAttributeWithEndpointID: endpointID clusterID: clusterID attributeID: attributeID value: value expectedValueInterval: expectedValueInterval timedWriteTimeout: timeout]; +} + + + @end From 82b739a57a50b0ec09769b60ad12e1f2139712d3 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 09:52:15 -0700 Subject: [PATCH 36/75] quickly attempt to fix test unused variable -> warning -> error --- src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm index 7160f6daa9ac52..a0826837dee11f 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -135,7 +135,7 @@ @implementation MTRDevice_XPC } - (void) writeAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID value:(id)value expectedValueInterval:(NSNumber *)expectedValueInterval timedWriteTimeout:(NSNumber * _Nullable)timeout { - __block NSDictionary * outValue = nil; +// __block NSDictionary * outValue = nil; NSXPCConnection * xpcConnection = nil; From 1da3a86b75b825db7040bedb6dfdfc0120d0d175 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Fri, 16 Aug 2024 16:52:41 +0000 Subject: [PATCH 37/75] Restyled by whitespace --- src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm index a0826837dee11f..983018c79ba8ee 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -130,7 +130,7 @@ @implementation MTRDevice_XPC withReply: ^(NSDictionary * returnValue) { outValue = returnValue; }]; - + return outValue; } From 6a9ff0778ebb2d2e16cfb8d250f79ba5f091c312 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Fri, 16 Aug 2024 16:52:43 +0000 Subject: [PATCH 38/75] Restyled by clang-format --- src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 73 +++++++++++----------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm index 983018c79ba8ee..8f02eefdd80a38 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -86,35 +86,34 @@ #import -#define MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ -\ -- (TYPE) NAME { \ - __block TYPE outValue = DEFAULT_VALUE; \ -\ - NSXPCConnection * xpcConnection = nil; \ -\ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] deviceController:[[self deviceController] uniqueIdentifier] \ - nodeID:[self nodeID] \ - GETTER_NAME:^(TYPE returnValue) { \ - outValue = returnValue; \ - }]; \ - \ - return outValue;\ -} \ - +#define MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ + \ + -(TYPE) NAME \ + { \ + __block TYPE outValue = DEFAULT_VALUE; \ + \ + NSXPCConnection * xpcConnection = nil; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] deviceController:[[self deviceController] uniqueIdentifier] \ + nodeID:[self nodeID] \ + GETTER_NAME:^(TYPE returnValue) { \ + outValue = returnValue; \ + }]; \ + \ + return outValue; \ + } @implementation MTRDevice_XPC - MTR_SIMPLE_REMOTE_XPC_GETTER(state, MTRDeviceState, MTRDeviceStateUnknown, getStateWithReply) MTR_SIMPLE_REMOTE_XPC_GETTER(deviceCachePrimed, BOOL, NO, getDeviceCachePrimedWithReply) MTR_SIMPLE_REMOTE_XPC_GETTER(estimatedStartTime, NSDate *, nil, getEstimatedStartTimeWithReply) MTR_SIMPLE_REMOTE_XPC_GETTER(estimatedSubscriptionLatency, NSNumber *, nil, getEstimatedSubscriptionLatencyWithReply) - -- (NSDictionary *) readAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID params:(MTRReadParams * _Nullable)params { +- (NSDictionary *)readAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID params:(MTRReadParams * _Nullable)params +{ __block NSDictionary * outValue = nil; NSXPCConnection * xpcConnection = nil; @@ -122,30 +121,34 @@ @implementation MTRDevice_XPC [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { MTR_LOG_ERROR("Error: %@", error); }] deviceController:[[self deviceController] uniqueIdentifier] - nodeID:[self nodeID] - readAttributeWithEndpointID: endpointID - clusterID: clusterID - attributeID: attributeID - params: params // TODO: PARAMS NEEDS TO CONORM TO NSCODER - withReply: ^(NSDictionary * returnValue) { - outValue = returnValue; - }]; + nodeID:[self nodeID] + readAttributeWithEndpointID:endpointID + clusterID:clusterID + attributeID:attributeID + params:params // TODO: PARAMS NEEDS TO CONORM TO NSCODER + withReply:^(NSDictionary * returnValue) { + outValue = returnValue; + }]; return outValue; } -- (void) writeAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID value:(id)value expectedValueInterval:(NSNumber *)expectedValueInterval timedWriteTimeout:(NSNumber * _Nullable)timeout { -// __block NSDictionary * outValue = nil; +- (void)writeAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID value:(id)value expectedValueInterval:(NSNumber *)expectedValueInterval timedWriteTimeout:(NSNumber * _Nullable)timeout +{ + // __block NSDictionary * outValue = nil; NSXPCConnection * xpcConnection = nil; [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { MTR_LOG_ERROR("Error: %@", error); }] deviceController:[[self deviceController] uniqueIdentifier] - nodeID:[self nodeID] - writeAttributeWithEndpointID: endpointID clusterID: clusterID attributeID: attributeID value: value expectedValueInterval: expectedValueInterval timedWriteTimeout: timeout]; + nodeID:[self nodeID] + writeAttributeWithEndpointID:endpointID + clusterID:clusterID + attributeID:attributeID + value:value + expectedValueInterval:expectedValueInterval + timedWriteTimeout:timeout]; } - - @end From 76b57e41c1b1c8d3cef7985267e4033f12d594ab Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 11:49:13 -0700 Subject: [PATCH 39/75] inevitably the file will need to be obj-C++ --- ...CParameters.m => MTRDeviceControllerXPCParameters.mm} | 0 src/darwin/Framework/Matter.xcodeproj/project.pbxproj | 9 ++++----- 2 files changed, 4 insertions(+), 5 deletions(-) rename src/darwin/Framework/CHIP/{MTRDeviceControllerXPCParameters.m => MTRDeviceControllerXPCParameters.mm} (100%) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.m b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm similarity index 100% rename from src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.m rename to src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index 1bf97cffa0a3be..33e25455a6127c 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -308,7 +308,7 @@ 9B5CCB592C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */; }; 9B5CCB5C2C6EC890009DD99B /* MTRDevice_XPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB5B2C6EC890009DD99B /* MTRDevice_XPC.mm */; }; 9B5CCB5D2C6EC890009DD99B /* MTRDevice_XPC.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB5A2C6EC890009DD99B /* MTRDevice_XPC.h */; }; - 9B5CCB602C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.m */; }; + 9B5CCB602C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.mm */; }; 9B5CCB612C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.h */; }; 9BC064942C6BCB6F00996FEF /* MTRXPCService.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */; }; 9BC064972C6BCBAE00996FEF /* MTRXPCServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */; }; @@ -753,7 +753,7 @@ 9B5CCB5A2C6EC890009DD99B /* MTRDevice_XPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDevice_XPC.h; sourceTree = ""; }; 9B5CCB5B2C6EC890009DD99B /* MTRDevice_XPC.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDevice_XPC.mm; sourceTree = ""; }; 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceControllerXPCParameters.h; sourceTree = ""; }; - 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRDeviceControllerXPCParameters.m; sourceTree = ""; }; + 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceControllerXPCParameters.mm; sourceTree = ""; }; 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCService.h; sourceTree = ""; }; 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceProtocol.h; sourceTree = ""; }; 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCServiceTests.m; sourceTree = ""; }; @@ -1275,7 +1275,6 @@ isa = PBXGroup; children = ( D444F9A12C6E8058007761E5 /* XPC Protocol */, - 9B231B022C62EF650030EB37 /* MTRDeviceController_Concrete.h */, 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */, 88E07D602B9A89A4005FD53E /* MTRMetricKeys.h */, 88FA798B2B7B257100CD4B6F /* MTRMetricsCollector.h */, @@ -1382,7 +1381,7 @@ 51E51FBE282AD37A00FC978D /* MTRDeviceControllerStartupParams.mm */, 51565CB52A7B0D6600469F18 /* MTRDeviceControllerParameters.h */, 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.h */, - 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.m */, + 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.mm */, 51565CB32A7AD78D00469F18 /* MTRDeviceControllerStorageDelegate.h */, 5A6FEC9427B5976200F25F42 /* MTRDeviceControllerXPCConnection.h */, 5A6FEC9527B5983000F25F42 /* MTRDeviceControllerXPCConnection.mm */, @@ -2017,7 +2016,7 @@ 51D0B1392B618CC6006E3511 /* MTRServerAttribute.mm in Sources */, 51B22C2A2740CB47008D5055 /* MTRCommandPayloadsObjc.mm in Sources */, 51F522682AE70734000C4050 /* MTRDeviceTypeMetadata.mm in Sources */, - 9B5CCB602C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.m in Sources */, + 9B5CCB602C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.mm in Sources */, 75B765C32A1D82D30014719B /* MTRAttributeSpecifiedCheck.mm in Sources */, AF5F90FF2878D351005503FA /* MTROTAProviderDelegateBridge.mm in Sources */, 516415FF2B6B132200D5CE11 /* DataModelHandler.cpp in Sources */, From 71905d271c62340424d310784fbb41ceba186911 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 12:28:00 -0700 Subject: [PATCH 40/75] prepare to use mach service name to create XPC connection --- .../Framework/CHIP/MTRDeviceController_XPC.mm | 26 +++++++++++++++++-- .../CHIP/MTRDeviceController_XPC_Internal.h | 1 + 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index 08a30cb34154f1..47f58da3cf253f 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -18,6 +18,8 @@ #import "MTRDeviceController_Internal.h" #import "MTRLogging_Internal.h" #import "MTRXPCServiceProtocol.h" +#import "MTRXPCServerProtocol.h" +#import "MTRXPCClientProtocol.h" @interface MTRDeviceController_XPC () @property (retain, readwrite) NSXPCConnection * xpcConnection; @@ -27,8 +29,28 @@ @interface MTRDeviceController_XPC () @implementation MTRDeviceController_XPC -// KMO TODO: -// startup parameters for XPC version of controller +- (id)initWithMachServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options +{ + if (!(self = [super initForSubclasses])) { + return nil; + } + + self.xpcConnection = [[NSXPCConnection alloc] initWithMachServiceName:machServiceName options:options]; + self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServerProtocol)]; + self.xpcConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCClientProtocol)]; + + // TODO: implement client protocol somewhere, probably on this object + // kmo 16 aug 2024 12h26 + // self.xpcConnection.exportedObject = self; + + self.xpcRemoteObjectProxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { + MTR_LOG_ERROR("%s: XPC remote object proxy error.", __PRETTY_FUNCTION__); + }]; + + [self.xpcConnection resume]; + + return self; +} - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEndpoint { diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h index 11fc52c1103a72..9426a27cabcaba 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h @@ -18,6 +18,7 @@ @interface MTRDeviceController_XPC (Internal) +- (id)initWithMachServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options; - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEndpoint; - (id)initWithTestXPCListener; - (void)testPing; From a5a1b9e03e6390cd761d1fdf8bbe5d65d9b51d78 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 12:44:04 -0700 Subject: [PATCH 41/75] allow for other XPC controller connection types for now once mach service is working, i don't expect to need others, but easier to collapse classes than raise. --- .../Framework/CHIP/MTRDeviceControllerXPCParameters.h | 8 +++++++- .../Framework/CHIP/MTRDeviceControllerXPCParameters.mm | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h index 09a31527736a1d..90e4a7d5c71008 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h @@ -18,7 +18,13 @@ NS_ASSUME_NONNULL_BEGIN -@interface MTRDeviceControllerXPCParameters : MTRDeviceControllerAbstractParameters +@interface MTRDeviceControllerXPCParameters: MTRDeviceControllerParameters +@end + +@interface MTRDeviceControllerMachServiceXPCParameters : MTRDeviceControllerXPCParameters + +@property (atomic, retain) NSString * machServiceName; +@property (atomic, readwrite) NSXPCConnectionOptions connectionOptions; @end diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm index d21d979d12459f..86ba8aed316a72 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm @@ -17,5 +17,7 @@ #import "MTRDeviceControllerXPCParameters.h" @implementation MTRDeviceControllerXPCParameters +@end +@implementation MTRDeviceControllerMachServiceXPCParameters @end From 44da0edc607e6b97683afdf5773a4ba0d3d12e5f Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 12:53:26 -0700 Subject: [PATCH 42/75] constant for well-known matter plugin service name --- src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h index 90e4a7d5c71008..0b93f2c6f3862d 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h @@ -18,6 +18,8 @@ NS_ASSUME_NONNULL_BEGIN +static NSString * MatterPluginWellKnownServiceName = @"com.apple.home.matter.framework.xpc"; + @interface MTRDeviceControllerXPCParameters: MTRDeviceControllerParameters @end From 82346bf64b31417b247f1f505d91fed8678481e8 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 12:54:14 -0700 Subject: [PATCH 43/75] note to self and re-ordering of this code now what `XPCParameters` is a subclass --- .../CHIP/MTRDeviceController_Concrete.mm | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 428c9f8d74c530..d442c0fc0e5db0 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -138,7 +138,15 @@ @implementation MTRDeviceController_Concrete { - (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { - if ([parameters isKindOfClass:MTRDeviceControllerParameters.class]) { + /// _ORDER MATTERS HERE:_ XPC parameters are a subclass of `MTRDeviceControllerParameters` + /// because of the enormous overlap of params. + if ([parameters isKindOfClass:MTRDeviceControllerXPCParameters.class]) { + MTR_LOG_ERROR("XPC Device Controller init not yet implemented"); + if (error) { + *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_NOT_IMPLEMENTED]; + } + return nil; + } else if ([parameters isKindOfClass:MTRDeviceControllerParameters.class]) { auto * controllerParameters = static_cast(parameters); // or, if necessary, MTRDeviceControllerFactory will auto-start in per-controller-storage mode if necessary @@ -147,13 +155,7 @@ - (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControll withParameters:controllerParameters error:error]; return controller; - } else if ([parameters isKindOfClass:MTRDeviceControllerXPCParameters.class]) { - MTR_LOG_ERROR("XPC Device Controller init not yet implemented"); - if (error) { - *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_NOT_IMPLEMENTED]; - } - return nil; - } else { + } else { // way out of our league MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); if (error) { From 2f51348360f6667f5aed7a4fdeb36a507f8ec622 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 13:00:37 -0700 Subject: [PATCH 44/75] XPC parameters should support secure coding --- .../Framework/CHIP/MTRDeviceControllerXPCParameters.mm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm index 86ba8aed316a72..7ba8697313c8ea 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm @@ -17,7 +17,17 @@ #import "MTRDeviceControllerXPCParameters.h" @implementation MTRDeviceControllerXPCParameters + ++ (BOOL)supportsSecureCoding { + return true; +} + @end @implementation MTRDeviceControllerMachServiceXPCParameters + ++ (BOOL)supportsSecureCoding { + return true; +} + @end From c14a2797b728728a308f6ab0dac1a4849d6a86e9 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 13:20:44 -0700 Subject: [PATCH 45/75] don't keep around object proxy; make a new one when needed. try calling the `checkIn` method when connecting. remove old test methods that served their purpose. --- .../Framework/CHIP/MTRDeviceController_XPC.mm | 54 +++++-------------- 1 file changed, 12 insertions(+), 42 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index 47f58da3cf253f..5c1304c5512613 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -22,8 +22,8 @@ #import "MTRXPCClientProtocol.h" @interface MTRDeviceController_XPC () + @property (retain, readwrite) NSXPCConnection * xpcConnection; -@property (retain, readwrite) id xpcRemoteObjectProxy; @end @@ -43,11 +43,14 @@ - (id)initWithMachServiceName:(NSString *)machServiceName options:(NSXPCConnecti // kmo 16 aug 2024 12h26 // self.xpcConnection.exportedObject = self; - self.xpcRemoteObjectProxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { + [self.xpcConnection resume]; + + id proxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { MTR_LOG_ERROR("%s: XPC remote object proxy error.", __PRETTY_FUNCTION__); }]; - [self.xpcConnection resume]; + NSDictionary * helloContext = @{ @"human_readable_context" : @"hello" }; + [proxy deviceController:self.uniqueIdentifier checkInWithContext:helloContext]; return self; } @@ -59,17 +62,6 @@ - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEnd } self.xpcConnection = [[NSXPCConnection alloc] initWithListenerEndpoint:listenerEndpoint]; self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; - - // maybe poor architecture to store this instead of access it thru XPC connection every time kmo 15 aug 2024 - - // REVIEWERS: both of below inits result in proxies that complain: - // "Return type of methods sent over this proxy must be 'void' or 'NSProgress *'" - // which Internets seem to suggest is true. kmo 15 aug 2024 - self.xpcRemoteObjectProxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { - MTR_LOG_ERROR("%s: XPC remote object proxy error.", __PRETTY_FUNCTION__); - }]; - ; - [self.xpcConnection resume]; // TODO: something seems wrong at this point so clearly subsequent `xpcRemoteObjectProxy` calls won't fare much better @@ -79,43 +71,21 @@ - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEnd - (void)testPing { - MTR_LOG_DEBUG("pinging via %s", __PRETTY_FUNCTION__); - [self.xpcRemoteObjectProxy ping]; + MTR_LOG_ERROR("ping not supported in new XPC Server protocol"); +// MTR_LOG_DEBUG("pinging via %s", __PRETTY_FUNCTION__); +// id proxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { +// MTR_LOG_ERROR("%s: XPC remote object proxy error.", __PRETTY_FUNCTION__); +// }]; +// [proxy ping]; } -// this blows up. kmo 15 aug 2024 12h29 -- (NSNumber *)meaningOfLife -{ - return [self.xpcRemoteObjectProxy synchronouslyGetMeaningOfLife]; -} -- (NSNumber *)internallyAsyncMeaningOfLife -{ - __block int result; - // semaphores probably not ultimately the right way to do this? kmo 15 aug 2024 - auto semaphore = dispatch_semaphore_create(0); - [self.xpcRemoteObjectProxy getMeaningOfLifeWithReplyBlock:^(int reply) { - result = reply; - }]; - dispatch_semaphore_wait(semaphore, 1.0); - // so, this will return an undefined value if timed out? kmo 15 aug 2024 12h21 - return @(result); -} - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { MTR_LOG_ERROR("unimplemented method %s called", __PRETTY_FUNCTION__); - // initiate XPC connection? kmo 14 aug 2024 12h35 return nil; } -- (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload - newNodeID:(NSNumber *)newNodeID - error:(NSError * __autoreleasing *)error -{ - MTR_LOG_DEBUG("called XPC stub %s", __PRETTY_FUNCTION__); - return [self.xpcRemoteObjectProxy setupCommissioningSessionWithPayload:payload newNodeID:newNodeID error:error]; -} - @end From 33556ea480eed415976ae03bb7e9963924dd7ebd Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 14:04:16 -0700 Subject: [PATCH 46/75] that doesn't need to be there. --- src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h index 0b93f2c6f3862d..90e4a7d5c71008 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h @@ -18,8 +18,6 @@ NS_ASSUME_NONNULL_BEGIN -static NSString * MatterPluginWellKnownServiceName = @"com.apple.home.matter.framework.xpc"; - @interface MTRDeviceControllerXPCParameters: MTRDeviceControllerParameters @end From 71b33e745d50ea2fc29b36dc5e17d7a5eca219fb Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Fri, 16 Aug 2024 21:05:12 +0000 Subject: [PATCH 47/75] Restyled by whitespace --- src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index 5c1304c5512613..65e4ef2f823089 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -34,7 +34,7 @@ - (id)initWithMachServiceName:(NSString *)machServiceName options:(NSXPCConnecti if (!(self = [super initForSubclasses])) { return nil; } - + self.xpcConnection = [[NSXPCConnection alloc] initWithMachServiceName:machServiceName options:options]; self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServerProtocol)]; self.xpcConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCClientProtocol)]; @@ -44,7 +44,7 @@ - (id)initWithMachServiceName:(NSString *)machServiceName options:(NSXPCConnecti // self.xpcConnection.exportedObject = self; [self.xpcConnection resume]; - + id proxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { MTR_LOG_ERROR("%s: XPC remote object proxy error.", __PRETTY_FUNCTION__); }]; From 2fa09b86748b9e688e0bc9b72d1ca2e1a2b3ab8a Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Fri, 16 Aug 2024 21:05:15 +0000 Subject: [PATCH 48/75] Restyled by clang-format --- .../CHIP/MTRDeviceControllerXPCParameters.h | 2 +- .../CHIP/MTRDeviceControllerXPCParameters.mm | 6 ++++-- .../CHIP/MTRDeviceController_Concrete.mm | 2 +- .../Framework/CHIP/MTRDeviceController_XPC.mm | 16 +++++++--------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h index 90e4a7d5c71008..9218ff2a990dcd 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.h @@ -18,7 +18,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface MTRDeviceControllerXPCParameters: MTRDeviceControllerParameters +@interface MTRDeviceControllerXPCParameters : MTRDeviceControllerParameters @end @interface MTRDeviceControllerMachServiceXPCParameters : MTRDeviceControllerXPCParameters diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm index 7ba8697313c8ea..1296aa4c3f8899 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm @@ -18,7 +18,8 @@ @implementation MTRDeviceControllerXPCParameters -+ (BOOL)supportsSecureCoding { ++ (BOOL)supportsSecureCoding +{ return true; } @@ -26,7 +27,8 @@ + (BOOL)supportsSecureCoding { @implementation MTRDeviceControllerMachServiceXPCParameters -+ (BOOL)supportsSecureCoding { ++ (BOOL)supportsSecureCoding +{ return true; } diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index d442c0fc0e5db0..717062174f782a 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -155,7 +155,7 @@ - (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControll withParameters:controllerParameters error:error]; return controller; - } else { + } else { // way out of our league MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); if (error) { diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index 65e4ef2f823089..ed7577071a6efa 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -17,9 +17,9 @@ #import "MTRDeviceController_XPC.h" #import "MTRDeviceController_Internal.h" #import "MTRLogging_Internal.h" -#import "MTRXPCServiceProtocol.h" -#import "MTRXPCServerProtocol.h" #import "MTRXPCClientProtocol.h" +#import "MTRXPCServerProtocol.h" +#import "MTRXPCServiceProtocol.h" @interface MTRDeviceController_XPC () @@ -72,15 +72,13 @@ - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEnd - (void)testPing { MTR_LOG_ERROR("ping not supported in new XPC Server protocol"); -// MTR_LOG_DEBUG("pinging via %s", __PRETTY_FUNCTION__); -// id proxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { -// MTR_LOG_ERROR("%s: XPC remote object proxy error.", __PRETTY_FUNCTION__); -// }]; -// [proxy ping]; + // MTR_LOG_DEBUG("pinging via %s", __PRETTY_FUNCTION__); + // id proxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { + // MTR_LOG_ERROR("%s: XPC remote object proxy error.", __PRETTY_FUNCTION__); + // }]; + // [proxy ping]; } - - - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { From 0ae822f15054b9ac165c17a281e8966611ee9d92 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 16:03:38 -0700 Subject: [PATCH 49/75] no longer fighting with compiler, have some `instancetype` --- src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 717062174f782a..9852d616589bff 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -135,7 +135,7 @@ @implementation MTRDeviceController_Concrete { @synthesize concurrentSubscriptionPool = _concurrentSubscriptionPool; @synthesize storageBehaviorConfiguration = _storageBehaviorConfiguration; -- (nullable MTRDeviceController_Concrete *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters +- (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { /// _ORDER MATTERS HERE:_ XPC parameters are a subclass of `MTRDeviceControllerParameters` From 12adef2b812c7fb29a729cff11263c04aac9e165 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 16:04:07 -0700 Subject: [PATCH 50/75] extremely normal object construction --- .../Framework/CHIP/MTRDeviceController_Concrete.mm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 9852d616589bff..c79a8dcf96891d 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -34,6 +34,7 @@ #import "MTRDeviceControllerStartupParams_Internal.h" #import "MTRDeviceControllerXPCParameters.h" #import "MTRDeviceController_Concrete.h" +#import "MTRDeviceController_XPC.h" #import "MTRDevice_Concrete.h" #import "MTRDevice_Internal.h" #import "MTRError_Internal.h" @@ -138,14 +139,19 @@ @implementation MTRDeviceController_Concrete { - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { + /// IF YOU ARE ALARMED BY TYPES: You are right to be alarmed, but do not panic. /// _ORDER MATTERS HERE:_ XPC parameters are a subclass of `MTRDeviceControllerParameters` /// because of the enormous overlap of params. if ([parameters isKindOfClass:MTRDeviceControllerXPCParameters.class]) { - MTR_LOG_ERROR("XPC Device Controller init not yet implemented"); + MTRDeviceController * xpcDeviceController = [[MTRDeviceController_XPC alloc] initWithParameters:parameters error:error]; + + // TODO: there's probably a more appropriate error here. if (error) { *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_NOT_IMPLEMENTED]; } - return nil; + + /// Being of sound mind, I willfully and voluntarily make this static cast. (We are counting on the factory to perform the relevant type erasure.) + return static_cast(xpcDeviceController); } else if ([parameters isKindOfClass:MTRDeviceControllerParameters.class]) { auto * controllerParameters = static_cast(parameters); From 9e131f06a8cddbd2c06c418c61e112f7f76496e2 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 16:04:33 -0700 Subject: [PATCH 51/75] somehow this header got thrown out --- src/darwin/Framework/Matter.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index 33e25455a6127c..fa638d64b0a891 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -302,6 +302,7 @@ 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, ); }; }; + 9B0484F52C701154006C2D5F /* MTRDeviceController_Concrete.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B0484F42C701154006C2D5F /* MTRDeviceController_Concrete.h */; }; 9B231B042C62EF650030EB37 /* (null) in Headers */ = {isa = PBXBuildFile; }; 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */; }; 9B5CCB572C6E6CC9009DD99B /* MTRXPCService.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */; }; @@ -747,6 +748,7 @@ 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 = ""; }; + 9B0484F42C701154006C2D5F /* 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 = ""; }; 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRXPCService.mm; sourceTree = ""; }; 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceController_XPC_Internal.h; sourceTree = ""; }; @@ -1276,6 +1278,7 @@ children = ( D444F9A12C6E8058007761E5 /* XPC Protocol */, 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */, + 9B0484F42C701154006C2D5F /* MTRDeviceController_Concrete.h */, 88E07D602B9A89A4005FD53E /* MTRMetricKeys.h */, 88FA798B2B7B257100CD4B6F /* MTRMetricsCollector.h */, 88FA798C2B7B257100CD4B6F /* MTRMetricsCollector.mm */, @@ -1659,6 +1662,7 @@ 51B22C1E2740CB0A008D5055 /* MTRStructsObjc.h in Headers */, 2CB7163B252E8A7B0026E2BB /* MTRDeviceControllerDelegateBridge.h in Headers */, 75B765C12A1D71BC0014719B /* MTRAttributeSpecifiedCheck.h in Headers */, + 9B0484F52C701154006C2D5F /* MTRDeviceController_Concrete.h in Headers */, 5ACDDD7A27CD129700EFD68A /* MTRClusterStateCacheContainer.h in Headers */, 5A6FEC9227B5669C00F25F42 /* MTRDeviceControllerOverXPC.h in Headers */, D444F9AA2C6E9A08007761E5 /* MTRXPCClientProtocol.h in Headers */, From 16279742a6f2496e06e8958322e648c061445f1f Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Fri, 16 Aug 2024 23:05:06 +0000 Subject: [PATCH 52/75] Restyled by whitespace --- src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index c79a8dcf96891d..26fc3a41401cc7 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -144,12 +144,12 @@ - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParamete /// because of the enormous overlap of params. if ([parameters isKindOfClass:MTRDeviceControllerXPCParameters.class]) { MTRDeviceController * xpcDeviceController = [[MTRDeviceController_XPC alloc] initWithParameters:parameters error:error]; - + // TODO: there's probably a more appropriate error here. if (error) { *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_NOT_IMPLEMENTED]; } - + /// Being of sound mind, I willfully and voluntarily make this static cast. (We are counting on the factory to perform the relevant type erasure.) return static_cast(xpcDeviceController); } else if ([parameters isKindOfClass:MTRDeviceControllerParameters.class]) { From bd58fe80e20cd316f68390d8a03c31f32a05171a Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Fri, 16 Aug 2024 23:05:16 +0000 Subject: [PATCH 53/75] Restyled by clang-format --- src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 26fc3a41401cc7..92e2e83dc0baa7 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -137,7 +137,7 @@ @implementation MTRDeviceController_Concrete { @synthesize storageBehaviorConfiguration = _storageBehaviorConfiguration; - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters - error:(NSError * __autoreleasing *)error + error:(NSError * __autoreleasing *)error { /// IF YOU ARE ALARMED BY TYPES: You are right to be alarmed, but do not panic. /// _ORDER MATTERS HERE:_ XPC parameters are a subclass of `MTRDeviceControllerParameters` From a834633121056bd7ba4418e66305d57632e9093f Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Fri, 16 Aug 2024 16:52:35 -0700 Subject: [PATCH 54/75] Updating XPC interfaces --- src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 126 +++++++++++++++------ 1 file changed, 89 insertions(+), 37 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm index 8f02eefdd80a38..921eef8575689d 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -105,6 +105,38 @@ -(TYPE) NAME return outValue; \ } +#define MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ + \ + -(void) METHOD_SIGNATURE \ + { \ + NSXPCConnection * xpcConnection = nil; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] deviceController:[[self deviceController] uniqueIdentifier] \ + nodeID:[self nodeID] \ + ADDITIONAL_ARGUMENTS]; \ + } + + +#define MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS) \ +- (TYPE) SIGNATURE \ +{ \ + __block TYPE outValue = DEFAULT_VALUE; \ +\ + NSXPCConnection * xpcConnection = nil; \ +\ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] deviceController:[[self deviceController] uniqueIdentifier] \ + nodeID:[self nodeID] \ + ADDITIONAL_ARGUMENTS:^(TYPE returnValue) { \ + outValue = returnValue; \ + }];\ + \ + return outValue; \ +} + @implementation MTRDevice_XPC MTR_SIMPLE_REMOTE_XPC_GETTER(state, MTRDeviceState, MTRDeviceStateUnknown, getStateWithReply) @@ -112,43 +144,63 @@ @implementation MTRDevice_XPC MTR_SIMPLE_REMOTE_XPC_GETTER(estimatedStartTime, NSDate *, nil, getEstimatedStartTimeWithReply) MTR_SIMPLE_REMOTE_XPC_GETTER(estimatedSubscriptionLatency, NSNumber *, nil, getEstimatedSubscriptionLatencyWithReply) -- (NSDictionary *)readAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID params:(MTRReadParams * _Nullable)params -{ - __block NSDictionary * outValue = nil; - - NSXPCConnection * xpcConnection = nil; - - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { - MTR_LOG_ERROR("Error: %@", error); - }] deviceController:[[self deviceController] uniqueIdentifier] - nodeID:[self nodeID] - readAttributeWithEndpointID:endpointID - clusterID:clusterID - attributeID:attributeID - params:params // TODO: PARAMS NEEDS TO CONORM TO NSCODER - withReply:^(NSDictionary * returnValue) { - outValue = returnValue; - }]; - - return outValue; -} +typedef NSDictionary * readAttributeResponseType; +// TODO: PARAMS NEEDS TO CONORM TO NSCODER +MTR_COMPLEX_REMOTE_XPC_GETTER(readAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID params:(MTRReadParams * _Nullable)params, + readAttributeResponseType, + nil, + readAttributeWithEndpointID:endpointID clusterID:clusterID attributeID:attributeID params:params withReply) -- (void)writeAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID value:(id)value expectedValueInterval:(NSNumber *)expectedValueInterval timedWriteTimeout:(NSNumber * _Nullable)timeout -{ - // __block NSDictionary * outValue = nil; - - NSXPCConnection * xpcConnection = nil; - - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { - MTR_LOG_ERROR("Error: %@", error); - }] deviceController:[[self deviceController] uniqueIdentifier] - nodeID:[self nodeID] - writeAttributeWithEndpointID:endpointID - clusterID:clusterID - attributeID:attributeID - value:value - expectedValueInterval:expectedValueInterval - timedWriteTimeout:timeout]; -} + +MTR_SIMPLE_REMOTE_XPC_COMMAND(writeAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID value:(id)value expectedValueInterval:(NSNumber *)expectedValueInterval timedWriteTimeout:(NSNumber * _Nullable)timeout, writeAttributeWithEndpointID:endpointID clusterID:clusterID attributeID:attributeID value:value expectedValueInterval:expectedValueInterval timedWriteTimeout:timeout) + + + +//- (void)invokeCommandWithEndpointID:(NSNumber *)endpointID +// clusterID:(NSNumber *)clusterID +// commandID:(NSNumber *)commandID +// commandFields:(id)commandFields +// expectedValues:(NSArray *> * _Nullable)expectedValues +// expectedValueInterval:(NSNumber * _Nullable)expectedValueInterval +// timedInvokeTimeout:(NSNumber * _Nullable)timeout +// queue:(dispatch_queue_t)queue +// completion:(MTRDeviceResponseHandler)completion { +// NSXPCConnection * xpcConnection = nil; +// +// [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { +// MTR_LOG_ERROR("Error: %@", error); +// }] deviceController:[[self deviceController] uniqueIdentifier] +// nodeID:[self nodeID] +// invokeCommandWithEndpointID:(NSNumber *)endpointID +// clusterID:(NSNumber *)clusterID +// commandID:(NSNumber *)commandID +// commandFields:(id)commandFields +// expectedValues:(NSArray *> * _Nullable)expectedValues +// expectedValueInterval:(NSNumber * _Nullable)expectedValueInterval +// timedInvokeTimeout:(NSNumber * _Nullable)timeout +// completion:(MTRDeviceResponseHandler response) { +// completion(); +// }]; +// +//} + +// Not Supported via XPC +//- (oneway void)deviceController:(NSUUID *)controller nodeID:(NSNumber *)nodeID openCommissioningWindowWithSetupPasscode:(NSNumber *)setupPasscode discriminator:(NSNumber *)discriminator duration:(NSNumber *)duration completion:(MTRDeviceOpenCommissioningWindowHandler)completion; + +MTR_SIMPLE_REMOTE_XPC_GETTER(clientDataKeys, NSArray *, nil, getClientDataKeysWithReply) +MTR_COMPLEX_REMOTE_XPC_GETTER(clientDataForKey:(NSString *)key, id _Nullable, nil, clientDataForKey:key withReply) + +MTR_SIMPLE_REMOTE_XPC_COMMAND(setClientDataForKey:(NSString *)key value:(id)value, setClientDataForKey:key value: value) +MTR_SIMPLE_REMOTE_XPC_COMMAND(removeClientDataForKey:(NSString *)key, removeClientDataForKey:key) + +MTR_COMPLEX_REMOTE_XPC_GETTER(clientDataKeysForEndpointID:(NSNumber *)endpointID, NSArray * _Nullable, nil, clientDataKeysForEndpointID:(NSNumber *)endpointID withReply) + +MTR_COMPLEX_REMOTE_XPC_GETTER(clientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID, id _Nullable, nil, clientDataForKey: key endpointID: endpointID withReply) + +MTR_SIMPLE_REMOTE_XPC_COMMAND(setClientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID value:(id)value, setClientDataForKey:key endpointID:endpointID value:value) +MTR_SIMPLE_REMOTE_XPC_COMMAND(removeClientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID value:(id)value, removeClientDataForKey:key endpointID:endpointID) + +// Not Supported via XPC +// - (oneway void)downloadLogOfType:(MTRDiagnosticLogType)type nodeID:(NSNumber *)nodeID timeout:(NSTimeInterval)timeout completion:(void (^)(NSURL * _Nullable url, NSError * _Nullable error))completion; @end From 5a975c957b6deafbeada30a3951bf1d8267e287d Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 17:59:45 -0700 Subject: [PATCH 55/75] hide `initWithMachServiceName:options:` constructor tvOS/iOS compilation issues need a look --- src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index ed7577071a6efa..0bd96f26906d54 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -27,8 +27,10 @@ @interface MTRDeviceController_XPC () @end +//#define MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR @implementation MTRDeviceController_XPC +#ifdef MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR - (id)initWithMachServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options { if (!(self = [super initForSubclasses])) { @@ -54,6 +56,7 @@ - (id)initWithMachServiceName:(NSString *)machServiceName options:(NSXPCConnecti return self; } +#endif // MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEndpoint { From 0ef283d2c80247619ca003cbc00f8c3f5658d9e4 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 18:03:31 -0700 Subject: [PATCH 56/75] make `MTRDeviceController_XPC` an XPC client via `MTRXPCClientProtocol_MTRDeviceController`, which for the moment is empty --- src/darwin/Framework/CHIP/MTRDeviceController_XPC.h | 4 +++- src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h index 2cc4d92feb6ed2..155dfbc6120d78 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h @@ -18,10 +18,12 @@ #import "MTRDeviceController.h" #import +@protocol MTRXPCClientProtocol_MTRDeviceController; + NS_ASSUME_NONNULL_BEGIN MTR_TESTABLE -@interface MTRDeviceController_XPC : MTRDeviceController +@interface MTRDeviceController_XPC : MTRDeviceController @end diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index 0bd96f26906d54..4cea88160828a5 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -90,3 +90,7 @@ - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParamete } @end + +@implementation MTRDeviceController_XPC (MTRXPCClientProtocol_MTRDeviceController) + // as of 2024-08-16, nothing needed here. +@end From 9af2a8185e2c8644393087f51542791186bb6264 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 18:48:36 -0700 Subject: [PATCH 57/75] remove initial tests they served their purpose well but are no longer relevant --- src/darwin/Framework/CHIP/MTRXPCService.h | 29 ----- src/darwin/Framework/CHIP/MTRXPCService.mm | 54 -------- .../Framework/CHIP/MTRXPCServiceProtocol.h | 55 -------- .../Framework/CHIPTests/MTRXPCServiceTests.m | 120 ------------------ .../MTRXPCServiceTestsDummyService.h | 26 ---- .../MTRXPCServiceTestsDummyService.m | 43 ------- .../Matter.xcodeproj/project.pbxproj | 22 ---- 7 files changed, 349 deletions(-) delete mode 100644 src/darwin/Framework/CHIP/MTRXPCService.h delete mode 100644 src/darwin/Framework/CHIP/MTRXPCService.mm delete mode 100644 src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h delete mode 100644 src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m delete mode 100644 src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h delete mode 100644 src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m diff --git a/src/darwin/Framework/CHIP/MTRXPCService.h b/src/darwin/Framework/CHIP/MTRXPCService.h deleted file mode 100644 index da1091ac62c350..00000000000000 --- a/src/darwin/Framework/CHIP/MTRXPCService.h +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright (c) 2024 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 "MTRDefines_Internal.h" // MTR_TESTABLE -#import "MTRXPCServiceProtocol.h" -#import - -NS_ASSUME_NONNULL_BEGIN - -MTR_TESTABLE -@interface MTRXPCService : NSObject -- (void)ping; -+ (NSXPCInterface *)xpcInterfaceForServiceServerProtocol; -@end - -NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/MTRXPCService.mm b/src/darwin/Framework/CHIP/MTRXPCService.mm deleted file mode 100644 index 164c6f948bd625..00000000000000 --- a/src/darwin/Framework/CHIP/MTRXPCService.mm +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (c) 2024 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 "MTRXPCService.h" -#import "MTRLogging.h" -#import "MTRLogging_Internal.h" -#import "MTRXPCServiceProtocol.h" - -@implementation MTRXPCService - -+ (NSXPCInterface *)xpcInterfaceForServiceServerProtocol -{ - NSXPCInterface * xpcInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; - // TODO: add types for each selector - return xpcInterface; -} - -- (void)ping -{ - MTR_LOG_DEBUG("PONG! %s", __PRETTY_FUNCTION__); -} - -- (nonnull NSNumber *)synchronouslyGetMeaningOfLife -{ - return @(42); -} - -- (void)getMeaningOfLifeWithReplyBlock:(nonnull MTRXPCServiceIntReplyBlock)reply -{ - reply(42); -} - -- (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload - newNodeID:(NSNumber *)newNodeID - error:(NSError * __autoreleasing *)error -{ - // temporary stub implementation - return false; -} - -@end diff --git a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h b/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h deleted file mode 100644 index 886f288a3f7e67..00000000000000 --- a/src/darwin/Framework/CHIP/MTRXPCServiceProtocol.h +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Copyright (c) 2024 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 - -@class MTRSetupPayload; - -NS_ASSUME_NONNULL_BEGIN - -typedef void (^MTRXPCServiceIntReplyBlock)(int); -typedef void (^MTRXPCServiceBoolReplyBlock)(BOOL); - -@protocol MTRXPCServiceProtocol -- (void)ping; -- (NSNumber *)synchronouslyGetMeaningOfLife; -- (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply; - -// identify "who i am" -// need invalidation and disconnect -// temporary inclusion -- (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload - newNodeID:(NSNumber *)newNodeID - error:(NSError * __autoreleasing *)error; - -@end - -// Add client protocol for e.g. attribute reports coming back not in response to a method call -// it will look an awful lot like the delegate! -// allow server to request UUID for reflection -// need invalidation and disconnect much like on service side -// TODO: see how much of Woody's work covers this - -//@protocol MTRXPCServiceDeviceControllerProtocol - -// -//- (BOOL)setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload -// newNodeID:(NSNumber *)newNodeID -// error:(NSError * __autoreleasing *)error; -// -//@end - -NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m deleted file mode 100644 index 83053c9222c822..00000000000000 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTests.m +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Copyright (c) 2024 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 "MTRDeviceController_XPC.h" -#import "MTRDeviceController_XPC_Internal.h" -#import "MTRXPCService.h" -#import "MTRXPCServiceProtocol.h" -#import "MTRXPCServiceTestsDummyService.h" -#import -#import - -@interface MTRXPCServiceTests : XCTestCase - -@property (nonatomic, readwrite, strong) NSXPCListener * xpcListener; -@property (nonatomic, readwrite, strong) NSXPCInterface * serviceInterface; -@property (nonatomic, readwrite, strong) NSXPCInterface * clientInterface; -@property (readwrite, strong) NSXPCConnection * xpcConnection; - -@property (nonatomic, readwrite, strong) MTRXPCServiceTestsDummyService * dummyService; - -@end - -@implementation MTRXPCServiceTests - -// NSXPCListenerDelegate -- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection -{ - NSLog(@"%s: XPC listener accepting connection", __PRETTY_FUNCTION__); - - XCTAssertNil(_xpcConnection); - XCTAssertNotNil(newConnection); - XCTAssertNotNil(_dummyService); - - newConnection.exportedInterface = _serviceInterface; - newConnection.exportedObject = _dummyService; - // newConnection.remoteObjectInterface = _serviceInterface; - newConnection.invalidationHandler = ^{ - dispatch_async(dispatch_get_main_queue(), ^{ - NSLog(@"%s: XPC connection disconnected", __PRETTY_FUNCTION__); - self.xpcConnection = nil; - // if (self.xpcDisconnectExpectation) { - // [self.xpcDisconnectExpectation fulfill]; - // self.xpcDisconnectExpectation = nil; - // } - }); - }; - dispatch_async(dispatch_get_main_queue(), ^{ - self.xpcConnection = newConnection; - [newConnection resume]; - }); - return YES; -} - -// end NSXPCListenerDelegate - -- (void)setUp -{ - _dummyService = [[MTRXPCServiceTestsDummyService alloc] init]; - _xpcListener = [NSXPCListener anonymousListener]; - [_xpcListener setDelegate:(id) self]; - _serviceInterface = [MTRXPCService xpcInterfaceForServiceServerProtocol]; - [_xpcListener resume]; - XCTAssertNotNil(_xpcListener); - NSLog(@"%s: done", __PRETTY_FUNCTION__); -} - -- (void)tearDown -{ - _xpcListener.delegate = nil; - _xpcListener = nil; - _serviceInterface = nil; - _dummyService = nil; -} - -- (void)testExample -{ - NSLog(@"%s", __PRETTY_FUNCTION__); - - XCTAssertNotNil(_xpcListener); - XCTAssertNotNil(_xpcListener.endpoint); - NSXPCConnection * serviceConnection = [[NSXPCConnection alloc] initWithListenerEndpoint:_xpcListener.endpoint]; - serviceConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; - id obj = serviceConnection.remoteObjectProxy; - - [serviceConnection resume]; - - XCTAssertNotNil(obj); - - [obj ping]; - - // NSNumber * lifeMeaning = [obj synchronouslyGetMeaningOfLife]; - // - // NSLog(@"test got lifeMeaning = %@", lifeMeaning); - - XCTestExpectation * expectation = [[XCTestExpectation alloc] initWithDescription:@"should get meaning of life"]; - __block NSNumber * asyncLifeMeaning; - [obj getMeaningOfLifeWithReplyBlock:^(int reply) { - asyncLifeMeaning = @(reply); - NSLog(@"got async life meaning %@", asyncLifeMeaning); - [expectation fulfill]; - }]; - - [self waitForExpectations:@[ expectation ] timeout:1.0]; - NSLog(@"done with %s", __PRETTY_FUNCTION__); -} - -@end diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h deleted file mode 100644 index d78389316d03d0..00000000000000 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.h +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2024 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 "MTRXPCServiceProtocol.h" -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MTRXPCServiceTestsDummyService : NSObject { -} -@end - -NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m b/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m deleted file mode 100644 index ee33bd9ad97b7c..00000000000000 --- a/src/darwin/Framework/CHIPTests/MTRXPCServiceTestsDummyService.m +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (c) 2024 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 "MTRXPCServiceTestsDummyService.h" -#import "MTRXPCServiceProtocol.h" - -@implementation MTRXPCServiceTestsDummyService { -} - -- (void)ping -{ - NSLog(@"PONG! %s", __PRETTY_FUNCTION__); -} - -- (void)getMeaningOfLifeWithReplyBlock:(MTRXPCServiceIntReplyBlock)reply -{ - reply(42); -} - -- (BOOL)setupCommissioningSessionWithPayload:(nonnull MTRSetupPayload *)payload newNodeID:(nonnull NSNumber *)newNodeID error:(NSError * __autoreleasing _Nullable * _Nullable)error -{ - return false; -} - -- (nonnull NSNumber *)synchronouslyGetMeaningOfLife -{ - return @42; -} - -@end diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index fa638d64b0a891..3a5968072d5a8d 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -305,16 +305,11 @@ 9B0484F52C701154006C2D5F /* MTRDeviceController_Concrete.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B0484F42C701154006C2D5F /* MTRDeviceController_Concrete.h */; }; 9B231B042C62EF650030EB37 /* (null) in Headers */ = {isa = PBXBuildFile; }; 9B231B052C62EF650030EB37 /* MTRDeviceController_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B231B032C62EF650030EB37 /* MTRDeviceController_Concrete.mm */; }; - 9B5CCB572C6E6CC9009DD99B /* MTRXPCService.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */; }; 9B5CCB592C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */; }; 9B5CCB5C2C6EC890009DD99B /* MTRDevice_XPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB5B2C6EC890009DD99B /* MTRDevice_XPC.mm */; }; 9B5CCB5D2C6EC890009DD99B /* MTRDevice_XPC.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB5A2C6EC890009DD99B /* MTRDevice_XPC.h */; }; 9B5CCB602C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.mm */; }; 9B5CCB612C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.h */; }; - 9BC064942C6BCB6F00996FEF /* MTRXPCService.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */; }; - 9BC064972C6BCBAE00996FEF /* MTRXPCServiceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */; }; - 9BC064992C6BCEA000996FEF /* MTRXPCServiceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */; }; - 9BC0649C2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC0649B2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m */; }; 9BDA2A062C5D9AF800A32BDD /* MTRDevice_Concrete.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */; }; 9BDA2A082C5D9AFB00A32BDD /* MTRDevice_Concrete.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */; }; 9BFE5D502C6D3075007D4319 /* MTRDeviceController_XPC.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BFE5D4E2C6D3075007D4319 /* MTRDeviceController_XPC.h */; }; @@ -750,17 +745,11 @@ 99D466E02798936D0089A18F /* MTRCommissioningParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRCommissioningParameters.h; sourceTree = ""; }; 9B0484F42C701154006C2D5F /* 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 = ""; }; - 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRXPCService.mm; sourceTree = ""; }; 9B5CCB582C6E6FD3009DD99B /* MTRDeviceController_XPC_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceController_XPC_Internal.h; sourceTree = ""; }; 9B5CCB5A2C6EC890009DD99B /* MTRDevice_XPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDevice_XPC.h; sourceTree = ""; }; 9B5CCB5B2C6EC890009DD99B /* MTRDevice_XPC.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDevice_XPC.mm; sourceTree = ""; }; 9B5CCB5E2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceControllerXPCParameters.h; sourceTree = ""; }; 9B5CCB5F2C6EE29E009DD99B /* MTRDeviceControllerXPCParameters.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceControllerXPCParameters.mm; sourceTree = ""; }; - 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCService.h; sourceTree = ""; }; - 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceProtocol.h; sourceTree = ""; }; - 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCServiceTests.m; sourceTree = ""; }; - 9BC0649A2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRXPCServiceTestsDummyService.h; sourceTree = ""; }; - 9BC0649B2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCServiceTestsDummyService.m; sourceTree = ""; }; 9BDA2A052C5D9AF800A32BDD /* MTRDevice_Concrete.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDevice_Concrete.mm; sourceTree = ""; }; 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDevice_Concrete.h; sourceTree = ""; }; 9BFE5D4E2C6D3075007D4319 /* MTRDeviceController_XPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceController_XPC.h; sourceTree = ""; }; @@ -1342,9 +1331,6 @@ 7596A84A287636C1004DAE0E /* MTRDevice_Internal.h */, 7596A84228762729004DAE0E /* MTRDevice.h */, 7596A84328762729004DAE0E /* MTRDevice.mm */, - 9BC064962C6BCBAE00996FEF /* MTRXPCServiceProtocol.h */, - 9BC064922C6BCB6F00996FEF /* MTRXPCService.h */, - 9B5CCB562C6E6CC9009DD99B /* MTRXPCService.mm */, 9B5CCB5A2C6EC890009DD99B /* MTRDevice_XPC.h */, 9B5CCB5B2C6EC890009DD99B /* MTRDevice_XPC.mm */, 9BDA2A072C5D9AFB00A32BDD /* MTRDevice_Concrete.h */, @@ -1486,9 +1472,6 @@ 5A7947DD27BEC3F500434CF2 /* MTRXPCListenerSampleTests.m */, 5A6FEC9C27B5E48800F25F42 /* MTRXPCProtocolTests.m */, 51189FC72A33ACE900184508 /* TestHelpers */, - 9BC064982C6BCEA000996FEF /* MTRXPCServiceTests.m */, - 9BC0649A2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.h */, - 9BC0649B2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m */, ); path = CHIPTests; sourceTree = ""; @@ -1656,7 +1639,6 @@ 514C7A042B6436D500DD6D7B /* MTRServerCluster_Internal.h in Headers */, 88E6C9472B6334ED001A1FE0 /* MTRMetrics_Internal.h in Headers */, 5A6FEC9927B5C88900F25F42 /* MTRDeviceOverXPC.h in Headers */, - 9BC064942C6BCB6F00996FEF /* MTRXPCService.h in Headers */, B4FCD5732B611EB300832859 /* MTRDiagnosticLogsDownloader.h in Headers */, 51B22C222740CB1D008D5055 /* MTRCommandPayloadsObjc.h in Headers */, 51B22C1E2740CB0A008D5055 /* MTRStructsObjc.h in Headers */, @@ -1732,7 +1714,6 @@ 51D0B1382B618CC6006E3511 /* MTRServerAttribute.h in Headers */, 1EC4CE6425CC276600D7304F /* MTRBaseClusters.h in Headers */, 3D843712294977000070D20A /* MTRCallbackBridgeBase.h in Headers */, - 9BC064972C6BCBAE00996FEF /* MTRXPCServiceProtocol.h in Headers */, 3DECCB742934C21B00585AEC /* MTRDefines.h in Headers */, 51C659D92BA3787500C54922 /* MTRTimeUtils.h in Headers */, 75139A702B7FE68C00E3A919 /* MTRDeviceControllerLocalTestStorage.h in Headers */, @@ -2074,7 +2055,6 @@ 754784652BFE65CB0089C372 /* MTRDeviceStorageBehaviorConfiguration.mm in Sources */, 7560FD1C27FBBD3F005E85B3 /* MTREventTLVValueDecoder.mm in Sources */, 5178E67E2AE098210069DF72 /* MTRCommandTimedCheck.mm in Sources */, - 9B5CCB572C6E6CC9009DD99B /* MTRXPCService.mm in Sources */, 7596A84928762783004DAE0E /* MTRAsyncCallbackWorkQueue.mm in Sources */, B2E0D7B9245B0B5C003C5B48 /* MTRSetupPayload.mm in Sources */, E04AC67F2BEEA17F00BA409B /* ember-global-attribute-access-interface.cpp in Sources */, @@ -2138,8 +2118,6 @@ 5165A4B32C5AB978002B9799 /* MTRClusterNamesTests.m in Sources */, 51E95DF82A78110900A434F0 /* MTRPerControllerStorageTests.m in Sources */, 51D9CB0B2BA37DCE0049D6DB /* MTRDSTOffsetTests.m in Sources */, - 9BC0649C2C6C152E00996FEF /* MTRXPCServiceTestsDummyService.m in Sources */, - 9BC064992C6BCEA000996FEF /* MTRXPCServiceTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; From ae5f28446df17176355f21894480b95a4a37146c Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 20:34:43 -0700 Subject: [PATCH 58/75] call mach service constructor when appropriate also logging --- .../CHIP/MTRDeviceController_Concrete.mm | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index 92e2e83dc0baa7..aaec9cb10d4e45 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -35,6 +35,7 @@ #import "MTRDeviceControllerXPCParameters.h" #import "MTRDeviceController_Concrete.h" #import "MTRDeviceController_XPC.h" +#import "MTRDeviceController_XPC_Internal.h" #import "MTRDevice_Concrete.h" #import "MTRDevice_Internal.h" #import "MTRError_Internal.h" @@ -143,16 +144,29 @@ - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParamete /// _ORDER MATTERS HERE:_ XPC parameters are a subclass of `MTRDeviceControllerParameters` /// because of the enormous overlap of params. if ([parameters isKindOfClass:MTRDeviceControllerXPCParameters.class]) { - MTRDeviceController * xpcDeviceController = [[MTRDeviceController_XPC alloc] initWithParameters:parameters error:error]; + if ([parameters isKindOfClass:MTRDeviceControllerMachServiceXPCParameters.class]) { + MTRDeviceControllerMachServiceXPCParameters * xpcParameters = (MTRDeviceControllerMachServiceXPCParameters *)parameters; + MTR_LOG_DEBUG("%s: got XPC parameters, getting XPC device controller", __PRETTY_FUNCTION__); - // TODO: there's probably a more appropriate error here. - if (error) { - *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_NOT_IMPLEMENTED]; - } + NSString * machServiceName = xpcParameters.machServiceName; + MTR_LOG_DEBUG("%s: machServiceName %@", __PRETTY_FUNCTION__, machServiceName); + + MTRDeviceController * xpcDeviceController = [[MTRDeviceController_XPC alloc] initWithMachServiceName:machServiceName options:xpcParameters.connectionOptions]; + + /// Being of sound mind, I willfully and voluntarily make this static cast. + return static_cast(xpcDeviceController); + } else { + MTR_LOG_ERROR("%s: unrecognized XPC parameters class %@", __PRETTY_FUNCTION__, NSStringFromClass(parameters.class)); - /// Being of sound mind, I willfully and voluntarily make this static cast. (We are counting on the factory to perform the relevant type erasure.) - return static_cast(xpcDeviceController); + // TODO: there's probably a more appropriate error here. + if (error) { + *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_NOT_IMPLEMENTED]; + } + + return nil; + } } else if ([parameters isKindOfClass:MTRDeviceControllerParameters.class]) { + MTR_LOG_DEBUG("%s: got standard parameters, getting standard device controller from factory", __PRETTY_FUNCTION__); auto * controllerParameters = static_cast(parameters); // or, if necessary, MTRDeviceControllerFactory will auto-start in per-controller-storage mode if necessary From a681706d1924b648490e8f69217c13615644b473 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 20:36:12 -0700 Subject: [PATCH 59/75] remove some obsolete test methods --- src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm | 10 ---------- .../Framework/CHIP/MTRDeviceController_XPC_Internal.h | 4 ---- 2 files changed, 14 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index 4cea88160828a5..ec2fa7e0b0eff0 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -72,16 +72,6 @@ - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEnd return self; } -- (void)testPing -{ - MTR_LOG_ERROR("ping not supported in new XPC Server protocol"); - // MTR_LOG_DEBUG("pinging via %s", __PRETTY_FUNCTION__); - // id proxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { - // MTR_LOG_ERROR("%s: XPC remote object proxy error.", __PRETTY_FUNCTION__); - // }]; - // [proxy ping]; -} - - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h index 9426a27cabcaba..788e48e72b474b 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h @@ -20,9 +20,5 @@ - (id)initWithMachServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options; - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEndpoint; -- (id)initWithTestXPCListener; -- (void)testPing; -- (NSNumber *)meaningOfLife; -- (NSNumber *)internallyAsyncMeaningOfLife; @end From 94bd0bb680ebabad4c66d61c7054231c21700a2d Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 20:38:00 -0700 Subject: [PATCH 60/75] more obsoletes fixed --- src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index ec2fa7e0b0eff0..bc14a312b50905 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -19,7 +19,6 @@ #import "MTRLogging_Internal.h" #import "MTRXPCClientProtocol.h" #import "MTRXPCServerProtocol.h" -#import "MTRXPCServiceProtocol.h" @interface MTRDeviceController_XPC () @@ -64,7 +63,7 @@ - (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEnd return nil; } self.xpcConnection = [[NSXPCConnection alloc] initWithListenerEndpoint:listenerEndpoint]; - self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServiceProtocol)]; + self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServerProtocol)]; [self.xpcConnection resume]; // TODO: something seems wrong at this point so clearly subsequent `xpcRemoteObjectProxy` calls won't fare much better From 526aab834e8fce596d9c9e02631b7d856e6f1bf7 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 20:59:38 -0700 Subject: [PATCH 61/75] more obsolete removal and logging tweaks --- .../Framework/CHIP/MTRDeviceController_XPC.mm | 28 +++++-------------- .../CHIP/MTRDeviceController_XPC_Internal.h | 1 - 2 files changed, 7 insertions(+), 22 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index bc14a312b50905..ba013405f8e197 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -27,54 +27,40 @@ @interface MTRDeviceController_XPC () @end //#define MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR + @implementation MTRDeviceController_XPC #ifdef MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR - (id)initWithMachServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options { + MTR_LOG_DEBUG("%s") if (!(self = [super initForSubclasses])) { return nil; } self.xpcConnection = [[NSXPCConnection alloc] initWithMachServiceName:machServiceName options:options]; self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServerProtocol)]; + self.xpcConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCClientProtocol)]; + self.xpcConnection.exportedObject = self; - // TODO: implement client protocol somewhere, probably on this object - // kmo 16 aug 2024 12h26 - // self.xpcConnection.exportedObject = self; - + MTR_LOG_DEBUG("%s: resuming new XPC connection"); [self.xpcConnection resume]; id proxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { MTR_LOG_ERROR("%s: XPC remote object proxy error.", __PRETTY_FUNCTION__); }]; - NSDictionary * helloContext = @{ @"human_readable_context" : @"hello" }; - [proxy deviceController:self.uniqueIdentifier checkInWithContext:helloContext]; - - return self; -} -#endif // MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR - -- (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEndpoint -{ - if (!(self = [super initForSubclasses])) { - return nil; - } - self.xpcConnection = [[NSXPCConnection alloc] initWithListenerEndpoint:listenerEndpoint]; - self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServerProtocol)]; - [self.xpcConnection resume]; - // TODO: something seems wrong at this point so clearly subsequent `xpcRemoteObjectProxy` calls won't fare much better return self; } +#endif // MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { - MTR_LOG_ERROR("unimplemented method %s called", __PRETTY_FUNCTION__); + MTR_LOG_ERROR("%s: unimplemented method called", __PRETTY_FUNCTION__); return nil; } diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h index 788e48e72b474b..e6c85b1f8de348 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC_Internal.h @@ -19,6 +19,5 @@ @interface MTRDeviceController_XPC (Internal) - (id)initWithMachServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options; -- (id)initWithXPCListenerEndpointForTesting:(NSXPCListenerEndpoint *)listenerEndpoint; @end From 79e8df65be6e286e13ed1fc80629343997def8b8 Mon Sep 17 00:00:00 2001 From: Kiel Oleson Date: Fri, 16 Aug 2024 21:05:31 -0700 Subject: [PATCH 62/75] buildability tweaks --- src/darwin/Framework/CHIP/MTRDeviceController_XPC.h | 3 +-- src/darwin/Framework/CHIP/XPC Protocol/MTRXPCClientProtocol.h | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h index 155dfbc6120d78..0f1a65b8edce31 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h @@ -16,10 +16,9 @@ #import "MTRDefines_Internal.h" // MTR_TESTABLE #import "MTRDeviceController.h" +#import "MTRXPCClientProtocol.h" // MTRXPCClientProtocol_MTRDeviceController #import -@protocol MTRXPCClientProtocol_MTRDeviceController; - NS_ASSUME_NONNULL_BEGIN MTR_TESTABLE diff --git a/src/darwin/Framework/CHIP/XPC Protocol/MTRXPCClientProtocol.h b/src/darwin/Framework/CHIP/XPC Protocol/MTRXPCClientProtocol.h index 0d518f525f7118..624c1f0a14570b 100644 --- a/src/darwin/Framework/CHIP/XPC Protocol/MTRXPCClientProtocol.h +++ b/src/darwin/Framework/CHIP/XPC Protocol/MTRXPCClientProtocol.h @@ -14,8 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +#import // for MTRDeviceState + NS_ASSUME_NONNULL_BEGIN + @protocol MTRXPCClientProtocol_MTRDevice - (oneway void)device:(NSNumber *)nodeID stateChanged:(MTRDeviceState)state; - (oneway void)device:(NSNumber *)nodeID receivedAttributeReport:(NSArray *> *)attributeReport; From a2aaa22407c66436542edb60379c7b6317ca2178 Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Sat, 17 Aug 2024 11:02:39 -0700 Subject: [PATCH 63/75] Moving along --- src/darwin/Framework/CHIP/MTRCluster.h | 2 +- src/darwin/Framework/CHIP/MTRCluster.mm | 38 +++++ .../Framework/CHIP/MTRDefines_Internal.h | 52 ++++++ .../Framework/CHIP/MTRDeviceController_XPC.h | 6 +- .../Framework/CHIP/MTRDeviceController_XPC.mm | 152 +++++++++++++++--- .../Framework/CHIP/MTRDevice_Internal.h | 2 + src/darwin/Framework/CHIP/MTRDevice_XPC.h | 2 +- src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 144 +++++++---------- .../CHIP/XPC Protocol/MTRXPCServerProtocol.h | 2 +- 9 files changed, 286 insertions(+), 114 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRCluster.h b/src/darwin/Framework/CHIP/MTRCluster.h index b3543d67b30281..3cecc304c52f36 100644 --- a/src/darwin/Framework/CHIP/MTRCluster.h +++ b/src/darwin/Framework/CHIP/MTRCluster.h @@ -109,7 +109,7 @@ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) * treated as if a default-initialized object was passed in. */ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) -@interface MTRReadParams : NSObject +@interface MTRReadParams : NSObject /** * Whether the read/subscribe is fabric-filtered. The default is YES. diff --git a/src/darwin/Framework/CHIP/MTRCluster.mm b/src/darwin/Framework/CHIP/MTRCluster.mm index 9bcb38e4cbac99..2bb9f776360f5d 100644 --- a/src/darwin/Framework/CHIP/MTRCluster.mm +++ b/src/darwin/Framework/CHIP/MTRCluster.mm @@ -89,6 +89,42 @@ - (instancetype)init return self; } +#pragma mark - Coding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +static NSString * sFilterByFabricCoderKey = @"sFilterByFabricKey"; +static NSString * sMinEventNumberCoderKey = @"sMinEventNumberKey"; +static NSString * sAssumeUnknownAttributesReportableCoderKey = @"sAssumeUnknownAttributesReportableKey"; + +- (nullable instancetype)initWithCoder:(NSCoder *)decoder +{ + self = [super init]; + + if (self == nil) { + return nil; + } + + self.filterByFabric = [decoder decodeBoolForKey: sFilterByFabricCoderKey]; + self.assumeUnknownAttributesReportable = [decoder decodeBoolForKey: sAssumeUnknownAttributesReportableCoderKey]; + self.minEventNumber = [decoder decodeObjectOfClass:[NSNumber class] forKey: sMinEventNumberCoderKey]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder +{ + [coder encodeBool:self.filterByFabric forKey:sFilterByFabricCoderKey]; + [coder encodeBool: self.assumeUnknownAttributesReportable forKey:sAssumeUnknownAttributesReportableCoderKey]; + + if ( self.minEventNumber ) + [coder encodeObject:self.minEventNumber forKey:sMinEventNumberCoderKey]; +} + +#pragma mark - Copying + - (id)copyWithZone:(NSZone * _Nullable)zone { auto other = [[MTRReadParams alloc] init]; @@ -98,6 +134,8 @@ - (id)copyWithZone:(NSZone * _Nullable)zone return other; } +#pragma mark - Other + - (void)toReadPrepareParams:(chip::app::ReadPrepareParams &)readPrepareParams { readPrepareParams.mIsFabricFiltered = self.filterByFabric; diff --git a/src/darwin/Framework/CHIP/MTRDefines_Internal.h b/src/darwin/Framework/CHIP/MTRDefines_Internal.h index da31ce1b54dda7..3ff2ef1949f1c7 100644 --- a/src/darwin/Framework/CHIP/MTRDefines_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDefines_Internal.h @@ -64,3 +64,55 @@ typedef struct {} variable_hidden_by_mtr_hide; // Default timed interaction timeout, in ms, if another one is not provided. #define MTR_DEFAULT_TIMED_INTERACTION_TIMEOUT_MS 10000 + + +#pragma mark - XPC Defines + +#define MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, PREFIX) \ + \ + -(TYPE) NAME \ + { \ + __block TYPE outValue = DEFAULT_VALUE; \ + \ + NSXPCConnection * xpcConnection = nil; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] PREFIX \ + GETTER_NAME:^(TYPE returnValue) { \ + outValue = returnValue; \ + }]; \ + \ + return outValue; \ + } + +#define MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, PREFIX) \ + \ + -(void) METHOD_SIGNATURE \ + { \ + NSXPCConnection * xpcConnection = nil; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] PREFIX \ + ADDITIONAL_ARGUMENTS]; \ + } + + +#define MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, PREFIX)\ +- (TYPE) SIGNATURE \ +{ \ + __block TYPE outValue = DEFAULT_VALUE; \ +\ + NSXPCConnection * xpcConnection = nil; \ +\ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] PREFIX \ + \ + ADDITIONAL_ARGUMENTS:^(TYPE returnValue) { \ + outValue = returnValue; \ + }];\ + \ + return outValue; \ +} diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h index 0f1a65b8edce31..778ce19497f70c 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h @@ -22,7 +22,11 @@ NS_ASSUME_NONNULL_BEGIN MTR_TESTABLE -@interface MTRDeviceController_XPC : MTRDeviceController +@interface MTRDeviceController_XPC : MTRDeviceController +- (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection * (^)(void))connectionBlock; +#ifdef MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR +- (id)initWithUniqueIdentifier:(NSUUID *)UUID machServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options +#endif @end diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index ba013405f8e197..f1d0db605fb79d 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -16,13 +16,15 @@ #import "MTRDeviceController_XPC.h" #import "MTRDeviceController_Internal.h" +#import "MTRDevice_XPC.h" #import "MTRLogging_Internal.h" #import "MTRXPCClientProtocol.h" #import "MTRXPCServerProtocol.h" @interface MTRDeviceController_XPC () -@property (retain, readwrite) NSXPCConnection * xpcConnection; +@property (atomic, retain, readwrite) NSXPCConnection * xpcConnection; +@property (nonatomic, retain, readwrite) NSUUID * uniqueIdentifier; @end @@ -30,29 +32,56 @@ @interface MTRDeviceController_XPC () @implementation MTRDeviceController_XPC +@synthesize uniqueIdentifier = _uniqueIdentifier; + +- (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection * (^)(void))connectionBlock { + if ( self = [super initForSubclasses] ) { + MTR_LOG("Setting up XPC Controller for UUID: %@ with connection block: %p", UUID, connectionBlock); + self.xpcConnection = connectionBlock(); + self.uniqueIdentifier = UUID; + + MTR_LOG("Set up XPC Connection: %@", self.xpcConnection); + if ( self.xpcConnection ) { + self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServerProtocol)]; + + self.xpcConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCClientProtocol)]; + self.xpcConnection.exportedObject = self; + + MTR_LOG("Resuming new XPC connection"); + [self.xpcConnection resume]; + } else { + MTR_LOG_ERROR("Failed to set up XPC Connection"); + return nil; + } + } + + return self; +} + #ifdef MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR -- (id)initWithMachServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options +- (id)initWithUniqueIdentifier:(NSUUID *)UUID machServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options { - MTR_LOG_DEBUG("%s") - if (!(self = [super initForSubclasses])) { - return nil; + if ( self = [super initForSubclasses] ) { + MTR_LOG("Setting up XPC Controller for UUID: %@ with machServiceName: %s options: %d", UUID, machServiceName, options); + self.xpcConnection = [[NSXPCConnection alloc] initWithMachServiceName:machServiceName options:options]; + self.uniqueIdentifier = UUID; + + MTR_LOG("Set up XPC Connection: %@", self.xpcConnection); + if ( self.xpcConnection ) { + self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServerProtocol)]; + + self.xpcConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCClientProtocol)]; + self.xpcConnection.exportedObject = self; + + MTR_LOG("%s: resuming new XPC connection"); + [self.xpcConnection resume]; + } else { + MTR_LOG_ERROR("Failed to set up XPC Connection"); + return nil; + } } - self.xpcConnection = [[NSXPCConnection alloc] initWithMachServiceName:machServiceName options:options]; - self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServerProtocol)]; - self.xpcConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCClientProtocol)]; - self.xpcConnection.exportedObject = self; - - MTR_LOG_DEBUG("%s: resuming new XPC connection"); - [self.xpcConnection resume]; - - id proxy = [self.xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { - MTR_LOG_ERROR("%s: XPC remote object proxy error.", __PRETTY_FUNCTION__); - }]; - - - return self; } #endif // MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR @@ -64,8 +93,87 @@ - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParamete return nil; } -@end -@implementation MTRDeviceController_XPC (MTRXPCClientProtocol_MTRDeviceController) - // as of 2024-08-16, nothing needed here. +#pragma mark - XPC Action Overrides + +#define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(NAME,TYPE,DEFAULT_VALUE,GETTER_NAME)\ + MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, self.uniqueIdentifier) +#define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ + MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, self.uniqueIdentifier) + +MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(isRunning, BOOL, NO, getIsRunningWithReply) +MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(controllerNodeID, NSUUID *, nil, controllerNodeIDWithReply) + + +// Not Supported via XPC +// - (oneway void)deviceController:(NSUUID *)controller setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload newNodeID:(NSNumber *)newNodeID withReply:(void(^)(BOOL success, NSError * _Nullable error))reply; +// - (oneway void)deviceController:(NSUUID *)controller setupCommissioningSessionWithDiscoveredDevice:(MTRCommissionableBrowserResult *)discoveredDevice payload:(MTRSetupPayload *)payload newNodeID:(NSNumber *)newNodeID withReply:(void(^)(BOOL success, NSError * _Nullable error))reply; +// - (oneway void)deviceController:(NSUUID *)controller commissionNodeWithID:(NSNumber *)nodeID commissioningParams:(MTRCommissioningParameters *)commissioningParams withReply:(void(^)(BOOL success, NSError * _Nullable error))reply; +// - (oneway void)deviceController:(NSUUID *)controller continueCommissioningDevice:(void *)opaqueDeviceHandle ignoreAttestationFailure:(BOOL)ignoreAttestationFailure withReply:(void(^)(BOOL success, NSError * _Nullable error))reply; +// - (oneway void)deviceController:(NSUUID *)controller cancelCommissioningForNodeID:(NSNumber *)nodeID withReply:(void(^)(BOOL success, NSError * _Nullable error))reply; +// - (nullable MTRBaseDevice *)deviceController:(NSUUID *)controller deviceBeingCommissionedWithNodeID:(NSNumber *)nodeID error:(NSError * __autoreleasing *)error; +// - (oneway void)deviceController:(NSUUID *)controller startBrowseForCommissionables:(id)delegate withReply:(void(^)(BOOL success))reply; +// - (oneway void)deviceController:(NSUUID *)controller stopBrowseForCommissionablesWithReply:(void(^)(BOOL success))reply; +// - (oneway void)deviceController:(NSUUID *)controller attestationChallengeForDeviceID:(NSNumber *)deviceID withReply:(void(^)(NSData * _Nullable))reply; + +//- (oneway void)deviceController:(NSUUID *)controller addServerEndpoint:(MTRServerEndpoint *)endpoint withReply:(void(^)(BOOL success))reply; +//- (oneway void)deviceController:(NSUUID *)controller removeServerEndpoint:(MTRServerEndpoint *)endpoint; + +MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_COMMAND(shutdown, shutdownDeviceController:) + + +#pragma mark - MTRDeviceProtocol Client + +// All pass through, we could do some fancy redirection here based on protocol, but that's that for another day +- (oneway void)device:(NSNumber *)nodeID stateChanged:(MTRDeviceState)state { + MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; + MTR_LOG("Received device: %@ stateChanged: %lu found device: %@", nodeID, (unsigned long)state, device); + [device device: nodeID stateChanged: state]; +} +- (oneway void)device:(NSNumber *)nodeID receivedAttributeReport:(NSArray *> *)attributeReport { + MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; + MTR_LOG("Received device: %@ receivedAttributeReport: %@ found device: %@", nodeID, attributeReport, device); + + [device device: nodeID receivedAttributeReport: attributeReport]; +} +- (oneway void)device:(NSNumber *)nodeID receivedEventReport:(NSArray *> *)eventReport { + MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; + MTR_LOG("Received device: %@ receivedEventReport: %@ found device: %@", nodeID, eventReport, device); + + [device device: nodeID receivedEventReport: eventReport]; +} +- (oneway void)deviceBecameActive:(NSNumber *)nodeID { + MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; + MTR_LOG("Received deviceBecameActive: %@ found device: %@", nodeID, device); + + [device deviceBecameActive: nodeID]; +} +- (oneway void)deviceCachePrimed:(NSNumber *)nodeID { + MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; + MTR_LOG("Received deviceCachePrimed: %@ found device: %@", nodeID, device); + + [device deviceCachePrimed: nodeID]; +} +- (oneway void)deviceConfigurationChanged:(NSNumber *)nodeID { + MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; + MTR_LOG("Received deviceConfigurationChanged: %@ found device: %@", nodeID, device); + + [device deviceConfigurationChanged: nodeID]; +} + +#pragma mark - MTRDeviceController Protocol Client + +// Not Supported via XPC +//- (oneway void)controller:(NSUUID *)controller statusUpdate:(MTRCommissioningStatus)status { +// } +//- (oneway void)controller:(NSUUID *)controller commissioningSessionEstablishmentDone:(NSError * _Nullable)error { +// +//} +//- (oneway void)controller:(NSUUID *)controller commissioningComplete:(NSError * _Nullable)error nodeID:(NSNumber * _Nullable)nodeID metrics:(MTRMetrics * _Nullable)metrics { +// +//} +//- (oneway void)controller:(NSUUID *)controller readCommissioningInfo:(MTRProductIdentity *)info { +// +//} + @end diff --git a/src/darwin/Framework/CHIP/MTRDevice_Internal.h b/src/darwin/Framework/CHIP/MTRDevice_Internal.h index 943e939f47f204..4c1b51f51c0a48 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDevice_Internal.h @@ -81,6 +81,8 @@ MTR_TESTABLE // false-positives, for example due to compressed fabric id collisions. - (void)nodeMayBeAdvertisingOperational; +- (BOOL)_callDelegatesWithBlock:(void (^)(id delegate))block; + /** * Like the public invokeCommandWithEndpointID but: * diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.h b/src/darwin/Framework/CHIP/MTRDevice_XPC.h index 6a2e9f3b9d932f..a2df4a60446aec 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.h +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.h @@ -19,7 +19,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface MTRDevice_XPC : MTRDevice +@interface MTRDevice_XPC : MTRDevice @end diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm index 921eef8575689d..21217a9e675cfd 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -42,6 +42,7 @@ #import "MTRDevice_Internal.h" #import "MTRError_Internal.h" #import "MTRKeypair.h" +#import "MTRDefines_Internal.h.h" #import "MTRLogging_Internal.h" #import "MTRMetricKeys.h" #import "MTRMetricsCollector.h" @@ -54,105 +55,72 @@ #import "MTRUnfairLock.h" #import "NSDataSpanConversion.h" #import "NSStringSpanConversion.h" -#import -#import -#import - #import "MTRDeviceAttestationDelegateBridge.h" #import "MTRDeviceConnectionBridge.h" -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include #include #include #import -#define MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ - \ - -(TYPE) NAME \ - { \ - __block TYPE outValue = DEFAULT_VALUE; \ - \ - NSXPCConnection * xpcConnection = nil; \ - \ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] deviceController:[[self deviceController] uniqueIdentifier] \ - nodeID:[self nodeID] \ - GETTER_NAME:^(TYPE returnValue) { \ - outValue = returnValue; \ - }]; \ - \ - return outValue; \ - } - -#define MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ - \ - -(void) METHOD_SIGNATURE \ - { \ - NSXPCConnection * xpcConnection = nil; \ - \ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] deviceController:[[self deviceController] uniqueIdentifier] \ - nodeID:[self nodeID] \ - ADDITIONAL_ARGUMENTS]; \ - } - - -#define MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS) \ -- (TYPE) SIGNATURE \ -{ \ - __block TYPE outValue = DEFAULT_VALUE; \ -\ - NSXPCConnection * xpcConnection = nil; \ -\ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] deviceController:[[self deviceController] uniqueIdentifier] \ - nodeID:[self nodeID] \ - ADDITIONAL_ARGUMENTS:^(TYPE returnValue) { \ - outValue = returnValue; \ - }];\ - \ - return outValue; \ -} + +#define MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ + MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController:[[self deviceController] uniqueIdentifier] nodeID:[self nodeID]) +#define MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ + MTR_COMPLEX_REMOTE_XPC_GETTER(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController:[[self deviceController] uniqueIdentifier] nodeID:[self nodeID]) +#define MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS) \ + MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, deviceController:[[self deviceController] uniqueIdentifier] nodeID:[self nodeID]) @implementation MTRDevice_XPC -MTR_SIMPLE_REMOTE_XPC_GETTER(state, MTRDeviceState, MTRDeviceStateUnknown, getStateWithReply) -MTR_SIMPLE_REMOTE_XPC_GETTER(deviceCachePrimed, BOOL, NO, getDeviceCachePrimedWithReply) -MTR_SIMPLE_REMOTE_XPC_GETTER(estimatedStartTime, NSDate *, nil, getEstimatedStartTimeWithReply) -MTR_SIMPLE_REMOTE_XPC_GETTER(estimatedSubscriptionLatency, NSNumber *, nil, getEstimatedSubscriptionLatencyWithReply) +#pragma mark - Client Callbacks +- (oneway void)device:(NSNumber *)nodeID stateChanged:(MTRDeviceState)state { + [self _callDelegatesWithBlock:^(id delegate) { + [delegate device:self stateChanged:state]; + }]; +} +- (oneway void)device:(NSNumber *)nodeID receivedAttributeReport:(NSArray *> *)attributeReport { + [self _callDelegatesWithBlock:^(id delegate) { + [delegate device:self receivedAttributeReport:attributeReport]; + }]; +} +- (oneway void)device:(NSNumber *)nodeID receivedEventReport:(NSArray *> *)eventReport { + [self _callDelegatesWithBlock:^(id delegate) { + [delegate device:self receivedEventReport:eventReport]; + }]; +} +- (oneway void)deviceBecameActive:(NSNumber *)nodeID { + [self _callDelegatesWithBlock:^(id delegate) { + [delegate deviceBecameActive:self]; + }]; +} +- (oneway void)deviceCachePrimed:(NSNumber *)nodeID { + [self _callDelegatesWithBlock:^(id delegate) { + [delegate deviceCachePrimed:self]; + }]; +} +- (oneway void)deviceConfigurationChanged:(NSNumber *)nodeID { + [self _callDelegatesWithBlock:^(id delegate) { + [delegate deviceConfigurationChanged:self]; + }]; +} + +#pragma mark - Remote Commands + +MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(state, MTRDeviceState, MTRDeviceStateUnknown, getStateWithReply) +MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(deviceCachePrimed, BOOL, NO, getDeviceCachePrimedWithReply) +MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(estimatedStartTime, NSDate *, nil, getEstimatedStartTimeWithReply) +MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(estimatedSubscriptionLatency, NSNumber *, nil, getEstimatedSubscriptionLatencyWithReply) typedef NSDictionary * readAttributeResponseType; -// TODO: PARAMS NEEDS TO CONORM TO NSCODER -MTR_COMPLEX_REMOTE_XPC_GETTER(readAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID params:(MTRReadParams * _Nullable)params, +MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(readAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID params:(MTRReadParams * _Nullable)params, readAttributeResponseType, nil, readAttributeWithEndpointID:endpointID clusterID:clusterID attributeID:attributeID params:params withReply) -MTR_SIMPLE_REMOTE_XPC_COMMAND(writeAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID value:(id)value expectedValueInterval:(NSNumber *)expectedValueInterval timedWriteTimeout:(NSNumber * _Nullable)timeout, writeAttributeWithEndpointID:endpointID clusterID:clusterID attributeID:attributeID value:value expectedValueInterval:expectedValueInterval timedWriteTimeout:timeout) +MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(writeAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID value:(id)value expectedValueInterval:(NSNumber *)expectedValueInterval timedWriteTimeout:(NSNumber * _Nullable)timeout, writeAttributeWithEndpointID:endpointID clusterID:clusterID attributeID:attributeID value:value expectedValueInterval:expectedValueInterval timedWriteTimeout:timeout) @@ -187,18 +155,18 @@ @implementation MTRDevice_XPC // Not Supported via XPC //- (oneway void)deviceController:(NSUUID *)controller nodeID:(NSNumber *)nodeID openCommissioningWindowWithSetupPasscode:(NSNumber *)setupPasscode discriminator:(NSNumber *)discriminator duration:(NSNumber *)duration completion:(MTRDeviceOpenCommissioningWindowHandler)completion; -MTR_SIMPLE_REMOTE_XPC_GETTER(clientDataKeys, NSArray *, nil, getClientDataKeysWithReply) -MTR_COMPLEX_REMOTE_XPC_GETTER(clientDataForKey:(NSString *)key, id _Nullable, nil, clientDataForKey:key withReply) +MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(clientDataKeys, NSArray *, nil, getClientDataKeysWithReply) +MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(clientDataForKey:(NSString *)key, id _Nullable, nil, clientDataForKey:key withReply) -MTR_SIMPLE_REMOTE_XPC_COMMAND(setClientDataForKey:(NSString *)key value:(id)value, setClientDataForKey:key value: value) -MTR_SIMPLE_REMOTE_XPC_COMMAND(removeClientDataForKey:(NSString *)key, removeClientDataForKey:key) +MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(setClientDataForKey:(NSString *)key value:(id)value, setClientDataForKey:key value: value) +MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(removeClientDataForKey:(NSString *)key, removeClientDataForKey:key) -MTR_COMPLEX_REMOTE_XPC_GETTER(clientDataKeysForEndpointID:(NSNumber *)endpointID, NSArray * _Nullable, nil, clientDataKeysForEndpointID:(NSNumber *)endpointID withReply) +MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(clientDataKeysForEndpointID:(NSNumber *)endpointID, NSArray * _Nullable, nil, clientDataKeysForEndpointID:(NSNumber *)endpointID withReply) -MTR_COMPLEX_REMOTE_XPC_GETTER(clientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID, id _Nullable, nil, clientDataForKey: key endpointID: endpointID withReply) +MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(clientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID, id _Nullable, nil, clientDataForKey: key endpointID: endpointID withReply) -MTR_SIMPLE_REMOTE_XPC_COMMAND(setClientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID value:(id)value, setClientDataForKey:key endpointID:endpointID value:value) -MTR_SIMPLE_REMOTE_XPC_COMMAND(removeClientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID value:(id)value, removeClientDataForKey:key endpointID:endpointID) +MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(setClientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID value:(id)value, setClientDataForKey:key endpointID:endpointID value:value) +MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(removeClientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID value:(id)value, removeClientDataForKey:key endpointID:endpointID) // Not Supported via XPC // - (oneway void)downloadLogOfType:(MTRDiagnosticLogType)type nodeID:(NSNumber *)nodeID timeout:(NSTimeInterval)timeout completion:(void (^)(NSURL * _Nullable url, NSError * _Nullable error))completion; diff --git a/src/darwin/Framework/CHIP/XPC Protocol/MTRXPCServerProtocol.h b/src/darwin/Framework/CHIP/XPC Protocol/MTRXPCServerProtocol.h index 56077897a9e45a..5d619453b5fd93 100644 --- a/src/darwin/Framework/CHIP/XPC Protocol/MTRXPCServerProtocol.h +++ b/src/darwin/Framework/CHIP/XPC Protocol/MTRXPCServerProtocol.h @@ -65,7 +65,7 @@ NS_ASSUME_NONNULL_BEGIN //- (oneway void)deviceController:(NSUUID *)controller addServerEndpoint:(MTRServerEndpoint *)endpoint withReply:(void(^)(BOOL success))reply; //- (oneway void)deviceController:(NSUUID *)controller removeServerEndpoint:(MTRServerEndpoint *)endpoint; -- (oneway void)shutdownDeviceController:(NSUUID *)controller; +- (oneway void)deviceController:(NSUUID *)controller shutdownDeviceController:(NSUUID *)controller; @end From 2101318855b7a2fb4b98f0c99d8a8f0a16dd4e03 Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Sat, 17 Aug 2024 11:48:44 -0700 Subject: [PATCH 64/75] Fixing header --- src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm index 21217a9e675cfd..f338242953f31c 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -42,7 +42,7 @@ #import "MTRDevice_Internal.h" #import "MTRError_Internal.h" #import "MTRKeypair.h" -#import "MTRDefines_Internal.h.h" +#import "MTRDefines_Internal.h" #import "MTRLogging_Internal.h" #import "MTRMetricKeys.h" #import "MTRMetricsCollector.h" From 4e78ef04cecb0186f9e6c5d97eb2212ae2073952 Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Sat, 17 Aug 2024 13:34:38 -0700 Subject: [PATCH 65/75] Fixing macros and codable --- src/darwin/Framework/CHIP/MTRCluster.h | 4 +- src/darwin/Framework/CHIP/MTRCluster.mm | 82 ++++++++++++++++++ .../Framework/CHIP/MTRDefines_Internal.h | 84 +++++++++---------- .../Framework/CHIP/MTRDeviceController_XPC.mm | 20 +++-- src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 12 +-- 5 files changed, 142 insertions(+), 60 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRCluster.h b/src/darwin/Framework/CHIP/MTRCluster.h index 3cecc304c52f36..8184d3c684839c 100644 --- a/src/darwin/Framework/CHIP/MTRCluster.h +++ b/src/darwin/Framework/CHIP/MTRCluster.h @@ -73,7 +73,7 @@ MTR_AVAILABLE(ios(17.4), macos(14.4), watchos(10.4), tvos(17.4)) * treated as if a default-initialized object was passed in. */ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) -@interface MTRWriteParams : NSObject +@interface MTRWriteParams : NSObject /** * Controls whether the write is a timed write. @@ -152,7 +152,7 @@ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) * treated as if a default-initialized object was passed in. */ MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1)) -@interface MTRSubscribeParams : MTRReadParams +@interface MTRSubscribeParams : MTRReadParams /** * Whether the subscribe should replace already-existing diff --git a/src/darwin/Framework/CHIP/MTRCluster.mm b/src/darwin/Framework/CHIP/MTRCluster.mm index 2bb9f776360f5d..7b9a6ceea2738a 100644 --- a/src/darwin/Framework/CHIP/MTRCluster.mm +++ b/src/darwin/Framework/CHIP/MTRCluster.mm @@ -69,6 +69,8 @@ - (instancetype)init return self; } +#pragma mark - Copying + - (id)copyWithZone:(NSZone * _Nullable)zone { auto other = [[MTRWriteParams alloc] init]; @@ -77,6 +79,37 @@ - (id)copyWithZone:(NSZone * _Nullable)zone return other; } +#pragma mark - Coding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +static NSString * sTimedWriteTimeoutCodingKey = @"sTimedWriteTimeoutKey"; +static NSString * sDataVersionCodingKey = @"sDataVersionKey"; + +- (nullable instancetype)initWithCoder:(NSCoder *)decoder +{ + self = [super init]; + + if (self == nil) { + return nil; + } + + self.timedWriteTimeout = [decoder decodeObjectOfClass:[NSNumber class] forKey: sTimedWriteTimeoutCodingKey]; + self.dataVersion = [decoder decodeObjectOfClass:[NSNumber class] forKey: sDataVersionCodingKey]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder +{ + if ( self.timedWriteTimeout ) + [coder encodeObject:self.timedWriteTimeout forKey:sTimedWriteTimeoutCodingKey]; + if ( self.dataVersion ) + [coder encodeObject:self.dataVersion forKey:sDataVersionCodingKey]; +} + @end @implementation MTRReadParams @@ -159,18 +192,67 @@ - (instancetype)initWithMinInterval:(NSNumber *)minInterval maxInterval:(NSNumbe return self; } +#pragma mark - Copying - (id)copyWithZone:(NSZone * _Nullable)zone { auto other = [[MTRSubscribeParams alloc] initWithMinInterval:self.minInterval maxInterval:self.maxInterval]; + other.filterByFabric = self.filterByFabric; other.minEventNumber = self.minEventNumber; other.assumeUnknownAttributesReportable = self.assumeUnknownAttributesReportable; other.replaceExistingSubscriptions = self.replaceExistingSubscriptions; other.reportEventsUrgently = self.reportEventsUrgently; other.resubscribeAutomatically = self.resubscribeAutomatically; + other.minInterval = self.minInterval; + other.maxInterval = self.maxInterval; + return other; } +#pragma mark - Coding ++ (BOOL)supportsSecureCoding { + return YES; +} + +static NSString * sReplaceExistingSubscriptionsCoderKey = @"sFilterByFabricKey"; +static NSString * sReportEventsUrgentlyCoderKey = @"sMinEventNumberKey"; +static NSString * sResubscribeAutomaticallyCoderKey = @"sAssumeUnknownAttributesReportableKey"; +static NSString * sMinIntervalKeyCoderKey = @"sMinIntervalKeyKey"; +static NSString * sMaxIntervalKeyCoderKey = @"sMaxIntervalKeyKey"; + +- (nullable instancetype)initWithCoder:(NSCoder *)decoder +{ + self = [super initWithCoder: decoder]; + + if (self == nil) { + return nil; + } + + self.replaceExistingSubscriptions = [decoder decodeBoolForKey: sReplaceExistingSubscriptionsCoderKey]; + self.reportEventsUrgently = [decoder decodeBoolForKey: sReportEventsUrgentlyCoderKey]; + self.resubscribeAutomatically = [decoder decodeBoolForKey: sResubscribeAutomaticallyCoderKey]; + self.minInterval = [decoder decodeObjectOfClass:[NSNumber class] forKey: sMinIntervalKeyCoderKey]; + self.maxInterval = [decoder decodeObjectOfClass:[NSNumber class] forKey: sMaxIntervalKeyCoderKey]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder +{ + [super encodeWithCoder: coder]; + + [coder encodeBool: self.replaceExistingSubscriptions forKey:sReplaceExistingSubscriptionsCoderKey]; + [coder encodeBool: self.reportEventsUrgently forKey:sReportEventsUrgentlyCoderKey]; + [coder encodeBool: self.resubscribeAutomatically forKey:sResubscribeAutomaticallyCoderKey]; + + if ( self.minInterval ) + [coder encodeObject:self.minInterval forKey:sMinIntervalKeyCoderKey]; + if ( self.maxInterval ) + [coder encodeObject:self.maxInterval forKey:sMaxIntervalKeyCoderKey]; +} + +#pragma mark - Main + - (void)toReadPrepareParams:(chip::app::ReadPrepareParams &)readPrepareParams { [super toReadPrepareParams:readPrepareParams]; diff --git a/src/darwin/Framework/CHIP/MTRDefines_Internal.h b/src/darwin/Framework/CHIP/MTRDefines_Internal.h index 3ff2ef1949f1c7..5e9a9e00da9df2 100644 --- a/src/darwin/Framework/CHIP/MTRDefines_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDefines_Internal.h @@ -68,51 +68,47 @@ typedef struct {} variable_hidden_by_mtr_hide; #pragma mark - XPC Defines -#define MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, PREFIX) \ - \ - -(TYPE) NAME \ - { \ - __block TYPE outValue = DEFAULT_VALUE; \ - \ - NSXPCConnection * xpcConnection = nil; \ - \ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] PREFIX \ - GETTER_NAME:^(TYPE returnValue) { \ - outValue = returnValue; \ - }]; \ - \ - return outValue; \ +#define MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, PREFIX) \ + \ + -(TYPE) NAME \ + { \ + __block TYPE outValue = DEFAULT_VALUE; \ + \ + NSXPCConnection * xpcConnection = nil; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] PREFIX \ + GETTER_NAME:^(TYPE returnValue) { \ + outValue = returnValue; \ + }]; \ + \ + return outValue; \ } -#define MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, PREFIX) \ - \ - -(void) METHOD_SIGNATURE \ - { \ - NSXPCConnection * xpcConnection = nil; \ - \ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] PREFIX \ - ADDITIONAL_ARGUMENTS]; \ +#define MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, PREFIX) \ + \ + -(void) METHOD_SIGNATURE \ + { \ + NSXPCConnection * xpcConnection = nil; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] PREFIX ADDITIONAL_ARGUMENTS]; \ } - -#define MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, PREFIX)\ -- (TYPE) SIGNATURE \ -{ \ - __block TYPE outValue = DEFAULT_VALUE; \ -\ - NSXPCConnection * xpcConnection = nil; \ -\ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] PREFIX \ - \ - ADDITIONAL_ARGUMENTS:^(TYPE returnValue) { \ - outValue = returnValue; \ - }];\ - \ - return outValue; \ -} +#define MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, PREFIX) \ + - (TYPE) SIGNATURE \ + { \ + __block TYPE outValue = DEFAULT_VALUE; \ + \ + NSXPCConnection * xpcConnection = nil; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] PREFIX ADDITIONAL_ARGUMENTS:^(TYPE returnValue) { \ + outValue = returnValue; \ + }]; \ + \ + return outValue; \ + } diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index f1d0db605fb79d..c18fe9a7db263d 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -16,11 +16,20 @@ #import "MTRDeviceController_XPC.h" #import "MTRDeviceController_Internal.h" +#import "MTRDefines_Internal.h" #import "MTRDevice_XPC.h" #import "MTRLogging_Internal.h" #import "MTRXPCClientProtocol.h" #import "MTRXPCServerProtocol.h" +#define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(NAME,TYPE,DEFAULT_VALUE,GETTER_NAME) \ + MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController: self.uniqueIdentifier) + +#define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ + MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController: self.uniqueIdentifier) + + + @interface MTRDeviceController_XPC () @property (atomic, retain, readwrite) NSXPCConnection * xpcConnection; @@ -93,16 +102,10 @@ - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParamete return nil; } - #pragma mark - XPC Action Overrides -#define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(NAME,TYPE,DEFAULT_VALUE,GETTER_NAME)\ - MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, self.uniqueIdentifier) -#define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ - MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, self.uniqueIdentifier) - MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(isRunning, BOOL, NO, getIsRunningWithReply) -MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(controllerNodeID, NSUUID *, nil, controllerNodeIDWithReply) +MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(controllerNodeID, NSNumber *, nil, controllerNodeIDWithReply) // Not Supported via XPC @@ -119,7 +122,8 @@ - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParamete //- (oneway void)deviceController:(NSUUID *)controller addServerEndpoint:(MTRServerEndpoint *)endpoint withReply:(void(^)(BOOL success))reply; //- (oneway void)deviceController:(NSUUID *)controller removeServerEndpoint:(MTRServerEndpoint *)endpoint; -MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_COMMAND(shutdown, shutdownDeviceController:) +MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_COMMAND(shutdown, shutdownDeviceController: self.uniqueIdentifier) + #pragma mark - MTRDeviceProtocol Client diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm index f338242953f31c..3c2df9c9673a04 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -64,14 +64,15 @@ #import - -#define MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ +#define MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController:[[self deviceController] uniqueIdentifier] nodeID:[self nodeID]) -#define MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ - MTR_COMPLEX_REMOTE_XPC_GETTER(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController:[[self deviceController] uniqueIdentifier] nodeID:[self nodeID]) -#define MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS) \ + +#define MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS) \ MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, deviceController:[[self deviceController] uniqueIdentifier] nodeID:[self nodeID]) +#define MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ + MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController:[[self deviceController] uniqueIdentifier] nodeID:[self nodeID]) + @implementation MTRDevice_XPC #pragma mark - Client Callbacks @@ -162,7 +163,6 @@ - (oneway void)deviceConfigurationChanged:(NSNumber *)nodeID { MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(removeClientDataForKey:(NSString *)key, removeClientDataForKey:key) MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(clientDataKeysForEndpointID:(NSNumber *)endpointID, NSArray * _Nullable, nil, clientDataKeysForEndpointID:(NSNumber *)endpointID withReply) - MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(clientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID, id _Nullable, nil, clientDataForKey: key endpointID: endpointID withReply) MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(setClientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID value:(id)value, setClientDataForKey:key endpointID:endpointID value:value) From c04f2bf46fcd54b40296045f6ee1071355f9dbac Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Sat, 17 Aug 2024 13:37:43 -0700 Subject: [PATCH 66/75] Adding invoke? --- src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 52 +++++++++++----------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm index 3c2df9c9673a04..62b83329525716 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -125,33 +125,31 @@ - (oneway void)deviceConfigurationChanged:(NSNumber *)nodeID { -//- (void)invokeCommandWithEndpointID:(NSNumber *)endpointID -// clusterID:(NSNumber *)clusterID -// commandID:(NSNumber *)commandID -// commandFields:(id)commandFields -// expectedValues:(NSArray *> * _Nullable)expectedValues -// expectedValueInterval:(NSNumber * _Nullable)expectedValueInterval -// timedInvokeTimeout:(NSNumber * _Nullable)timeout -// queue:(dispatch_queue_t)queue -// completion:(MTRDeviceResponseHandler)completion { -// NSXPCConnection * xpcConnection = nil; -// -// [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { -// MTR_LOG_ERROR("Error: %@", error); -// }] deviceController:[[self deviceController] uniqueIdentifier] -// nodeID:[self nodeID] -// invokeCommandWithEndpointID:(NSNumber *)endpointID -// clusterID:(NSNumber *)clusterID -// commandID:(NSNumber *)commandID -// commandFields:(id)commandFields -// expectedValues:(NSArray *> * _Nullable)expectedValues -// expectedValueInterval:(NSNumber * _Nullable)expectedValueInterval -// timedInvokeTimeout:(NSNumber * _Nullable)timeout -// completion:(MTRDeviceResponseHandler response) { -// completion(); -// }]; -// -//} +- (void)invokeCommandWithEndpointID:(NSNumber *)endpointID + clusterID:(NSNumber *)clusterID + commandID:(NSNumber *)commandID + commandFields:(id)commandFields + expectedValues:(NSArray *> * _Nullable)expectedValues + expectedValueInterval:(NSNumber * _Nullable)expectedValueInterval + timedInvokeTimeout:(NSNumber * _Nullable)timeout + queue:(dispatch_queue_t)queue + completion:(MTRDeviceResponseHandler)completion { + NSXPCConnection * xpcConnection = nil; + + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { + MTR_LOG_ERROR("Error: %@", error); + }] deviceController:[[self deviceController] uniqueIdentifier] + nodeID:[self nodeID] + invokeCommandWithEndpointID:endpointID + clusterID:clusterID + commandID:commandID + commandFields:commandFields + expectedValues:expectedValues + expectedValueInterval:expectedValueInterval + timedInvokeTimeout:timeout + completion:completion]; + +} // Not Supported via XPC //- (oneway void)deviceController:(NSUUID *)controller nodeID:(NSNumber *)nodeID openCommissioningWindowWithSetupPasscode:(NSNumber *)setupPasscode discriminator:(NSNumber *)discriminator duration:(NSNumber *)duration completion:(MTRDeviceOpenCommissioningWindowHandler)completion; From 8e8d4d5dbfa4f8093e9dcbf21231c7343427590a Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Sat, 17 Aug 2024 20:38:00 +0000 Subject: [PATCH 67/75] Restyled by whitespace --- src/darwin/Framework/CHIP/MTRCluster.mm | 12 +++++----- .../Framework/CHIP/MTRDeviceController_XPC.mm | 24 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRCluster.mm b/src/darwin/Framework/CHIP/MTRCluster.mm index 7b9a6ceea2738a..cb403723f91747 100644 --- a/src/darwin/Framework/CHIP/MTRCluster.mm +++ b/src/darwin/Framework/CHIP/MTRCluster.mm @@ -91,7 +91,7 @@ + (BOOL)supportsSecureCoding { - (nullable instancetype)initWithCoder:(NSCoder *)decoder { self = [super init]; - + if (self == nil) { return nil; } @@ -135,7 +135,7 @@ + (BOOL)supportsSecureCoding { - (nullable instancetype)initWithCoder:(NSCoder *)decoder { self = [super init]; - + if (self == nil) { return nil; } @@ -196,7 +196,7 @@ - (instancetype)initWithMinInterval:(NSNumber *)minInterval maxInterval:(NSNumbe - (id)copyWithZone:(NSZone * _Nullable)zone { auto other = [[MTRSubscribeParams alloc] initWithMinInterval:self.minInterval maxInterval:self.maxInterval]; - + other.filterByFabric = self.filterByFabric; other.minEventNumber = self.minEventNumber; other.assumeUnknownAttributesReportable = self.assumeUnknownAttributesReportable; @@ -223,7 +223,7 @@ + (BOOL)supportsSecureCoding { - (nullable instancetype)initWithCoder:(NSCoder *)decoder { self = [super initWithCoder: decoder]; - + if (self == nil) { return nil; } @@ -240,11 +240,11 @@ - (nullable instancetype)initWithCoder:(NSCoder *)decoder - (void)encodeWithCoder:(NSCoder *)coder { [super encodeWithCoder: coder]; - + [coder encodeBool: self.replaceExistingSubscriptions forKey:sReplaceExistingSubscriptionsCoderKey]; [coder encodeBool: self.reportEventsUrgently forKey:sReportEventsUrgentlyCoderKey]; [coder encodeBool: self.resubscribeAutomatically forKey:sResubscribeAutomaticallyCoderKey]; - + if ( self.minInterval ) [coder encodeObject:self.minInterval forKey:sMinIntervalKeyCoderKey]; if ( self.maxInterval ) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index c18fe9a7db263d..ad6608a0e9dabf 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -48,14 +48,14 @@ - (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection MTR_LOG("Setting up XPC Controller for UUID: %@ with connection block: %p", UUID, connectionBlock); self.xpcConnection = connectionBlock(); self.uniqueIdentifier = UUID; - + MTR_LOG("Set up XPC Connection: %@", self.xpcConnection); if ( self.xpcConnection ) { self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServerProtocol)]; - + self.xpcConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCClientProtocol)]; self.xpcConnection.exportedObject = self; - + MTR_LOG("Resuming new XPC connection"); [self.xpcConnection resume]; } else { @@ -63,7 +63,7 @@ - (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection return nil; } } - + return self; } @@ -74,14 +74,14 @@ - (id)initWithUniqueIdentifier:(NSUUID *)UUID machServiceName:(NSString *)machSe MTR_LOG("Setting up XPC Controller for UUID: %@ with machServiceName: %s options: %d", UUID, machServiceName, options); self.xpcConnection = [[NSXPCConnection alloc] initWithMachServiceName:machServiceName options:options]; self.uniqueIdentifier = UUID; - + MTR_LOG("Set up XPC Connection: %@", self.xpcConnection); if ( self.xpcConnection ) { self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServerProtocol)]; - + self.xpcConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCClientProtocol)]; self.xpcConnection.exportedObject = self; - + MTR_LOG("%s: resuming new XPC connection"); [self.xpcConnection resume]; } else { @@ -90,7 +90,7 @@ - (id)initWithUniqueIdentifier:(NSUUID *)UUID machServiceName:(NSString *)machSe } } - + return self; } #endif // MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR @@ -137,7 +137,7 @@ - (oneway void)device:(NSNumber *)nodeID stateChanged:(MTRDeviceState)state { - (oneway void)device:(NSNumber *)nodeID receivedAttributeReport:(NSArray *> *)attributeReport { MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; MTR_LOG("Received device: %@ receivedAttributeReport: %@ found device: %@", nodeID, attributeReport, device); - + [device device: nodeID receivedAttributeReport: attributeReport]; } - (oneway void)device:(NSNumber *)nodeID receivedEventReport:(NSArray *> *)eventReport { @@ -171,13 +171,13 @@ - (oneway void)deviceConfigurationChanged:(NSNumber *)nodeID { //- (oneway void)controller:(NSUUID *)controller statusUpdate:(MTRCommissioningStatus)status { // } //- (oneway void)controller:(NSUUID *)controller commissioningSessionEstablishmentDone:(NSError * _Nullable)error { -// +// //} //- (oneway void)controller:(NSUUID *)controller commissioningComplete:(NSError * _Nullable)error nodeID:(NSNumber * _Nullable)nodeID metrics:(MTRMetrics * _Nullable)metrics { -// +// //} //- (oneway void)controller:(NSUUID *)controller readCommissioningInfo:(MTRProductIdentity *)info { -// +// //} @end From 19a222e8825ffabd8f2ba2c4094040e1441ff51d Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Sat, 17 Aug 2024 20:38:02 +0000 Subject: [PATCH 68/75] Restyled by clang-format --- src/darwin/Framework/CHIP/MTRCluster.mm | 51 +++---- .../Framework/CHIP/MTRDefines_Internal.h | 79 ++++++----- .../CHIP/MTRDeviceController_Concrete.mm | 2 +- .../Framework/CHIP/MTRDeviceController_XPC.h | 8 +- .../Framework/CHIP/MTRDeviceController_XPC.mm | 76 ++++++----- src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 126 +++++++++++++----- .../CHIP/XPC Protocol/MTRXPCClientProtocol.h | 3 +- 7 files changed, 202 insertions(+), 143 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRCluster.mm b/src/darwin/Framework/CHIP/MTRCluster.mm index cb403723f91747..b80c90931669c8 100644 --- a/src/darwin/Framework/CHIP/MTRCluster.mm +++ b/src/darwin/Framework/CHIP/MTRCluster.mm @@ -81,7 +81,8 @@ - (id)copyWithZone:(NSZone * _Nullable)zone #pragma mark - Coding -+ (BOOL)supportsSecureCoding { ++ (BOOL)supportsSecureCoding +{ return YES; } @@ -96,17 +97,17 @@ - (nullable instancetype)initWithCoder:(NSCoder *)decoder return nil; } - self.timedWriteTimeout = [decoder decodeObjectOfClass:[NSNumber class] forKey: sTimedWriteTimeoutCodingKey]; - self.dataVersion = [decoder decodeObjectOfClass:[NSNumber class] forKey: sDataVersionCodingKey]; + self.timedWriteTimeout = [decoder decodeObjectOfClass:[NSNumber class] forKey:sTimedWriteTimeoutCodingKey]; + self.dataVersion = [decoder decodeObjectOfClass:[NSNumber class] forKey:sDataVersionCodingKey]; return self; } - (void)encodeWithCoder:(NSCoder *)coder { - if ( self.timedWriteTimeout ) + if (self.timedWriteTimeout) [coder encodeObject:self.timedWriteTimeout forKey:sTimedWriteTimeoutCodingKey]; - if ( self.dataVersion ) + if (self.dataVersion) [coder encodeObject:self.dataVersion forKey:sDataVersionCodingKey]; } @@ -124,7 +125,8 @@ - (instancetype)init #pragma mark - Coding -+ (BOOL)supportsSecureCoding { ++ (BOOL)supportsSecureCoding +{ return YES; } @@ -140,9 +142,9 @@ - (nullable instancetype)initWithCoder:(NSCoder *)decoder return nil; } - self.filterByFabric = [decoder decodeBoolForKey: sFilterByFabricCoderKey]; - self.assumeUnknownAttributesReportable = [decoder decodeBoolForKey: sAssumeUnknownAttributesReportableCoderKey]; - self.minEventNumber = [decoder decodeObjectOfClass:[NSNumber class] forKey: sMinEventNumberCoderKey]; + self.filterByFabric = [decoder decodeBoolForKey:sFilterByFabricCoderKey]; + self.assumeUnknownAttributesReportable = [decoder decodeBoolForKey:sAssumeUnknownAttributesReportableCoderKey]; + self.minEventNumber = [decoder decodeObjectOfClass:[NSNumber class] forKey:sMinEventNumberCoderKey]; return self; } @@ -150,9 +152,9 @@ - (nullable instancetype)initWithCoder:(NSCoder *)decoder - (void)encodeWithCoder:(NSCoder *)coder { [coder encodeBool:self.filterByFabric forKey:sFilterByFabricCoderKey]; - [coder encodeBool: self.assumeUnknownAttributesReportable forKey:sAssumeUnknownAttributesReportableCoderKey]; + [coder encodeBool:self.assumeUnknownAttributesReportable forKey:sAssumeUnknownAttributesReportableCoderKey]; - if ( self.minEventNumber ) + if (self.minEventNumber) [coder encodeObject:self.minEventNumber forKey:sMinEventNumberCoderKey]; } @@ -210,7 +212,8 @@ - (id)copyWithZone:(NSZone * _Nullable)zone } #pragma mark - Coding -+ (BOOL)supportsSecureCoding { ++ (BOOL)supportsSecureCoding +{ return YES; } @@ -222,32 +225,32 @@ + (BOOL)supportsSecureCoding { - (nullable instancetype)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder: decoder]; + self = [super initWithCoder:decoder]; if (self == nil) { return nil; } - self.replaceExistingSubscriptions = [decoder decodeBoolForKey: sReplaceExistingSubscriptionsCoderKey]; - self.reportEventsUrgently = [decoder decodeBoolForKey: sReportEventsUrgentlyCoderKey]; - self.resubscribeAutomatically = [decoder decodeBoolForKey: sResubscribeAutomaticallyCoderKey]; - self.minInterval = [decoder decodeObjectOfClass:[NSNumber class] forKey: sMinIntervalKeyCoderKey]; - self.maxInterval = [decoder decodeObjectOfClass:[NSNumber class] forKey: sMaxIntervalKeyCoderKey]; + self.replaceExistingSubscriptions = [decoder decodeBoolForKey:sReplaceExistingSubscriptionsCoderKey]; + self.reportEventsUrgently = [decoder decodeBoolForKey:sReportEventsUrgentlyCoderKey]; + self.resubscribeAutomatically = [decoder decodeBoolForKey:sResubscribeAutomaticallyCoderKey]; + self.minInterval = [decoder decodeObjectOfClass:[NSNumber class] forKey:sMinIntervalKeyCoderKey]; + self.maxInterval = [decoder decodeObjectOfClass:[NSNumber class] forKey:sMaxIntervalKeyCoderKey]; return self; } - (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder: coder]; + [super encodeWithCoder:coder]; - [coder encodeBool: self.replaceExistingSubscriptions forKey:sReplaceExistingSubscriptionsCoderKey]; - [coder encodeBool: self.reportEventsUrgently forKey:sReportEventsUrgentlyCoderKey]; - [coder encodeBool: self.resubscribeAutomatically forKey:sResubscribeAutomaticallyCoderKey]; + [coder encodeBool:self.replaceExistingSubscriptions forKey:sReplaceExistingSubscriptionsCoderKey]; + [coder encodeBool:self.reportEventsUrgently forKey:sReportEventsUrgentlyCoderKey]; + [coder encodeBool:self.resubscribeAutomatically forKey:sResubscribeAutomaticallyCoderKey]; - if ( self.minInterval ) + if (self.minInterval) [coder encodeObject:self.minInterval forKey:sMinIntervalKeyCoderKey]; - if ( self.maxInterval ) + if (self.maxInterval) [coder encodeObject:self.maxInterval forKey:sMaxIntervalKeyCoderKey]; } diff --git a/src/darwin/Framework/CHIP/MTRDefines_Internal.h b/src/darwin/Framework/CHIP/MTRDefines_Internal.h index 5e9a9e00da9df2..c48584993366fe 100644 --- a/src/darwin/Framework/CHIP/MTRDefines_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDefines_Internal.h @@ -65,50 +65,49 @@ typedef struct {} variable_hidden_by_mtr_hide; // Default timed interaction timeout, in ms, if another one is not provided. #define MTR_DEFAULT_TIMED_INTERACTION_TIMEOUT_MS 10000 - #pragma mark - XPC Defines -#define MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, PREFIX) \ - \ - -(TYPE) NAME \ - { \ - __block TYPE outValue = DEFAULT_VALUE; \ - \ - NSXPCConnection * xpcConnection = nil; \ - \ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] PREFIX \ - GETTER_NAME:^(TYPE returnValue) { \ - outValue = returnValue; \ - }]; \ - \ - return outValue; \ +#define MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, PREFIX) \ + \ + -(TYPE) NAME \ + { \ + __block TYPE outValue = DEFAULT_VALUE; \ + \ + NSXPCConnection * xpcConnection = nil; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] PREFIX \ + GETTER_NAME:^(TYPE returnValue) { \ + outValue = returnValue; \ + }]; \ + \ + return outValue; \ } -#define MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, PREFIX) \ - \ - -(void) METHOD_SIGNATURE \ - { \ - NSXPCConnection * xpcConnection = nil; \ - \ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] PREFIX ADDITIONAL_ARGUMENTS]; \ +#define MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, PREFIX) \ + \ + -(void) METHOD_SIGNATURE \ + { \ + NSXPCConnection * xpcConnection = nil; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] PREFIX ADDITIONAL_ARGUMENTS]; \ } -#define MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, PREFIX) \ - - (TYPE) SIGNATURE \ - { \ - __block TYPE outValue = DEFAULT_VALUE; \ - \ - NSXPCConnection * xpcConnection = nil; \ - \ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] PREFIX ADDITIONAL_ARGUMENTS:^(TYPE returnValue) { \ - outValue = returnValue; \ - }]; \ - \ - return outValue; \ +#define MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, PREFIX) \ + -(TYPE) SIGNATURE \ + { \ + __block TYPE outValue = DEFAULT_VALUE; \ + \ + NSXPCConnection * xpcConnection = nil; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] PREFIX ADDITIONAL_ARGUMENTS:^(TYPE returnValue) { \ + outValue = returnValue; \ + }]; \ + \ + return outValue; \ } diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm index aaec9cb10d4e45..d53d94b83db946 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_Concrete.mm @@ -145,7 +145,7 @@ - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParamete /// because of the enormous overlap of params. if ([parameters isKindOfClass:MTRDeviceControllerXPCParameters.class]) { if ([parameters isKindOfClass:MTRDeviceControllerMachServiceXPCParameters.class]) { - MTRDeviceControllerMachServiceXPCParameters * xpcParameters = (MTRDeviceControllerMachServiceXPCParameters *)parameters; + MTRDeviceControllerMachServiceXPCParameters * xpcParameters = (MTRDeviceControllerMachServiceXPCParameters *) parameters; MTR_LOG_DEBUG("%s: got XPC parameters, getting XPC device controller", __PRETTY_FUNCTION__); NSString * machServiceName = xpcParameters.machServiceName; diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h index 778ce19497f70c..7f96e2333c6627 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h @@ -22,12 +22,12 @@ NS_ASSUME_NONNULL_BEGIN MTR_TESTABLE -@interface MTRDeviceController_XPC : MTRDeviceController -- (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection * (^)(void))connectionBlock; +@interface MTRDeviceController_XPC : MTRDeviceController +- (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection * (^)(void) )connectionBlock; #ifdef MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR - (id)initWithUniqueIdentifier:(NSUUID *)UUID machServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options #endif -@end + @end -NS_ASSUME_NONNULL_END + NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index ad6608a0e9dabf..a51daabb577fcc 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -15,20 +15,20 @@ */ #import "MTRDeviceController_XPC.h" -#import "MTRDeviceController_Internal.h" #import "MTRDefines_Internal.h" +#import "MTRDeviceController_Internal.h" #import "MTRDevice_XPC.h" #import "MTRLogging_Internal.h" #import "MTRXPCClientProtocol.h" #import "MTRXPCServerProtocol.h" -#define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(NAME,TYPE,DEFAULT_VALUE,GETTER_NAME) \ - MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController: self.uniqueIdentifier) +#define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ + MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController \ + : self.uniqueIdentifier) #define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ - MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController: self.uniqueIdentifier) - - + MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController \ + : self.uniqueIdentifier) @interface MTRDeviceController_XPC () @@ -37,20 +37,21 @@ @interface MTRDeviceController_XPC () @end -//#define MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR +// #define MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR @implementation MTRDeviceController_XPC @synthesize uniqueIdentifier = _uniqueIdentifier; -- (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection * (^)(void))connectionBlock { - if ( self = [super initForSubclasses] ) { +- (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection * (^)(void) )connectionBlock +{ + if (self = [super initForSubclasses]) { MTR_LOG("Setting up XPC Controller for UUID: %@ with connection block: %p", UUID, connectionBlock); self.xpcConnection = connectionBlock(); self.uniqueIdentifier = UUID; MTR_LOG("Set up XPC Connection: %@", self.xpcConnection); - if ( self.xpcConnection ) { + if (self.xpcConnection) { self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServerProtocol)]; self.xpcConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCClientProtocol)]; @@ -70,13 +71,13 @@ - (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection #ifdef MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR - (id)initWithUniqueIdentifier:(NSUUID *)UUID machServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options { - if ( self = [super initForSubclasses] ) { + if (self = [super initForSubclasses]) { MTR_LOG("Setting up XPC Controller for UUID: %@ with machServiceName: %s options: %d", UUID, machServiceName, options); self.xpcConnection = [[NSXPCConnection alloc] initWithMachServiceName:machServiceName options:options]; self.uniqueIdentifier = UUID; MTR_LOG("Set up XPC Connection: %@", self.xpcConnection); - if ( self.xpcConnection ) { + if (self.xpcConnection) { self.xpcConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCServerProtocol)]; self.xpcConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(MTRXPCClientProtocol)]; @@ -90,7 +91,6 @@ - (id)initWithUniqueIdentifier:(NSUUID *)UUID machServiceName:(NSString *)machSe } } - return self; } #endif // MTR_HAVE_MACH_SERVICE_NAME_CONSTRUCTOR @@ -107,7 +107,6 @@ - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParamete MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(isRunning, BOOL, NO, getIsRunningWithReply) MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(controllerNodeID, NSNumber *, nil, controllerNodeIDWithReply) - // Not Supported via XPC // - (oneway void)deviceController:(NSUUID *)controller setupCommissioningSessionWithPayload:(MTRSetupPayload *)payload newNodeID:(NSNumber *)newNodeID withReply:(void(^)(BOOL success, NSError * _Nullable error))reply; // - (oneway void)deviceController:(NSUUID *)controller setupCommissioningSessionWithDiscoveredDevice:(MTRCommissionableBrowserResult *)discoveredDevice payload:(MTRSetupPayload *)payload newNodeID:(NSNumber *)newNodeID withReply:(void(^)(BOOL success, NSError * _Nullable error))reply; @@ -122,47 +121,52 @@ - (nullable instancetype)initWithParameters:(MTRDeviceControllerAbstractParamete //- (oneway void)deviceController:(NSUUID *)controller addServerEndpoint:(MTRServerEndpoint *)endpoint withReply:(void(^)(BOOL success))reply; //- (oneway void)deviceController:(NSUUID *)controller removeServerEndpoint:(MTRServerEndpoint *)endpoint; -MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_COMMAND(shutdown, shutdownDeviceController: self.uniqueIdentifier) - - +MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_COMMAND(shutdown, shutdownDeviceController + : self.uniqueIdentifier) #pragma mark - MTRDeviceProtocol Client // All pass through, we could do some fancy redirection here based on protocol, but that's that for another day -- (oneway void)device:(NSNumber *)nodeID stateChanged:(MTRDeviceState)state { - MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; - MTR_LOG("Received device: %@ stateChanged: %lu found device: %@", nodeID, (unsigned long)state, device); - [device device: nodeID stateChanged: state]; +- (oneway void)device:(NSNumber *)nodeID stateChanged:(MTRDeviceState)state +{ + MTRDevice_XPC * device = (MTRDevice_XPC *) [self deviceForNodeID:nodeID]; + MTR_LOG("Received device: %@ stateChanged: %lu found device: %@", nodeID, (unsigned long) state, device); + [device device:nodeID stateChanged:state]; } -- (oneway void)device:(NSNumber *)nodeID receivedAttributeReport:(NSArray *> *)attributeReport { - MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; +- (oneway void)device:(NSNumber *)nodeID receivedAttributeReport:(NSArray *> *)attributeReport +{ + MTRDevice_XPC * device = (MTRDevice_XPC *) [self deviceForNodeID:nodeID]; MTR_LOG("Received device: %@ receivedAttributeReport: %@ found device: %@", nodeID, attributeReport, device); - [device device: nodeID receivedAttributeReport: attributeReport]; + [device device:nodeID receivedAttributeReport:attributeReport]; } -- (oneway void)device:(NSNumber *)nodeID receivedEventReport:(NSArray *> *)eventReport { - MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; +- (oneway void)device:(NSNumber *)nodeID receivedEventReport:(NSArray *> *)eventReport +{ + MTRDevice_XPC * device = (MTRDevice_XPC *) [self deviceForNodeID:nodeID]; MTR_LOG("Received device: %@ receivedEventReport: %@ found device: %@", nodeID, eventReport, device); - [device device: nodeID receivedEventReport: eventReport]; + [device device:nodeID receivedEventReport:eventReport]; } -- (oneway void)deviceBecameActive:(NSNumber *)nodeID { - MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; +- (oneway void)deviceBecameActive:(NSNumber *)nodeID +{ + MTRDevice_XPC * device = (MTRDevice_XPC *) [self deviceForNodeID:nodeID]; MTR_LOG("Received deviceBecameActive: %@ found device: %@", nodeID, device); - [device deviceBecameActive: nodeID]; + [device deviceBecameActive:nodeID]; } -- (oneway void)deviceCachePrimed:(NSNumber *)nodeID { - MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; +- (oneway void)deviceCachePrimed:(NSNumber *)nodeID +{ + MTRDevice_XPC * device = (MTRDevice_XPC *) [self deviceForNodeID:nodeID]; MTR_LOG("Received deviceCachePrimed: %@ found device: %@", nodeID, device); - [device deviceCachePrimed: nodeID]; + [device deviceCachePrimed:nodeID]; } -- (oneway void)deviceConfigurationChanged:(NSNumber *)nodeID { - MTRDevice_XPC * device = (MTRDevice_XPC *)[self deviceForNodeID: nodeID]; +- (oneway void)deviceConfigurationChanged:(NSNumber *)nodeID +{ + MTRDevice_XPC * device = (MTRDevice_XPC *) [self deviceForNodeID:nodeID]; MTR_LOG("Received deviceConfigurationChanged: %@ found device: %@", nodeID, device); - [device deviceConfigurationChanged: nodeID]; + [device deviceConfigurationChanged:nodeID]; } #pragma mark - MTRDeviceController Protocol Client diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm index 62b83329525716..c7931ce49178d2 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -30,6 +30,9 @@ #import "MTRCommissionableBrowserResult_Internal.h" #import "MTRCommissioningParameters.h" #import "MTRConversion.h" +#import "MTRDefines_Internal.h" +#import "MTRDeviceAttestationDelegateBridge.h" +#import "MTRDeviceConnectionBridge.h" #import "MTRDeviceController.h" #import "MTRDeviceControllerDelegateBridge.h" #import "MTRDeviceControllerFactory_Internal.h" @@ -42,7 +45,6 @@ #import "MTRDevice_Internal.h" #import "MTRError_Internal.h" #import "MTRKeypair.h" -#import "MTRDefines_Internal.h" #import "MTRLogging_Internal.h" #import "MTRMetricKeys.h" #import "MTRMetricsCollector.h" @@ -55,8 +57,6 @@ #import "MTRUnfairLock.h" #import "NSDataSpanConversion.h" #import "NSStringSpanConversion.h" -#import "MTRDeviceAttestationDelegateBridge.h" -#import "MTRDeviceConnectionBridge.h" #include #include @@ -64,44 +64,56 @@ #import -#define MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ - MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController:[[self deviceController] uniqueIdentifier] nodeID:[self nodeID]) +#define MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ + MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController \ + : [[self deviceController] uniqueIdentifier] nodeID \ + : [self nodeID]) -#define MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS) \ - MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, deviceController:[[self deviceController] uniqueIdentifier] nodeID:[self nodeID]) +#define MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS) \ + MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, deviceController \ + : [[self deviceController] uniqueIdentifier] nodeID \ + : [self nodeID]) -#define MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ - MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController:[[self deviceController] uniqueIdentifier] nodeID:[self nodeID]) +#define MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ + MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController \ + : [[self deviceController] uniqueIdentifier] nodeID \ + : [self nodeID]) @implementation MTRDevice_XPC #pragma mark - Client Callbacks -- (oneway void)device:(NSNumber *)nodeID stateChanged:(MTRDeviceState)state { +- (oneway void)device:(NSNumber *)nodeID stateChanged:(MTRDeviceState)state +{ [self _callDelegatesWithBlock:^(id delegate) { [delegate device:self stateChanged:state]; }]; } -- (oneway void)device:(NSNumber *)nodeID receivedAttributeReport:(NSArray *> *)attributeReport { +- (oneway void)device:(NSNumber *)nodeID receivedAttributeReport:(NSArray *> *)attributeReport +{ [self _callDelegatesWithBlock:^(id delegate) { [delegate device:self receivedAttributeReport:attributeReport]; }]; } -- (oneway void)device:(NSNumber *)nodeID receivedEventReport:(NSArray *> *)eventReport { +- (oneway void)device:(NSNumber *)nodeID receivedEventReport:(NSArray *> *)eventReport +{ [self _callDelegatesWithBlock:^(id delegate) { [delegate device:self receivedEventReport:eventReport]; }]; } -- (oneway void)deviceBecameActive:(NSNumber *)nodeID { +- (oneway void)deviceBecameActive:(NSNumber *)nodeID +{ [self _callDelegatesWithBlock:^(id delegate) { [delegate deviceBecameActive:self]; }]; } -- (oneway void)deviceCachePrimed:(NSNumber *)nodeID { +- (oneway void)deviceCachePrimed:(NSNumber *)nodeID +{ [self _callDelegatesWithBlock:^(id delegate) { [delegate deviceCachePrimed:self]; }]; } -- (oneway void)deviceConfigurationChanged:(NSNumber *)nodeID { +- (oneway void)deviceConfigurationChanged:(NSNumber *)nodeID +{ [self _callDelegatesWithBlock:^(id delegate) { [delegate deviceConfigurationChanged:self]; }]; @@ -115,15 +127,32 @@ - (oneway void)deviceConfigurationChanged:(NSNumber *)nodeID { MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(estimatedSubscriptionLatency, NSNumber *, nil, getEstimatedSubscriptionLatencyWithReply) typedef NSDictionary * readAttributeResponseType; -MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(readAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID params:(MTRReadParams * _Nullable)params, - readAttributeResponseType, - nil, - readAttributeWithEndpointID:endpointID clusterID:clusterID attributeID:attributeID params:params withReply) - - -MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(writeAttributeWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID attributeID:(NSNumber *)attributeID value:(id)value expectedValueInterval:(NSNumber *)expectedValueInterval timedWriteTimeout:(NSNumber * _Nullable)timeout, writeAttributeWithEndpointID:endpointID clusterID:clusterID attributeID:attributeID value:value expectedValueInterval:expectedValueInterval timedWriteTimeout:timeout) - - +MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(readAttributeWithEndpointID + : (NSNumber *) endpointID clusterID + : (NSNumber *) clusterID attributeID + : (NSNumber *) attributeID params + : (MTRReadParams * _Nullable) params, + readAttributeResponseType, + nil, + readAttributeWithEndpointID + : endpointID clusterID + : clusterID attributeID + : attributeID params + : params withReply) + +MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(writeAttributeWithEndpointID + : (NSNumber *) endpointID clusterID + : (NSNumber *) clusterID attributeID + : (NSNumber *) attributeID value + : (id) value expectedValueInterval + : (NSNumber *) expectedValueInterval timedWriteTimeout + : (NSNumber * _Nullable) timeout, writeAttributeWithEndpointID + : endpointID clusterID + : clusterID attributeID + : attributeID value + : value expectedValueInterval + : expectedValueInterval timedWriteTimeout + : timeout) - (void)invokeCommandWithEndpointID:(NSNumber *)endpointID clusterID:(NSNumber *)clusterID @@ -133,7 +162,8 @@ - (void)invokeCommandWithEndpointID:(NSNumber *)endpointID expectedValueInterval:(NSNumber * _Nullable)expectedValueInterval timedInvokeTimeout:(NSNumber * _Nullable)timeout queue:(dispatch_queue_t)queue - completion:(MTRDeviceResponseHandler)completion { + completion:(MTRDeviceResponseHandler)completion +{ NSXPCConnection * xpcConnection = nil; [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { @@ -148,23 +178,47 @@ - (void)invokeCommandWithEndpointID:(NSNumber *)endpointID expectedValueInterval:expectedValueInterval timedInvokeTimeout:timeout completion:completion]; - } // Not Supported via XPC //- (oneway void)deviceController:(NSUUID *)controller nodeID:(NSNumber *)nodeID openCommissioningWindowWithSetupPasscode:(NSNumber *)setupPasscode discriminator:(NSNumber *)discriminator duration:(NSNumber *)duration completion:(MTRDeviceOpenCommissioningWindowHandler)completion; MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(clientDataKeys, NSArray *, nil, getClientDataKeysWithReply) -MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(clientDataForKey:(NSString *)key, id _Nullable, nil, clientDataForKey:key withReply) - -MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(setClientDataForKey:(NSString *)key value:(id)value, setClientDataForKey:key value: value) -MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(removeClientDataForKey:(NSString *)key, removeClientDataForKey:key) - -MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(clientDataKeysForEndpointID:(NSNumber *)endpointID, NSArray * _Nullable, nil, clientDataKeysForEndpointID:(NSNumber *)endpointID withReply) -MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(clientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID, id _Nullable, nil, clientDataForKey: key endpointID: endpointID withReply) - -MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(setClientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID value:(id)value, setClientDataForKey:key endpointID:endpointID value:value) -MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(removeClientDataForKey:(NSString *)key endpointID:(NSNumber *)endpointID value:(id)value, removeClientDataForKey:key endpointID:endpointID) +MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(clientDataForKey + : (NSString *) key, id _Nullable, nil, clientDataForKey + : key withReply) + +MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(setClientDataForKey + : (NSString *) key value + : (id) value, setClientDataForKey + : key value + : value) +MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(removeClientDataForKey + : (NSString *) key, removeClientDataForKey + : key) + +MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(clientDataKeysForEndpointID + : (NSNumber *) endpointID, NSArray * _Nullable, nil, clientDataKeysForEndpointID + : (NSNumber *) endpointID withReply) +MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(clientDataForKey + : (NSString *) key endpointID + : (NSNumber *) endpointID, id _Nullable, nil, clientDataForKey + : key endpointID + : endpointID withReply) + +MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(setClientDataForKey + : (NSString *) key endpointID + : (NSNumber *) endpointID value + : (id) value, setClientDataForKey + : key endpointID + : endpointID value + : value) +MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(removeClientDataForKey + : (NSString *) key endpointID + : (NSNumber *) endpointID value + : (id) value, removeClientDataForKey + : key endpointID + : endpointID) // Not Supported via XPC // - (oneway void)downloadLogOfType:(MTRDiagnosticLogType)type nodeID:(NSNumber *)nodeID timeout:(NSTimeInterval)timeout completion:(void (^)(NSURL * _Nullable url, NSError * _Nullable error))completion; diff --git a/src/darwin/Framework/CHIP/XPC Protocol/MTRXPCClientProtocol.h b/src/darwin/Framework/CHIP/XPC Protocol/MTRXPCClientProtocol.h index 624c1f0a14570b..a571ebc07a9257 100644 --- a/src/darwin/Framework/CHIP/XPC Protocol/MTRXPCClientProtocol.h +++ b/src/darwin/Framework/CHIP/XPC Protocol/MTRXPCClientProtocol.h @@ -15,11 +15,10 @@ * limitations under the License. */ -#import // for MTRDeviceState +#import // for MTRDeviceState NS_ASSUME_NONNULL_BEGIN - @protocol MTRXPCClientProtocol_MTRDevice - (oneway void)device:(NSNumber *)nodeID stateChanged:(MTRDeviceState)state; - (oneway void)device:(NSNumber *)nodeID receivedAttributeReport:(NSArray *> *)attributeReport; From e7f7587226cefddffaeeb3b4e179a6aef52c75b8 Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Sat, 17 Aug 2024 14:07:09 -0700 Subject: [PATCH 69/75] Actually hooking up to XPCConnection --- src/darwin/Framework/CHIP/MTRDefines_Internal.h | 6 +++--- src/darwin/Framework/CHIP/MTRDeviceController_XPC.h | 4 +++- src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm | 5 ++--- src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 9 +++++---- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDefines_Internal.h b/src/darwin/Framework/CHIP/MTRDefines_Internal.h index c48584993366fe..adec418f25a5bb 100644 --- a/src/darwin/Framework/CHIP/MTRDefines_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDefines_Internal.h @@ -67,7 +67,7 @@ typedef struct {} variable_hidden_by_mtr_hide; #pragma mark - XPC Defines -#define MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, PREFIX) \ +#define MTR_SIMPLE_REMOTE_XPC_GETTER(XPC_CONNECTION, NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, PREFIX) \ \ -(TYPE) NAME \ { \ @@ -85,7 +85,7 @@ typedef struct {} variable_hidden_by_mtr_hide; return outValue; \ } -#define MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, PREFIX) \ +#define MTR_SIMPLE_REMOTE_XPC_COMMAND(XPC_CONNECTION, METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, PREFIX) \ \ -(void) METHOD_SIGNATURE \ { \ @@ -96,7 +96,7 @@ typedef struct {} variable_hidden_by_mtr_hide; }] PREFIX ADDITIONAL_ARGUMENTS]; \ } -#define MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, PREFIX) \ +#define MTR_COMPLEX_REMOTE_XPC_GETTER(XPC_CONNECTION, SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, PREFIX) \ -(TYPE) SIGNATURE \ { \ __block TYPE outValue = DEFAULT_VALUE; \ diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h index 7f96e2333c6627..a78e3063322266 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h @@ -28,6 +28,8 @@ MTR_TESTABLE - (id)initWithUniqueIdentifier:(NSUUID *)UUID machServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options #endif - @end +@property (atomic, retain, readwrite) NSXPCConnection * xpcConnection; + +@end NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index a51daabb577fcc..9c5f5907fcc856 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -23,16 +23,15 @@ #import "MTRXPCServerProtocol.h" #define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ - MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController \ + MTR_SIMPLE_REMOTE_XPC_GETTER(self.xpcConnection, NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController \ : self.uniqueIdentifier) #define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ - MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController \ + MTR_SIMPLE_REMOTE_XPC_COMMAND(self.xpcConnection, METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController \ : self.uniqueIdentifier) @interface MTRDeviceController_XPC () -@property (atomic, retain, readwrite) NSXPCConnection * xpcConnection; @property (nonatomic, retain, readwrite) NSUUID * uniqueIdentifier; @end diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm index c7931ce49178d2..10dd85dc19c54b 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -34,6 +34,7 @@ #import "MTRDeviceAttestationDelegateBridge.h" #import "MTRDeviceConnectionBridge.h" #import "MTRDeviceController.h" +#import "MTRDeviceController_XPC.h" #import "MTRDeviceControllerDelegateBridge.h" #import "MTRDeviceControllerFactory_Internal.h" #import "MTRDeviceControllerLocalTestStorage.h" @@ -65,17 +66,17 @@ #import #define MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ - MTR_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController \ + MTR_SIMPLE_REMOTE_XPC_GETTER([(MTRDeviceController_XPC *)[self deviceController] xpcConnection], NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController \ : [[self deviceController] uniqueIdentifier] nodeID \ : [self nodeID]) #define MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS) \ - MTR_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, deviceController \ + MTR_COMPLEX_REMOTE_XPC_GETTER([(MTRDeviceController_XPC *)[self deviceController] xpcConnection], SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, deviceController \ : [[self deviceController] uniqueIdentifier] nodeID \ : [self nodeID]) #define MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ - MTR_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController \ + MTR_SIMPLE_REMOTE_XPC_COMMAND([(MTRDeviceController_XPC *)[self deviceController] xpcConnection], METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController \ : [[self deviceController] uniqueIdentifier] nodeID \ : [self nodeID]) @@ -164,7 +165,7 @@ - (void)invokeCommandWithEndpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue completion:(MTRDeviceResponseHandler)completion { - NSXPCConnection * xpcConnection = nil; + NSXPCConnection * xpcConnection = [(MTRDeviceController_XPC *)[self deviceController] xpcConnection]; [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { MTR_LOG_ERROR("Error: %@", error); From 6cc892ae69a2f372b55cf05a449818cfb16bcd74 Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Sat, 17 Aug 2024 14:15:42 -0700 Subject: [PATCH 70/75] Actually hooking up to XPCConnection --- src/darwin/Framework/CHIP/MTRDefines_Internal.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDefines_Internal.h b/src/darwin/Framework/CHIP/MTRDefines_Internal.h index adec418f25a5bb..0e265f0762d9a0 100644 --- a/src/darwin/Framework/CHIP/MTRDefines_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDefines_Internal.h @@ -73,7 +73,7 @@ typedef struct {} variable_hidden_by_mtr_hide; { \ __block TYPE outValue = DEFAULT_VALUE; \ \ - NSXPCConnection * xpcConnection = nil; \ + NSXPCConnection * xpcConnection = XPC_CONNECTION; \ \ [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ MTR_LOG_ERROR("Error: %@", error); \ @@ -89,7 +89,7 @@ typedef struct {} variable_hidden_by_mtr_hide; \ -(void) METHOD_SIGNATURE \ { \ - NSXPCConnection * xpcConnection = nil; \ + NSXPCConnection * xpcConnection = XPC_CONNECTION; \ \ [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ MTR_LOG_ERROR("Error: %@", error); \ @@ -101,7 +101,7 @@ typedef struct {} variable_hidden_by_mtr_hide; { \ __block TYPE outValue = DEFAULT_VALUE; \ \ - NSXPCConnection * xpcConnection = nil; \ + NSXPCConnection * xpcConnection = XPC_CONNECTION; \ \ [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ MTR_LOG_ERROR("Error: %@", error); \ From baf7f154cf03ee1a3d390d3a25ee03a5a16b1f2f Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Sat, 17 Aug 2024 14:33:35 -0700 Subject: [PATCH 71/75] Adding XPC Parameters --- .../CHIP/MTRDeviceControllerParameters.h | 22 +++++++++++++++++++ .../CHIP/MTRDeviceControllerStartupParams.mm | 18 +++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerParameters.h b/src/darwin/Framework/CHIP/MTRDeviceControllerParameters.h index ffccc18b0398a4..e05d4f9080d4cb 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerParameters.h +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerParameters.h @@ -145,4 +145,26 @@ MTR_AVAILABLE(ios(17.6), macos(14.6), watchos(10.6), tvos(17.6)) @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 diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm index f393d48d0a99c1..c18fba9ba2b369 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm @@ -331,6 +331,24 @@ - (instancetype)initWithStorageDelegate:(id) } @end +@implementation MTRXPCDeviceControllerParameters + +@synthesize uniqueIdentifier = _uniqueIdentifier; +@synthesize xpcConnectionBlock = _xpcConnectionBlock; + +- (instancetype)initWithXPConnectionBlock:(NSXPCConnection * (^)(void))xpcConnectionBlock + uniqueIdentifier:(NSUUID *)uniqueIdentifier; +{ + if ( self = [super _initInternal] ) { + _xpcConnectionBlock = [xpcConnectionBlock copy]; + _uniqueIdentifier = [uniqueIdentifier copy]; + } + + return self; +} +@end + + @implementation MTRDeviceControllerStartupParamsInternal - (instancetype)initWithParams:(MTRDeviceControllerStartupParams *)params From 15520184c9b8c63a601a193730d84a34381ea21f Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Sat, 17 Aug 2024 14:39:04 -0700 Subject: [PATCH 72/75] Adding XPC Parameter hookup --- src/darwin/Framework/CHIP/MTRDeviceController.mm | 8 +++++++- src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm index ee8cc2b7549190..56ef11e03d5f0d 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm @@ -26,6 +26,7 @@ #import "MTRCommissionableBrowserResult_Internal.h" #import "MTRCommissioningParameters.h" #import "MTRConversion.h" +#import "MTRDeviceController_XPC.h" #import "MTRDeviceControllerDelegateBridge.h" #import "MTRDeviceControllerFactory_Internal.h" #import "MTRDeviceControllerLocalTestStorage.h" @@ -144,7 +145,12 @@ - (instancetype)initForSubclasses - (nullable MTRDeviceController *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { - if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { + if ([parameters isKindOfClass:MTRXPCDeviceControllerParameters.class]) { + MTRXPCDeviceControllerParameters * resolvedParameters = (MTRXPCDeviceControllerParameters *)parameters; + MTR_LOG("Starting up with XPC Device Controller Parameters: %@", parameters); + return [[MTRDeviceController_XPC alloc] initWithUniqueIdentifier: resolvedParameters.uniqueIdentifier xpConnectionBlock: resolvedParameters.xpcConnectionBlock]; + } + else if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); if (error) { *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INVALID_ARGUMENT]; diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index 9c5f5907fcc856..dc824d881227e8 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -46,6 +46,16 @@ - (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection { if (self = [super initForSubclasses]) { MTR_LOG("Setting up XPC Controller for UUID: %@ with connection block: %p", UUID, connectionBlock); + + if ( UUID == nil ) { + MTR_LOG_ERROR("MTRDeviceController_XPC initWithUniqueIdentifier failed, nil UUID"); + return nil; + } + if ( connectionBlock == nil ) { + MTR_LOG_ERROR("MTRDeviceController_XPC initWithUniqueIdentifier failed, nil connectionBlock"); + return nil; + } + self.xpcConnection = connectionBlock(); self.uniqueIdentifier = UUID; From 713bf5c264cbeb7dd3d3c0617be277d812d636a8 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Sat, 17 Aug 2024 21:39:21 +0000 Subject: [PATCH 73/75] Restyled by whitespace --- src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm | 2 +- src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm index c18fba9ba2b369..e8a18386a99563 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm @@ -343,7 +343,7 @@ - (instancetype)initWithXPConnectionBlock:(NSXPCConnection * (^)(void))xpcConnec _xpcConnectionBlock = [xpcConnectionBlock copy]; _uniqueIdentifier = [uniqueIdentifier copy]; } - + return self; } @end diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index dc824d881227e8..3e862ebf99ffda 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -46,7 +46,7 @@ - (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection { if (self = [super initForSubclasses]) { MTR_LOG("Setting up XPC Controller for UUID: %@ with connection block: %p", UUID, connectionBlock); - + if ( UUID == nil ) { MTR_LOG_ERROR("MTRDeviceController_XPC initWithUniqueIdentifier failed, nil UUID"); return nil; @@ -55,7 +55,7 @@ - (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection MTR_LOG_ERROR("MTRDeviceController_XPC initWithUniqueIdentifier failed, nil connectionBlock"); return nil; } - + self.xpcConnection = connectionBlock(); self.uniqueIdentifier = UUID; From bffca718cb0dc4d7716fa1c98c6573d2f585c343 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Sat, 17 Aug 2024 21:39:23 +0000 Subject: [PATCH 74/75] Restyled by clang-format --- .../Framework/CHIP/MTRDefines_Internal.h | 76 +++++++++---------- .../Framework/CHIP/MTRDeviceController.mm | 9 +-- .../CHIP/MTRDeviceControllerParameters.h | 2 +- .../CHIP/MTRDeviceControllerStartupParams.mm | 5 +- .../Framework/CHIP/MTRDeviceController_XPC.h | 4 +- .../Framework/CHIP/MTRDeviceController_XPC.mm | 12 +-- src/darwin/Framework/CHIP/MTRDevice_XPC.mm | 22 +++--- 7 files changed, 64 insertions(+), 66 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDefines_Internal.h b/src/darwin/Framework/CHIP/MTRDefines_Internal.h index 0e265f0762d9a0..7894f31835a142 100644 --- a/src/darwin/Framework/CHIP/MTRDefines_Internal.h +++ b/src/darwin/Framework/CHIP/MTRDefines_Internal.h @@ -67,47 +67,47 @@ typedef struct {} variable_hidden_by_mtr_hide; #pragma mark - XPC Defines -#define MTR_SIMPLE_REMOTE_XPC_GETTER(XPC_CONNECTION, NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, PREFIX) \ - \ - -(TYPE) NAME \ - { \ - __block TYPE outValue = DEFAULT_VALUE; \ - \ - NSXPCConnection * xpcConnection = XPC_CONNECTION; \ - \ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] PREFIX \ - GETTER_NAME:^(TYPE returnValue) { \ - outValue = returnValue; \ - }]; \ - \ - return outValue; \ +#define MTR_SIMPLE_REMOTE_XPC_GETTER(XPC_CONNECTION, NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, PREFIX) \ + \ + -(TYPE) NAME \ + { \ + __block TYPE outValue = DEFAULT_VALUE; \ + \ + NSXPCConnection * xpcConnection = XPC_CONNECTION; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] PREFIX \ + GETTER_NAME:^(TYPE returnValue) { \ + outValue = returnValue; \ + }]; \ + \ + return outValue; \ } -#define MTR_SIMPLE_REMOTE_XPC_COMMAND(XPC_CONNECTION, METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, PREFIX) \ - \ - -(void) METHOD_SIGNATURE \ - { \ - NSXPCConnection * xpcConnection = XPC_CONNECTION; \ - \ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] PREFIX ADDITIONAL_ARGUMENTS]; \ +#define MTR_SIMPLE_REMOTE_XPC_COMMAND(XPC_CONNECTION, METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, PREFIX) \ + \ + -(void) METHOD_SIGNATURE \ + { \ + NSXPCConnection * xpcConnection = XPC_CONNECTION; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] PREFIX ADDITIONAL_ARGUMENTS]; \ } #define MTR_COMPLEX_REMOTE_XPC_GETTER(XPC_CONNECTION, SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, PREFIX) \ - -(TYPE) SIGNATURE \ - { \ - __block TYPE outValue = DEFAULT_VALUE; \ - \ - NSXPCConnection * xpcConnection = XPC_CONNECTION; \ - \ - [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ - MTR_LOG_ERROR("Error: %@", error); \ - }] PREFIX ADDITIONAL_ARGUMENTS:^(TYPE returnValue) { \ - outValue = returnValue; \ - }]; \ - \ - return outValue; \ + -(TYPE) SIGNATURE \ + { \ + __block TYPE outValue = DEFAULT_VALUE; \ + \ + NSXPCConnection * xpcConnection = XPC_CONNECTION; \ + \ + [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { \ + MTR_LOG_ERROR("Error: %@", error); \ + }] PREFIX ADDITIONAL_ARGUMENTS:^(TYPE returnValue) { \ + outValue = returnValue; \ + }]; \ + \ + return outValue; \ } diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm index 56ef11e03d5f0d..3483ff33320c31 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm @@ -26,12 +26,12 @@ #import "MTRCommissionableBrowserResult_Internal.h" #import "MTRCommissioningParameters.h" #import "MTRConversion.h" -#import "MTRDeviceController_XPC.h" #import "MTRDeviceControllerDelegateBridge.h" #import "MTRDeviceControllerFactory_Internal.h" #import "MTRDeviceControllerLocalTestStorage.h" #import "MTRDeviceControllerStartupParams.h" #import "MTRDeviceControllerStartupParams_Internal.h" +#import "MTRDeviceController_XPC.h" #import "MTRDevice_Concrete.h" #import "MTRDevice_Internal.h" #import "MTRError_Internal.h" @@ -146,11 +146,10 @@ - (instancetype)initForSubclasses - (nullable MTRDeviceController *)initWithParameters:(MTRDeviceControllerAbstractParameters *)parameters error:(NSError * __autoreleasing *)error { if ([parameters isKindOfClass:MTRXPCDeviceControllerParameters.class]) { - MTRXPCDeviceControllerParameters * resolvedParameters = (MTRXPCDeviceControllerParameters *)parameters; + MTRXPCDeviceControllerParameters * resolvedParameters = (MTRXPCDeviceControllerParameters *) parameters; MTR_LOG("Starting up with XPC Device Controller Parameters: %@", parameters); - return [[MTRDeviceController_XPC alloc] initWithUniqueIdentifier: resolvedParameters.uniqueIdentifier xpConnectionBlock: resolvedParameters.xpcConnectionBlock]; - } - else if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { + return [[MTRDeviceController_XPC alloc] initWithUniqueIdentifier:resolvedParameters.uniqueIdentifier xpConnectionBlock:resolvedParameters.xpcConnectionBlock]; + } else if (![parameters isKindOfClass:MTRDeviceControllerParameters.class]) { MTR_LOG_ERROR("Unsupported type of MTRDeviceControllerAbstractParameters: %@", parameters); if (error) { *error = [MTRError errorForCHIPErrorCode:CHIP_ERROR_INVALID_ARGUMENT]; diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerParameters.h b/src/darwin/Framework/CHIP/MTRDeviceControllerParameters.h index e05d4f9080d4cb..caedc20229eb89 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerParameters.h +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerParameters.h @@ -159,7 +159,7 @@ MTR_NEWLY_AVAILABLE * @param uniqueIdentifier The unique id to assign to the controller. * */ -- (instancetype)initWithXPConnectionBlock:(NSXPCConnection * (^)(void))xpcConnectionBlock +- (instancetype)initWithXPConnectionBlock:(NSXPCConnection * (^)(void) )xpcConnectionBlock uniqueIdentifier:(NSUUID *)uniqueIdentifier; @property (atomic, readonly, retain) NSUUID * uniqueIdentifier MTR_NEWLY_AVAILABLE; diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm index e8a18386a99563..c5923ad4e54619 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm @@ -336,10 +336,10 @@ @implementation MTRXPCDeviceControllerParameters @synthesize uniqueIdentifier = _uniqueIdentifier; @synthesize xpcConnectionBlock = _xpcConnectionBlock; -- (instancetype)initWithXPConnectionBlock:(NSXPCConnection * (^)(void))xpcConnectionBlock +- (instancetype)initWithXPConnectionBlock:(NSXPCConnection * (^)(void) )xpcConnectionBlock uniqueIdentifier:(NSUUID *)uniqueIdentifier; { - if ( self = [super _initInternal] ) { + if (self = [super _initInternal]) { _xpcConnectionBlock = [xpcConnectionBlock copy]; _uniqueIdentifier = [uniqueIdentifier copy]; } @@ -348,7 +348,6 @@ - (instancetype)initWithXPConnectionBlock:(NSXPCConnection * (^)(void))xpcConnec } @end - @implementation MTRDeviceControllerStartupParamsInternal - (instancetype)initWithParams:(MTRDeviceControllerStartupParams *)params diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h index a78e3063322266..574d3eac628f3d 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.h @@ -28,8 +28,8 @@ MTR_TESTABLE - (id)initWithUniqueIdentifier:(NSUUID *)UUID machServiceName:(NSString *)machServiceName options:(NSXPCConnectionOptions)options #endif -@property (atomic, retain, readwrite) NSXPCConnection * xpcConnection; + @property(atomic, retain, readwrite)NSXPCConnection * xpcConnection; @end - NS_ASSUME_NONNULL_END +NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index 3e862ebf99ffda..1d91ae0d5d5f9a 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -22,12 +22,12 @@ #import "MTRXPCClientProtocol.h" #import "MTRXPCServerProtocol.h" -#define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ - MTR_SIMPLE_REMOTE_XPC_GETTER(self.xpcConnection, NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController \ +#define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ + MTR_SIMPLE_REMOTE_XPC_GETTER(self.xpcConnection, NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController \ : self.uniqueIdentifier) -#define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ - MTR_SIMPLE_REMOTE_XPC_COMMAND(self.xpcConnection, METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController \ +#define MTR_DEVICECONTROLLER_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ + MTR_SIMPLE_REMOTE_XPC_COMMAND(self.xpcConnection, METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController \ : self.uniqueIdentifier) @interface MTRDeviceController_XPC () @@ -47,11 +47,11 @@ - (id)initWithUniqueIdentifier:(NSUUID *)UUID xpConnectionBlock:(NSXPCConnection if (self = [super initForSubclasses]) { MTR_LOG("Setting up XPC Controller for UUID: %@ with connection block: %p", UUID, connectionBlock); - if ( UUID == nil ) { + if (UUID == nil) { MTR_LOG_ERROR("MTRDeviceController_XPC initWithUniqueIdentifier failed, nil UUID"); return nil; } - if ( connectionBlock == nil ) { + if (connectionBlock == nil) { MTR_LOG_ERROR("MTRDeviceController_XPC initWithUniqueIdentifier failed, nil connectionBlock"); return nil; } diff --git a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm index 10dd85dc19c54b..95f69cb7d4dc90 100644 --- a/src/darwin/Framework/CHIP/MTRDevice_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDevice_XPC.mm @@ -34,7 +34,6 @@ #import "MTRDeviceAttestationDelegateBridge.h" #import "MTRDeviceConnectionBridge.h" #import "MTRDeviceController.h" -#import "MTRDeviceController_XPC.h" #import "MTRDeviceControllerDelegateBridge.h" #import "MTRDeviceControllerFactory_Internal.h" #import "MTRDeviceControllerLocalTestStorage.h" @@ -42,6 +41,7 @@ #import "MTRDeviceControllerStartupParams_Internal.h" #import "MTRDeviceControllerXPCParameters.h" #import "MTRDeviceController_Concrete.h" +#import "MTRDeviceController_XPC.h" #import "MTRDevice_Concrete.h" #import "MTRDevice_Internal.h" #import "MTRError_Internal.h" @@ -65,19 +65,19 @@ #import -#define MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ - MTR_SIMPLE_REMOTE_XPC_GETTER([(MTRDeviceController_XPC *)[self deviceController] xpcConnection], NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController \ - : [[self deviceController] uniqueIdentifier] nodeID \ +#define MTR_DEVICE_SIMPLE_REMOTE_XPC_GETTER(NAME, TYPE, DEFAULT_VALUE, GETTER_NAME) \ + MTR_SIMPLE_REMOTE_XPC_GETTER([(MTRDeviceController_XPC *) [self deviceController] xpcConnection], NAME, TYPE, DEFAULT_VALUE, GETTER_NAME, deviceController \ + : [[self deviceController] uniqueIdentifier] nodeID \ : [self nodeID]) -#define MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS) \ - MTR_COMPLEX_REMOTE_XPC_GETTER([(MTRDeviceController_XPC *)[self deviceController] xpcConnection], SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, deviceController \ - : [[self deviceController] uniqueIdentifier] nodeID \ +#define MTR_DEVICE_COMPLEX_REMOTE_XPC_GETTER(SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS) \ + MTR_COMPLEX_REMOTE_XPC_GETTER([(MTRDeviceController_XPC *) [self deviceController] xpcConnection], SIGNATURE, TYPE, DEFAULT_VALUE, ADDITIONAL_ARGUMENTS, deviceController \ + : [[self deviceController] uniqueIdentifier] nodeID \ : [self nodeID]) -#define MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ - MTR_SIMPLE_REMOTE_XPC_COMMAND([(MTRDeviceController_XPC *)[self deviceController] xpcConnection], METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController \ - : [[self deviceController] uniqueIdentifier] nodeID \ +#define MTR_DEVICE_SIMPLE_REMOTE_XPC_COMMAND(METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS) \ + MTR_SIMPLE_REMOTE_XPC_COMMAND([(MTRDeviceController_XPC *) [self deviceController] xpcConnection], METHOD_SIGNATURE, ADDITIONAL_ARGUMENTS, deviceController \ + : [[self deviceController] uniqueIdentifier] nodeID \ : [self nodeID]) @implementation MTRDevice_XPC @@ -165,7 +165,7 @@ - (void)invokeCommandWithEndpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue completion:(MTRDeviceResponseHandler)completion { - NSXPCConnection * xpcConnection = [(MTRDeviceController_XPC *)[self deviceController] xpcConnection]; + NSXPCConnection * xpcConnection = [(MTRDeviceController_XPC *) [self deviceController] xpcConnection]; [[xpcConnection synchronousRemoteObjectProxyWithErrorHandler:^(NSError * _Nonnull error) { MTR_LOG_ERROR("Error: %@", error); From d083e00ccaf1573abb0c9229d80d4f16e07568dc Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Sat, 17 Aug 2024 14:42:13 -0700 Subject: [PATCH 75/75] true => YES --- src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm index 1296aa4c3f8899..5178873ec27f1e 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCParameters.mm @@ -20,7 +20,7 @@ @implementation MTRDeviceControllerXPCParameters + (BOOL)supportsSecureCoding { - return true; + return YES; } @end @@ -29,7 +29,7 @@ @implementation MTRDeviceControllerMachServiceXPCParameters + (BOOL)supportsSecureCoding { - return true; + return YES; } @end