PTLib  Version 2.18.8
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PInterfaceMonitor Class Reference

This class is a singleton that will monitor the network interfaces on a machine and update a list aof clients on any changes to the number or addresses of the interfaces. More...

#include <psockbun.h>

Inheritance diagram for PInterfaceMonitor:
Collaboration diagram for PInterfaceMonitor:

Classes

struct  InterfaceChange
 Information on the interface change. More...
 

Public Types

enum  { DefaultRefreshInterval = 60000 }
 
enum  { DefaultPriority = 50 }
 
typedef PIPSocket::InterfaceEntry InterfaceEntry
 
typedef PNotifierTemplate
< InterfaceChange
Notifier
 Type for disposition notifiers. More...
 
- Public Types inherited from PObject
enum  Comparison { LessThan = -1, EqualTo = 0, GreaterThan = 1 }
 Result of the comparison operation performed by the Compare() function. More...
 

Public Member Functions

 PInterfaceMonitor (unsigned refreshInterval=DefaultRefreshInterval, bool runMonitorThread=true)
 
virtual ~PInterfaceMonitor ()
 
 PFACTORY_GET_SINGLETON (PProcessStartupFactory, PInterfaceMonitor)
 Return the singleton interface for the network monitor. More...
 
void SetRefreshInterval (unsigned refresh)
 Change the refresh interval. More...
 
void SetRunMonitorThread (bool runMonitorThread)
 Change whether the monitor thread should run. More...
 
void Start ()
 Start monitoring network interfaces. More...
 
void Stop ()
 Stop monitoring network interfaces. More...
 
PStringArray GetInterfaces (bool includeLoopBack=false, const PIPSocket::Address &destination=PIPSocket::GetDefaultIpAny())
 Get an array of all current interface descriptors, possibly including the loopback (127.0.0.1) interface. More...
 
bool IsValidBindingForDestination (const PIPSocket::Address &binding, const PIPSocket::Address &destination)
 Returns whether destination is reachable through binding or not. More...
 
bool GetInterfaceInfo (const PString &iface, InterfaceEntry &info) const
 Return information about an active interface given the descriptor string. More...
 
void AddNotifier (const Notifier &notifier, unsigned priority=DefaultPriority)
 Add a notifier for interface changes. More...
 
void RemoveNotifier (const Notifier &notifier)
 
void SetInterfaceFilter (PInterfaceFilter *filter)
 Sets the monitor's interface filter. More...
 
bool HasInterfaceFilter () const
 
- Public Member Functions inherited from PProcessStartup
virtual void OnStartup ()
 
- Public Member Functions inherited from PObject
__inline unsigned GetTraceContextIdentifier () const
 Get PTRACE context identifier. More...
 
__inline void SetTraceContextIdentifier (unsigned id)
 
__inline void SetTraceContextIdentifier (const PObject &obj)
 
__inline void SetTraceContextIdentifier (const PObject *obj)
 
__inline void CopyTraceContextIdentifier (PObject &obj) const
 
__inline void CopyTraceContextIdentifier (PObject *obj) const
 
virtual ~PObject ()
 
__inline const char * GetClass () const
 
__inline bool IsClass (const char *name) const
 
__inline const PObjectPTraceObjectInstance () const
 
virtual PObjectClone () const
 Create a copy of the class on the heap. More...
 
template<class CLS >
CLS * CloneAs () const
 As for Clone() but converts to specified type. More...
 
virtual PINDEX HashFunction () const
 This function yields a hash value required by the PDictionary class. More...
 
virtual Comparison Compare (const PObject &obj) const
 Compare the two objects and return their relative rank. More...
 
virtual Comparison CompareObjectMemoryDirect (const PObject &obj) const
 Determine the byte wise comparison of two objects. More...
 
bool operator== (const PObject &obj) const
 Compare the two objects. More...
 
bool operator!= (const PObject &obj) const
 Compare the two objects. More...
 
