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