Index: webrtc/base/network.cc |
diff --git a/webrtc/base/network.cc b/webrtc/base/network.cc |
index bc714e30f405d3e23c49cd1bf430d0547f8efba9..879c1e4529d9f560e0b550795dc7f4826a5ae9d1 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_->SignalNetworksChanged.connect( |
+ this, &BasicNetworkManager::OnNetworksChanged); |
+ network_monitor_->Start(); |
+} |
+ |
+void BasicNetworkManager::StopNetworkMonitor() { |
+ if (!network_monitor_) { |
+ return; |
+ } |
+ network_monitor_->Stop(); |
+ 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); |
} |