diff --git a/webrtc/sdk/android/api/org/webrtc/PeerConnection.java b/webrtc/sdk/android/api/org/webrtc/PeerConnection.java index 3137939416..480818ee5a 100644 --- a/webrtc/sdk/android/api/org/webrtc/PeerConnection.java +++ b/webrtc/sdk/android/api/org/webrtc/PeerConnection.java @@ -159,6 +159,25 @@ public class PeerConnection { /** Java version of PeerConnectionInterface.ContinualGatheringPolicy */ public enum ContinualGatheringPolicy { GATHER_ONCE, GATHER_CONTINUALLY } + /** Java version of rtc::IntervalRange */ + public static class IntervalRange { + private final int min; + private final int max; + + public IntervalRange(int min, int max) { + this.min = min; + this.max = max; + } + + public int getMin() { + return min; + } + + public int getMax() { + return max; + } + } + /** Java version of PeerConnectionInterface.RTCConfiguration */ public static class RTCConfiguration { public IceTransportsType iceTransportsType; @@ -178,6 +197,7 @@ public class PeerConnection { public boolean presumeWritableWhenFullyRelayed; public Integer iceCheckMinInterval; public boolean disableIPv6OnWifi; + public IntervalRange iceRegatherIntervalRange; public RTCConfiguration(List iceServers) { iceTransportsType = IceTransportsType.ALL; @@ -197,6 +217,7 @@ public class PeerConnection { presumeWritableWhenFullyRelayed = false; iceCheckMinInterval = null; disableIPv6OnWifi = false; + iceRegatherIntervalRange = null; } }; diff --git a/webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java b/webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java index af6f9884fb..0136ad1b25 100644 --- a/webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java +++ b/webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java @@ -18,6 +18,7 @@ import static org.junit.Assert.assertTrue; import android.support.test.InstrumentationRegistry; import android.support.test.filters.MediumTest; +import android.support.test.filters.SmallTest; import java.io.File; import java.lang.ref.WeakReference; import java.nio.ByteBuffer; @@ -565,6 +566,28 @@ public class PeerConnectionTest { // in JNI-style programming; make sure no typos! // - Test that shutdown mid-interaction is crash-free. + // Tests that the JNI glue between Java and C++ does not crash when creating a PeerConnection. + @Test + @SmallTest + public void testCreationWithConfig() throws Exception { + PeerConnectionFactory.Options options = new PeerConnectionFactory.Options(); + PeerConnectionFactory factory = new PeerConnectionFactory(options); + List iceServers = + Arrays.asList(new PeerConnection.IceServer("stun:stun.l.google.com:19302"), + new PeerConnection.IceServer("turn:fake.example.com", "fakeUsername", "fakePassword")); + PeerConnection.RTCConfiguration config = new PeerConnection.RTCConfiguration(iceServers); + + // Test configuration options. + config.continualGatheringPolicy = PeerConnection.ContinualGatheringPolicy.GATHER_CONTINUALLY; + config.iceRegatherIntervalRange = new PeerConnection.IntervalRange(1000, 2000); + + MediaConstraints constraints = new MediaConstraints(); + ObserverExpectations offeringExpectations = new ObserverExpectations("PCTest:offerer"); + PeerConnection offeringPC = + factory.createPeerConnection(config, constraints, offeringExpectations); + assertNotNull(offeringPC); + } + @Test @MediumTest public void testCompleteSession() throws Exception { diff --git a/webrtc/sdk/android/src/jni/peerconnection_jni.cc b/webrtc/sdk/android/src/jni/peerconnection_jni.cc index 43efd111e8..134f7b4aa0 100644 --- a/webrtc/sdk/android/src/jni/peerconnection_jni.cc +++ b/webrtc/sdk/android/src/jni/peerconnection_jni.cc @@ -1537,6 +1537,16 @@ static void JavaRTCConfigurationToJsepRTCConfiguration( jfieldID j_disable_ipv6_on_wifi_id = GetFieldID(jni, j_rtc_config_class, "disableIPv6OnWifi", "Z"); + jfieldID j_ice_regather_interval_range_id = + GetFieldID(jni, j_rtc_config_class, "iceRegatherIntervalRange", + "Lorg/webrtc/PeerConnection$IntervalRange;"); + jclass j_interval_range_class = + jni->FindClass("org/webrtc/PeerConnection$IntervalRange"); + jmethodID get_min_id = + GetMethodID(jni, j_interval_range_class, "getMin", "()I"); + jmethodID get_max_id = + GetMethodID(jni, j_interval_range_class, "getMax", "()I"); + rtc_config->type = JavaIceTransportsTypeToNativeType(jni, j_ice_transports_type); rtc_config->bundle_policy = @@ -1575,6 +1585,13 @@ static void JavaRTCConfigurationToJsepRTCConfiguration( } rtc_config->disable_ipv6_on_wifi = GetBooleanField(jni, j_rtc_config, j_disable_ipv6_on_wifi_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)) { + int min = jni->CallIntMethod(j_ice_regather_interval_range, get_min_id); + int max = jni->CallIntMethod(j_ice_regather_interval_range, get_max_id); + rtc_config->ice_regather_interval_range.emplace(min, max); + } } JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnection)(