Index: webrtc/base/network.cc |
diff --git a/webrtc/base/network.cc b/webrtc/base/network.cc |
index bc7d50528cfdfa58283617e5f360e8dbe65c6a0e..3a3ca860fdc5c6249d5c743e561d7ee3e5b72b9c 100644 |
--- a/webrtc/base/network.cc |
+++ b/webrtc/base/network.cc |
@@ -48,6 +48,7 @@ |
#include <algorithm> |
#include "webrtc/base/logging.h" |
+#include "webrtc/base/networkmonitor.h" |
#include "webrtc/base/scoped_ptr.h" |
#include "webrtc/base/socket.h" // includes something that makes windows happy |
#include "webrtc/base/stream.h" |
@@ -329,6 +330,11 @@ BasicNetworkManager::BasicNetworkManager() |
BasicNetworkManager::~BasicNetworkManager() { |
} |
+void BasicNetworkManager::OnNetworksChanged() { |
+ LOG(LS_VERBOSE) << "Network change was observed at the network manager"; |
+ UpdateNetworksOnce(); |
+} |
+ |
#if defined(__native_client__) |
bool BasicNetworkManager::CreateNetworks(bool include_ignored, |
@@ -663,6 +669,7 @@ void BasicNetworkManager::StartUpdating() { |
thread_->Post(this, kSignalNetworksMessage); |
} else { |
thread_->Post(this, kUpdateNetworksMessage); |
+ StartNetworkMonitor(); |
} |
++start_count_; |
} |
@@ -676,13 +683,36 @@ void BasicNetworkManager::StopUpdating() { |
if (!start_count_) { |
thread_->Clear(this); |
sent_first_update_ = false; |
+ StopNetworkMonitor(); |
} |
} |
+void BasicNetworkManager::StartNetworkMonitor() { |
+ NetworkMonitorFactory* factory = NetworkMonitorFactory::GetFactory(); |
+ if (factory == nullptr) { |
+ return; |
+ } |
+ network_monitor_.reset(factory->CreateNetworkMonitor()); |
+ if (!network_monitor_) { |
+ return; |
+ } |
+ network_monitor_->StartMonitoring(); |
+ network_monitor_->SignalNetworksChanged.connect( |
+ this, &BasicNetworkManager::OnNetworksChanged); |
pthatcher1
2015/10/15 08:11:43
Shouldn't we connect before starting?
honghaiz3
2015/10/15 19:02:41
Done.
|
+} |
+ |
+void BasicNetworkManager::StopNetworkMonitor() { |
+ if (!network_monitor_) { |
+ return; |
+ } |
+ network_monitor_->StopMonitoring(); |
+ network_monitor_.reset(); |
+} |
+ |
void BasicNetworkManager::OnMessage(Message* msg) { |
switch (msg->message_id) { |
- case kUpdateNetworksMessage: { |
- DoUpdateNetworks(); |
+ case kUpdateNetworksMessage: { |
+ UpdateNetworksContinually(); |
break; |
} |
case kSignalNetworksMessage: { |
@@ -694,7 +724,7 @@ void BasicNetworkManager::OnMessage(Message* msg) { |
} |
} |
-void BasicNetworkManager::DoUpdateNetworks() { |
+void BasicNetworkManager::UpdateNetworksOnce() { |
if (!start_count_) |
return; |
@@ -711,7 +741,10 @@ void BasicNetworkManager::DoUpdateNetworks() { |
sent_first_update_ = true; |
} |
} |
+} |
+void BasicNetworkManager::UpdateNetworksContinually() { |
+ UpdateNetworksOnce(); |
thread_->PostDelayed(kNetworksUpdateIntervalMs, this, kUpdateNetworksMessage); |
} |