Chromium Code Reviews| Index: talk/app/webrtc/java/jni/androidnetworkmonitor_jni.h |
| diff --git a/talk/app/webrtc/java/jni/androidnetworkmonitor_jni.h b/talk/app/webrtc/java/jni/androidnetworkmonitor_jni.h |
| index 3f5110c2c4f14093adb6d04edb7bffa560d604dc..8272608005b5f944fdad87138cf6040b740261b7 100644 |
| --- a/talk/app/webrtc/java/jni/androidnetworkmonitor_jni.h |
| +++ b/talk/app/webrtc/java/jni/androidnetworkmonitor_jni.h |
| @@ -30,11 +30,39 @@ |
| #include "webrtc/base/networkmonitor.h" |
| +#include <map> |
| + |
| +#include "webrtc/base/criticalsection.h" |
| #include "webrtc/base/thread_checker.h" |
| #include "talk/app/webrtc/java/jni/jni_helpers.h" |
| namespace webrtc_jni { |
| +typedef uint32_t NetworkHandle; |
| + |
| +// c++ equivalent of java NetworkMonitorAutoDetect.ConnectionType. |
| +enum NetworkType { |
| + NETWORK_UNKNOWN, |
| + NETWORK_ETHERNET, |
| + NETWORK_WIFI, |
| + NETWORK_4G, |
| + NETWORK_3G, |
| + NETWORK_2G, |
| + NETWORK_BLUETOOTH, |
| + NETWORK_NONE |
| +}; |
| + |
| +// The information is collected from Android OS so that the native code can get |
| +// the network type and handle (Android network ID) for each interface. |
|
pthatcher1
2016/01/15 19:56:11
is collected => collected
from Android OS => from
|
| +struct NetworkInformation { |
| + std::string interface_name; |
| + NetworkHandle handle; |
| + NetworkType type; |
| + std::vector<rtc::IPAddress> ip_addresses; |
| + |
| + std::string ToString() const; |
| +}; |
| + |
| class AndroidNetworkMonitor : public rtc::NetworkMonitorBase { |
| public: |
| AndroidNetworkMonitor(); |
| @@ -44,22 +72,28 @@ class AndroidNetworkMonitor : public rtc::NetworkMonitorBase { |
| void Start() override; |
| void Stop() override; |
| + int BindSocketToNetwork(int socket_fd, |
| + const rtc::IPAddress& address) override; |
| + void OnNetworkAvailable(const NetworkInformation& network_info); |
| + |
| private: |
| JNIEnv* jni() { return AttachCurrentThreadIfNeeded(); } |
| + void OnNetworkAvailable_w(const NetworkInformation& network_info); |
| + |
| ScopedGlobalRef<jclass> j_network_monitor_class_; |
| ScopedGlobalRef<jobject> j_network_monitor_; |
| rtc::ThreadChecker thread_checker_; |
| static jobject application_context_; |
| + bool started_ = false; |
| + std::map<rtc::IPAddress, NetworkInformation> network_info_by_address_; |
| }; |
| class AndroidNetworkMonitorFactory : public rtc::NetworkMonitorFactory { |
| public: |
| AndroidNetworkMonitorFactory() {} |
| - rtc::NetworkMonitorInterface* CreateNetworkMonitor() override { |
| - return new AndroidNetworkMonitor(); |
| - } |
| + rtc::NetworkMonitorInterface* CreateNetworkMonitor() override; |
| }; |
| } // namespace webrtc_jni |