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