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}
This commit is contained in:
Alex Drake 2019-08-13 15:56:07 -07:00 committed by Commit Bot
parent 608e6ba394
commit 68c2a565ca
5 changed files with 53 additions and 17 deletions

View File

@ -10,6 +10,8 @@
package org.webrtc; package org.webrtc;
import org.webrtc.PeerConnection;
/** /**
* Representation of a single ICE Candidate, mirroring * Representation of a single ICE Candidate, mirroring
* {@code IceCandidateInterface} in the C++ API. * {@code IceCandidateInterface} in the C++ API.
@ -19,25 +21,30 @@ public class IceCandidate {
public final int sdpMLineIndex; public final int sdpMLineIndex;
public final String sdp; public final String sdp;
public final String serverUrl; public final String serverUrl;
public final PeerConnection.AdapterType adapterType;
public IceCandidate(String sdpMid, int sdpMLineIndex, String sdp) { public IceCandidate(String sdpMid, int sdpMLineIndex, String sdp) {
this.sdpMid = sdpMid; this.sdpMid = sdpMid;
this.sdpMLineIndex = sdpMLineIndex; this.sdpMLineIndex = sdpMLineIndex;
this.sdp = sdp; this.sdp = sdp;
this.serverUrl = ""; this.serverUrl = "";
this.adapterType = PeerConnection.AdapterType.UNKNOWN;
} }
@CalledByNative @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.sdpMid = sdpMid;
this.sdpMLineIndex = sdpMLineIndex; this.sdpMLineIndex = sdpMLineIndex;
this.sdp = sdp; this.sdp = sdp;
this.serverUrl = serverUrl; this.serverUrl = serverUrl;
this.adapterType = adapterType;
} }
@Override @Override
public String toString() { public String toString() {
return sdpMid + ":" + sdpMLineIndex + ":" + sdp + ":" + serverUrl; return sdpMid + ":" + sdpMLineIndex + ":" + sdp + ":" + serverUrl + ":"
+ adapterType.toString();
} }
@CalledByNative @CalledByNative

View File

@ -14,7 +14,9 @@ import android.support.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.webrtc.CandidatePairChangeEvent; import org.webrtc.CandidatePairChangeEvent;
import org.webrtc.DataChannel; import org.webrtc.DataChannel;
import org.webrtc.MediaStreamTrack; import org.webrtc.MediaStreamTrack;
@ -374,12 +376,29 @@ public class PeerConnection {
// Keep in sync with webrtc/rtc_base/network_constants.h. // Keep in sync with webrtc/rtc_base/network_constants.h.
public enum AdapterType { public enum AdapterType {
UNKNOWN, UNKNOWN(0),
ETHERNET, ETHERNET(1 << 0),
WIFI, WIFI(1 << 1),
CELLULAR, CELLULAR(1 << 2),
VPN, VPN(1 << 3),
LOOPBACK, 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 */ /** Java version of rtc::KeyType */

View File

@ -16,21 +16,23 @@
#include "sdk/android/generated_peerconnection_jni/IceCandidate_jni.h" #include "sdk/android/generated_peerconnection_jni/IceCandidate_jni.h"
#include "sdk/android/native_api/jni/java_types.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/media_stream_track.h"
#include "sdk/android/src/jni/pc/peer_connection.h"
namespace webrtc { namespace webrtc {
namespace jni { namespace jni {
namespace { namespace {
ScopedJavaLocalRef<jobject> CreateJavaIceCandidate( ScopedJavaLocalRef<jobject> CreateJavaIceCandidate(JNIEnv* env,
JNIEnv* env,
const std::string& sdp_mid, const std::string& sdp_mid,
int sdp_mline_index, int sdp_mline_index,
const std::string& sdp, const std::string& sdp,
const std::string server_url) { const std::string server_url,
int adapterType) {
return Java_IceCandidate_Constructor( return Java_IceCandidate_Constructor(
env, NativeToJavaString(env, sdp_mid), sdp_mline_index, 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 } // namespace
@ -56,7 +58,7 @@ ScopedJavaLocalRef<jobject> NativeToJavaCandidate(
// sdp_mline_index is not used, pass an invalid value -1. // sdp_mline_index is not used, pass an invalid value -1.
return CreateJavaIceCandidate(env, candidate.transport_name(), return CreateJavaIceCandidate(env, candidate.transport_name(),
-1 /* sdp_mline_index */, sdp, -1 /* sdp_mline_index */, sdp,
"" /* server_url */); "" /* server_url */, candidate.network_type());
} }
ScopedJavaLocalRef<jobject> NativeToJavaIceCandidate( ScopedJavaLocalRef<jobject> NativeToJavaIceCandidate(
@ -66,7 +68,7 @@ ScopedJavaLocalRef<jobject> NativeToJavaIceCandidate(
RTC_CHECK(candidate.ToString(&sdp)) << "got so far: " << sdp; RTC_CHECK(candidate.ToString(&sdp)) << "got so far: " << sdp;
return CreateJavaIceCandidate(env, candidate.sdp_mid(), return CreateJavaIceCandidate(env, candidate.sdp_mid(),
candidate.sdp_mline_index(), sdp, candidate.sdp_mline_index(), sdp,
candidate.candidate().url()); candidate.candidate().url(), 0);
} }
ScopedJavaLocalRef<jobjectArray> NativeToJavaCandidateArray( ScopedJavaLocalRef<jobjectArray> NativeToJavaCandidateArray(

View File

@ -133,6 +133,11 @@ ScopedJavaLocalRef<jobject> NativeToJavaCandidatePairChange(
} // namespace } // namespace
ScopedJavaLocalRef<jobject> NativeToJavaAdapterType(JNIEnv* env,
int adapterType) {
return Java_AdapterType_fromNativeIndex(env, adapterType);
}
void JavaToNativeRTCConfiguration( void JavaToNativeRTCConfiguration(
JNIEnv* jni, JNIEnv* jni,
const JavaRef<jobject>& j_rtc_config, const JavaRef<jobject>& j_rtc_config,

View File

@ -34,6 +34,9 @@ void JavaToNativeRTCConfiguration(
rtc::KeyType GetRtcConfigKeyType(JNIEnv* env, rtc::KeyType GetRtcConfigKeyType(JNIEnv* env,
const JavaRef<jobject>& j_rtc_config); const JavaRef<jobject>& j_rtc_config);
ScopedJavaLocalRef<jobject> NativeToJavaAdapterType(JNIEnv* env,
int adapterType);
// Adapter between the C++ PeerConnectionObserver interface and the Java // Adapter between the C++ PeerConnectionObserver interface and the Java
// PeerConnection.Observer interface. Wraps an instance of the Java interface // PeerConnection.Observer interface. Wraps an instance of the Java interface
// and dispatches C++ callbacks to Java. // and dispatches C++ callbacks to Java.