PTLib  Version 2.10.4
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:
PProcessStartup PObject

List of all members.

Public Types

enum  { DefaultRefreshInterval = 60000 }
typedef PIPSocket::InterfaceEntry InterfaceEntry

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.
void SetRefreshInterval (unsigned refresh)
 Change the refresh interval.
void SetRunMonitorThread (bool runMonitorThread)
 Change whether the monitor thread should run.
void Start ()
 Start monitoring network interfaces.
void Stop ()
 Stop monitoring network interfaces.
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.
bool IsValidBindingForDestination (const PIPSocket::Address &binding, const PIPSocket::Address &destination)
 Returns whether destination is reachable through binding or not.
bool GetInterfaceInfo (const PString &iface, InterfaceEntry &info) const
 Return information about an active interface given the descriptor string.
void SetInterfaceFilter (PInterfaceFilter *filter)
 Sets the monitor's interface filter.
bool HasInterfaceFilter () const
virtual void RefreshInterfaceList ()
void OnRemoveNatMethod (const PNatMethod *natMethod)

Static Public Member Functions

static bool IsMatchingInterface (const PString &iface, const InterfaceEntry &entry)
 Returns whether the descriptor string equals the interface entry.

Protected Types

typedef PSmartPtr
< PInterfaceMonitorClient
ClientPtr
typedef std::list
< PInterfaceMonitorClient * > 
ClientList_T

Protected Member Functions

virtual void OnShutdown ()
void UpdateThreadMain ()
void AddClient (PInterfaceMonitorClient *)
void RemoveClient (PInterfaceMonitorClient *)
virtual void OnInterfacesChanged (const PIPSocket::InterfaceTable &addedInterfaces, const PIPSocket::InterfaceTable &removedInterfaces)

Protected Attributes

ClientList_T m_clients
PMutex m_clientsMutex
PIPSocket::InterfaceTable m_interfaces
PMutex m_interfacesMutex
bool m_runMonitorThread
PTimeInterval m_refreshInterval
PMutex m_threadMutex
PThreadm_updateThread
PInterfaceFilterm_interfaceFilter
PIPSocket::RouteTableDetectorm_changedDetector

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

typedef std::list<PInterfaceMonitorClient *> PInterfaceMonitor::ClientList_T [protected]

Member Enumeration Documentation

anonymous enum
Enumerator:
DefaultRefreshInterval 

Constructor & Destructor Documentation

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

Member Function Documentation

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 
) [protected, virtual]
void PInterfaceMonitor::OnRemoveNatMethod ( const PNatMethod natMethod)
virtual void PInterfaceMonitor::OnShutdown ( ) [protected, virtual]

Reimplemented from PProcessStartup.

Return the singleton interface for the network monitor.

virtual void PInterfaceMonitor::RefreshInterfaceList ( ) [virtual]

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.

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.

Stop monitoring network interfaces.


Member Data Documentation

PIPSocket::InterfaceTable PInterfaceMonitor::m_interfaces [protected]

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines