3 * Copyright (c) 2020 Project CHIP Authors
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 #import "CHIPDevicePairingDelegateBridge.h"
21 CHIPDevicePairingDelegateBridge::CHIPDevicePairingDelegateBridge(void)
26 CHIPDevicePairingDelegateBridge::~CHIPDevicePairingDelegateBridge(void) {}
28 void CHIPDevicePairingDelegateBridge::setDelegate(id<CHIPDevicePairingDelegate> delegate, dispatch_queue_t queue)
30 if (delegate && queue) {
39 CHIPPairingStatus CHIPDevicePairingDelegateBridge::MapStatus(chip::RendezvousSessionDelegate::Status status)
41 CHIPPairingStatus rv = kUnknownStatus;
43 case chip::RendezvousSessionDelegate::Status::SecurePairingSuccess:
44 rv = kSecurePairingSuccess;
46 case chip::RendezvousSessionDelegate::Status::SecurePairingFailed:
47 rv = kSecurePairingFailed;
49 case chip::RendezvousSessionDelegate::Status::NetworkProvisioningSuccess:
50 rv = kNetworkProvisioningSuccess;
52 case chip::RendezvousSessionDelegate::Status::NetworkProvisioningFailed:
53 rv = kNetworkProvisioningFailed;
59 void CHIPDevicePairingDelegateBridge::OnStatusUpdate(chip::RendezvousSessionDelegate::Status status)
61 NSLog(@"DevicePairingDelegate status updated: %d", status);
63 id<CHIPDevicePairingDelegate> strongDelegate = mDelegate;
64 if ([strongDelegate respondsToSelector:@selector(onStatusUpdate:)]) {
65 if (strongDelegate && mQueue) {
66 CHIPPairingStatus pairingStatus = MapStatus(status);
67 dispatch_async(mQueue, ^{
68 [strongDelegate onStatusUpdate:pairingStatus];
74 void CHIPDevicePairingDelegateBridge::OnNetworkCredentialsRequested(chip::RendezvousDeviceCredentialsDelegate * callback)
76 NSLog(@"DevicePairingDelegate Requesting network credentials");
80 id<CHIPDevicePairingDelegate> strongDelegate = mDelegate;
81 if (strongDelegate && mQueue) {
82 dispatch_async(mQueue, ^{
83 [strongDelegate onNetworkCredentialsRequested:kNetworkCredentialTypeWiFi];
88 void CHIPDevicePairingDelegateBridge::SendWiFiCredentials(NSString * ssid, NSString * password)
91 mCallback->SendNetworkCredentials([ssid UTF8String], [password UTF8String]);
93 NSLog(@"Couldn't Send WiFi Credentials, are you sure pairing is in progress?");
97 void CHIPDevicePairingDelegateBridge::SendThreadCredentials(NSData * threadDataSet)
99 NSLog(@"Thread Provisioning is still a WIP, pairing will timeout...");
102 void CHIPDevicePairingDelegateBridge::OnOperationalCredentialsRequested(
103 const char * csr, size_t csr_length, chip::RendezvousDeviceCredentialsDelegate * callback)
105 NSLog(@"DevicePairingDelegate Requesting operational credentials");
108 void CHIPDevicePairingDelegateBridge::OnPairingComplete(CHIP_ERROR error)
110 NSLog(@"DevicePairingDelegate Pairing complete. Status %d", error);
112 id<CHIPDevicePairingDelegate> strongDelegate = mDelegate;
113 if ([strongDelegate respondsToSelector:@selector(onPairingComplete:)]) {
114 if (strongDelegate && mQueue) {
115 dispatch_async(mQueue, ^{
116 NSError * nsError = [CHIPError errorForCHIPErrorCode:error];
117 [strongDelegate onPairingComplete:nsError];
123 void CHIPDevicePairingDelegateBridge::OnPairingDeleted(CHIP_ERROR error)
125 NSLog(@"DevicePairingDelegate Pairing deleted. Status %d", error);
127 id<CHIPDevicePairingDelegate> strongDelegate = mDelegate;
128 if ([strongDelegate respondsToSelector:@selector(onPairingDeleted:)]) {
129 if (strongDelegate && mQueue) {
130 dispatch_async(mQueue, ^{
131 NSError * nsError = [CHIPError errorForCHIPErrorCode:error];
132 [strongDelegate onPairingDeleted:nsError];