diff --git a/webrtc/sdk/objc/Framework/Classes/RTCConfiguration+Private.h b/webrtc/sdk/objc/Framework/Classes/RTCConfiguration+Private.h index 7f90b35246..7ea87148ca 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCConfiguration+Private.h +++ b/webrtc/sdk/objc/Framework/Classes/RTCConfiguration+Private.h @@ -48,6 +48,14 @@ NS_ASSUME_NONNULL_BEGIN + (NSString *)stringForTcpCandidatePolicy:(RTCTcpCandidatePolicy)policy; ++ (webrtc::PeerConnectionInterface::CandidateNetworkPolicy) + nativeCandidateNetworkPolicyForPolicy:(RTCCandidateNetworkPolicy)policy; + ++ (RTCCandidateNetworkPolicy)candidateNetworkPolicyForNativePolicy: + (webrtc::PeerConnectionInterface::CandidateNetworkPolicy)nativePolicy; + ++ (NSString *)stringForCandidateNetworkPolicy:(RTCCandidateNetworkPolicy)policy; + /** * RTCConfiguration struct representation of this RTCConfiguration. This is * needed to pass to the underlying C++ APIs. diff --git a/webrtc/sdk/objc/Framework/Classes/RTCConfiguration.mm b/webrtc/sdk/objc/Framework/Classes/RTCConfiguration.mm index 0ea17e0d9c..c9730cf8c8 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCConfiguration.mm +++ b/webrtc/sdk/objc/Framework/Classes/RTCConfiguration.mm @@ -25,6 +25,7 @@ @synthesize bundlePolicy = _bundlePolicy; @synthesize rtcpMuxPolicy = _rtcpMuxPolicy; @synthesize tcpCandidatePolicy = _tcpCandidatePolicy; +@synthesize candidateNetworkPolicy = _candidateNetworkPolicy; @synthesize continualGatheringPolicy = _continualGatheringPolicy; @synthesize audioJitterBufferMaxPackets = _audioJitterBufferMaxPackets; @synthesize iceConnectionReceivingTimeout = _iceConnectionReceivingTimeout; @@ -46,6 +47,8 @@ [[self class] rtcpMuxPolicyForNativePolicy:config.rtcp_mux_policy]; _tcpCandidatePolicy = [[self class] tcpCandidatePolicyForNativePolicy: config.tcp_candidate_policy]; + _candidateNetworkPolicy = [[self class] + candidateNetworkPolicyForNativePolicy:config.candidate_network_policy]; webrtc::PeerConnectionInterface::ContinualGatheringPolicy nativePolicy = config.continual_gathering_policy; _continualGatheringPolicy = @@ -62,12 +65,13 @@ - (NSString *)description { return [NSString stringWithFormat: - @"RTCConfiguration: {\n%@\n%@\n%@\n%@\n%@\n%@\n%d\n%d\n%d\n%d\n}\n", + @"RTCConfiguration: {\n%@\n%@\n%@\n%@\n%@\n%@\n%@\n%d\n%d\n%d\n%d\n}\n", _iceServers, [[self class] stringForTransportPolicy:_iceTransportPolicy], [[self class] stringForBundlePolicy:_bundlePolicy], [[self class] stringForRtcpMuxPolicy:_rtcpMuxPolicy], [[self class] stringForTcpCandidatePolicy:_tcpCandidatePolicy], + [[self class] stringForCandidateNetworkPolicy:_candidateNetworkPolicy], [[self class] stringForContinualGatheringPolicy:_continualGatheringPolicy], _audioJitterBufferMaxPackets, @@ -94,6 +98,8 @@ [[self class] nativeRtcpMuxPolicyForPolicy:_rtcpMuxPolicy]; nativeConfig->tcp_candidate_policy = [[self class] nativeTcpCandidatePolicyForPolicy:_tcpCandidatePolicy]; + nativeConfig->candidate_network_policy = [[self class] + nativeCandidateNetworkPolicyForPolicy:_candidateNetworkPolicy]; nativeConfig->continual_gathering_policy = [[self class] nativeContinualGatheringPolicyForPolicy:_continualGatheringPolicy]; nativeConfig->audio_jitter_buffer_max_packets = _audioJitterBufferMaxPackets; @@ -234,6 +240,16 @@ } } ++ (webrtc::PeerConnectionInterface::CandidateNetworkPolicy) + nativeCandidateNetworkPolicyForPolicy:(RTCCandidateNetworkPolicy)policy { + switch (policy) { + case RTCCandidateNetworkPolicyAll: + return webrtc::PeerConnectionInterface::kCandidateNetworkPolicyAll; + case RTCCandidateNetworkPolicyLowCost: + return webrtc::PeerConnectionInterface::kCandidateNetworkPolicyLowCost; + } +} + + (rtc::KeyType)nativeEncryptionKeyTypeForKeyType: (RTCEncryptionKeyType)keyType { switch (keyType) { @@ -263,6 +279,26 @@ } } ++ (RTCCandidateNetworkPolicy)candidateNetworkPolicyForNativePolicy: + (webrtc::PeerConnectionInterface::CandidateNetworkPolicy)nativePolicy { + switch (nativePolicy) { + case webrtc::PeerConnectionInterface::kCandidateNetworkPolicyAll: + return RTCCandidateNetworkPolicyAll; + case webrtc::PeerConnectionInterface::kCandidateNetworkPolicyLowCost: + return RTCCandidateNetworkPolicyLowCost; + } +} + ++ (NSString *)stringForCandidateNetworkPolicy: + (RTCCandidateNetworkPolicy)policy { + switch (policy) { + case RTCCandidateNetworkPolicyAll: + return @"CANDIDATE_ALL_NETWORKS"; + case RTCCandidateNetworkPolicyLowCost: + return @"CANDIDATE_LOW_COST_NETWORKS"; + } +} + + (webrtc::PeerConnectionInterface::ContinualGatheringPolicy) nativeContinualGatheringPolicyForPolicy: (RTCContinualGatheringPolicy)policy { diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h index e8d80e2a78..5ebcb73dc0 100644 --- a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h +++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h @@ -44,6 +44,12 @@ typedef NS_ENUM(NSInteger, RTCTcpCandidatePolicy) { RTCTcpCandidatePolicyDisabled }; +/** Represents the candidate network policy. */ +typedef NS_ENUM(NSInteger, RTCCandidateNetworkPolicy) { + RTCCandidateNetworkPolicyAll, + RTCCandidateNetworkPolicyLowCost +}; + /** Represents the continual gathering policy. */ typedef NS_ENUM(NSInteger, RTCContinualGatheringPolicy) { RTCContinualGatheringPolicyGatherOnce, @@ -74,6 +80,7 @@ RTC_EXPORT /** The rtcp-mux policy to use when gathering ICE candidates. */ @property(nonatomic, assign) RTCRtcpMuxPolicy rtcpMuxPolicy; @property(nonatomic, assign) RTCTcpCandidatePolicy tcpCandidatePolicy; +@property(nonatomic, assign) RTCCandidateNetworkPolicy candidateNetworkPolicy; @property(nonatomic, assign) RTCContinualGatheringPolicy continualGatheringPolicy; @property(nonatomic, assign) int audioJitterBufferMaxPackets; diff --git a/webrtc/sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm b/webrtc/sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm index f565adbefd..cd271f41fd 100644 --- a/webrtc/sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm +++ b/webrtc/sdk/objc/Framework/UnitTests/RTCConfigurationTest.mm @@ -35,6 +35,7 @@ config.bundlePolicy = RTCBundlePolicyMaxBundle; config.rtcpMuxPolicy = RTCRtcpMuxPolicyNegotiate; config.tcpCandidatePolicy = RTCTcpCandidatePolicyDisabled; + config.candidateNetworkPolicy = RTCCandidateNetworkPolicyLowCost; const int maxPackets = 60; const int timeout = 1; const int interval = 2; @@ -60,6 +61,8 @@ nativeConfig->rtcp_mux_policy); EXPECT_EQ(webrtc::PeerConnectionInterface::kTcpCandidatePolicyDisabled, nativeConfig->tcp_candidate_policy); + EXPECT_EQ(webrtc::PeerConnectionInterface::kCandidateNetworkPolicyLowCost, + nativeConfig->candidate_network_policy); EXPECT_EQ(maxPackets, nativeConfig->audio_jitter_buffer_max_packets); EXPECT_EQ(timeout, nativeConfig->ice_connection_receiving_timeout); EXPECT_EQ(interval, nativeConfig->ice_backup_candidate_pair_ping_interval);