| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 network_handle_by_address_.clear(); | 233 network_handle_by_address_.clear(); |
| 234 network_info_by_handle_.clear(); | 234 network_info_by_handle_.clear(); |
| 235 } | 235 } |
| 236 | 236 |
| 237 // The implementation is largely taken from UDPSocketPosix::BindToNetwork in | 237 // The implementation is largely taken from UDPSocketPosix::BindToNetwork in |
| 238 // https://cs.chromium.org/chromium/src/net/udp/udp_socket_posix.cc | 238 // https://cs.chromium.org/chromium/src/net/udp/udp_socket_posix.cc |
| 239 rtc::NetworkBindingResult AndroidNetworkMonitor::BindSocketToNetwork( | 239 rtc::NetworkBindingResult AndroidNetworkMonitor::BindSocketToNetwork( |
| 240 int socket_fd, | 240 int socket_fd, |
| 241 const rtc::IPAddress& address) { | 241 const rtc::IPAddress& address) { |
| 242 RTC_CHECK(thread_checker_.CalledOnValidThread()); | 242 RTC_CHECK(thread_checker_.CalledOnValidThread()); |
| 243 |
| 244 jmethodID network_binding_supported_id = GetMethodID( |
| 245 jni(), *j_network_monitor_class_, "networkBindingSupported", "()Z"); |
| 243 // Android prior to Lollipop didn't have support for binding sockets to | 246 // Android prior to Lollipop didn't have support for binding sockets to |
| 244 // networks. In that case it should not have reached here because | 247 // networks. This may also occur if there is no connectivity manager service. |
| 245 // |network_handle_by_address_| is only populated in Android Lollipop | 248 bool network_binding_supported = jni()->CallBooleanMethod( |
| 246 // and above. | 249 *j_network_monitor_, network_binding_supported_id); |
| 247 if (android_sdk_int_ < SDK_VERSION_LOLLIPOP) { | 250 CHECK_EXCEPTION(jni()) |
| 248 LOG(LS_ERROR) << "BindSocketToNetwork is not supported in Android SDK " | 251 << "Error during NetworkMonitor.networkBindingSupported"; |
| 249 << android_sdk_int_; | 252 if (!network_binding_supported) { |
| 253 LOG(LS_WARNING) << "BindSocketToNetwork is not supported on this platform " |
| 254 << "(Android SDK: " << android_sdk_int_ << ")"; |
| 250 return rtc::NetworkBindingResult::NOT_IMPLEMENTED; | 255 return rtc::NetworkBindingResult::NOT_IMPLEMENTED; |
| 251 } | 256 } |
| 252 | 257 |
| 253 auto iter = network_handle_by_address_.find(address); | 258 auto iter = network_handle_by_address_.find(address); |
| 254 if (iter == network_handle_by_address_.end()) { | 259 if (iter == network_handle_by_address_.end()) { |
| 255 return rtc::NetworkBindingResult::ADDRESS_NOT_FOUND; | 260 return rtc::NetworkBindingResult::ADDRESS_NOT_FOUND; |
| 256 } | 261 } |
| 257 NetworkHandle network_handle = iter->second; | 262 NetworkHandle network_handle = iter->second; |
| 258 | 263 |
| 259 int rv = 0; | 264 int rv = 0; |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 JOW(void, NetworkMonitor_nativeNotifyOfNetworkDisconnect)( | 432 JOW(void, NetworkMonitor_nativeNotifyOfNetworkDisconnect)( |
| 428 JNIEnv* jni, jobject j_monitor, jlong j_native_monitor, | 433 JNIEnv* jni, jobject j_monitor, jlong j_native_monitor, |
| 429 jlong network_handle) { | 434 jlong network_handle) { |
| 430 AndroidNetworkMonitor* network_monitor = | 435 AndroidNetworkMonitor* network_monitor = |
| 431 reinterpret_cast<AndroidNetworkMonitor*>(j_native_monitor); | 436 reinterpret_cast<AndroidNetworkMonitor*>(j_native_monitor); |
| 432 network_monitor->OnNetworkDisconnected( | 437 network_monitor->OnNetworkDisconnected( |
| 433 static_cast<NetworkHandle>(network_handle)); | 438 static_cast<NetworkHandle>(network_handle)); |
| 434 } | 439 } |
| 435 | 440 |
| 436 } // namespace webrtc_jni | 441 } // namespace webrtc_jni |
| OLD | NEW |