1 /* 2 * Copyright 2020 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 #ifndef SDK_OBJC_NATIVE_SRC_OBJC_NETWORK_MONITOR_H_ 12 #define SDK_OBJC_NATIVE_SRC_OBJC_NETWORK_MONITOR_H_ 13 14 #include <vector> 15 16 #include "api/sequence_checker.h" 17 #include "rtc_base/network_monitor.h" 18 #include "rtc_base/network_monitor_factory.h" 19 #include "rtc_base/task_utils/pending_task_safety_flag.h" 20 #include "rtc_base/thread.h" 21 #include "rtc_base/thread_annotations.h" 22 #include "sdk/objc/components/network/RTCNetworkMonitor+Private.h" 23 #include "sdk/objc/native/src/network_monitor_observer.h" 24 25 namespace webrtc { 26 27 class ObjCNetworkMonitorFactory : public rtc::NetworkMonitorFactory { 28 public: 29 ObjCNetworkMonitorFactory() = default; 30 ~ObjCNetworkMonitorFactory() override = default; 31 32 rtc::NetworkMonitorInterface* CreateNetworkMonitor() override; 33 }; 34 35 class ObjCNetworkMonitor : public rtc::NetworkMonitorInterface, 36 public NetworkMonitorObserver { 37 public: 38 ObjCNetworkMonitor(); 39 ~ObjCNetworkMonitor() override; 40 41 void Start() override; 42 void Stop() override; 43 44 rtc::AdapterType GetAdapterType(const std::string& interface_name) override; 45 rtc::AdapterType GetVpnUnderlyingAdapterType( 46 const std::string& interface_name) override; 47 rtc::NetworkPreference GetNetworkPreference( 48 const std::string& interface_name) override; 49 bool IsAdapterAvailable(const std::string& interface_name) override; 50 51 // NetworkMonitorObserver override. 52 // Fans out updates to observers on the correct thread. 53 void OnPathUpdate( 54 std::map<std::string, rtc::AdapterType> adapter_type_by_name) override; 55 56 private: 57 rtc::Thread* thread_ = nullptr; 58 bool started_ = false; 59 std::map<std::string, rtc::AdapterType> adapter_type_by_name_ 60 RTC_GUARDED_BY(thread_); 61 rtc::scoped_refptr<PendingTaskSafetyFlag> safety_flag_; 62 RTCNetworkMonitor* network_monitor_ = nil; 63 }; 64 65 } // namespace webrtc 66 67 #endif // SDK_OBJC_NATIVE_SRC_OBJC_NETWORK_MONITOR_H_ 68