hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2015 The WebRTC project authors. All Rights Reserved. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license |
| 5 | * that can be found in the LICENSE file in the root of the source |
| 6 | * tree. An additional intellectual property rights grant can be found |
| 7 | * in the file PATENTS. All contributing project authors may |
| 8 | * be found in the AUTHORS file in the root of the source tree. |
| 9 | */ |
| 10 | |
tkchin | 9eeb624 | 2016-04-27 01:54:20 -0700 | [diff] [blame] | 11 | #import "RTCIceServer+Private.h" |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 12 | |
tkchin | 9eeb624 | 2016-04-27 01:54:20 -0700 | [diff] [blame] | 13 | #import "NSString+StdString.h" |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 14 | |
| 15 | @implementation RTCIceServer |
| 16 | |
| 17 | @synthesize urlStrings = _urlStrings; |
| 18 | @synthesize username = _username; |
| 19 | @synthesize credential = _credential; |
hnsl | 6741516 | 2017-02-02 13:04:27 -0800 | [diff] [blame] | 20 | @synthesize tlsCertPolicy = _tlsCertPolicy; |
Emad Omara | dab1d2d | 2017-06-16 15:43:11 -0700 | [diff] [blame] | 21 | @synthesize hostname = _hostname; |
Diogo Real | 1dca9d5 | 2017-08-29 12:18:32 -0700 | [diff] [blame] | 22 | @synthesize tlsAlpnProtocols = _tlsAlpnProtocols; |
Diogo Real | 7bd1f1b | 2017-09-08 12:50:41 -0700 | [diff] [blame] | 23 | @synthesize tlsEllipticCurves = _tlsEllipticCurves; |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 24 | |
Jon Hjelle | 32e0c01 | 2016-03-08 16:04:46 -0800 | [diff] [blame] | 25 | - (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings { |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 26 | return [self initWithURLStrings:urlStrings |
| 27 | username:nil |
| 28 | credential:nil]; |
| 29 | } |
| 30 | |
Jon Hjelle | 32e0c01 | 2016-03-08 16:04:46 -0800 | [diff] [blame] | 31 | - (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 32 | username:(NSString *)username |
| 33 | credential:(NSString *)credential { |
hnsl | 6741516 | 2017-02-02 13:04:27 -0800 | [diff] [blame] | 34 | return [self initWithURLStrings:urlStrings |
| 35 | username:username |
| 36 | credential:credential |
| 37 | tlsCertPolicy:RTCTlsCertPolicySecure]; |
| 38 | } |
| 39 | |
| 40 | - (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings |
| 41 | username:(NSString *)username |
| 42 | credential:(NSString *)credential |
| 43 | tlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy { |
Emad Omara | dab1d2d | 2017-06-16 15:43:11 -0700 | [diff] [blame] | 44 | return [self initWithURLStrings:urlStrings |
| 45 | username:username |
| 46 | credential:credential |
Emad Omara | cadd306 | 2017-06-19 15:19:26 -0700 | [diff] [blame] | 47 | tlsCertPolicy:tlsCertPolicy |
Emad Omara | dab1d2d | 2017-06-16 15:43:11 -0700 | [diff] [blame] | 48 | hostname:nil]; |
| 49 | } |
| 50 | |
| 51 | - (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings |
| 52 | username:(NSString *)username |
| 53 | credential:(NSString *)credential |
| 54 | tlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy |
| 55 | hostname:(NSString *)hostname { |
Diogo Real | 1dca9d5 | 2017-08-29 12:18:32 -0700 | [diff] [blame] | 56 | return [self initWithURLStrings:urlStrings |
| 57 | username:username |
| 58 | credential:credential |
| 59 | tlsCertPolicy:tlsCertPolicy |
| 60 | hostname:hostname |
Diogo Real | 7bd1f1b | 2017-09-08 12:50:41 -0700 | [diff] [blame] | 61 | tlsAlpnProtocols:[NSArray array]]; |
Diogo Real | 1dca9d5 | 2017-08-29 12:18:32 -0700 | [diff] [blame] | 62 | } |
| 63 | |
| 64 | - (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings |
| 65 | username:(NSString *)username |
| 66 | credential:(NSString *)credential |
| 67 | tlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy |
| 68 | hostname:(NSString *)hostname |
| 69 | tlsAlpnProtocols:(NSArray<NSString *> *)tlsAlpnProtocols { |
Diogo Real | 7bd1f1b | 2017-09-08 12:50:41 -0700 | [diff] [blame] | 70 | return [self initWithURLStrings:urlStrings |
| 71 | username:username |
| 72 | credential:credential |
| 73 | tlsCertPolicy:tlsCertPolicy |
| 74 | hostname:hostname |
| 75 | tlsAlpnProtocols:tlsAlpnProtocols |
| 76 | tlsEllipticCurves:[NSArray array]]; |
| 77 | } |
| 78 | |
| 79 | - (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings |
| 80 | username:(NSString *)username |
| 81 | credential:(NSString *)credential |
| 82 | tlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy |
| 83 | hostname:(NSString *)hostname |
| 84 | tlsAlpnProtocols:(NSArray<NSString *> *)tlsAlpnProtocols |
| 85 | tlsEllipticCurves:(NSArray<NSString *> *)tlsEllipticCurves { |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 86 | NSParameterAssert(urlStrings.count); |
| 87 | if (self = [super init]) { |
| 88 | _urlStrings = [[NSArray alloc] initWithArray:urlStrings copyItems:YES]; |
| 89 | _username = [username copy]; |
| 90 | _credential = [credential copy]; |
hnsl | 6741516 | 2017-02-02 13:04:27 -0800 | [diff] [blame] | 91 | _tlsCertPolicy = tlsCertPolicy; |
Emad Omara | dab1d2d | 2017-06-16 15:43:11 -0700 | [diff] [blame] | 92 | _hostname = [hostname copy]; |
Diogo Real | 1dca9d5 | 2017-08-29 12:18:32 -0700 | [diff] [blame] | 93 | _tlsAlpnProtocols = [[NSArray alloc] initWithArray:tlsAlpnProtocols copyItems:YES]; |
Diogo Real | 7bd1f1b | 2017-09-08 12:50:41 -0700 | [diff] [blame] | 94 | _tlsEllipticCurves = [[NSArray alloc] initWithArray:tlsEllipticCurves copyItems:YES]; |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 95 | } |
| 96 | return self; |
| 97 | } |
| 98 | |
| 99 | - (NSString *)description { |
Diogo Real | 7bd1f1b | 2017-09-08 12:50:41 -0700 | [diff] [blame] | 100 | return [NSString stringWithFormat:@"RTCIceServer:\n%@\n%@\n%@\n%@\n%@\n%@\n%@", |
Emad Omara | dab1d2d | 2017-06-16 15:43:11 -0700 | [diff] [blame] | 101 | _urlStrings, |
| 102 | _username, |
| 103 | _credential, |
| 104 | [self stringForTlsCertPolicy:_tlsCertPolicy], |
Diogo Real | 1dca9d5 | 2017-08-29 12:18:32 -0700 | [diff] [blame] | 105 | _hostname, |
Diogo Real | 7bd1f1b | 2017-09-08 12:50:41 -0700 | [diff] [blame] | 106 | _tlsAlpnProtocols, |
| 107 | _tlsEllipticCurves]; |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 108 | } |
| 109 | |
| 110 | #pragma mark - Private |
| 111 | |
hnsl | 6741516 | 2017-02-02 13:04:27 -0800 | [diff] [blame] | 112 | - (NSString *)stringForTlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy { |
| 113 | switch (tlsCertPolicy) { |
| 114 | case RTCTlsCertPolicySecure: |
| 115 | return @"RTCTlsCertPolicySecure"; |
| 116 | case RTCTlsCertPolicyInsecureNoCheck: |
| 117 | return @"RTCTlsCertPolicyInsecureNoCheck"; |
| 118 | } |
| 119 | } |
| 120 | |
hjon | a2f7798 | 2016-03-04 07:09:09 -0800 | [diff] [blame] | 121 | - (webrtc::PeerConnectionInterface::IceServer)nativeServer { |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 122 | __block webrtc::PeerConnectionInterface::IceServer iceServer; |
| 123 | |
| 124 | iceServer.username = [NSString stdStringForString:_username]; |
| 125 | iceServer.password = [NSString stdStringForString:_credential]; |
Emad Omara | dab1d2d | 2017-06-16 15:43:11 -0700 | [diff] [blame] | 126 | iceServer.hostname = [NSString stdStringForString:_hostname]; |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 127 | |
Diogo Real | 1dca9d5 | 2017-08-29 12:18:32 -0700 | [diff] [blame] | 128 | [_tlsAlpnProtocols enumerateObjectsUsingBlock:^(NSString *proto, NSUInteger idx, BOOL *stop) { |
| 129 | iceServer.tls_alpn_protocols.push_back(proto.stdString); |
| 130 | }]; |
| 131 | |
Diogo Real | 7bd1f1b | 2017-09-08 12:50:41 -0700 | [diff] [blame] | 132 | [_tlsEllipticCurves enumerateObjectsUsingBlock:^(NSString *curve, NSUInteger idx, BOOL *stop) { |
| 133 | iceServer.tls_elliptic_curves.push_back(curve.stdString); |
| 134 | }]; |
| 135 | |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 136 | [_urlStrings enumerateObjectsUsingBlock:^(NSString *url, |
| 137 | NSUInteger idx, |
| 138 | BOOL *stop) { |
| 139 | iceServer.urls.push_back(url.stdString); |
| 140 | }]; |
hnsl | 6741516 | 2017-02-02 13:04:27 -0800 | [diff] [blame] | 141 | |
| 142 | switch (_tlsCertPolicy) { |
| 143 | case RTCTlsCertPolicySecure: |
| 144 | iceServer.tls_cert_policy = |
| 145 | webrtc::PeerConnectionInterface::kTlsCertPolicySecure; |
| 146 | break; |
| 147 | case RTCTlsCertPolicyInsecureNoCheck: |
| 148 | iceServer.tls_cert_policy = |
| 149 | webrtc::PeerConnectionInterface::kTlsCertPolicyInsecureNoCheck; |
| 150 | break; |
| 151 | } |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 152 | return iceServer; |
| 153 | } |
| 154 | |
hjon | 6d49a8e | 2016-01-26 13:06:42 -0800 | [diff] [blame] | 155 | - (instancetype)initWithNativeServer: |
| 156 | (webrtc::PeerConnectionInterface::IceServer)nativeServer { |
| 157 | NSMutableArray *urls = |
| 158 | [NSMutableArray arrayWithCapacity:nativeServer.urls.size()]; |
| 159 | for (auto const &url : nativeServer.urls) { |
| 160 | [urls addObject:[NSString stringForStdString:url]]; |
| 161 | } |
| 162 | NSString *username = [NSString stringForStdString:nativeServer.username]; |
| 163 | NSString *credential = [NSString stringForStdString:nativeServer.password]; |
Emad Omara | dab1d2d | 2017-06-16 15:43:11 -0700 | [diff] [blame] | 164 | NSString *hostname = [NSString stringForStdString:nativeServer.hostname]; |
Diogo Real | 1dca9d5 | 2017-08-29 12:18:32 -0700 | [diff] [blame] | 165 | NSMutableArray *tlsAlpnProtocols = |
| 166 | [NSMutableArray arrayWithCapacity:nativeServer.tls_alpn_protocols.size()]; |
| 167 | for (auto const &proto : nativeServer.tls_alpn_protocols) { |
| 168 | [tlsAlpnProtocols addObject:[NSString stringForStdString:proto]]; |
| 169 | } |
Diogo Real | 7bd1f1b | 2017-09-08 12:50:41 -0700 | [diff] [blame] | 170 | NSMutableArray *tlsEllipticCurves = |
| 171 | [NSMutableArray arrayWithCapacity:nativeServer.tls_elliptic_curves.size()]; |
| 172 | for (auto const &curve : nativeServer.tls_elliptic_curves) { |
| 173 | [tlsEllipticCurves addObject:[NSString stringForStdString:curve]]; |
| 174 | } |
hnsl | 6741516 | 2017-02-02 13:04:27 -0800 | [diff] [blame] | 175 | RTCTlsCertPolicy tlsCertPolicy; |
| 176 | |
| 177 | switch (nativeServer.tls_cert_policy) { |
| 178 | case webrtc::PeerConnectionInterface::kTlsCertPolicySecure: |
| 179 | tlsCertPolicy = RTCTlsCertPolicySecure; |
| 180 | break; |
| 181 | case webrtc::PeerConnectionInterface::kTlsCertPolicyInsecureNoCheck: |
| 182 | tlsCertPolicy = RTCTlsCertPolicyInsecureNoCheck; |
| 183 | break; |
| 184 | } |
| 185 | |
hjon | 6d49a8e | 2016-01-26 13:06:42 -0800 | [diff] [blame] | 186 | self = [self initWithURLStrings:urls |
| 187 | username:username |
hnsl | 6741516 | 2017-02-02 13:04:27 -0800 | [diff] [blame] | 188 | credential:credential |
Emad Omara | dab1d2d | 2017-06-16 15:43:11 -0700 | [diff] [blame] | 189 | tlsCertPolicy:tlsCertPolicy |
Diogo Real | 1dca9d5 | 2017-08-29 12:18:32 -0700 | [diff] [blame] | 190 | hostname:hostname |
Diogo Real | 7bd1f1b | 2017-09-08 12:50:41 -0700 | [diff] [blame] | 191 | tlsAlpnProtocols:tlsAlpnProtocols |
| 192 | tlsEllipticCurves:tlsEllipticCurves]; |
hjon | 6d49a8e | 2016-01-26 13:06:42 -0800 | [diff] [blame] | 193 | return self; |
| 194 | } |
| 195 | |
hjon | aa32c3e | 2015-12-13 19:58:11 -0800 | [diff] [blame] | 196 | @end |