Propagating Network Type in Candidate for JNI
Bug: webrtc:10419
Change-Id: I32726c9a4095c998996acdbf00f72de18ed462c4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/149025
Commit-Queue: Alex Drake <alexdrake@google.com>
Reviewed-by: Alex Glaznev <glaznev@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28848}
diff --git a/sdk/android/api/org/webrtc/IceCandidate.java b/sdk/android/api/org/webrtc/IceCandidate.java
index eebc9d9..6df71f0 100644
--- a/sdk/android/api/org/webrtc/IceCandidate.java
+++ b/sdk/android/api/org/webrtc/IceCandidate.java
@@ -10,6 +10,8 @@
package org.webrtc;
+import org.webrtc.PeerConnection;
+
/**
* Representation of a single ICE Candidate, mirroring
* {@code IceCandidateInterface} in the C++ API.
@@ -19,25 +21,30 @@
public final int sdpMLineIndex;
public final String sdp;
public final String serverUrl;
+ public final PeerConnection.AdapterType adapterType;
public IceCandidate(String sdpMid, int sdpMLineIndex, String sdp) {
this.sdpMid = sdpMid;
this.sdpMLineIndex = sdpMLineIndex;
this.sdp = sdp;
this.serverUrl = "";
+ this.adapterType = PeerConnection.AdapterType.UNKNOWN;
}
@CalledByNative
- IceCandidate(String sdpMid, int sdpMLineIndex, String sdp, String serverUrl) {
+ IceCandidate(String sdpMid, int sdpMLineIndex, String sdp, String serverUrl,
+ PeerConnection.AdapterType adapterType) {
this.sdpMid = sdpMid;
this.sdpMLineIndex = sdpMLineIndex;
this.sdp = sdp;
this.serverUrl = serverUrl;
+ this.adapterType = adapterType;
}
@Override
public String toString() {
- return sdpMid + ":" + sdpMLineIndex + ":" + sdp + ":" + serverUrl;
+ return sdpMid + ":" + sdpMLineIndex + ":" + sdp + ":" + serverUrl + ":"
+ + adapterType.toString();
}
@CalledByNative
diff --git a/sdk/android/api/org/webrtc/PeerConnection.java b/sdk/android/api/org/webrtc/PeerConnection.java
index a5eeb58..e1243b9 100644
--- a/sdk/android/api/org/webrtc/PeerConnection.java
+++ b/sdk/android/api/org/webrtc/PeerConnection.java
@@ -14,7 +14,9 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.webrtc.CandidatePairChangeEvent;
import org.webrtc.DataChannel;
import org.webrtc.MediaStreamTrack;
@@ -374,12 +376,29 @@
// Keep in sync with webrtc/rtc_base/network_constants.h.
public enum AdapterType {
- UNKNOWN,
- ETHERNET,
- WIFI,
- CELLULAR,
- VPN,
- LOOPBACK,
+ UNKNOWN(0),
+ ETHERNET(1 << 0),
+ WIFI(1 << 1),
+ CELLULAR(1 << 2),
+ VPN(1 << 3),
+ LOOPBACK(1 << 4),
+ ADAPTER_TYPE_ANY(1 << 5);
+
+ public final Integer bitMask;
+ private AdapterType(Integer bitMask) {
+ this.bitMask = bitMask;
+ }
+ private static final Map<Integer, AdapterType> BY_BITMASK = new HashMap<>();
+ static {
+ for (AdapterType t : values()) {
+ BY_BITMASK.put(t.bitMask, t);
+ }
+ }
+
+ @CalledByNative("AdapterType")
+ static AdapterType fromNativeIndex(int nativeIndex) {
+ return BY_BITMASK.get(nativeIndex);
+ }
}
/** Java version of rtc::KeyType */
diff --git a/sdk/android/src/jni/pc/ice_candidate.cc b/sdk/android/src/jni/pc/ice_candidate.cc
index 8dba39a..247e8fa 100644
--- a/sdk/android/src/jni/pc/ice_candidate.cc
+++ b/sdk/android/src/jni/pc/ice_candidate.cc
@@ -16,21 +16,23 @@
#include "sdk/android/generated_peerconnection_jni/IceCandidate_jni.h"
#include "sdk/android/native_api/jni/java_types.h"
#include "sdk/android/src/jni/pc/media_stream_track.h"
+#include "sdk/android/src/jni/pc/peer_connection.h"
namespace webrtc {
namespace jni {
namespace {
-ScopedJavaLocalRef<jobject> CreateJavaIceCandidate(
- JNIEnv* env,
- const std::string& sdp_mid,
- int sdp_mline_index,
- const std::string& sdp,
- const std::string server_url) {
+ScopedJavaLocalRef<jobject> CreateJavaIceCandidate(JNIEnv* env,
+ const std::string& sdp_mid,
+ int sdp_mline_index,
+ const std::string& sdp,
+ const std::string server_url,
+ int adapterType) {
return Java_IceCandidate_Constructor(
env, NativeToJavaString(env, sdp_mid), sdp_mline_index,
- NativeToJavaString(env, sdp), NativeToJavaString(env, server_url));
+ NativeToJavaString(env, sdp), NativeToJavaString(env, server_url),
+ NativeToJavaAdapterType(env, adapterType));
}
} // namespace
@@ -56,7 +58,7 @@
// sdp_mline_index is not used, pass an invalid value -1.
return CreateJavaIceCandidate(env, candidate.transport_name(),
-1 /* sdp_mline_index */, sdp,
- "" /* server_url */);
+ "" /* server_url */, candidate.network_type());
}
ScopedJavaLocalRef<jobject> NativeToJavaIceCandidate(
@@ -66,7 +68,7 @@
RTC_CHECK(candidate.ToString(&sdp)) << "got so far: " << sdp;
return CreateJavaIceCandidate(env, candidate.sdp_mid(),
candidate.sdp_mline_index(), sdp,
- candidate.candidate().url());
+ candidate.candidate().url(), 0);
}
ScopedJavaLocalRef<jobjectArray> NativeToJavaCandidateArray(
diff --git a/sdk/android/src/jni/pc/peer_connection.cc b/sdk/android/src/jni/pc/peer_connection.cc
index d6290c5..d21609b 100644
--- a/sdk/android/src/jni/pc/peer_connection.cc
+++ b/sdk/android/src/jni/pc/peer_connection.cc
@@ -133,6 +133,11 @@
} // namespace
+ScopedJavaLocalRef<jobject> NativeToJavaAdapterType(JNIEnv* env,
+ int adapterType) {
+ return Java_AdapterType_fromNativeIndex(env, adapterType);
+}
+
void JavaToNativeRTCConfiguration(
JNIEnv* jni,
const JavaRef<jobject>& j_rtc_config,
diff --git a/sdk/android/src/jni/pc/peer_connection.h b/sdk/android/src/jni/pc/peer_connection.h
index c6db49a..a9e2af2 100644
--- a/sdk/android/src/jni/pc/peer_connection.h
+++ b/sdk/android/src/jni/pc/peer_connection.h
@@ -34,6 +34,9 @@
rtc::KeyType GetRtcConfigKeyType(JNIEnv* env,
const JavaRef<jobject>& j_rtc_config);
+ScopedJavaLocalRef<jobject> NativeToJavaAdapterType(JNIEnv* env,
+ int adapterType);
+
// Adapter between the C++ PeerConnectionObserver interface and the Java
// PeerConnection.Observer interface. Wraps an instance of the Java interface
// and dispatches C++ callbacks to Java.