Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a config define for Darwin per-controller storage. #29037

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/darwin.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@ jobs:
# -enableUndefinedBehaviorSanitizer instruments the code in Matter.framework,
# but to instrument the code in the underlying libCHIP we need to pass CHIP_IS_UBSAN=YES
TEST_RUNNER_ASAN_OPTIONS=__CURRENT_VALUE__:detect_stack_use_after_return=1 xcodebuild test -target "Matter" -scheme "Matter Framework Tests" -sdk macosx -enableAddressSanitizer YES -enableUndefinedBehaviorSanitizer YES OTHER_CFLAGS='${inherited} -Werror -Wconversion -Wno-unguarded-availability-new' CHIP_IS_UBSAN=YES CHIP_IS_BLE=NO > >(tee /tmp/darwin/framework-tests/darwin-tests-asan.log) 2> >(tee /tmp/darwin/framework-tests/darwin-tests-asan-err.log >&2)
# And the same thing, but with MTR_PER_CONTROLLER_STORAGE_ENABLED turned on.
TEST_RUNNER_ASAN_OPTIONS=__CURRENT_VALUE__:detect_stack_use_after_return=1 xcodebuild test -target "Matter" -scheme "Matter Framework Tests" -sdk macosx -enableAddressSanitizer YES -enableUndefinedBehaviorSanitizer YES OTHER_CFLAGS='${inherited} -Werror -Wconversion -Wno-unguarded-availability-new' CHIP_IS_UBSAN=YES CHIP_IS_BLE=NO GCC_PREPROCESSOR_DEFINITIONS='${inherited} MTR_PER_CONTROLLER_STORAGE_ENABLED=1' > >(tee /tmp/darwin/framework-tests/darwin-tests-asan-provisional.log) 2> >(tee /tmp/darwin/framework-tests/darwin-tests-asan-provisional-err.log >&2)
# -enableThreadSanitizer instruments the code in Matter.framework,
# but to instrument the code in the underlying libCHIP we need to pass CHIP_IS_TSAN=YES
xcodebuild test -target "Matter" -scheme "Matter Framework Tests" -sdk macosx -enableThreadSanitizer YES OTHER_CFLAGS='${inherited} -Werror -Wconversion -Wno-unguarded-availability-new' CHIP_IS_TSAN=YES CHIP_IS_BLE=NO > >(tee /tmp/darwin/framework-tests/darwin-tests-tsan.log) 2> >(tee /tmp/darwin/framework-tests/darwin-tests-tsan-err.log >&2)
Expand Down
10 changes: 9 additions & 1 deletion src/darwin/Framework/CHIP/MTRDefines.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,20 @@
#define MTR_NEWLY_AVAILABLE
#endif

#if defined(MTR_ENABLE_PROVISIONAL) && MTR_ENABLE_PROVISIONAL
#if !defined(MTR_ENABLE_PROVISIONAL)
#define MTR_ENABLE_PROVISIONAL 0
#endif

#if MTR_ENABLE_PROVISIONAL
#define MTR_PROVISIONALLY_AVAILABLE MTR_NEWLY_AVAILABLE
#else
#define MTR_PROVISIONALLY_AVAILABLE NS_UNAVAILABLE MTR_HIDDEN
#endif

#ifndef MTR_PER_CONTROLLER_STORAGE_ENABLED
#define MTR_PER_CONTROLLER_STORAGE_ENABLED 0
#endif

#pragma mark - Types

typedef NSData * MTRTLVBytes;
Expand Down
2 changes: 2 additions & 0 deletions src/darwin/Framework/CHIP/MTRDeviceController.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,12 @@ typedef void (^MTRDeviceConnectionCallback)(MTRBaseDevice * _Nullable device, NS
*/
@property (readonly, nonatomic, getter=isRunning) BOOL running;

#if MTR_PER_CONTROLLER_STORAGE_ENABLED
/**
* The ID assigned to this controller at creation time.
*/
@property (readonly, nonatomic) NSUUID * uniqueIdentifier MTR_NEWLY_AVAILABLE;
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED

/**
* Return the Node ID assigned to the controller. Will return nil if the
Expand Down
4 changes: 4 additions & 0 deletions src/darwin/Framework/CHIP/MTRDeviceControllerDataStore.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@
#import <Foundation/Foundation.h>
#import <Matter/MTRDefines.h>
#import <Matter/MTRDeviceController.h>
#if MTR_PER_CONTROLLER_STORAGE_ENABLED
#import <Matter/MTRDeviceControllerStorageDelegate.h>
#else
#import "MTRDeviceControllerStorageDelegate_Wrapper.h"
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED

#include <lib/core/CHIPError.h>

Expand Down
10 changes: 10 additions & 0 deletions src/darwin/Framework/CHIP/MTRDeviceControllerFactory.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,12 @@

#import <Foundation/Foundation.h>
#import <Matter/MTRCertificates.h>
#import <Matter/MTRDefines.h>
#if MTR_PER_CONTROLLER_STORAGE_ENABLED
#import <Matter/MTRDeviceControllerStartupParameters.h>
#else
@class MTRDeviceControllerStartupParameters;
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED

NS_ASSUME_NONNULL_BEGIN

Expand Down Expand Up @@ -93,12 +98,15 @@ API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4))
*/
- (instancetype)initWithStorage:(id<MTRStorage>)storage;

#if MTR_PER_CONTROLLER_STORAGE_ENABLED
/*
* Initialize the device controller factory without storage. In this mode,
* device controllers will need to have per-controller storage provided to allow
* storing controller-specific information.
*/
- (instancetype)init MTR_NEWLY_AVAILABLE;
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED

@end

API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4))
Expand Down Expand Up @@ -180,6 +188,7 @@ API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4))
- (MTRDeviceController * _Nullable)createControllerOnNewFabric:(MTRDeviceControllerStartupParams *)startupParams
error:(NSError * __autoreleasing *)error;

