PTLib  Version 2.10.11
PMonitoredSocketBundle Class Reference

This concrete class bundles a set of UDP sockets which are dynamically adjusted as interfaces are added and removed from the system. More...

#include <psockbun.h>

Inheritance diagram for PMonitoredSocketBundle:
PMonitoredSockets PInterfaceMonitorClient PSafeObject PObject

Public Member Functions

 PMonitoredSocketBundle (bool reuseAddr=false, PNatMethod *natMethod=NULL)
 
 ~PMonitoredSocketBundle ()
 
virtual 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...
 
virtual PBoolean Open (WORD port)
 Open the socket(s) using the specified port. More...
 
virtual PBoolean Close ()
 Close all socket(s) More...
 
virtual PBoolean GetAddress (const PString &iface, PIPSocket::Address &address, WORD &port, PBoolean usingNAT) const
 Get the local address for the given interface. More...
 
virtual PChannel::Errors WriteToBundle (const void *buf, PINDEX len, const PIPSocket::Address &addr, WORD port, const PString &iface, PINDEX &lastWriteCount)
 Write to the remote address/port using the socket(s) available. More...
 
virtual PChannel::Errors ReadFromBundle (void *buf, PINDEX len, PIPSocket::Address &addr, WORD &port, PString &iface, PINDEX &lastReadCount, const PTimeInterval &timeout)
 Read fram a remote address/port using the socket(s) available. More...
 
- Public Member Functions inherited from PMonitoredSockets
PBoolean IsOpen () const
 Indicate if the socket(s) are open and ready for reads/writes. More...
 
WORD GetPort () const
 Return the local port number being used by the socket(s) More...
 
void SetNatMethod (PNatMethod *method)
 Set the NAT method, eg STUN client pointer. More...
 
PNatMethodGetNatMethod () const
 
- Public Member Functions inherited from PInterfaceMonitorClient
 PInterfaceMonitorClient (PINDEX priority=DefaultPriority)
 
 ~PInterfaceMonitorClient ()
 
virtual PBoolean GetInterfaceInfo (const PString &iface, InterfaceEntry &info) const
 Return information about an active interface given the descriptor string. More...
 
PINDEX GetPriority () const
 Returns the priority of this client. More...
 
- Public Member Functions inherited from PSafeObject
 PSafeObject (PSafeObject *indirectLock=NULL)
 Create a thread safe object. More...
 
PBoolean SafeReference ()
 Increment the reference count for object. More...
 
PBoolean SafeDereference ()
 Decrement the reference count for object. More...
 
PBoolean LockReadOnly () const
 Lock the object for Read Only access. More...
 
void UnlockReadOnly () const
 Release the read only lock on an object. More...
 
PBoolean LockReadWrite ()
 Lock the object for Read/Write access. More...
 
void UnlockReadWrite ()
 Release the read/write lock on an object. More...
 
void SafeRemove ()
 Set the removed flag. More...
 
PBoolean SafelyCanBeDeleted () const
 Determine if the object can be safely deleted. More...
 
virtual bool GarbageCollection ()
 Do any garbage collection that may be required by the object so that it may be finally deleted. More...
 
- Public Member Functions inherited from PObject
virtual ~PObject ()
 
virtual PObjectClone () const
 Create a copy of the class on the heap. 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 const char * GetClass (unsigned ancestor=0) const
 Get the current dynamic type of the object instance. More...
 
PBoolean IsClass (const char *cls) const
 
virtual PBoolean InternalIsDescendant (const char *clsName) const
 Determine if the dynamic type of the current instance is a descendent of the specified class. 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...
 

Protected Types

typedef std::map< std::string, SocketInfo > SocketInfoMap_T
 

Protected Member Functions

virtual void OnAddInterface (const InterfaceEntry &entry)
 Call back function for when an interface has been added to the system. More...
 
virtual void OnRemoveInterface (const InterfaceEntry &entry)
 Call back function for when an interface has been removed from the system. More...
 
void OpenSocket (const PString &iface)
 
void CloseSocket (SocketInfoMap_T::iterator iterSocket)
 
- Protected Member Functions inherited from PMonitoredSockets
 PMonitoredSockets (bool reuseAddr, PNatMethod *natMethod)
 
virtual void OnRemoveNatMethod (const PNatMethod *natMethod)
 Called when a NAT method is about to be destroyed. More...
 
bool CreateSocket (SocketInfo &info, const PIPSocket::Address &binding)
 
bool DestroySocket (SocketInfo &info)
 
bool GetSocketAddress (const SocketInfo &info, PIPSocket::Address &address, WORD &port, bool usingNAT) const
 
PChannel::Errors WriteToSocket (const void *buf, PINDEX len, const PIPSocket::Address &addr, WORD port, const SocketInfo &info, PINDEX &lastWriteCount)
 
PChannel::Errors ReadFromSocket (SocketInfo &info, void *buf, PINDEX len, PIPSocket::Address &addr, WORD &port, PINDEX &lastReadCount, const PTimeInterval &timeout)
 
