From 30180323ee5def141a29351497ac576e32e936fb Mon Sep 17 00:00:00 2001 From: Vivien Nicolas Date: Thu, 29 Apr 2021 23:32:30 +0200 Subject: [PATCH] [Darwin] Add CHIPDeviceController::PairDevice using an address/port in addition to the discriminator and the setupPINCode (#6369) --- .../Framework/CHIP/CHIPDeviceController.h | 6 ++++ .../Framework/CHIP/CHIPDeviceController.mm | 28 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/darwin/Framework/CHIP/CHIPDeviceController.h b/src/darwin/Framework/CHIP/CHIPDeviceController.h index 4079f169965efd..eef2f00ea74e04 100644 --- a/src/darwin/Framework/CHIP/CHIPDeviceController.h +++ b/src/darwin/Framework/CHIP/CHIPDeviceController.h @@ -35,6 +35,12 @@ NS_ASSUME_NONNULL_BEGIN discriminator:(uint16_t)discriminator setupPINCode:(uint32_t)setupPINCode error:(NSError * __autoreleasing *)error; +- (BOOL)pairDevice:(uint64_t)deviceID + address:(NSString *)address + port:(uint16_t)port + discriminator:(uint16_t)discriminator + setupPINCode:(uint32_t)setupPINCode + error:(NSError * __autoreleasing *)error; - (BOOL)pairDeviceWithoutSecurity:(uint64_t)deviceID address:(NSString *)address port:(uint16_t)port diff --git a/src/darwin/Framework/CHIP/CHIPDeviceController.mm b/src/darwin/Framework/CHIP/CHIPDeviceController.mm index 17530623e881dc..6140123db1a8c2 100644 --- a/src/darwin/Framework/CHIP/CHIPDeviceController.mm +++ b/src/darwin/Framework/CHIP/CHIPDeviceController.mm @@ -214,6 +214,34 @@ - (BOOL)pairDevice:(uint64_t)deviceID return success; } +- (BOOL)pairDevice:(uint64_t)deviceID + address:(NSString *)address + port:(uint16_t)port + discriminator:(uint16_t)discriminator + setupPINCode:(uint32_t)setupPINCode + error:(NSError * __autoreleasing *)error +{ + __block BOOL success; + dispatch_sync(_chipWorkQueue, ^{ + chip::Inet::IPAddress addr; + chip::Inet::IPAddress::FromString([address UTF8String], addr); + chip::Transport::PeerAddress peerAddress = chip::Transport::PeerAddress::UDP(addr, port); + + chip::RendezvousParameters params = chip::RendezvousParameters() + .SetSetupPINCode(setupPINCode) + .SetDiscriminator(discriminator) + .SetPeerAddress(peerAddress); + CHIP_ERROR errorCode = CHIP_ERROR_INCORRECT_STATE; + + if ([self _isRunning]) { + errorCode = self.cppCommissioner->PairDevice(deviceID, params); + } + success = ![self checkForError:errorCode logMsg:kErrorPairDevice error:error]; + }); + + return success; +} + - (BOOL)pairDeviceWithoutSecurity:(uint64_t)deviceID address:(NSString *)address port:(uint16_t)port