blob: 2138e4c16a4fedd44ac009b42c7aa14c92dda3bf [file] [log] [blame]
hjonaa32c3e2015-12-13 19:58:11 -08001/*
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
tkchin9eeb6242016-04-27 01:54:20 -070011#import "RTCIceServer+Private.h"
hjonaa32c3e2015-12-13 19:58:11 -080012
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020013#import "helpers/NSString+StdString.h"
hjonaa32c3e2015-12-13 19:58:11 -080014
15@implementation RTCIceServer
16
17@synthesize urlStrings = _urlStrings;
18@synthesize username = _username;
19@synthesize credential = _credential;
hnsl67415162017-02-02 13:04:27 -080020@synthesize tlsCertPolicy = _tlsCertPolicy;
Emad Omaradab1d2d2017-06-16 15:43:11 -070021@synthesize hostname = _hostname;
Diogo Real1dca9d52017-08-29 12:18:32 -070022@synthesize tlsAlpnProtocols = _tlsAlpnProtocols;
Diogo Real7bd1f1b2017-09-08 12:50:41 -070023@synthesize tlsEllipticCurves = _tlsEllipticCurves;
hjonaa32c3e2015-12-13 19:58:11 -080024
Jon Hjelle32e0c012016-03-08 16:04:46 -080025- (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings {
hjonaa32c3e2015-12-13 19:58:11 -080026 return [self initWithURLStrings:urlStrings
27 username:nil
28 credential:nil];
29}
30
Jon Hjelle32e0c012016-03-08 16:04:46 -080031- (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings
hjonaa32c3e2015-12-13 19:58:11 -080032 username:(NSString *)username
33 credential:(NSString *)credential {
hnsl67415162017-02-02 13:04:27 -080034 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 Omaradab1d2d2017-06-16 15:43:11 -070044 return [self initWithURLStrings:urlStrings
45 username:username
46 credential:credential
Emad Omaracadd3062017-06-19 15:19:26 -070047 tlsCertPolicy:tlsCertPolicy
Emad Omaradab1d2d2017-06-16 15:43:11 -070048 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 Real1dca9d52017-08-29 12:18:32 -070056 return [self initWithURLStrings:urlStrings
57 username:username
58 credential:credential
59 tlsCertPolicy:tlsCertPolicy
60 hostname:hostname
Diogo Real7bd1f1b2017-09-08 12:50:41 -070061 tlsAlpnProtocols:[NSArray array]];
Diogo Real1dca9d52017-08-29 12:18:32 -070062}
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 Real7bd1f1b2017-09-08 12:50:41 -070070 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 {
hjonaa32c3e2015-12-13 19:58:11 -080086 NSParameterAssert(urlStrings.count);
87 if (self = [super init]) {
88 _urlStrings = [[NSArray alloc] initWithArray:urlStrings copyItems:YES];
89 _username = [username copy];
90 _credential = [credential copy];
hnsl67415162017-02-02 13:04:27 -080091 _tlsCertPolicy = tlsCertPolicy;
Emad Omaradab1d2d2017-06-16 15:43:11 -070092 _hostname = [hostname copy];
Diogo Real1dca9d52017-08-29 12:18:32 -070093 _tlsAlpnProtocols = [[NSArray alloc] initWithArray:tlsAlpnProtocols copyItems:YES];
Diogo Real7bd1f1b2017-09-08 12:50:41 -070094 _tlsEllipticCurves = [[NSArray alloc] initWithArray:tlsEllipticCurves copyItems:YES];
hjonaa32c3e2015-12-13 19:58:11 -080095 }
96 return self;
97}
98
99- (NSString *)description {
Diogo Real7bd1f1b2017-09-08 12:50:41 -0700100 return [NSString stringWithFormat:@"RTCIceServer:\n%@\n%@\n%@\n%@\n%@\n%@\n%@",
Emad Omaradab1d2d2017-06-16 15:43:11 -0700101 _urlStrings,
102 _username,
103 _credential,
104 [self stringForTlsCertPolicy:_tlsCertPolicy],
Diogo Real1dca9d52017-08-29 12:18:32 -0700105 _hostname,
Diogo Real7bd1f1b2017-09-08 12:50:41 -0700106 _tlsAlpnProtocols,
107 _tlsEllipticCurves];
hjonaa32c3e2015-12-13 19:58:11 -0800108}
109
110#pragma mark - Private
111
hnsl67415162017-02-02 13:04:27 -0800112- (NSString *)stringForTlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy {
113 switch (tlsCertPolicy) {
114 case RTCTlsCertPolicySecure:
115 return @"RTCTlsCertPolicySecure";
116 case RTCTlsCertPolicyInsecureNoCheck:
117 return @"RTCTlsCertPolicyInsecureNoCheck";
118 }
119}
120
hjona2f77982016-03-04 07:09:09 -0800121- (webrtc::PeerConnectionInterface::IceServer)nativeServer {
hjonaa32c3e2015-12-13 19:58:11 -0800122 __block webrtc::PeerConnectionInterface::IceServer iceServer;
123
124 iceServer.username = [NSString stdStringForString:_username];
125 iceServer.password = [NSString stdStringForString:_credential];
Emad Omaradab1d2d2017-06-16 15:43:11 -0700126 iceServer.hostname = [NSString stdStringForString:_hostname];
hjonaa32c3e2015-12-13 19:58:11 -0800127
Diogo Real1dca9d52017-08-29 12:18:32 -0700128 [_tlsAlpnProtocols enumerateObjectsUsingBlock:^(NSString *proto, NSUInteger idx, BOOL *stop) {
129 iceServer.tls_alpn_protocols.push_back(proto.stdString);
130 }];
131
Diogo Real7bd1f1b2017-09-08 12:50:41 -0700132 [_tlsEllipticCurves enumerateObjectsUsingBlock:^(NSString *curve, NSUInteger idx, BOOL *stop) {
133 iceServer.tls_elliptic_curves.push_back(curve.stdString);
134 }];
135
hjonaa32c3e2015-12-13 19:58:11 -0800136 [_urlStrings enumerateObjectsUsingBlock:^(NSString *url,
137 NSUInteger idx,
138 BOOL *stop) {
139 iceServer.urls.push_back(url.stdString);
140 }];
hnsl67415162017-02-02 13:04:27 -0800141
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 }
hjonaa32c3e2015-12-13 19:58:11 -0800152 return iceServer;
153}
154
hjon6d49a8e2016-01-26 13:06:42 -0800155- (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 Omaradab1d2d2017-06-16 15:43:11 -0700164 NSString *hostname = [NSString stringForStdString:nativeServer.hostname];
Diogo Real1dca9d52017-08-29 12:18:32 -0700165 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 Real7bd1f1b2017-09-08 12:50:41 -0700170 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 }
hnsl67415162017-02-02 13:04:27 -0800175 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
hjon6d49a8e2016-01-26 13:06:42 -0800186 self = [self initWithURLStrings:urls
187 username:username
hnsl67415162017-02-02 13:04:27 -0800188 credential:credential
Emad Omaradab1d2d2017-06-16 15:43:11 -0700189 tlsCertPolicy:tlsCertPolicy
Diogo Real1dca9d52017-08-29 12:18:32 -0700190 hostname:hostname
Diogo Real7bd1f1b2017-09-08 12:50:41 -0700191 tlsAlpnProtocols:tlsAlpnProtocols
192 tlsEllipticCurves:tlsEllipticCurves];
hjon6d49a8e2016-01-26 13:06:42 -0800193 return self;
194}
195
hjonaa32c3e2015-12-13 19:58:11 -0800196@end