Add the network preference to RTCConfiguration.

The network preference is added to RTCConfiguration and passed to ICE.
ICE considers now the preference set by applications over network
interface types when making decisions in candidate pair switching.

Bug: webrtc:8816
Change-Id: I40d2612705b54c83dd45772ac855808e0a76b1e1
Reviewed-on: https://webrtc-review.googlesource.com/44020
Commit-Queue: Qingsi Wang <qingsi@google.com>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21855}
This commit is contained in:
Qingsi Wang
2018-02-01 10:38:40 -08:00
committed by Commit Bot
parent dc221515ff
commit 9a5c6f8f3f
11 changed files with 154 additions and 22 deletions

View File

@ -207,5 +207,32 @@ PeerConnectionInterface::TlsCertPolicy JavaToNativeTlsCertPolicy(
return PeerConnectionInterface::kTlsCertPolicySecure;
}
rtc::Optional<rtc::AdapterType> JavaToNativeNetworkPreference(
JNIEnv* jni,
const JavaRef<jobject>& j_network_preference) {
std::string enum_name = GetJavaEnumName(jni, j_network_preference);
if (enum_name == "UNKNOWN")
return rtc::nullopt;
if (enum_name == "ETHERNET")
return rtc::ADAPTER_TYPE_ETHERNET;
if (enum_name == "WIFI")
return rtc::ADAPTER_TYPE_WIFI;
if (enum_name == "CELLULAR")
return rtc::ADAPTER_TYPE_CELLULAR;
if (enum_name == "VPN")
return rtc::ADAPTER_TYPE_VPN;
if (enum_name == "LOOPBACK")
return rtc::ADAPTER_TYPE_LOOPBACK;
RTC_CHECK(false) << "Unexpected NetworkPreference enum_name " << enum_name;
return rtc::nullopt;
}
} // namespace jni
} // namespace webrtc

View File

@ -75,6 +75,10 @@ PeerConnectionInterface::TlsCertPolicy JavaToNativeTlsCertPolicy(
JNIEnv* jni,
const JavaRef<jobject>& j_ice_server_tls_cert_policy);
rtc::Optional<rtc::AdapterType> JavaToNativeNetworkPreference(
JNIEnv* jni,
const JavaRef<jobject>& j_network_preference);
} // namespace jni
} // namespace webrtc

View File

@ -121,6 +121,8 @@ void JavaToNativeRTCConfiguration(
Java_RTCConfiguration_getContinualGatheringPolicy(jni, j_rtc_config);
ScopedJavaLocalRef<jobject> j_turn_customizer =
Java_RTCConfiguration_getTurnCustomizer(jni, j_rtc_config);
ScopedJavaLocalRef<jobject> j_network_preference =
Java_RTCConfiguration_getNetworkPreference(jni, j_rtc_config);
rtc_config->type = JavaToNativeIceTransportsType(jni, j_ice_transports_type);
rtc_config->bundle_policy = JavaToNativeBundlePolicy(jni, j_bundle_policy);
@ -184,6 +186,8 @@ void JavaToNativeRTCConfiguration(
jni, Java_RTCConfiguration_getCombinedAudioVideoBwe(jni, j_rtc_config));
rtc_config->enable_dtls_srtp = JavaToNativeOptionalBool(
jni, Java_RTCConfiguration_getEnableDtlsSrtp(jni, j_rtc_config));
rtc_config->network_preference =
JavaToNativeNetworkPreference(jni, j_network_preference);
}
rtc::KeyType GetRtcConfigKeyType(JNIEnv* env,