xref: /aosp_15_r20/external/webrtc/sdk/objc/api/peerconnection/RTCConfiguration.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 "RTCConfiguration+Private.h"
12*d9f75844SAndroid Build Coastguard Worker
13*d9f75844SAndroid Build Coastguard Worker#include <memory>
14*d9f75844SAndroid Build Coastguard Worker
15*d9f75844SAndroid Build Coastguard Worker#import "RTCCertificate.h"
16*d9f75844SAndroid Build Coastguard Worker#import "RTCConfiguration+Native.h"
17*d9f75844SAndroid Build Coastguard Worker#import "RTCIceServer+Private.h"
18*d9f75844SAndroid Build Coastguard Worker#import "base/RTCLogging.h"
19*d9f75844SAndroid Build Coastguard Worker
20*d9f75844SAndroid Build Coastguard Worker#include "rtc_base/checks.h"
21*d9f75844SAndroid Build Coastguard Worker#include "rtc_base/rtc_certificate_generator.h"
22*d9f75844SAndroid Build Coastguard Worker#include "rtc_base/ssl_identity.h"
23*d9f75844SAndroid Build Coastguard Worker
24*d9f75844SAndroid Build Coastguard Worker@implementation RTC_OBJC_TYPE (RTCConfiguration)
25*d9f75844SAndroid Build Coastguard Worker
26*d9f75844SAndroid Build Coastguard Worker@synthesize enableDscp = _enableDscp;
27*d9f75844SAndroid Build Coastguard Worker@synthesize iceServers = _iceServers;
28*d9f75844SAndroid Build Coastguard Worker@synthesize certificate = _certificate;
29*d9f75844SAndroid Build Coastguard Worker@synthesize iceTransportPolicy = _iceTransportPolicy;
30*d9f75844SAndroid Build Coastguard Worker@synthesize bundlePolicy = _bundlePolicy;
31*d9f75844SAndroid Build Coastguard Worker@synthesize rtcpMuxPolicy = _rtcpMuxPolicy;
32*d9f75844SAndroid Build Coastguard Worker@synthesize tcpCandidatePolicy = _tcpCandidatePolicy;
33*d9f75844SAndroid Build Coastguard Worker@synthesize candidateNetworkPolicy = _candidateNetworkPolicy;
34*d9f75844SAndroid Build Coastguard Worker@synthesize continualGatheringPolicy = _continualGatheringPolicy;
35*d9f75844SAndroid Build Coastguard Worker@synthesize disableIPV6OnWiFi = _disableIPV6OnWiFi;
36*d9f75844SAndroid Build Coastguard Worker@synthesize maxIPv6Networks = _maxIPv6Networks;
37*d9f75844SAndroid Build Coastguard Worker@synthesize disableLinkLocalNetworks = _disableLinkLocalNetworks;
38*d9f75844SAndroid Build Coastguard Worker@synthesize audioJitterBufferMaxPackets = _audioJitterBufferMaxPackets;
39*d9f75844SAndroid Build Coastguard Worker@synthesize audioJitterBufferFastAccelerate = _audioJitterBufferFastAccelerate;
40*d9f75844SAndroid Build Coastguard Worker@synthesize iceConnectionReceivingTimeout = _iceConnectionReceivingTimeout;
41*d9f75844SAndroid Build Coastguard Worker@synthesize iceBackupCandidatePairPingInterval =
42*d9f75844SAndroid Build Coastguard Worker    _iceBackupCandidatePairPingInterval;
43*d9f75844SAndroid Build Coastguard Worker@synthesize keyType = _keyType;
44*d9f75844SAndroid Build Coastguard Worker@synthesize iceCandidatePoolSize = _iceCandidatePoolSize;
45*d9f75844SAndroid Build Coastguard Worker@synthesize shouldPruneTurnPorts = _shouldPruneTurnPorts;
46*d9f75844SAndroid Build Coastguard Worker@synthesize shouldPresumeWritableWhenFullyRelayed =
47*d9f75844SAndroid Build Coastguard Worker    _shouldPresumeWritableWhenFullyRelayed;
48*d9f75844SAndroid Build Coastguard Worker@synthesize shouldSurfaceIceCandidatesOnIceTransportTypeChanged =
49*d9f75844SAndroid Build Coastguard Worker    _shouldSurfaceIceCandidatesOnIceTransportTypeChanged;
50*d9f75844SAndroid Build Coastguard Worker@synthesize iceCheckMinInterval = _iceCheckMinInterval;
51*d9f75844SAndroid Build Coastguard Worker@synthesize sdpSemantics = _sdpSemantics;
52*d9f75844SAndroid Build Coastguard Worker@synthesize turnCustomizer = _turnCustomizer;
53*d9f75844SAndroid Build Coastguard Worker@synthesize activeResetSrtpParams = _activeResetSrtpParams;
54*d9f75844SAndroid Build Coastguard Worker@synthesize allowCodecSwitching = _allowCodecSwitching;
55*d9f75844SAndroid Build Coastguard Worker@synthesize cryptoOptions = _cryptoOptions;
56*d9f75844SAndroid Build Coastguard Worker@synthesize turnLoggingId = _turnLoggingId;
57*d9f75844SAndroid Build Coastguard Worker@synthesize rtcpAudioReportIntervalMs = _rtcpAudioReportIntervalMs;
58*d9f75844SAndroid Build Coastguard Worker@synthesize rtcpVideoReportIntervalMs = _rtcpVideoReportIntervalMs;
59*d9f75844SAndroid Build Coastguard Worker@synthesize enableImplicitRollback = _enableImplicitRollback;
60*d9f75844SAndroid Build Coastguard Worker@synthesize offerExtmapAllowMixed = _offerExtmapAllowMixed;
61*d9f75844SAndroid Build Coastguard Worker@synthesize iceCheckIntervalStrongConnectivity = _iceCheckIntervalStrongConnectivity;
62*d9f75844SAndroid Build Coastguard Worker@synthesize iceCheckIntervalWeakConnectivity = _iceCheckIntervalWeakConnectivity;
63*d9f75844SAndroid Build Coastguard Worker@synthesize iceUnwritableTimeout = _iceUnwritableTimeout;
64*d9f75844SAndroid Build Coastguard Worker@synthesize iceUnwritableMinChecks = _iceUnwritableMinChecks;
65*d9f75844SAndroid Build Coastguard Worker@synthesize iceInactiveTimeout = _iceInactiveTimeout;
66*d9f75844SAndroid Build Coastguard Worker
67*d9f75844SAndroid Build Coastguard Worker- (instancetype)init {
68*d9f75844SAndroid Build Coastguard Worker  // Copy defaults.
69*d9f75844SAndroid Build Coastguard Worker  webrtc::PeerConnectionInterface::RTCConfiguration config;
70*d9f75844SAndroid Build Coastguard Worker  config.sdp_semantics = webrtc::SdpSemantics::kUnifiedPlan;
71*d9f75844SAndroid Build Coastguard Worker  return [self initWithNativeConfiguration:config];
72*d9f75844SAndroid Build Coastguard Worker}
73*d9f75844SAndroid Build Coastguard Worker
74*d9f75844SAndroid Build Coastguard Worker- (instancetype)initWithNativeConfiguration:
75*d9f75844SAndroid Build Coastguard Worker    (const webrtc::PeerConnectionInterface::RTCConfiguration &)config {
76*d9f75844SAndroid Build Coastguard Worker  if (self = [super init]) {
77*d9f75844SAndroid Build Coastguard Worker    _enableDscp = config.dscp();
78*d9f75844SAndroid Build Coastguard Worker    NSMutableArray *iceServers = [NSMutableArray array];
79*d9f75844SAndroid Build Coastguard Worker    for (const webrtc::PeerConnectionInterface::IceServer& server : config.servers) {
80*d9f75844SAndroid Build Coastguard Worker      RTC_OBJC_TYPE(RTCIceServer) *iceServer =
81*d9f75844SAndroid Build Coastguard Worker          [[RTC_OBJC_TYPE(RTCIceServer) alloc] initWithNativeServer:server];
82*d9f75844SAndroid Build Coastguard Worker      [iceServers addObject:iceServer];
83*d9f75844SAndroid Build Coastguard Worker    }
84*d9f75844SAndroid Build Coastguard Worker    _iceServers = iceServers;
85*d9f75844SAndroid Build Coastguard Worker    if (!config.certificates.empty()) {
86*d9f75844SAndroid Build Coastguard Worker      rtc::scoped_refptr<rtc::RTCCertificate> native_cert;
87*d9f75844SAndroid Build Coastguard Worker      native_cert = config.certificates[0];
88*d9f75844SAndroid Build Coastguard Worker      rtc::RTCCertificatePEM native_pem = native_cert->ToPEM();
89*d9f75844SAndroid Build Coastguard Worker      _certificate = [[RTC_OBJC_TYPE(RTCCertificate) alloc]
90*d9f75844SAndroid Build Coastguard Worker          initWithPrivateKey:@(native_pem.private_key().c_str())
91*d9f75844SAndroid Build Coastguard Worker                 certificate:@(native_pem.certificate().c_str())];
92*d9f75844SAndroid Build Coastguard Worker    }
93*d9f75844SAndroid Build Coastguard Worker    _iceTransportPolicy =
94*d9f75844SAndroid Build Coastguard Worker        [[self class] transportPolicyForTransportsType:config.type];
95*d9f75844SAndroid Build Coastguard Worker    _bundlePolicy =
96*d9f75844SAndroid Build Coastguard Worker        [[self class] bundlePolicyForNativePolicy:config.bundle_policy];
97*d9f75844SAndroid Build Coastguard Worker    _rtcpMuxPolicy =
98*d9f75844SAndroid Build Coastguard Worker        [[self class] rtcpMuxPolicyForNativePolicy:config.rtcp_mux_policy];
99*d9f75844SAndroid Build Coastguard Worker    _tcpCandidatePolicy = [[self class] tcpCandidatePolicyForNativePolicy:
100*d9f75844SAndroid Build Coastguard Worker        config.tcp_candidate_policy];
101*d9f75844SAndroid Build Coastguard Worker    _candidateNetworkPolicy = [[self class]
102*d9f75844SAndroid Build Coastguard Worker        candidateNetworkPolicyForNativePolicy:config.candidate_network_policy];
103*d9f75844SAndroid Build Coastguard Worker    webrtc::PeerConnectionInterface::ContinualGatheringPolicy nativePolicy =
104*d9f75844SAndroid Build Coastguard Worker    config.continual_gathering_policy;
105*d9f75844SAndroid Build Coastguard Worker    _continualGatheringPolicy = [[self class] continualGatheringPolicyForNativePolicy:nativePolicy];
106*d9f75844SAndroid Build Coastguard Worker    _disableIPV6OnWiFi = config.disable_ipv6_on_wifi;
107*d9f75844SAndroid Build Coastguard Worker    _maxIPv6Networks = config.max_ipv6_networks;
108*d9f75844SAndroid Build Coastguard Worker    _disableLinkLocalNetworks = config.disable_link_local_networks;
109*d9f75844SAndroid Build Coastguard Worker    _audioJitterBufferMaxPackets = config.audio_jitter_buffer_max_packets;
110*d9f75844SAndroid Build Coastguard Worker    _audioJitterBufferFastAccelerate = config.audio_jitter_buffer_fast_accelerate;
111*d9f75844SAndroid Build Coastguard Worker    _iceConnectionReceivingTimeout = config.ice_connection_receiving_timeout;
112*d9f75844SAndroid Build Coastguard Worker    _iceBackupCandidatePairPingInterval =
113*d9f75844SAndroid Build Coastguard Worker        config.ice_backup_candidate_pair_ping_interval;
114*d9f75844SAndroid Build Coastguard Worker    _keyType = RTCEncryptionKeyTypeECDSA;
115*d9f75844SAndroid Build Coastguard Worker    _iceCandidatePoolSize = config.ice_candidate_pool_size;
116*d9f75844SAndroid Build Coastguard Worker    _shouldPruneTurnPorts = config.prune_turn_ports;
117*d9f75844SAndroid Build Coastguard Worker    _shouldPresumeWritableWhenFullyRelayed =
118*d9f75844SAndroid Build Coastguard Worker        config.presume_writable_when_fully_relayed;
119*d9f75844SAndroid Build Coastguard Worker    _shouldSurfaceIceCandidatesOnIceTransportTypeChanged =
120*d9f75844SAndroid Build Coastguard Worker        config.surface_ice_candidates_on_ice_transport_type_changed;
121*d9f75844SAndroid Build Coastguard Worker    if (config.ice_check_min_interval) {
122*d9f75844SAndroid Build Coastguard Worker      _iceCheckMinInterval =
123*d9f75844SAndroid Build Coastguard Worker          [NSNumber numberWithInt:*config.ice_check_min_interval];
124*d9f75844SAndroid Build Coastguard Worker    }
125*d9f75844SAndroid Build Coastguard Worker    _sdpSemantics = [[self class] sdpSemanticsForNativeSdpSemantics:config.sdp_semantics];
126*d9f75844SAndroid Build Coastguard Worker    _turnCustomizer = config.turn_customizer;
127*d9f75844SAndroid Build Coastguard Worker    _activeResetSrtpParams = config.active_reset_srtp_params;
128*d9f75844SAndroid Build Coastguard Worker    if (config.crypto_options) {
129*d9f75844SAndroid Build Coastguard Worker      _cryptoOptions = [[RTC_OBJC_TYPE(RTCCryptoOptions) alloc]
130*d9f75844SAndroid Build Coastguard Worker               initWithSrtpEnableGcmCryptoSuites:config.crypto_options->srtp
131*d9f75844SAndroid Build Coastguard Worker                                                     .enable_gcm_crypto_suites
132*d9f75844SAndroid Build Coastguard Worker             srtpEnableAes128Sha1_32CryptoCipher:config.crypto_options->srtp
133*d9f75844SAndroid Build Coastguard Worker                                                     .enable_aes128_sha1_32_crypto_cipher
134*d9f75844SAndroid Build Coastguard Worker          srtpEnableEncryptedRtpHeaderExtensions:config.crypto_options->srtp
135*d9f75844SAndroid Build Coastguard Worker                                                     .enable_encrypted_rtp_header_extensions
136*d9f75844SAndroid Build Coastguard Worker                    sframeRequireFrameEncryption:config.crypto_options->sframe
137*d9f75844SAndroid Build Coastguard Worker                                                     .require_frame_encryption];
138*d9f75844SAndroid Build Coastguard Worker    }
139*d9f75844SAndroid Build Coastguard Worker    _turnLoggingId = [NSString stringWithUTF8String:config.turn_logging_id.c_str()];
140*d9f75844SAndroid Build Coastguard Worker    _rtcpAudioReportIntervalMs = config.audio_rtcp_report_interval_ms();
141*d9f75844SAndroid Build Coastguard Worker    _rtcpVideoReportIntervalMs = config.video_rtcp_report_interval_ms();
142*d9f75844SAndroid Build Coastguard Worker    _allowCodecSwitching = config.allow_codec_switching.value_or(false);
143*d9f75844SAndroid Build Coastguard Worker    _enableImplicitRollback = config.enable_implicit_rollback;
144*d9f75844SAndroid Build Coastguard Worker    _offerExtmapAllowMixed = config.offer_extmap_allow_mixed;
145*d9f75844SAndroid Build Coastguard Worker    _iceCheckIntervalStrongConnectivity =
146*d9f75844SAndroid Build Coastguard Worker        config.ice_check_interval_strong_connectivity.has_value() ?
147*d9f75844SAndroid Build Coastguard Worker        [NSNumber numberWithInt:*config.ice_check_interval_strong_connectivity] :
148*d9f75844SAndroid Build Coastguard Worker        nil;
149*d9f75844SAndroid Build Coastguard Worker    _iceCheckIntervalWeakConnectivity = config.ice_check_interval_weak_connectivity.has_value() ?
150*d9f75844SAndroid Build Coastguard Worker        [NSNumber numberWithInt:*config.ice_check_interval_weak_connectivity] :
151*d9f75844SAndroid Build Coastguard Worker        nil;
152*d9f75844SAndroid Build Coastguard Worker    _iceUnwritableTimeout = config.ice_unwritable_timeout.has_value() ?
153*d9f75844SAndroid Build Coastguard Worker        [NSNumber numberWithInt:*config.ice_unwritable_timeout] :
154*d9f75844SAndroid Build Coastguard Worker        nil;
155*d9f75844SAndroid Build Coastguard Worker    _iceUnwritableMinChecks = config.ice_unwritable_min_checks.has_value() ?
156*d9f75844SAndroid Build Coastguard Worker        [NSNumber numberWithInt:*config.ice_unwritable_min_checks] :
157*d9f75844SAndroid Build Coastguard Worker        nil;
158*d9f75844SAndroid Build Coastguard Worker    _iceInactiveTimeout = config.ice_inactive_timeout.has_value() ?
159*d9f75844SAndroid Build Coastguard Worker        [NSNumber numberWithInt:*config.ice_inactive_timeout] :
160*d9f75844SAndroid Build Coastguard Worker        nil;
161*d9f75844SAndroid Build Coastguard Worker  }
162*d9f75844SAndroid Build Coastguard Worker  return self;
163*d9f75844SAndroid Build Coastguard Worker}
164*d9f75844SAndroid Build Coastguard Worker
165*d9f75844SAndroid Build Coastguard Worker- (NSString *)description {
166*d9f75844SAndroid Build Coastguard Worker  static NSString *formatString = @"RTC_OBJC_TYPE(RTCConfiguration): "
167*d9f75844SAndroid Build Coastguard Worker                                  @"{\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%d\n%d\n%d\n%d\n%d\n%d\n"
168*d9f75844SAndroid Build Coastguard Worker                                  @"%d\n%@\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n}\n";
169*d9f75844SAndroid Build Coastguard Worker
170*d9f75844SAndroid Build Coastguard Worker  return [NSString
171*d9f75844SAndroid Build Coastguard Worker      stringWithFormat:formatString,
172*d9f75844SAndroid Build Coastguard Worker                       _iceServers,
173*d9f75844SAndroid Build Coastguard Worker                       [[self class] stringForTransportPolicy:_iceTransportPolicy],
174*d9f75844SAndroid Build Coastguard Worker                       [[self class] stringForBundlePolicy:_bundlePolicy],
175*d9f75844SAndroid Build Coastguard Worker                       [[self class] stringForRtcpMuxPolicy:_rtcpMuxPolicy],
176*d9f75844SAndroid Build Coastguard Worker                       [[self class] stringForTcpCandidatePolicy:_tcpCandidatePolicy],
177*d9f75844SAndroid Build Coastguard Worker                       [[self class] stringForCandidateNetworkPolicy:_candidateNetworkPolicy],
178*d9f75844SAndroid Build Coastguard Worker                       [[self class] stringForContinualGatheringPolicy:_continualGatheringPolicy],
179*d9f75844SAndroid Build Coastguard Worker                       [[self class] stringForSdpSemantics:_sdpSemantics],
180*d9f75844SAndroid Build Coastguard Worker                       _audioJitterBufferMaxPackets,
181*d9f75844SAndroid Build Coastguard Worker                       _audioJitterBufferFastAccelerate,
182*d9f75844SAndroid Build Coastguard Worker                       _iceConnectionReceivingTimeout,
183*d9f75844SAndroid Build Coastguard Worker                       _iceBackupCandidatePairPingInterval,
184*d9f75844SAndroid Build Coastguard Worker                       _iceCandidatePoolSize,
185*d9f75844SAndroid Build Coastguard Worker                       _shouldPruneTurnPorts,
186*d9f75844SAndroid Build Coastguard Worker                       _shouldPresumeWritableWhenFullyRelayed,
187*d9f75844SAndroid Build Coastguard Worker                       _shouldSurfaceIceCandidatesOnIceTransportTypeChanged,
188*d9f75844SAndroid Build Coastguard Worker                       _iceCheckMinInterval,
189*d9f75844SAndroid Build Coastguard Worker                       _disableLinkLocalNetworks,
190*d9f75844SAndroid Build Coastguard Worker                       _disableIPV6OnWiFi,
191*d9f75844SAndroid Build Coastguard Worker                       _maxIPv6Networks,
192*d9f75844SAndroid Build Coastguard Worker                       _activeResetSrtpParams,
193*d9f75844SAndroid Build Coastguard Worker                       _enableDscp,
194*d9f75844SAndroid Build Coastguard Worker                       _enableImplicitRollback];
195*d9f75844SAndroid Build Coastguard Worker}
196*d9f75844SAndroid Build Coastguard Worker
197*d9f75844SAndroid Build Coastguard Worker#pragma mark - Private
198*d9f75844SAndroid Build Coastguard Worker
199*d9f75844SAndroid Build Coastguard Worker- (webrtc::PeerConnectionInterface::RTCConfiguration *)
200*d9f75844SAndroid Build Coastguard Worker    createNativeConfiguration {
201*d9f75844SAndroid Build Coastguard Worker  std::unique_ptr<webrtc::PeerConnectionInterface::RTCConfiguration>
202*d9f75844SAndroid Build Coastguard Worker      nativeConfig(new webrtc::PeerConnectionInterface::RTCConfiguration(
203*d9f75844SAndroid Build Coastguard Worker          webrtc::PeerConnectionInterface::RTCConfigurationType::kAggressive));
204*d9f75844SAndroid Build Coastguard Worker
205*d9f75844SAndroid Build Coastguard Worker  nativeConfig->set_dscp(_enableDscp);
206*d9f75844SAndroid Build Coastguard Worker  for (RTC_OBJC_TYPE(RTCIceServer) * iceServer in _iceServers) {
207*d9f75844SAndroid Build Coastguard Worker    nativeConfig->servers.push_back(iceServer.nativeServer);
208*d9f75844SAndroid Build Coastguard Worker  }
209*d9f75844SAndroid Build Coastguard Worker  nativeConfig->type =
210*d9f75844SAndroid Build Coastguard Worker      [[self class] nativeTransportsTypeForTransportPolicy:_iceTransportPolicy];
211*d9f75844SAndroid Build Coastguard Worker  nativeConfig->bundle_policy =
212*d9f75844SAndroid Build Coastguard Worker      [[self class] nativeBundlePolicyForPolicy:_bundlePolicy];
213*d9f75844SAndroid Build Coastguard Worker  nativeConfig->rtcp_mux_policy =
214*d9f75844SAndroid Build Coastguard Worker      [[self class] nativeRtcpMuxPolicyForPolicy:_rtcpMuxPolicy];
215*d9f75844SAndroid Build Coastguard Worker  nativeConfig->tcp_candidate_policy =
216*d9f75844SAndroid Build Coastguard Worker      [[self class] nativeTcpCandidatePolicyForPolicy:_tcpCandidatePolicy];
217*d9f75844SAndroid Build Coastguard Worker  nativeConfig->candidate_network_policy = [[self class]
218*d9f75844SAndroid Build Coastguard Worker      nativeCandidateNetworkPolicyForPolicy:_candidateNetworkPolicy];
219*d9f75844SAndroid Build Coastguard Worker  nativeConfig->continual_gathering_policy =
220*d9f75844SAndroid Build Coastguard Worker      [[self class] nativeContinualGatheringPolicyForPolicy:_continualGatheringPolicy];
221*d9f75844SAndroid Build Coastguard Worker  nativeConfig->disable_ipv6_on_wifi = _disableIPV6OnWiFi;
222*d9f75844SAndroid Build Coastguard Worker  nativeConfig->max_ipv6_networks = _maxIPv6Networks;
223*d9f75844SAndroid Build Coastguard Worker  nativeConfig->disable_link_local_networks = _disableLinkLocalNetworks;
224*d9f75844SAndroid Build Coastguard Worker  nativeConfig->audio_jitter_buffer_max_packets = _audioJitterBufferMaxPackets;
225*d9f75844SAndroid Build Coastguard Worker  nativeConfig->audio_jitter_buffer_fast_accelerate =
226*d9f75844SAndroid Build Coastguard Worker      _audioJitterBufferFastAccelerate  ? true : false;
227*d9f75844SAndroid Build Coastguard Worker  nativeConfig->ice_connection_receiving_timeout =
228*d9f75844SAndroid Build Coastguard Worker      _iceConnectionReceivingTimeout;
229*d9f75844SAndroid Build Coastguard Worker  nativeConfig->ice_backup_candidate_pair_ping_interval =
230*d9f75844SAndroid Build Coastguard Worker      _iceBackupCandidatePairPingInterval;
231*d9f75844SAndroid Build Coastguard Worker  rtc::KeyType keyType =
232*d9f75844SAndroid Build Coastguard Worker      [[self class] nativeEncryptionKeyTypeForKeyType:_keyType];
233*d9f75844SAndroid Build Coastguard Worker  if (_certificate != nullptr) {
234*d9f75844SAndroid Build Coastguard Worker    // if offered a pemcert use it...
235*d9f75844SAndroid Build Coastguard Worker    RTC_LOG(LS_INFO) << "Have configured cert - using it.";
236*d9f75844SAndroid Build Coastguard Worker    std::string pem_private_key = [[_certificate private_key] UTF8String];
237*d9f75844SAndroid Build Coastguard Worker    std::string pem_certificate = [[_certificate certificate] UTF8String];
238*d9f75844SAndroid Build Coastguard Worker    rtc::RTCCertificatePEM pem = rtc::RTCCertificatePEM(pem_private_key, pem_certificate);
239*d9f75844SAndroid Build Coastguard Worker    rtc::scoped_refptr<rtc::RTCCertificate> certificate = rtc::RTCCertificate::FromPEM(pem);
240*d9f75844SAndroid Build Coastguard Worker    RTC_LOG(LS_INFO) << "Created cert from PEM strings.";
241*d9f75844SAndroid Build Coastguard Worker    if (!certificate) {
242*d9f75844SAndroid Build Coastguard Worker      RTC_LOG(LS_ERROR) << "Failed to generate certificate from PEM.";
243*d9f75844SAndroid Build Coastguard Worker      return nullptr;
244*d9f75844SAndroid Build Coastguard Worker    }
245*d9f75844SAndroid Build Coastguard Worker    nativeConfig->certificates.push_back(certificate);
246*d9f75844SAndroid Build Coastguard Worker  } else {
247*d9f75844SAndroid Build Coastguard Worker    RTC_LOG(LS_INFO) << "Don't have configured cert.";
248*d9f75844SAndroid Build Coastguard Worker    // Generate non-default certificate.
249*d9f75844SAndroid Build Coastguard Worker    if (keyType != rtc::KT_DEFAULT) {
250*d9f75844SAndroid Build Coastguard Worker      rtc::scoped_refptr<rtc::RTCCertificate> certificate =
251*d9f75844SAndroid Build Coastguard Worker          rtc::RTCCertificateGenerator::GenerateCertificate(rtc::KeyParams(keyType),
252*d9f75844SAndroid Build Coastguard Worker                                                            absl::optional<uint64_t>());
253*d9f75844SAndroid Build Coastguard Worker      if (!certificate) {
254*d9f75844SAndroid Build Coastguard Worker        RTCLogError(@"Failed to generate certificate.");
255*d9f75844SAndroid Build Coastguard Worker        return nullptr;
256*d9f75844SAndroid Build Coastguard Worker      }
257*d9f75844SAndroid Build Coastguard Worker      nativeConfig->certificates.push_back(certificate);
258*d9f75844SAndroid Build Coastguard Worker    }
259*d9f75844SAndroid Build Coastguard Worker  }
260*d9f75844SAndroid Build Coastguard Worker  nativeConfig->ice_candidate_pool_size = _iceCandidatePoolSize;
261*d9f75844SAndroid Build Coastguard Worker  nativeConfig->prune_turn_ports = _shouldPruneTurnPorts ? true : false;
262*d9f75844SAndroid Build Coastguard Worker  nativeConfig->presume_writable_when_fully_relayed =
263*d9f75844SAndroid Build Coastguard Worker      _shouldPresumeWritableWhenFullyRelayed ? true : false;
264*d9f75844SAndroid Build Coastguard Worker  nativeConfig->surface_ice_candidates_on_ice_transport_type_changed =
265*d9f75844SAndroid Build Coastguard Worker      _shouldSurfaceIceCandidatesOnIceTransportTypeChanged ? true : false;
266*d9f75844SAndroid Build Coastguard Worker  if (_iceCheckMinInterval != nil) {
267*d9f75844SAndroid Build Coastguard Worker    nativeConfig->ice_check_min_interval = absl::optional<int>(_iceCheckMinInterval.intValue);
268*d9f75844SAndroid Build Coastguard Worker  }
269*d9f75844SAndroid Build Coastguard Worker  nativeConfig->sdp_semantics = [[self class] nativeSdpSemanticsForSdpSemantics:_sdpSemantics];
270*d9f75844SAndroid Build Coastguard Worker  if (_turnCustomizer) {
271*d9f75844SAndroid Build Coastguard Worker    nativeConfig->turn_customizer = _turnCustomizer;
272*d9f75844SAndroid Build Coastguard Worker  }
273*d9f75844SAndroid Build Coastguard Worker  nativeConfig->active_reset_srtp_params = _activeResetSrtpParams ? true : false;
274*d9f75844SAndroid Build Coastguard Worker  if (_cryptoOptions) {
275*d9f75844SAndroid Build Coastguard Worker    webrtc::CryptoOptions nativeCryptoOptions;
276*d9f75844SAndroid Build Coastguard Worker    nativeCryptoOptions.srtp.enable_gcm_crypto_suites =
277*d9f75844SAndroid Build Coastguard Worker        _cryptoOptions.srtpEnableGcmCryptoSuites ? true : false;
278*d9f75844SAndroid Build Coastguard Worker    nativeCryptoOptions.srtp.enable_aes128_sha1_32_crypto_cipher =
279*d9f75844SAndroid Build Coastguard Worker        _cryptoOptions.srtpEnableAes128Sha1_32CryptoCipher ? true : false;
280*d9f75844SAndroid Build Coastguard Worker    nativeCryptoOptions.srtp.enable_encrypted_rtp_header_extensions =
281*d9f75844SAndroid Build Coastguard Worker        _cryptoOptions.srtpEnableEncryptedRtpHeaderExtensions ? true : false;
282*d9f75844SAndroid Build Coastguard Worker    nativeCryptoOptions.sframe.require_frame_encryption =
283*d9f75844SAndroid Build Coastguard Worker        _cryptoOptions.sframeRequireFrameEncryption ? true : false;
284*d9f75844SAndroid Build Coastguard Worker    nativeConfig->crypto_options = absl::optional<webrtc::CryptoOptions>(nativeCryptoOptions);
285*d9f75844SAndroid Build Coastguard Worker  }
286*d9f75844SAndroid Build Coastguard Worker  nativeConfig->turn_logging_id = [_turnLoggingId UTF8String];
287*d9f75844SAndroid Build Coastguard Worker  nativeConfig->set_audio_rtcp_report_interval_ms(_rtcpAudioReportIntervalMs);
288*d9f75844SAndroid Build Coastguard Worker  nativeConfig->set_video_rtcp_report_interval_ms(_rtcpVideoReportIntervalMs);
289*d9f75844SAndroid Build Coastguard Worker  nativeConfig->allow_codec_switching = _allowCodecSwitching;
290*d9f75844SAndroid Build Coastguard Worker  nativeConfig->enable_implicit_rollback = _enableImplicitRollback;
291*d9f75844SAndroid Build Coastguard Worker  nativeConfig->offer_extmap_allow_mixed = _offerExtmapAllowMixed;
292*d9f75844SAndroid Build Coastguard Worker  if (_iceCheckIntervalStrongConnectivity != nil) {
293*d9f75844SAndroid Build Coastguard Worker    nativeConfig->ice_check_interval_strong_connectivity =
294*d9f75844SAndroid Build Coastguard Worker        absl::optional<int>(_iceCheckIntervalStrongConnectivity.intValue);
295*d9f75844SAndroid Build Coastguard Worker  }
296*d9f75844SAndroid Build Coastguard Worker  if (_iceCheckIntervalWeakConnectivity != nil) {
297*d9f75844SAndroid Build Coastguard Worker    nativeConfig->ice_check_interval_weak_connectivity =
298*d9f75844SAndroid Build Coastguard Worker        absl::optional<int>(_iceCheckIntervalWeakConnectivity.intValue);
299*d9f75844SAndroid Build Coastguard Worker  }
300*d9f75844SAndroid Build Coastguard Worker  if (_iceUnwritableTimeout != nil) {
301*d9f75844SAndroid Build Coastguard Worker    nativeConfig->ice_unwritable_timeout = absl::optional<int>(_iceUnwritableTimeout.intValue);
302*d9f75844SAndroid Build Coastguard Worker  }
303*d9f75844SAndroid Build Coastguard Worker  if (_iceUnwritableMinChecks != nil) {
304*d9f75844SAndroid Build Coastguard Worker    nativeConfig->ice_unwritable_min_checks = absl::optional<int>(_iceUnwritableMinChecks.intValue);
305*d9f75844SAndroid Build Coastguard Worker  }
306*d9f75844SAndroid Build Coastguard Worker  if (_iceInactiveTimeout != nil) {
307*d9f75844SAndroid Build Coastguard Worker    nativeConfig->ice_inactive_timeout = absl::optional<int>(_iceInactiveTimeout.intValue);
308*d9f75844SAndroid Build Coastguard Worker  }
309*d9f75844SAndroid Build Coastguard Worker  return nativeConfig.release();
310*d9f75844SAndroid Build Coastguard Worker}
311*d9f75844SAndroid Build Coastguard Worker
312*d9f75844SAndroid Build Coastguard Worker+ (webrtc::PeerConnectionInterface::IceTransportsType)
313*d9f75844SAndroid Build Coastguard Worker    nativeTransportsTypeForTransportPolicy:(RTCIceTransportPolicy)policy {
314*d9f75844SAndroid Build Coastguard Worker  switch (policy) {
315*d9f75844SAndroid Build Coastguard Worker    case RTCIceTransportPolicyNone:
316*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kNone;
317*d9f75844SAndroid Build Coastguard Worker    case RTCIceTransportPolicyRelay:
318*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kRelay;
319*d9f75844SAndroid Build Coastguard Worker    case RTCIceTransportPolicyNoHost:
320*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kNoHost;
321*d9f75844SAndroid Build Coastguard Worker    case RTCIceTransportPolicyAll:
322*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kAll;
323*d9f75844SAndroid Build Coastguard Worker  }
324*d9f75844SAndroid Build Coastguard Worker}
325*d9f75844SAndroid Build Coastguard Worker
326*d9f75844SAndroid Build Coastguard Worker+ (RTCIceTransportPolicy)transportPolicyForTransportsType:
327*d9f75844SAndroid Build Coastguard Worker    (webrtc::PeerConnectionInterface::IceTransportsType)nativeType {
328*d9f75844SAndroid Build Coastguard Worker  switch (nativeType) {
329*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kNone:
330*d9f75844SAndroid Build Coastguard Worker      return RTCIceTransportPolicyNone;
331*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kRelay:
332*d9f75844SAndroid Build Coastguard Worker      return RTCIceTransportPolicyRelay;
333*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kNoHost:
334*d9f75844SAndroid Build Coastguard Worker      return RTCIceTransportPolicyNoHost;
335*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kAll:
336*d9f75844SAndroid Build Coastguard Worker      return RTCIceTransportPolicyAll;
337*d9f75844SAndroid Build Coastguard Worker  }
338*d9f75844SAndroid Build Coastguard Worker}
339*d9f75844SAndroid Build Coastguard Worker
340*d9f75844SAndroid Build Coastguard Worker+ (NSString *)stringForTransportPolicy:(RTCIceTransportPolicy)policy {
341*d9f75844SAndroid Build Coastguard Worker  switch (policy) {
342*d9f75844SAndroid Build Coastguard Worker    case RTCIceTransportPolicyNone:
343*d9f75844SAndroid Build Coastguard Worker      return @"NONE";
344*d9f75844SAndroid Build Coastguard Worker    case RTCIceTransportPolicyRelay:
345*d9f75844SAndroid Build Coastguard Worker      return @"RELAY";
346*d9f75844SAndroid Build Coastguard Worker    case RTCIceTransportPolicyNoHost:
347*d9f75844SAndroid Build Coastguard Worker      return @"NO_HOST";
348*d9f75844SAndroid Build Coastguard Worker    case RTCIceTransportPolicyAll:
349*d9f75844SAndroid Build Coastguard Worker      return @"ALL";
350*d9f75844SAndroid Build Coastguard Worker  }
351*d9f75844SAndroid Build Coastguard Worker}
352*d9f75844SAndroid Build Coastguard Worker
353*d9f75844SAndroid Build Coastguard Worker+ (webrtc::PeerConnectionInterface::BundlePolicy)nativeBundlePolicyForPolicy:
354*d9f75844SAndroid Build Coastguard Worker    (RTCBundlePolicy)policy {
355*d9f75844SAndroid Build Coastguard Worker  switch (policy) {
356*d9f75844SAndroid Build Coastguard Worker    case RTCBundlePolicyBalanced:
357*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kBundlePolicyBalanced;
358*d9f75844SAndroid Build Coastguard Worker    case RTCBundlePolicyMaxCompat:
359*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kBundlePolicyMaxCompat;
360*d9f75844SAndroid Build Coastguard Worker    case RTCBundlePolicyMaxBundle:
361*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kBundlePolicyMaxBundle;
362*d9f75844SAndroid Build Coastguard Worker  }
363*d9f75844SAndroid Build Coastguard Worker}
364*d9f75844SAndroid Build Coastguard Worker
365*d9f75844SAndroid Build Coastguard Worker+ (RTCBundlePolicy)bundlePolicyForNativePolicy:
366*d9f75844SAndroid Build Coastguard Worker    (webrtc::PeerConnectionInterface::BundlePolicy)nativePolicy {
367*d9f75844SAndroid Build Coastguard Worker  switch (nativePolicy) {
368*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kBundlePolicyBalanced:
369*d9f75844SAndroid Build Coastguard Worker      return RTCBundlePolicyBalanced;
370*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kBundlePolicyMaxCompat:
371*d9f75844SAndroid Build Coastguard Worker      return RTCBundlePolicyMaxCompat;
372*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kBundlePolicyMaxBundle:
373*d9f75844SAndroid Build Coastguard Worker      return RTCBundlePolicyMaxBundle;
374*d9f75844SAndroid Build Coastguard Worker  }
375*d9f75844SAndroid Build Coastguard Worker}
376*d9f75844SAndroid Build Coastguard Worker
377*d9f75844SAndroid Build Coastguard Worker+ (NSString *)stringForBundlePolicy:(RTCBundlePolicy)policy {
378*d9f75844SAndroid Build Coastguard Worker  switch (policy) {
379*d9f75844SAndroid Build Coastguard Worker    case RTCBundlePolicyBalanced:
380*d9f75844SAndroid Build Coastguard Worker      return @"BALANCED";
381*d9f75844SAndroid Build Coastguard Worker    case RTCBundlePolicyMaxCompat:
382*d9f75844SAndroid Build Coastguard Worker      return @"MAX_COMPAT";
383*d9f75844SAndroid Build Coastguard Worker    case RTCBundlePolicyMaxBundle:
384*d9f75844SAndroid Build Coastguard Worker      return @"MAX_BUNDLE";
385*d9f75844SAndroid Build Coastguard Worker  }
386*d9f75844SAndroid Build Coastguard Worker}
387*d9f75844SAndroid Build Coastguard Worker
388*d9f75844SAndroid Build Coastguard Worker+ (webrtc::PeerConnectionInterface::RtcpMuxPolicy)nativeRtcpMuxPolicyForPolicy:
389*d9f75844SAndroid Build Coastguard Worker    (RTCRtcpMuxPolicy)policy {
390*d9f75844SAndroid Build Coastguard Worker  switch (policy) {
391*d9f75844SAndroid Build Coastguard Worker    case RTCRtcpMuxPolicyNegotiate:
392*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kRtcpMuxPolicyNegotiate;
393*d9f75844SAndroid Build Coastguard Worker    case RTCRtcpMuxPolicyRequire:
394*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kRtcpMuxPolicyRequire;
395*d9f75844SAndroid Build Coastguard Worker  }
396*d9f75844SAndroid Build Coastguard Worker}
397*d9f75844SAndroid Build Coastguard Worker
398*d9f75844SAndroid Build Coastguard Worker+ (RTCRtcpMuxPolicy)rtcpMuxPolicyForNativePolicy:
399*d9f75844SAndroid Build Coastguard Worker    (webrtc::PeerConnectionInterface::RtcpMuxPolicy)nativePolicy {
400*d9f75844SAndroid Build Coastguard Worker  switch (nativePolicy) {
401*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kRtcpMuxPolicyNegotiate:
402*d9f75844SAndroid Build Coastguard Worker      return RTCRtcpMuxPolicyNegotiate;
403*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kRtcpMuxPolicyRequire:
404*d9f75844SAndroid Build Coastguard Worker      return RTCRtcpMuxPolicyRequire;
405*d9f75844SAndroid Build Coastguard Worker  }
406*d9f75844SAndroid Build Coastguard Worker}
407*d9f75844SAndroid Build Coastguard Worker
408*d9f75844SAndroid Build Coastguard Worker+ (NSString *)stringForRtcpMuxPolicy:(RTCRtcpMuxPolicy)policy {
409*d9f75844SAndroid Build Coastguard Worker  switch (policy) {
410*d9f75844SAndroid Build Coastguard Worker    case RTCRtcpMuxPolicyNegotiate:
411*d9f75844SAndroid Build Coastguard Worker      return @"NEGOTIATE";
412*d9f75844SAndroid Build Coastguard Worker    case RTCRtcpMuxPolicyRequire:
413*d9f75844SAndroid Build Coastguard Worker      return @"REQUIRE";
414*d9f75844SAndroid Build Coastguard Worker  }
415*d9f75844SAndroid Build Coastguard Worker}
416*d9f75844SAndroid Build Coastguard Worker
417*d9f75844SAndroid Build Coastguard Worker+ (webrtc::PeerConnectionInterface::TcpCandidatePolicy)
418*d9f75844SAndroid Build Coastguard Worker    nativeTcpCandidatePolicyForPolicy:(RTCTcpCandidatePolicy)policy {
419*d9f75844SAndroid Build Coastguard Worker  switch (policy) {
420*d9f75844SAndroid Build Coastguard Worker    case RTCTcpCandidatePolicyEnabled:
421*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kTcpCandidatePolicyEnabled;
422*d9f75844SAndroid Build Coastguard Worker    case RTCTcpCandidatePolicyDisabled:
423*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kTcpCandidatePolicyDisabled;
424*d9f75844SAndroid Build Coastguard Worker  }
425*d9f75844SAndroid Build Coastguard Worker}
426*d9f75844SAndroid Build Coastguard Worker
427*d9f75844SAndroid Build Coastguard Worker+ (webrtc::PeerConnectionInterface::CandidateNetworkPolicy)
428*d9f75844SAndroid Build Coastguard Worker    nativeCandidateNetworkPolicyForPolicy:(RTCCandidateNetworkPolicy)policy {
429*d9f75844SAndroid Build Coastguard Worker  switch (policy) {
430*d9f75844SAndroid Build Coastguard Worker    case RTCCandidateNetworkPolicyAll:
431*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kCandidateNetworkPolicyAll;
432*d9f75844SAndroid Build Coastguard Worker    case RTCCandidateNetworkPolicyLowCost:
433*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::kCandidateNetworkPolicyLowCost;
434*d9f75844SAndroid Build Coastguard Worker  }
435*d9f75844SAndroid Build Coastguard Worker}
436*d9f75844SAndroid Build Coastguard Worker
437*d9f75844SAndroid Build Coastguard Worker+ (RTCTcpCandidatePolicy)tcpCandidatePolicyForNativePolicy:
438*d9f75844SAndroid Build Coastguard Worker    (webrtc::PeerConnectionInterface::TcpCandidatePolicy)nativePolicy {
439*d9f75844SAndroid Build Coastguard Worker  switch (nativePolicy) {
440*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kTcpCandidatePolicyEnabled:
441*d9f75844SAndroid Build Coastguard Worker      return RTCTcpCandidatePolicyEnabled;
442*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kTcpCandidatePolicyDisabled:
443*d9f75844SAndroid Build Coastguard Worker      return RTCTcpCandidatePolicyDisabled;
444*d9f75844SAndroid Build Coastguard Worker  }
445*d9f75844SAndroid Build Coastguard Worker}
446*d9f75844SAndroid Build Coastguard Worker
447*d9f75844SAndroid Build Coastguard Worker+ (NSString *)stringForTcpCandidatePolicy:(RTCTcpCandidatePolicy)policy {
448*d9f75844SAndroid Build Coastguard Worker  switch (policy) {
449*d9f75844SAndroid Build Coastguard Worker    case RTCTcpCandidatePolicyEnabled:
450*d9f75844SAndroid Build Coastguard Worker      return @"TCP_ENABLED";
451*d9f75844SAndroid Build Coastguard Worker    case RTCTcpCandidatePolicyDisabled:
452*d9f75844SAndroid Build Coastguard Worker      return @"TCP_DISABLED";
453*d9f75844SAndroid Build Coastguard Worker  }
454*d9f75844SAndroid Build Coastguard Worker}
455*d9f75844SAndroid Build Coastguard Worker
456*d9f75844SAndroid Build Coastguard Worker+ (RTCCandidateNetworkPolicy)candidateNetworkPolicyForNativePolicy:
457*d9f75844SAndroid Build Coastguard Worker    (webrtc::PeerConnectionInterface::CandidateNetworkPolicy)nativePolicy {
458*d9f75844SAndroid Build Coastguard Worker  switch (nativePolicy) {
459*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kCandidateNetworkPolicyAll:
460*d9f75844SAndroid Build Coastguard Worker      return RTCCandidateNetworkPolicyAll;
461*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::kCandidateNetworkPolicyLowCost:
462*d9f75844SAndroid Build Coastguard Worker      return RTCCandidateNetworkPolicyLowCost;
463*d9f75844SAndroid Build Coastguard Worker  }
464*d9f75844SAndroid Build Coastguard Worker}
465*d9f75844SAndroid Build Coastguard Worker
466*d9f75844SAndroid Build Coastguard Worker+ (NSString *)stringForCandidateNetworkPolicy:
467*d9f75844SAndroid Build Coastguard Worker    (RTCCandidateNetworkPolicy)policy {
468*d9f75844SAndroid Build Coastguard Worker  switch (policy) {
469*d9f75844SAndroid Build Coastguard Worker    case RTCCandidateNetworkPolicyAll:
470*d9f75844SAndroid Build Coastguard Worker      return @"CANDIDATE_ALL_NETWORKS";
471*d9f75844SAndroid Build Coastguard Worker    case RTCCandidateNetworkPolicyLowCost:
472*d9f75844SAndroid Build Coastguard Worker      return @"CANDIDATE_LOW_COST_NETWORKS";
473*d9f75844SAndroid Build Coastguard Worker  }
474*d9f75844SAndroid Build Coastguard Worker}
475*d9f75844SAndroid Build Coastguard Worker
476*d9f75844SAndroid Build Coastguard Worker+ (webrtc::PeerConnectionInterface::ContinualGatheringPolicy)
477*d9f75844SAndroid Build Coastguard Worker    nativeContinualGatheringPolicyForPolicy:
478*d9f75844SAndroid Build Coastguard Worker        (RTCContinualGatheringPolicy)policy {
479*d9f75844SAndroid Build Coastguard Worker  switch (policy) {
480*d9f75844SAndroid Build Coastguard Worker    case RTCContinualGatheringPolicyGatherOnce:
481*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::GATHER_ONCE;
482*d9f75844SAndroid Build Coastguard Worker    case RTCContinualGatheringPolicyGatherContinually:
483*d9f75844SAndroid Build Coastguard Worker      return webrtc::PeerConnectionInterface::GATHER_CONTINUALLY;
484*d9f75844SAndroid Build Coastguard Worker  }
485*d9f75844SAndroid Build Coastguard Worker}
486*d9f75844SAndroid Build Coastguard Worker
487*d9f75844SAndroid Build Coastguard Worker+ (RTCContinualGatheringPolicy)continualGatheringPolicyForNativePolicy:
488*d9f75844SAndroid Build Coastguard Worker    (webrtc::PeerConnectionInterface::ContinualGatheringPolicy)nativePolicy {
489*d9f75844SAndroid Build Coastguard Worker  switch (nativePolicy) {
490*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::GATHER_ONCE:
491*d9f75844SAndroid Build Coastguard Worker      return RTCContinualGatheringPolicyGatherOnce;
492*d9f75844SAndroid Build Coastguard Worker    case webrtc::PeerConnectionInterface::GATHER_CONTINUALLY:
493*d9f75844SAndroid Build Coastguard Worker      return RTCContinualGatheringPolicyGatherContinually;
494*d9f75844SAndroid Build Coastguard Worker  }
495*d9f75844SAndroid Build Coastguard Worker}
496*d9f75844SAndroid Build Coastguard Worker
497*d9f75844SAndroid Build Coastguard Worker+ (NSString *)stringForContinualGatheringPolicy:
498*d9f75844SAndroid Build Coastguard Worker    (RTCContinualGatheringPolicy)policy {
499*d9f75844SAndroid Build Coastguard Worker  switch (policy) {
500*d9f75844SAndroid Build Coastguard Worker    case RTCContinualGatheringPolicyGatherOnce:
501*d9f75844SAndroid Build Coastguard Worker      return @"GATHER_ONCE";
502*d9f75844SAndroid Build Coastguard Worker    case RTCContinualGatheringPolicyGatherContinually:
503*d9f75844SAndroid Build Coastguard Worker      return @"GATHER_CONTINUALLY";
504*d9f75844SAndroid Build Coastguard Worker  }
505*d9f75844SAndroid Build Coastguard Worker}
506*d9f75844SAndroid Build Coastguard Worker
507*d9f75844SAndroid Build Coastguard Worker+ (rtc::KeyType)nativeEncryptionKeyTypeForKeyType:
508*d9f75844SAndroid Build Coastguard Worker    (RTCEncryptionKeyType)keyType {
509*d9f75844SAndroid Build Coastguard Worker  switch (keyType) {
510*d9f75844SAndroid Build Coastguard Worker    case RTCEncryptionKeyTypeRSA:
511*d9f75844SAndroid Build Coastguard Worker      return rtc::KT_RSA;
512*d9f75844SAndroid Build Coastguard Worker    case RTCEncryptionKeyTypeECDSA:
513*d9f75844SAndroid Build Coastguard Worker      return rtc::KT_ECDSA;
514*d9f75844SAndroid Build Coastguard Worker  }
515*d9f75844SAndroid Build Coastguard Worker}
516*d9f75844SAndroid Build Coastguard Worker
517*d9f75844SAndroid Build Coastguard Worker+ (webrtc::SdpSemantics)nativeSdpSemanticsForSdpSemantics:(RTCSdpSemantics)sdpSemantics {
518*d9f75844SAndroid Build Coastguard Worker  switch (sdpSemantics) {
519*d9f75844SAndroid Build Coastguard Worker    case RTCSdpSemanticsPlanB:
520*d9f75844SAndroid Build Coastguard Worker      return webrtc::SdpSemantics::kPlanB_DEPRECATED;
521*d9f75844SAndroid Build Coastguard Worker    case RTCSdpSemanticsUnifiedPlan:
522*d9f75844SAndroid Build Coastguard Worker      return webrtc::SdpSemantics::kUnifiedPlan;
523*d9f75844SAndroid Build Coastguard Worker  }
524*d9f75844SAndroid Build Coastguard Worker}
525*d9f75844SAndroid Build Coastguard Worker
526*d9f75844SAndroid Build Coastguard Worker+ (RTCSdpSemantics)sdpSemanticsForNativeSdpSemantics:(webrtc::SdpSemantics)sdpSemantics {
527*d9f75844SAndroid Build Coastguard Worker  switch (sdpSemantics) {
528*d9f75844SAndroid Build Coastguard Worker    case webrtc::SdpSemantics::kPlanB_DEPRECATED:
529*d9f75844SAndroid Build Coastguard Worker      return RTCSdpSemanticsPlanB;
530*d9f75844SAndroid Build Coastguard Worker    case webrtc::SdpSemantics::kUnifiedPlan:
531*d9f75844SAndroid Build Coastguard Worker      return RTCSdpSemanticsUnifiedPlan;
532*d9f75844SAndroid Build Coastguard Worker  }
533*d9f75844SAndroid Build Coastguard Worker}
534*d9f75844SAndroid Build Coastguard Worker
535*d9f75844SAndroid Build Coastguard Worker+ (NSString *)stringForSdpSemantics:(RTCSdpSemantics)sdpSemantics {
536*d9f75844SAndroid Build Coastguard Worker  switch (sdpSemantics) {
537*d9f75844SAndroid Build Coastguard Worker    case RTCSdpSemanticsPlanB:
538*d9f75844SAndroid Build Coastguard Worker      return @"PLAN_B";
539*d9f75844SAndroid Build Coastguard Worker    case RTCSdpSemanticsUnifiedPlan:
540*d9f75844SAndroid Build Coastguard Worker      return @"UNIFIED_PLAN";
541*d9f75844SAndroid Build Coastguard Worker  }
542*d9f75844SAndroid Build Coastguard Worker}
543*d9f75844SAndroid Build Coastguard Worker
544*d9f75844SAndroid Build Coastguard Worker@end
545