bool operator< (const PObject &obj) const
 Compare the two objects. More...
 
bool operator> (const PObject &obj) const
 Compare the two objects. More...
 
bool operator<= (const PObject &obj) const
 Compare the two objects. More...
 
bool operator>= (const PObject &obj) const
 Compare the two objects. More...
 
virtual void PrintOn (ostream &strm) const
 Output the contents of the object to the stream. More...
 
virtual void ReadFrom (istream &strm)
 Input the contents of the object from the stream. More...
 

Static Public Member Functions

static bool IsMatchingInterface (const PString &iface, const InterfaceEntry &entry)
 Returns whether the descriptor string equals the interface entry. More...
 
- Static Public Member Functions inherited from PObject
static __inline void CopyTraceContextIdentifier (PObject &to, const PObject &from)
 
static __inline void CopyTraceContextIdentifier (PObject &to, const PObject *from)
 
static __inline void CopyTraceContextIdentifier (PObject *to, const PObject &from)
 
static __inline void CopyTraceContextIdentifier (PObject *to, const PObject *from)
 
static __inline const char * Class ()
 
static __inline const PObjectPTraceObjectInstance (const char *)
 
static __inline const PObjectPTraceObjectInstance (const PObject *obj)
 
template<typename T >
static Comparison Compare2 (T v1, T v2)
 Compare two types, returning Comparison type. More...
 
static Comparison InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size)
 Internal function caled from CompareObjectMemoryDirect() More...
 

Protected Types

typedef std::multimap
< unsigned, Notifier
Notifiers
 

Protected Member Functions

virtual void OnShutdown ()
 
void UpdateThreadMain ()
 
virtual void RefreshInterfaceList ()
 
virtual void OnInterfacesChanged (const PIPSocket::InterfaceTable &addedInterfaces, const PIPSocket::InterfaceTable &removedInterfaces)
 
 PDECLARE_MUTEX (m_notifiersMutex)
 
 PDECLARE_MUTEX (m_interfacesMutex)
 
 PDECLARE_MUTEX (m_threadMutex)
 
- Protected Member Functions inherited from PObject
 PObject ()
 Constructor for PObject, made protected so cannot ever create one on its own. More...
 

Protected Attributes

Notifiers m_notifiers
 
PIPSocket::InterfaceTable m_interfaces
 
bool m_runMonitorThread
 
PTimeInterval m_refreshInterval
 
PThreadm_updateThread
 
PInterfaceFilterm_interfaceFilter
 
PIPSocket::RouteTableDetectorm_changedDetector
 
- Protected Attributes inherited from PObject
unsigned m_traceContextIdentifier
 

Detailed Description

This class is a singleton that will monitor the network interfaces on a machine and update a list aof clients on any changes to the number or addresses of the interfaces.

A user may override this singleton by creating a derived class and making a static instance of it before any monitor client classes are created. This would typically be done in the users main program.

Member Typedef Documentation

Type for disposition notifiers.

typedef std::multimap<unsigned, Notifier> PInterfaceMonitor::Notifiers
protected

Member Enumeration Documentation

anonymous enum
Enumerator
DefaultRefreshInterval 
anonymous enum
Enumerator
DefaultPriority 

Constructor & Destructor Documentation

PInterfaceMonitor::PInterfaceMonitor ( unsigned  refreshInterval = DefaultRefreshInterval,
bool  runMonitorThread = true 
)
virtual PInterfaceMonitor::~PInterfaceMonitor ( )
virtual

Member Function Documentation

void PInterfaceMonitor::AddNotifier ( const Notifier notifier,
unsigned  priority = DefaultPriority 
)

Add a notifier for interface changes.

Parameters
notifierNotifier to be called by interface monitor
priorityPriority for notification
bool PInterfaceMonitor::GetInterfaceInfo ( const PString iface,
InterfaceEntry info 
) const

Return information about an active interface given the descriptor string.

