diff --git a/webrtc/sdk/android/api/org/webrtc/PeerConnection.java b/webrtc/sdk/android/api/org/webrtc/PeerConnection.java index 480818ee5a..4bce239001 100644 --- a/webrtc/sdk/android/api/org/webrtc/PeerConnection.java +++ b/webrtc/sdk/android/api/org/webrtc/PeerConnection.java @@ -197,8 +197,17 @@ public class PeerConnection { public boolean presumeWritableWhenFullyRelayed; public Integer iceCheckMinInterval; public boolean disableIPv6OnWifi; + // By default, PeerConnection will use a limited number of IPv6 network + // interfaces, in order to avoid too many ICE candidate pairs being created + // and delaying ICE completion. + // + // Can be set to Integer.MAX_VALUE to effectively disable the limit. + public int maxIPv6Networks; public IntervalRange iceRegatherIntervalRange; + // TODO(deadbeef): Instead of duplicating the defaults here, we should do + // something to pick up the defaults from C++. The Objective-C equivalent + // of RTCConfiguration does that. public RTCConfiguration(List iceServers) { iceTransportsType = IceTransportsType.ALL; bundlePolicy = BundlePolicy.BALANCED; @@ -217,6 +226,7 @@ public class PeerConnection { presumeWritableWhenFullyRelayed = false; iceCheckMinInterval = null; disableIPv6OnWifi = false; + maxIPv6Networks = 5; iceRegatherIntervalRange = null; } }; diff --git a/webrtc/sdk/android/src/jni/peerconnection_jni.cc b/webrtc/sdk/android/src/jni/peerconnection_jni.cc index 134f7b4aa0..b819ca9c64 100644 --- a/webrtc/sdk/android/src/jni/peerconnection_jni.cc +++ b/webrtc/sdk/android/src/jni/peerconnection_jni.cc @@ -1537,6 +1537,9 @@ static void JavaRTCConfigurationToJsepRTCConfiguration( jfieldID j_disable_ipv6_on_wifi_id = GetFieldID(jni, j_rtc_config_class, "disableIPv6OnWifi", "Z"); + jfieldID j_max_ipv6_networks_id = + GetFieldID(jni, j_rtc_config_class, "maxIPv6Networks", "I"); + jfieldID j_ice_regather_interval_range_id = GetFieldID(jni, j_rtc_config_class, "iceRegatherIntervalRange", "Lorg/webrtc/PeerConnection$IntervalRange;"); @@ -1585,6 +1588,8 @@ static void JavaRTCConfigurationToJsepRTCConfiguration( } rtc_config->disable_ipv6_on_wifi = GetBooleanField(jni, j_rtc_config, j_disable_ipv6_on_wifi_id); + rtc_config->max_ipv6_networks = + GetIntField(jni, j_rtc_config, j_max_ipv6_networks_id); jobject j_ice_regather_interval_range = GetNullableObjectField( jni, j_rtc_config, j_ice_regather_interval_range_id); if (!IsNull(jni, j_ice_regather_interval_range)) {