#if MTR_PER_CONTROLLER_STORAGE_ENABLED
/**
* Create an MTRDeviceController. Returns nil on failure.
*
Expand All @@ -191,6 +200,7 @@ API_AVAILABLE(ios(16.4), macos(13.3), watchos(9.4), tvos(16.4))
*/
- (MTRDeviceController * _Nullable)createController:(MTRDeviceControllerStartupParameters *)startupParameters
error:(NSError * __autoreleasing *)error MTR_NEWLY_AVAILABLE;
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED

@end

Expand Down
3 changes: 3 additions & 0 deletions src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@
#import "MTRPersistentStorageDelegateBridge.h"
#import "MTRSessionResumptionStorageBridge.h"
#import "NSDataSpanConversion.h"
#if !MTR_PER_CONTROLLER_STORAGE_ENABLED
#import "MTRDeviceControllerStartupParameters_Wrapper.h"
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED

#import <os/lock.h>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,22 @@
*/

#import <Foundation/Foundation.h>

#import <Matter/MTRDefines.h>

#if defined(MTR_INTERNAL_INCLUDE) && defined(MTR_INCLUDED_FROM_UMBRELLA_HEADER)
#error Internal includes should not happen from the umbrella header
#endif

#if MTR_PER_CONTROLLER_STORAGE_ENABLED || defined(MTR_INTERNAL_INCLUDE)

#import <Matter/MTRDeviceControllerStorageDelegate.h>
#import <Matter/MTROTAProviderDelegate.h>

NS_ASSUME_NONNULL_BEGIN

#if !MTR_PER_CONTROLLER_STORAGE_ENABLED
MTR_HIDDEN
#endif
MTR_NEWLY_AVAILABLE
@interface MTRDeviceControllerStartupParameters : NSObject

Expand Down Expand Up @@ -68,6 +77,9 @@ MTR_NEWLY_AVAILABLE

@end

#if !MTR_PER_CONTROLLER_STORAGE_ENABLED
MTR_HIDDEN
#endif
MTR_NEWLY_AVAILABLE
@interface MTRDeviceControllerExternalCertificateStartupParameters : MTRDeviceControllerStartupParameters

Expand Down Expand Up @@ -119,3 +131,5 @@ MTR_NEWLY_AVAILABLE
@end

NS_ASSUME_NONNULL_END

#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED || defined(MTR_INTERNAL_INCLUDE)
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* 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.
*/

#include <Matter/MTRDefines.h>

#if MTR_PER_CONTROLLER_STORAGE_ENABLED
#error Should be including Matter/MTRDeviceControllerStartupParameters.h
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED

#define MTR_INTERNAL_INCLUDE
#import <Matter/MTRDeviceControllerStartupParameters.h>
#undef MTR_INTERNAL_INCLUDE
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@
#import "MTRP256KeypairBridge.h"
#import "NSDataSpanConversion.h"

#if MTR_PER_CONTROLLER_STORAGE_ENABLED
#import <Matter/MTRDeviceControllerStorageDelegate.h>
#else
#import "MTRDeviceControllerStorageDelegate_Wrapper.h"
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED

#include <controller/OperationalCredentialsDelegate.h>
#include <credentials/CHIPCert.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
#import <Foundation/Foundation.h>
#import <Matter/MTRDefines.h>
#import <Matter/MTRDeviceController.h>
#if MTR_PER_CONTROLLER_STORAGE_ENABLED
#import <Matter/MTRDeviceControllerStartupParameters.h>
#else
#import "MTRDeviceControllerStartupParameters_Wrapper.h"
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED

#include <crypto/CHIPCryptoPAL.h>
#include <lib/core/DataModelTypes.h>
Expand Down
16 changes: 15 additions & 1 deletion src/darwin/Framework/CHIP/MTRDeviceControllerStorageDelegate.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,15 @@
*/

#import <Foundation/Foundation.h>
#import <Matter/MTRDefines.h>
#import <Matter/MTRDeviceController.h>

#if defined(MTR_INTERNAL_INCLUDE) && defined(MTR_INCLUDED_FROM_UMBRELLA_HEADER)
#error Internal includes should not happen from the umbrella header
#endif