PChannel::Errors ReadFromSocket (PSocket::SelectList &readers, PUDPSocket *&socket, void *buf, PINDEX len, PIPSocket::Address &addr, WORD &port, PINDEX &lastReadCount, const PTimeInterval &timeout)
 
- Protected Member Functions inherited from PObject
 PObject ()
 Constructor for PObject, made protected so cannot ever create one on its own. More...
 

Protected Attributes

SocketInfoMap_T socketInfoMap
 
- Protected Attributes inherited from PMonitoredSockets
WORD localPort
 
bool reuseAddress
 
PNatMethodnatMethod
 
bool opened
 
PUDPSocket interfaceAddedSignal
 
- Protected Attributes inherited from PInterfaceMonitorClient
PINDEX priority
 

Additional Inherited Members

- Public Types inherited from PInterfaceMonitorClient
enum  { DefaultPriority = 50 }
 
typedef PIPSocket::InterfaceEntry InterfaceEntry
 
- Public Types inherited from PObject
enum  Comparison { LessThan = -1, EqualTo = 0, GreaterThan = 1 }
 Result of the comparison operation performed by the Compare() function. More...
 
- Static Public Member Functions inherited from PMonitoredSockets
static PMonitoredSocketsCreate (const PString &iface, bool reuseAddr=false, PNatMethod *natMethod=NULL)
 Create a new monitored socket instance based on the interface descriptor. More...
 
- Static Public Member Functions inherited from PObject
static Comparison InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size)
 Internal function caled from CompareObjectMemoryDirect() More...
 
static const char * Class ()
 Get the name of the class as a C string. More...
 

Detailed Description

This concrete class bundles a set of UDP sockets which are dynamically adjusted as interfaces are added and removed from the system.

Member Typedef Documentation

typedef std::map<std::string, SocketInfo> PMonitoredSocketBundle::SocketInfoMap_T
protected

Constructor & Destructor Documentation

PMonitoredSocketBundle::PMonitoredSocketBundle ( bool  reuseAddr = false,
PNatMethod natMethod = NULL 
)
PMonitoredSocketBundle::~PMonitoredSocketBundle ( )

Member Function Documentation

virtual PBoolean PMonitoredSocketBundle::Close ( )
virtual

Close all socket(s)

Implements PMonitoredSockets.

void PMonitoredSocketBundle::CloseSocket ( SocketInfoMap_T::iterator  iterSocket)
protected
virtual PBoolean PMonitoredSocketBundle::GetAddress ( const PString iface,
PIPSocket::Address address,
WORD &  port,
PBoolean  usingNAT 
) const
virtual

Get the local address for the given interface.

Parameters
ifaceInterface to get address for
addressAddress of interface
portPort listening on
usingNATRequire NAT address/port

Implements PMonitoredSockets.

virtual PStringArray PMonitoredSocketBundle::GetInterfaces ( bool  includeLoopBack = false,
const PIPSocket::Address destination = PIPSocket::GetDefaultIpAny() 
)
virtual

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". If destination is not 'any' and a filter is set, filters the interface list before returning it.

Parameters
includeLoopBackFlag for if loopback is to included in list
destinationOptional destination for selecting specific interface

Reimplemented from PInterfaceMonitorClient.

virtual void PMonitoredSocketBundle::OnAddInterface ( const InterfaceEntry entry)
protectedvirtual

Call back function for when an interface has been added to the system.

Implements PInterfaceMonitorClient.

virtual void PMonitoredSocketBundle::OnRemoveInterface ( const InterfaceEntry entry)
protectedvirtual

Call back function for when an interface has been removed from the system.

Implements PInterfaceMonitorClient.

virtual PBoolean PMonitoredSocketBundle::Open ( WORD  port)
virtual

Open the socket(s) using the specified port.

If port is zero then a system allocated port is used. In this case and when multiple interfaces are supported, all sockets use the same dynamic port value.

Returns true if all sockets are opened.

Implements PMonitoredSockets.

void PMonitoredSocketBundle::OpenSocket ( const PString iface)
protected
virtual PChannel::Errors PMonitoredSocketBundle::ReadFromBundle ( void *  buf,
PINDEX  len,
PIPSocket::Address addr,
WORD &  port,
PString iface,
PINDEX &  lastReadCount,
const PTimeInterval timeout 
)
virtual

Read fram a remote address/port using the socket(s) available.

If the iface parameter is empty, then the first data received on any socket(s) is used, and the iface parameter is set to the name of that interface. Otherwise the iface parameter indicates the specific interface socket to read the data from.

Implements PMonitoredSockets.

virtual PChannel::Errors PMonitoredSocketBundle::WriteToBundle ( const void *  buf,
PINDEX  len,
const PIPSocket::Address addr,
WORD  port,
const PString iface,
PINDEX &  lastWriteCount 
)
virtual

Write to the remote address/port using the socket(s) available.

If the iface parameter is empty, then the data is written to all socket(s). Otherwise the iface parameter indicates the specific interface socket to write the data to.

Implements PMonitoredSockets.

Member Data Documentation

SocketInfoMap_T PMonitoredSocketBundle::socketInfoMap
protected

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