Note that when searchin the descriptor may be a partial match e.g. "10.0.1.11" or "%eth0" may be used.

Parameters
ifaceInterface desciptor name
infoInformation on the interface
PStringArray PInterfaceMonitor::GetInterfaces ( bool  includeLoopBack = false,
const PIPSocket::Address destination = PIPSocket::GetDefaultIpAny() 
)

Get an array of all current interface descriptors, possibly including the loopback (127.0.0.1) interface.

Note the names are of the form ipname, eg "10.0.1.11%3Com 3C90x Ethernet Adapter" or "192.168.0.10%eth0"

Parameters
includeLoopBackFlag for if loopback is to included in list
destinationOptional destination for selecting specific interface
bool PInterfaceMonitor::HasInterfaceFilter ( ) const
inline

References m_interfaceFilter.

static bool PInterfaceMonitor::IsMatchingInterface ( const PString iface,
const InterfaceEntry entry 
)
static

Returns whether the descriptor string equals the interface entry.

Note that when searching the descriptor may be a partial match e.g. "10.0.1.11" or "%eth0" may be used.

Parameters
ifaceInterface descriptor
entryInterface entry
bool PInterfaceMonitor::IsValidBindingForDestination ( const PIPSocket::Address binding,
const PIPSocket::Address destination 
)

Returns whether destination is reachable through binding or not.

The default behaviour returns true unless there is an interface filter installed an the filter does not return binding among it's interfaces.

Parameters
bindingInterface binding to test
destinationDestination to test against the binding
virtual void PInterfaceMonitor::OnInterfacesChanged ( const PIPSocket::InterfaceTable &  addedInterfaces,
const PIPSocket::InterfaceTable &  removedInterfaces 
)
protectedvirtual
virtual void PInterfaceMonitor::OnShutdown ( )
protectedvirtual

Reimplemented from PProcessStartup.

PInterfaceMonitor::PDECLARE_MUTEX ( m_notifiersMutex  )
protected
PInterfaceMonitor::PDECLARE_MUTEX ( m_interfacesMutex  )
protected
PInterfaceMonitor::PDECLARE_MUTEX ( m_threadMutex  )
protected
PInterfaceMonitor::PFACTORY_GET_SINGLETON ( PProcessStartupFactory  ,
PInterfaceMonitor   
)

Return the singleton interface for the network monitor.

virtual void PInterfaceMonitor::RefreshInterfaceList ( )
protectedvirtual
void PInterfaceMonitor::RemoveNotifier ( const Notifier notifier)
Parameters
notifierNotifier to be called by interface monitor
void PInterfaceMonitor::SetInterfaceFilter ( PInterfaceFilter filter)

Sets the monitor's interface filter.

Note that the monitor instance handles deletion of the filter.

void PInterfaceMonitor::SetRefreshInterval ( unsigned  refresh)

Change the refresh interval.

void PInterfaceMonitor::SetRunMonitorThread ( bool  runMonitorThread)

Change whether the monitor thread should run.

void PInterfaceMonitor::Start ( )

Start monitoring network interfaces.

If the monitoring thread is already running, then this will cause an refresh of the interface list as soon as possible. Note that this will happen asynchronously.

void PInterfaceMonitor::Stop ( )

Stop monitoring network interfaces.

void PInterfaceMonitor::UpdateThreadMain ( )
protected

Member Data Documentation

PIPSocket::RouteTableDetector* PInterfaceMonitor::m_changedDetector
protected
PInterfaceFilter* PInterfaceMonitor::m_interfaceFilter
protected

Referenced by HasInterfaceFilter().

PIPSocket::InterfaceTable PInterfaceMonitor::m_interfaces
protected
Notifiers PInterfaceMonitor::m_notifiers
protected
PTimeInterval PInterfaceMonitor::m_refreshInterval
protected
bool PInterfaceMonitor::m_runMonitorThread
protected
PThread* PInterfaceMonitor::m_updateThread
protected

The documentation for this class was generated from the following file: