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 "rtc_base/networkmonitor.h"
12 
13 #include "rtc_base/checks.h"
14 
15 namespace {
16 const uint32_t UPDATE_NETWORKS_MESSAGE = 1;
17 
18 // This is set by NetworkMonitorFactory::SetFactory and the caller of
19 // NetworkMonitorFactory::SetFactory must be responsible for calling
20 // ReleaseFactory to destroy the factory.
21 rtc::NetworkMonitorFactory* network_monitor_factory = nullptr;
22 }  // namespace
23 
24 namespace rtc {
NetworkMonitorInterface()25 NetworkMonitorInterface::NetworkMonitorInterface() {}
26 
~NetworkMonitorInterface()27 NetworkMonitorInterface::~NetworkMonitorInterface() {}
28 
NetworkMonitorBase()29 NetworkMonitorBase::NetworkMonitorBase() : worker_thread_(Thread::Current()) {}
~NetworkMonitorBase()30 NetworkMonitorBase::~NetworkMonitorBase() {}
31 
OnNetworksChanged()32 void NetworkMonitorBase::OnNetworksChanged() {
33   RTC_LOG(LS_VERBOSE) << "Network change is received at the network monitor";
34   worker_thread_->Post(RTC_FROM_HERE, this, UPDATE_NETWORKS_MESSAGE);
35 }
36 
OnMessage(Message * msg)37 void NetworkMonitorBase::OnMessage(Message* msg) {
38   RTC_DCHECK(msg->message_id == UPDATE_NETWORKS_MESSAGE);
39   SignalNetworksChanged();
40 }
41 
NetworkMonitorFactory()42 NetworkMonitorFactory::NetworkMonitorFactory() {}
~NetworkMonitorFactory()43 NetworkMonitorFactory::~NetworkMonitorFactory() {}
44 
SetFactory(NetworkMonitorFactory * factory)45 void NetworkMonitorFactory::SetFactory(NetworkMonitorFactory* factory) {
46   if (network_monitor_factory != nullptr) {
47     delete network_monitor_factory;
48   }
49   network_monitor_factory = factory;
50 }
51 
ReleaseFactory(NetworkMonitorFactory * factory)52 void NetworkMonitorFactory::ReleaseFactory(NetworkMonitorFactory* factory) {
53   if (factory == network_monitor_factory) {
54     SetFactory(nullptr);
55   }
56 }
57 
GetFactory()58 NetworkMonitorFactory* NetworkMonitorFactory::GetFactory() {
59   return network_monitor_factory;
60 }
61 
62 }  // namespace rtc
63