xref: /aosp_15_r20/external/webrtc/sdk/objc/api/peerconnection/RTCIceServer.mm (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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