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

This is a base class for UDP socket(s) that are monitored for interface changes. More...

#include <psockbun.h>

Inheritance diagram for PMonitoredSockets:
Collaboration diagram for PMonitoredSockets:

Classes

struct  BundleParams
 
struct  SocketInfo
 

Public Types

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...
 

Public Member Functions

virtual PBoolean Open (WORD port)=0
 Open the socket(s) using the specified port. More...
 
PBoolean IsOpen () const
 Indicate if the socket(s) are open and ready for reads/writes. More...
 
virtual PBoolean Close ()=0
 Close all socket(s) More...
 
WORD GetPort () const
 Return the local port number being used by the socket(s) More...
 
virtual bool SetQoS (const PIPSocket::QoS &qos)=0
 Set the quality of service for sockets. More...
 
virtual PBoolean GetAddress (const PString &iface, PIPSocket::Address &address, WORD &port, PBoolean usingNAT) const =0
 Get the local address for the given interface. More...
 
virtual void WriteToBundle (BundleParams &param)=0
 Write to the remote address/port using the socket(s) available. More...
 
virtual void ReadFromBundle (BundleParams &param)=0
 Read fram a remote address/port using the socket(s) available. More...
 
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 bool GetInterfaceInfo (const PString &iface, InterfaceEntry &info) const
 Return information about an active interface given the descriptor string. More...
 
- Public Member Functions inherited from PSafeObject
 PSafeObject ()
 Create a thread safe object. More...
 
 PSafeObject (const PSafeObject &other)
 
 PSafeObject (PSafeObject *indirectLock)
 
 PSafeObject (PReadWriteMutex &mutex)
 
 ~PSafeObject ()
 
PBoolean SafeReference ()
 Increment the reference count for object. More...
 
PBoolean SafeDereference ()
 Decrement the reference count for object. More...
 
__inline bool LockReadOnly () const
 Lock the object for Read Only access. More...
 
__inline bool LockReadOnly (const PDebugLocation &location) const
 
__inline void UnlockReadOnly () const
 Release the read only lock on an object. More...
 
__inline void UnlockReadOnly (const PDebugLocation &location) const
 
__inline bool LockReadWrite () const
 Lock the object for Read/Write access. More...
 
__inline bool LockReadWrite (const PDebugLocation &location) const
 
__inline void UnlockReadWrite () const
 Release the read/write lock on an object. More...
 
__inline void UnlockReadWrite (const PDebugLocation &location) const
 
void SafeRemove ()
 Set the removed flag. More...
 
unsigned IsSafelyBeingRemoved () const
 Indicate the object is being safely removed. 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...
 
unsigned GetSafeReferenceCount () const
 Get count of references to this object. More...
 
- 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 PMonitoredSocketsCreate (const PString &iface, bool reuseAddr=falseP_NAT_PARAM(PNatMethods *natMethods=NULL))
 Create a new monitored socket instance based on the interface descriptor. 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 Member Functions

 PMonitoredSockets (bool reuseAddrP_NAT_PARAM(PNatMethods *natMethods))
 
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
 
void ReadFromSocketList (PSocket::SelectList &readers, PUDPSocket *&socket, BundleParams &param)
 
- Protected Member Functions inherited from PObject
 PObject ()
 Constructor for PObject, made protected so cannot ever create one on its own. More...
 

Protected Attributes

WORD m_localPort
 
bool m_reuseAddress
 
bool m_opened
 
PUDPSocket m_interfaceAddedSignal
 
PIPSocket::QoS m_qos
 
- Protected Attributes inherited from PObject
unsigned m_traceContextIdentifier
 

Detailed Description

This is a base class for UDP socket(s) that are monitored for interface changes.

Two derived classes are available, one that is permanently bound to an IP address and/or interface name. The second will dynamically open/close ports as interfaces are added and removed from the system.

Member Typedef Documentation

Constructor & Destructor Documentation

