NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.0: NDN, CCN, CCNx, content centric networks
API Documentation
network-monitor-impl-osx.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
53 #include "ndn-cxx-config.hpp"
54 
55 #ifdef NDN_CXX_HAVE_COREFOUNDATION_COREFOUNDATION_H
56 
58 
59 namespace ndn {
60 namespace util {
61 
62 NetworkMonitor::Impl::Impl(NetworkMonitor& nm, boost::asio::io_service& io)
63  : m_nm(nm)
64  , m_scheduler(io)
65  , m_cfLoopEvent(m_scheduler)
66 {
67  scheduleCfLoop();
68 
69  // Potentially useful System Configuration regex patterns:
70  //
71  // State:/Network/Interface/.*/Link
72  // State:/Network/Interface/.*/IPv4
73  // State:/Network/Interface/.*/IPv6
74  //
75  // State:/Network/Global/DNS
76  // State:/Network/Global/IPv4
77  //
78  // Potentially useful notifications from Darwin Notify Center:
79  //
80  // com.apple.system.config.network_change
81  //
82  CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
83  static_cast<void*>(this),
84  &Impl::afterNotificationCenterEvent,
85  CFSTR("com.apple.system.config.network_change"),
86  nullptr, // object to observe
87  CFNotificationSuspensionBehaviorDeliverImmediately);
88 }
89 
90 NetworkMonitor::Impl::~Impl()
91 {
92  CFNotificationCenterRemoveEveryObserver(CFNotificationCenterGetDarwinNotifyCenter(),
93  static_cast<void*>(this));
94 }
95 
96 void
97 NetworkMonitor::Impl::afterNotificationCenterEvent(CFNotificationCenterRef center,
98  void *observer,
99  CFStringRef name,
100  const void *object,
101  CFDictionaryRef userInfo)
102 {
103  static_cast<Impl*>(observer)->m_nm.onNetworkStateChanged();
104 }
105 
106 void
107 NetworkMonitor::Impl::scheduleCfLoop()
108 {
109  // poll each second for new events
110  m_cfLoopEvent = m_scheduler.scheduleEvent(time::seconds(1), bind(&Impl::pollCfLoop, this));
111 }
112 
113 void
114 NetworkMonitor::Impl::pollCfLoop()
115 {
116  // this should dispatch ready events and exit
117  CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, true);
118 
119  scheduleCfLoop();
120 }
121 
122 } // namespace util
123 } // namespace ndn
124 
125 #endif // NDN_CXX_HAVE_COREFOUNDATION_COREFOUNDATION_H
Impl(NetworkMonitor &nm, boost::asio::io_service &io)
Copyright (c) 2011-2015 Regents of the University of California.