1/* 2 * libjingle 3 * Copyright 2015 Google Inc. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 3. The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28#import "talk/app/webrtc/objc/RTCPeerConnectionInterface+Internal.h" 29 30#import "talk/app/webrtc/objc/RTCEnumConverter.h" 31#import "talk/app/webrtc/objc/RTCICEServer+Internal.h" 32 33@implementation RTCConfiguration 34 35@synthesize iceTransportsType = _iceTransportsType; 36@synthesize iceServers = _iceServers; 37@synthesize bundlePolicy = _bundlePolicy; 38@synthesize rtcpMuxPolicy = _rtcpMuxPolicy; 39@synthesize tcpCandidatePolicy = _tcpCandidatePolicy; 40@synthesize audioJitterBufferMaxPackets = _audioJitterBufferMaxPackets; 41@synthesize iceConnectionReceivingTimeout = _iceConnectionReceivingTimeout; 42@synthesize iceBackupCandidatePairPingInterval = _iceBackupCandidatePairPingInterval; 43 44- (instancetype)init { 45 if (self = [super init]) { 46 // Copy defaults. 47 webrtc::PeerConnectionInterface::RTCConfiguration config; 48 _iceTransportsType = [RTCEnumConverter iceTransportsTypeForNativeEnum:config.type]; 49 _bundlePolicy = [RTCEnumConverter bundlePolicyForNativeEnum:config.bundle_policy]; 50 _rtcpMuxPolicy = [RTCEnumConverter rtcpMuxPolicyForNativeEnum:config.rtcp_mux_policy]; 51 _tcpCandidatePolicy = 52 [RTCEnumConverter tcpCandidatePolicyForNativeEnum:config.tcp_candidate_policy]; 53 _audioJitterBufferMaxPackets = config.audio_jitter_buffer_max_packets; 54 _iceConnectionReceivingTimeout = config.ice_connection_receiving_timeout; 55 _iceBackupCandidatePairPingInterval = config.ice_backup_candidate_pair_ping_interval; 56 } 57 return self; 58} 59 60- (instancetype)initWithIceTransportsType:(RTCIceTransportsType)iceTransportsType 61 bundlePolicy:(RTCBundlePolicy)bundlePolicy 62 rtcpMuxPolicy:(RTCRtcpMuxPolicy)rtcpMuxPolicy 63 tcpCandidatePolicy:(RTCTcpCandidatePolicy)tcpCandidatePolicy 64 audioJitterBufferMaxPackets:(int)audioJitterBufferMaxPackets 65 iceConnectionReceivingTimeout:(int)iceConnectionReceivingTimeout 66 iceBackupCandidatePairPingInterval:(int)iceBackupCandidatePairPingInterval { 67 if (self = [super init]) { 68 _iceTransportsType = iceTransportsType; 69 _bundlePolicy = bundlePolicy; 70 _rtcpMuxPolicy = rtcpMuxPolicy; 71 _tcpCandidatePolicy = tcpCandidatePolicy; 72 _audioJitterBufferMaxPackets = audioJitterBufferMaxPackets; 73 _iceConnectionReceivingTimeout = iceConnectionReceivingTimeout; 74 _iceBackupCandidatePairPingInterval = iceBackupCandidatePairPingInterval; 75 } 76 return self; 77} 78 79#pragma mark - Private 80 81- (webrtc::PeerConnectionInterface::RTCConfiguration)nativeConfiguration { 82 webrtc::PeerConnectionInterface::RTCConfiguration nativeConfig; 83 nativeConfig.type = [RTCEnumConverter nativeEnumForIceTransportsType:_iceTransportsType]; 84 for (RTCICEServer *iceServer : _iceServers) { 85 nativeConfig.servers.push_back(iceServer.iceServer); 86 } 87 nativeConfig.bundle_policy = [RTCEnumConverter nativeEnumForBundlePolicy:_bundlePolicy]; 88 nativeConfig.rtcp_mux_policy = [RTCEnumConverter nativeEnumForRtcpMuxPolicy:_rtcpMuxPolicy]; 89 nativeConfig.tcp_candidate_policy = 90 [RTCEnumConverter nativeEnumForTcpCandidatePolicy:_tcpCandidatePolicy]; 91 nativeConfig.audio_jitter_buffer_max_packets = _audioJitterBufferMaxPackets; 92 nativeConfig.ice_connection_receiving_timeout = _iceConnectionReceivingTimeout; 93 nativeConfig.ice_backup_candidate_pair_ping_interval = _iceBackupCandidatePairPingInterval; 94 return nativeConfig; 95} 96 97@end 98