PMonitoredSockets::PMonitoredSockets ( bool   reuseAddrP_NAT_PARAMPNatMethods *natMethods)
protected
Parameters
reuseAddrP_NAT_PARAMFlag for sharing socket/exclusve use NAT method to use to create sockets.

Member Function Documentation

virtual PBoolean PMonitoredSockets::Close ( )
pure virtual

Close all socket(s)

Implemented in PSingleMonitoredSocket, and PMonitoredSocketBundle.

static PMonitoredSockets* PMonitoredSockets::Create ( const PString iface,
bool  reuseAddr = falseP_NAT_PARAM(PNatMethods *natMethods=NULL) 
)
static

Create a new monitored socket instance based on the interface descriptor.

This will create a multiple or single socket derived class of PMonitoredSockets depending on the iface parameter.

If the iface parameter starts with a '' or "*%" then a bundle is created for all IP addresses for a specific interface.

If the iface has a non INADDR_ANY address value, with or without a iface qualifier, then only that IP address is listened to.

If the iface resolves to a specific INADDR_ANY or INADDR6_ANY, then only that version will be listened to, on all interfaces or

Finally if empty string or "*", than all IP versions and all interfaces are used.

Parameters
ifaceInterface name to create socket for
reuseAddrRe-use or exclusive port number NAT method
bool PMonitoredSockets::CreateSocket ( SocketInfo info,
const PIPSocket::Address binding 
)
protected
bool PMonitoredSockets::DestroySocket ( SocketInfo info)
protected
virtual PBoolean PMonitoredSockets::GetAddress ( const PString iface,
PIPSocket::Address address,
WORD &  port,
PBoolean  usingNAT 
) const
pure 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

Implemented in PSingleMonitoredSocket, and PMonitoredSocketBundle.

virtual bool PMonitoredSockets::GetInterfaceInfo ( const PString iface,
InterfaceEntry info 
) const
virtual

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
virtual PStringArray PMonitoredSockets::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 in PSingleMonitoredSocket, and PMonitoredSocketBundle.

WORD PMonitoredSockets::GetPort ( ) const
inline

Return the local port number being used by the socket(s)

References m_localPort.

bool PMonitoredSockets::GetSocketAddress ( const SocketInfo info,
PIPSocket::Address address,
WORD &  port,
bool  usingNAT 
) const
protected
PBoolean PMonitoredSockets::IsOpen ( ) const
inline

Indicate if the socket(s) are open and ready for reads/writes.

References m_opened.

virtual PBoolean PMonitoredSockets::Open ( WORD  port)
pure 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.

Implemented in PSingleMonitoredSocket, and PMonitoredSocketBundle.

virtual void PMonitoredSockets::ReadFromBundle ( BundleParams param)
pure 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.

Parameters
paramInfo on data to read

Implemented in PSingleMonitoredSocket, and PMonitoredSocketBundle.

void PMonitoredSockets::ReadFromSocketList ( PSocket::SelectList readers,
PUDPSocket *&  socket,
BundleParams param 
)
protected
virtual bool PMonitoredSockets::SetQoS ( const PIPSocket::QoS qos)
pure virtual

Set the quality of service for sockets.

Implemented in PSingleMonitoredSocket, and PMonitoredSocketBundle.

virtual void PMonitoredSockets::WriteToBundle ( BundleParams param)
pure 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.

Parameters
paramInfo on data to write

Implemented in PSingleMonitoredSocket, and PMonitoredSocketBundle.

Member Data Documentation

PUDPSocket PMonitoredSockets::m_interfaceAddedSignal
protected
WORD PMonitoredSockets::m_localPort
protected

Referenced by GetPort().

bool PMonitoredSockets::m_opened
protected

Referenced by IsOpen().

PIPSocket::QoS PMonitoredSockets::m_qos
protected
bool PMonitoredSockets::m_reuseAddress
protected

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