#if MTR_PER_CONTROLLER_STORAGE_ENABLED || defined(MTR_INTERNAL_INCLUDE)

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSUInteger, MTRStorageSecurityLevel) {
Expand Down Expand Up @@ -105,6 +112,13 @@ MTR_NEWLY_AVAILABLE
@end

// TODO: FIXME: Is this a sane place to put this API?
MTR_EXTERN MTR_NEWLY_AVAILABLE NSSet<Class> * MTRDeviceControllerStorageClasses(void);
#if MTR_PER_CONTROLLER_STORAGE_ENABLED
MTR_EXTERN
#else
MTR_HIDDEN
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED
MTR_NEWLY_AVAILABLE NSSet<Class> * MTRDeviceControllerStorageClasses(void);

NS_ASSUME_NONNULL_END

#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED || defined(MTR_INTERNAL_INCLUDE)
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* 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.
*/

#include <Matter/MTRDefines.h>

#if MTR_PER_CONTROLLER_STORAGE_ENABLED
#error Should be including Matter/MTRDeviceControllerStorageDelegate.h
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED

#define MTR_INTERNAL_INCLUDE
#import <Matter/MTRDeviceControllerStorageDelegate.h>
#undef MTR_INTERNAL_INCLUDE
11 changes: 11 additions & 0 deletions src/darwin/Framework/CHIP/MTRDeviceController_Internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,11 @@
#import "MTRDeviceControllerDataStore.h"

#import <Matter/MTRDeviceControllerStartupParams.h>
#if MTR_PER_CONTROLLER_STORAGE_ENABLED
#import <Matter/MTRDeviceControllerStorageDelegate.h>
#else
#import "MTRDeviceControllerStorageDelegate_Wrapper.h"
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED
#import <Matter/MTROTAProviderDelegate.h>

@class MTRDeviceControllerStartupParamsInternal;
Expand All @@ -51,6 +55,13 @@ NS_ASSUME_NONNULL_BEGIN

@interface MTRDeviceController ()

#if !MTR_PER_CONTROLLER_STORAGE_ENABLED
/**
* The ID assigned to this controller at creation time.
*/
@property (readonly, nonatomic) NSUUID * uniqueIdentifier MTR_NEWLY_AVAILABLE;
#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED

#pragma mark - MTRDeviceControllerFactory methods

/**
Expand Down
4 changes: 4 additions & 0 deletions src/darwin/Framework/CHIP/Matter.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

#import <Foundation/Foundation.h>

#define MTR_INCLUDED_FROM_UMBRELLA_HEADER

#import <Matter/MTRAsyncCallbackWorkQueue.h>
#import <Matter/MTRBackwardsCompatShims.h>
#import <Matter/MTRBaseClusters.h>
Expand Down Expand Up @@ -57,3 +59,5 @@
#import <Matter/MTRStorage.h>
#import <Matter/MTRStructsObjc.h>
#import <Matter/MTRThreadOperationalDataset.h>

#undef MTR_INCLUDED_FROM_UMBRELLA_HEADER
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
#import "MTRTestKeys.h"
#import "MTRTestPerControllerStorage.h"

#if MTR_PER_CONTROLLER_STORAGE_ENABLED

static const uint16_t kTestVendorId = 0xFFF1u;
static const uint16_t kTimeoutInSeconds = 3;

Expand Down Expand Up @@ -295,3 +297,5 @@ - (void)test001_CheckAdvertisingAsExpected
}

@end

#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
#import "MTRTestPerControllerStorage.h"
#import "MTRTestResetCommissioneeHelper.h"

#if MTR_PER_CONTROLLER_STORAGE_ENABLED

static const uint16_t kPairingTimeoutInSeconds = 10;
static const uint16_t kTimeoutInSeconds = 3;
static NSString * kOnboardingPayload = @"MT:-24J0AFN00KA0648G00";
Expand Down Expand Up @@ -1055,3 +1057,5 @@ - (void)test007_TestMultipleControllers
}

@end

#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
#import <Foundation/Foundation.h>
#import <Matter/Matter.h>

#if MTR_PER_CONTROLLER_STORAGE_ENABLED

NS_ASSUME_NONNULL_BEGIN

@interface MTRTestPerControllerStorage : NSObject <MTRDeviceControllerStorageDelegate>
Expand All @@ -41,3 +43,5 @@ NS_ASSUME_NONNULL_BEGIN
@end

NS_ASSUME_NONNULL_END

#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

#import "MTRTestPerControllerStorage.h"

#if MTR_PER_CONTROLLER_STORAGE_ENABLED

@interface MTRTestPerControllerStorage ()
@property (nonatomic, readonly) NSMutableDictionary<NSString *, NSData *> * storage;
@end
Expand Down Expand Up @@ -83,3 +85,5 @@ - (BOOL)controller:(MTRDeviceController *)controller
}

@end

#endif // MTR_PER_CONTROLLER_STORAGE_ENABLED