Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(326)

Unified Diff: talk/app/webrtc/java/jni/androidnetworkmonitor_jni.h

Issue 1556743002: Bind a socket to a network if the network handle is set. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Addressed comments Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698