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 |