OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. |
| 3 * |
| 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ |
| 10 |
| 11 #import "RTCConfiguration.h" |
| 12 |
| 13 #import "webrtc/api/objc/RTCConfiguration+Private.h" |
| 14 #import "webrtc/api/objc/RTCIceServer+Private.h" |
| 15 |
| 16 @implementation RTCConfiguration |
| 17 |
| 18 @synthesize iceServers = _iceServers; |
| 19 @synthesize iceTransportPolicy = _iceTransportPolicy; |
| 20 @synthesize bundlePolicy = _bundlePolicy; |
| 21 @synthesize rtcpMuxPolicy = _rtcpMuxPolicy; |
| 22 @synthesize tcpCandidatePolicy = _tcpCandidatePolicy; |
| 23 @synthesize audioJitterBufferMaxPackets = _audioJitterBufferMaxPackets; |
| 24 @synthesize iceConnectionReceivingTimeout = _iceConnectionReceivingTimeout; |
| 25 @synthesize iceBackupCandidatePairPingInterval = |
| 26 _iceBackupCandidatePairPingInterval; |
| 27 |
| 28 - (instancetype)init { |
| 29 if (self = [super init]) { |
| 30 _iceServers = [NSMutableArray array]; |
| 31 // Copy defaults. |
| 32 webrtc::PeerConnectionInterface::RTCConfiguration config; |
| 33 _iceTransportPolicy = |
| 34 [[self class] transportPolicyForTransportsType:config.type]; |
| 35 _bundlePolicy = |
| 36 [[self class] bundlePolicyForNativePolicy:config.bundle_policy]; |
| 37 _rtcpMuxPolicy = |
| 38 [[self class] rtcpMuxPolicyForNativePolicy:config.rtcp_mux_policy]; |
| 39 _tcpCandidatePolicy = [[self class] tcpCandidatePolicyForNativePolicy: |
| 40 config.tcp_candidate_policy]; |
| 41 _audioJitterBufferMaxPackets = config.audio_jitter_buffer_max_packets; |
| 42 _iceConnectionReceivingTimeout = config.ice_connection_receiving_timeout; |
| 43 _iceBackupCandidatePairPingInterval = |
| 44 config.ice_backup_candidate_pair_ping_interval; |
| 45 } |
| 46 return self; |
| 47 } |
| 48 |
| 49 - (instancetype)initWithIceServers:(NSArray<RTCIceServer *> *)iceServers |
| 50 iceTransportPolicy:(RTCIceTransportPolicy)iceTransportPolicy |
| 51 bundlePolicy:(RTCBundlePolicy)bundlePolicy |
| 52 rtcpMuxPolicy:(RTCRtcpMuxPolicy)rtcpMuxPolicy |
| 53 tcpCandidatePolicy:(RTCTcpCandidatePolicy)tcpCandidatePolicy |
| 54 audioJitterBufferMaxPackets:(int)audioJitterBufferMaxPackets |
| 55 iceConnectionReceivingTimeout:(int)iceConnectionReceivingTimeout |
| 56 iceBackupCandidatePairPingInterval:(int)iceBackupCandidatePairPingInterval { |
| 57 if (self = [self init]) { |
| 58 if (iceServers) { |
| 59 _iceServers = [iceServers copy]; |
| 60 } |
| 61 _iceTransportPolicy = iceTransportPolicy; |
| 62 _bundlePolicy = bundlePolicy; |
| 63 _rtcpMuxPolicy = rtcpMuxPolicy; |
| 64 _tcpCandidatePolicy = tcpCandidatePolicy; |
| 65 _audioJitterBufferMaxPackets = audioJitterBufferMaxPackets; |
| 66 _iceConnectionReceivingTimeout = iceConnectionReceivingTimeout; |
| 67 _iceBackupCandidatePairPingInterval = iceBackupCandidatePairPingInterval; |
| 68 } |
| 69 return self; |
| 70 } |
| 71 |
| 72 - (NSString *)description { |
| 73 return [NSString stringWithFormat: |
| 74 @"RTCConfiguration: {\n%@\n%@\n%@\n%@\n%@\n%d\n%d\n%d\n}\n", |
| 75 _iceServers, |
| 76 [[self class] stringForTransportPolicy:_iceTransportPolicy], |
| 77 [[self class] stringForBundlePolicy:_bundlePolicy], |
| 78 [[self class] stringForRtcpMuxPolicy:_rtcpMuxPolicy], |
| 79 [[self class] stringForTcpCandidatePolicy:_tcpCandidatePolicy], |
| 80 _audioJitterBufferMaxPackets, |
| 81 _iceConnectionReceivingTimeout, |
| 82 _iceBackupCandidatePairPingInterval]; |
| 83 } |
| 84 |
| 85 #pragma mark - Private |
| 86 |
| 87 - (webrtc::PeerConnectionInterface::RTCConfiguration)nativeConfiguration { |
| 88 webrtc::PeerConnectionInterface::RTCConfiguration nativeConfig; |
| 89 |
| 90 for (RTCIceServer *iceServer in _iceServers) { |
| 91 nativeConfig.servers.push_back(iceServer.iceServer); |
| 92 } |
| 93 nativeConfig.type = |
| 94 [[self class] nativeTransportsTypeForTransportPolicy:_iceTransportPolicy]; |
| 95 nativeConfig.bundle_policy = |
| 96 [[self class] nativeBundlePolicyForPolicy:_bundlePolicy]; |
| 97 nativeConfig.rtcp_mux_policy = |
| 98 [[self class] nativeRtcpMuxPolicyForPolicy:_rtcpMuxPolicy]; |
| 99 nativeConfig.tcp_candidate_policy = |
| 100 [[self class] nativeTcpCandidatePolicyForPolicy:_tcpCandidatePolicy]; |
| 101 nativeConfig.audio_jitter_buffer_max_packets = _audioJitterBufferMaxPackets; |
| 102 nativeConfig.ice_connection_receiving_timeout = |
| 103 _iceConnectionReceivingTimeout; |
| 104 nativeConfig.ice_backup_candidate_pair_ping_interval = |
| 105 _iceBackupCandidatePairPingInterval; |
| 106 |
| 107 return nativeConfig; |
| 108 } |
| 109 |
| 110 - (instancetype)initWithNativeConfiguration: |
| 111 (webrtc::PeerConnectionInterface::RTCConfiguration)nativeConfig { |
| 112 NSMutableArray *iceServers = |
| 113 [NSMutableArray arrayWithCapacity:nativeConfig.servers.size()]; |
| 114 for (auto const &server : nativeConfig.servers) { |
| 115 RTCIceServer *iceServer = |
| 116 [[RTCIceServer alloc] initWithNativeServer:server]; |
| 117 [iceServers addObject:iceServer]; |
| 118 } |
| 119 |
| 120 if (self = [self init]) { |
| 121 if (iceServers) { |
| 122 _iceServers = [iceServers copy]; |
| 123 } |
| 124 _iceTransportPolicy = |
| 125 [[self class] transportPolicyForTransportsType:nativeConfig.type]; |
| 126 _bundlePolicy = |
| 127 [[self class] bundlePolicyForNativePolicy:nativeConfig.bundle_policy]; |
| 128 _rtcpMuxPolicy = [[self class] rtcpMuxPolicyForNativePolicy: |
| 129 nativeConfig.rtcp_mux_policy]; |
| 130 _tcpCandidatePolicy = [[self class] tcpCandidatePolicyForNativePolicy: |
| 131 nativeConfig.tcp_candidate_policy]; |
| 132 _audioJitterBufferMaxPackets = nativeConfig.audio_jitter_buffer_max_packets; |
| 133 _iceConnectionReceivingTimeout = |
| 134 nativeConfig.ice_connection_receiving_timeout; |
| 135 _iceBackupCandidatePairPingInterval = |
| 136 nativeConfig.ice_backup_candidate_pair_ping_interval; |
| 137 } |
| 138 |
| 139 return self; |
| 140 } |
| 141 |
| 142 + (webrtc::PeerConnectionInterface::IceTransportsType) |
| 143 nativeTransportsTypeForTransportPolicy:(RTCIceTransportPolicy)policy { |
| 144 switch (policy) { |
| 145 case RTCIceTransportPolicyNone: |
| 146 return webrtc::PeerConnectionInterface::kNone; |
| 147 case RTCIceTransportPolicyRelay: |
| 148 return webrtc::PeerConnectionInterface::kRelay; |
| 149 case RTCIceTransportPolicyNoHost: |
| 150 return webrtc::PeerConnectionInterface::kNoHost; |
| 151 case RTCIceTransportPolicyAll: |
| 152 return webrtc::PeerConnectionInterface::kAll; |
| 153 } |
| 154 } |
| 155 |
| 156 + (RTCIceTransportPolicy)transportPolicyForTransportsType: |
| 157 (webrtc::PeerConnectionInterface::IceTransportsType)nativeType { |
| 158 switch (nativeType) { |
| 159 case webrtc::PeerConnectionInterface::kNone: |
| 160 return RTCIceTransportPolicyNone; |
| 161 case webrtc::PeerConnectionInterface::kRelay: |
| 162 return RTCIceTransportPolicyRelay; |
| 163 case webrtc::PeerConnectionInterface::kNoHost: |
| 164 return RTCIceTransportPolicyNoHost; |
| 165 case webrtc::PeerConnectionInterface::kAll: |
| 166 return RTCIceTransportPolicyAll; |
| 167 } |
| 168 } |
| 169 |
| 170 + (NSString *)stringForTransportPolicy:(RTCIceTransportPolicy)policy { |
| 171 switch (policy) { |
| 172 case RTCIceTransportPolicyNone: |
| 173 return @"NONE"; |
| 174 case RTCIceTransportPolicyRelay: |
| 175 return @"RELAY"; |
| 176 case RTCIceTransportPolicyNoHost: |
| 177 return @"NO_HOST"; |
| 178 case RTCIceTransportPolicyAll: |
| 179 return @"ALL"; |
| 180 } |
| 181 } |
| 182 |
| 183 + (webrtc::PeerConnectionInterface::BundlePolicy)nativeBundlePolicyForPolicy: |
| 184 (RTCBundlePolicy)policy { |
| 185 switch (policy) { |
| 186 case RTCBundlePolicyBalanced: |
| 187 return webrtc::PeerConnectionInterface::kBundlePolicyBalanced; |
| 188 case RTCBundlePolicyMaxCompat: |
| 189 return webrtc::PeerConnectionInterface::kBundlePolicyMaxCompat; |
| 190 case RTCBundlePolicyMaxBundle: |
| 191 return webrtc::PeerConnectionInterface::kBundlePolicyMaxBundle; |
| 192 } |
| 193 } |
| 194 |
| 195 + (RTCBundlePolicy)bundlePolicyForNativePolicy: |
| 196 (webrtc::PeerConnectionInterface::BundlePolicy)nativePolicy { |
| 197 switch (nativePolicy) { |
| 198 case webrtc::PeerConnectionInterface::kBundlePolicyBalanced: |
| 199 return RTCBundlePolicyBalanced; |
| 200 case webrtc::PeerConnectionInterface::kBundlePolicyMaxCompat: |
| 201 return RTCBundlePolicyMaxCompat; |
| 202 case webrtc::PeerConnectionInterface::kBundlePolicyMaxBundle: |
| 203 return RTCBundlePolicyMaxBundle; |
| 204 } |
| 205 } |
| 206 |
| 207 + (NSString *)stringForBundlePolicy:(RTCBundlePolicy)policy { |
| 208 switch (policy) { |
| 209 case RTCBundlePolicyBalanced: |
| 210 return @"BALANCED"; |
| 211 case RTCBundlePolicyMaxCompat: |
| 212 return @"MAX_COMPAT"; |
| 213 case RTCBundlePolicyMaxBundle: |
| 214 return @"MAX_BUNDLE"; |
| 215 } |
| 216 } |
| 217 |
| 218 + (webrtc::PeerConnectionInterface::RtcpMuxPolicy)nativeRtcpMuxPolicyForPolicy: |
| 219 (RTCRtcpMuxPolicy)policy { |
| 220 switch (policy) { |
| 221 case RTCRtcpMuxPolicyNegotiate: |
| 222 return webrtc::PeerConnectionInterface::kRtcpMuxPolicyNegotiate; |
| 223 case RTCRtcpMuxPolicyRequire: |
| 224 return webrtc::PeerConnectionInterface::kRtcpMuxPolicyRequire; |
| 225 } |
| 226 } |
| 227 |
| 228 + (RTCRtcpMuxPolicy)rtcpMuxPolicyForNativePolicy: |
| 229 (webrtc::PeerConnectionInterface::RtcpMuxPolicy)nativePolicy { |
| 230 switch (nativePolicy) { |
| 231 case webrtc::PeerConnectionInterface::kRtcpMuxPolicyNegotiate: |
| 232 return RTCRtcpMuxPolicyNegotiate; |
| 233 case webrtc::PeerConnectionInterface::kRtcpMuxPolicyRequire: |
| 234 return RTCRtcpMuxPolicyRequire; |
| 235 } |
| 236 } |
| 237 |
| 238 + (NSString *)stringForRtcpMuxPolicy:(RTCRtcpMuxPolicy)policy { |
| 239 switch (policy) { |
| 240 case RTCRtcpMuxPolicyNegotiate: |
| 241 return @"NEGOTIATE"; |
| 242 case RTCRtcpMuxPolicyRequire: |
| 243 return @"REQUIRE"; |
| 244 } |
| 245 } |
| 246 |
| 247 + (webrtc::PeerConnectionInterface::TcpCandidatePolicy) |
| 248 nativeTcpCandidatePolicyForPolicy:(RTCTcpCandidatePolicy)policy { |
| 249 switch (policy) { |
| 250 case RTCTcpCandidatePolicyEnabled: |
| 251 return webrtc::PeerConnectionInterface::kTcpCandidatePolicyEnabled; |
| 252 case RTCTcpCandidatePolicyDisabled: |
| 253 return webrtc::PeerConnectionInterface::kTcpCandidatePolicyDisabled; |
| 254 } |
| 255 } |
| 256 |
| 257 + (RTCTcpCandidatePolicy)tcpCandidatePolicyForNativePolicy: |
| 258 (webrtc::PeerConnectionInterface::TcpCandidatePolicy)nativePolicy { |
| 259 switch (nativePolicy) { |
| 260 case webrtc::PeerConnectionInterface::kTcpCandidatePolicyEnabled: |
| 261 return RTCTcpCandidatePolicyEnabled; |
| 262 case webrtc::PeerConnectionInterface::kTcpCandidatePolicyDisabled: |
| 263 return RTCTcpCandidatePolicyDisabled; |
| 264 } |
| 265 } |
| 266 |
| 267 + (NSString *)stringForTcpCandidatePolicy:(RTCTcpCandidatePolicy)policy { |
| 268 switch (policy) { |
| 269 case RTCTcpCandidatePolicyEnabled: |
| 270 return @"TCP_ENABLED"; |
| 271 case RTCTcpCandidatePolicyDisabled: |
| 272 return @"TCP_DISABLED"; |
| 273 } |
| 274 } |
| 275 |
| 276 @end |
OLD | NEW |