1 /*
2  *  Copyright 2015 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "webrtc/base/networkmonitor.h"
12 
13 #include "webrtc/base/checks.h"
14 #include "webrtc/base/common.h"
15 
16 namespace {
17 const uint32_t UPDATE_NETWORKS_MESSAGE = 1;
18 
19 // This is set by NetworkMonitorFactory::SetFactory and the caller of
20 // NetworkMonitorFactory::SetFactory must be responsible for calling
21 // ReleaseFactory to destroy the factory.
22 rtc::NetworkMonitorFactory* network_monitor_factory = nullptr;
23 }  // namespace
24 
25 namespace rtc {
NetworkMonitorInterface()26 NetworkMonitorInterface::NetworkMonitorInterface() {}
27 
~NetworkMonitorInterface()28 NetworkMonitorInterface::~NetworkMonitorInterface() {}
29 
NetworkMonitorBase()30 NetworkMonitorBase::NetworkMonitorBase() : worker_thread_(Thread::Current()) {}
~NetworkMonitorBase()31 NetworkMonitorBase::~NetworkMonitorBase() {}
32 
OnNetworksChanged()33 void NetworkMonitorBase::OnNetworksChanged() {
34   LOG(LS_VERBOSE) << "Network change is received at the network monitor";
35   worker_thread_->Post(RTC_FROM_HERE, this, UPDATE_NETWORKS_MESSAGE);
36 }
37 
OnMessage(Message * msg)38 void NetworkMonitorBase::OnMessage(Message* msg) {
39   RTC_DCHECK(msg->message_id == UPDATE_NETWORKS_MESSAGE);
40   SignalNetworksChanged();
41 }
42 
NetworkMonitorFactory()43 NetworkMonitorFactory::NetworkMonitorFactory() {}
~NetworkMonitorFactory()44 NetworkMonitorFactory::~NetworkMonitorFactory() {}
45 
SetFactory(NetworkMonitorFactory * factory)46 void NetworkMonitorFactory::SetFactory(NetworkMonitorFactory* factory) {
47   if (network_monitor_factory != nullptr) {
48     delete network_monitor_factory;
49   }
50   network_monitor_factory = factory;
51 }
52 
ReleaseFactory(NetworkMonitorFactory * factory)53 void NetworkMonitorFactory::ReleaseFactory(NetworkMonitorFactory* factory) {
54   if (factory == network_monitor_factory) {
55     SetFactory(nullptr);
56   }
57 }
58 
GetFactory()59 NetworkMonitorFactory* NetworkMonitorFactory::GetFactory() {
60   return network_monitor_factory;
61 }
62 
63 }  // namespace rtc
64