36 #ifndef OPAL_OPAL_TRANSPORT_H
37 #define OPAL_OPAL_TRANSPORT_H
45 #include <ptlib/sockets.h>
46 #include <ptclib/psockbun.h>
157 const char * address,
159 const char * proto = NULL
162 const PString & address,
164 const char * proto = NULL
167 const PIPSocket::Address & ip,
169 const char * proto = NULL
182 bool wildcards =
false
193 PCaselessString
GetProto(
bool withDollar =
false)
const {
return Left(Find(
'$')+(withDollar?1:0)); }
203 PBoolean
GetIpAndPort(PIPSocket::Address & ip, WORD & port)
const;
204 PBoolean
GetIpAndPort(PIPSocketAddressAndPort & ipPort)
const;
210 bool includeService =
false
309 const PStringArray & array
312 const PStringList & list
315 const PSortedStringList & list
322 const PString & address
330 const PCollection & coll
395 virtual PBoolean
Open(
402 virtual PBoolean
IsOpen() = 0;
406 virtual void Close() = 0;
411 const PTimeInterval & timeout
476 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
478 PBoolean exclusive =
true
524 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
526 PBoolean exclusive =
true
561 virtual PBoolean
Open(
568 virtual PBoolean
IsOpen();
572 virtual void Close();
577 const PTimeInterval & timeout
606 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
608 PBoolean exclusive =
true
643 virtual PBoolean
Open(
650 virtual PBoolean
IsOpen();
654 virtual void Close();
659 const PTimeInterval & timeout
748 const PString & iface
780 virtual PBoolean
Connect() = 0;
790 virtual PBoolean
Close();
860 const PBYTEArray & pdu
918 PIPSocket::Address binding,
976 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
978 PBoolean reuseAddr =
false
1024 const PBYTEArray & pdu
1043 virtual PBoolean
OnOpen();
1060 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1062 bool reuseAddr =
false,
1063 bool preOpen =
false
1070 const PMonitoredSocketsPtr & sockets,
1071 const PString & iface
1080 virtual PBoolean
Read(
1118 const PString & iface
1124 bool allowNAT =
true
1190 const PBYTEArray & pdu
1242 PIPSocket::Address & ip,
1272 PIPSocket::Address & ip,
1279 PIPSocket::Address & ip,
1281 PBoolean & reuseAddr);
1284 template <
class ListenerType,
class TransportType,
unsigned AltTypeOption,
class AltTypeClass>
1294 return new ListenerType(endpoint, address, options);
1303 PIPSocket::Address ip;
1307 if (options == AltTypeOption)
1308 return new AltTypeClass(endpoint, ip, 0, reuseAddr);
1310 return new TransportType(endpoint, ip, 0, reuseAddr);
1329 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1331 PBoolean exclusive =
true
1341 ~OpalListenerTCPS();
1349 PSSLContext * sslContext;
1358 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1360 PBoolean reuseAddr =
false
1368 ~OpalTransportTCPS();
1376 PSSLContext * sslContext;
1382 #endif // OPAL_PTLIB_SSL
1385 #endif // OPAL_OPAL_TRANSPORT_H
virtual const char * GetProtoPrefix() const
virtual PBoolean SetLocalAddress(const OpalTransportAddress &address)
virtual PString GetInterface() const
virtual PBoolean WriteConnect(WriteConnectCallback function, void *userData)
virtual PString GetInterface() const
Definition: transports.h:908
virtual const char * GetProtoPrefix() const =0
Definition: endpoint.h:67
virtual PBoolean IsRunning() const
virtual void AttachThread(PThread *thread)
PIPSocket::Address localAddress
Definition: transports.h:508
Definition: transports.h:377
void AppendAddress(const OpalTransportAddress &address)
~OpalTransportUDP()
Destroy the UDP channel.
OpalTransportIP(OpalEndPoint &endpoint, PIPSocket::Address binding, WORD port)
virtual OpalTransportAddress GetLocalAddress(bool allowNAT=true) const
OpalTransportTCP(OpalEndPoint &endpoint, PIPSocket::Address binding=PIPSocket::GetDefaultIpAny(), WORD port=0, PBoolean reuseAddr=false)
virtual OpalTransport * Accept(const PTimeInterval &timeout)
OpalInternalIPTransportTemplate< OpalListenerTCP, OpalTransportTCP, OpalTransportAddress::Datagram, OpalTransportUDP > OpalInternalTCPTransport
Definition: transports.h:1316
virtual PBoolean WritePDU(const PBYTEArray &pdu)=0
virtual PBoolean IsOpen()
virtual OpalTransportAddress GetLocalAddress(bool allowNAT=true) const
virtual PBoolean GetIpAndPort(const OpalTransportAddress &address, PIPSocket::Address &ip, WORD &port) const
virtual OpalTransportAddress GetLocalAddress(const OpalTransportAddress &remoteAddress=OpalTransportAddress()) const
virtual PBoolean IsOpen()=0
void AppendStringCollection(const PCollection &coll)
virtual OpalTransportAddress GetRemoteAddress() const =0
virtual OpalTransport * Accept(const PTimeInterval &timeout)=0
OpalEndPoint & endpoint
Definition: transports.h:902
virtual PBoolean Open(const PNotifier &acceptHandler, ThreadMode mode=SpawnNewThreadMode)
PMutex m_writeMutex
Definition: transports.h:904
virtual OpalListener * CreateListener(const OpalTransportAddress &address, OpalEndPoint &endpoint, OpalTransportAddress::BindOptions options) const =0
virtual PString GetHostName(const OpalTransportAddress &address, bool includeService) const
virtual OpalTransport * CreateTransport(const OpalTransportAddress &address, OpalEndPoint &endpoint, OpalTransportAddress::BindOptions options) const =0
Definition: transports.h:215
PBoolean(* WriteConnectCallback)(OpalTransport &transport, void *userData)
Definition: transports.h:863
bool m_preReadOK
Definition: transports.h:1223
Definition: transports.h:703
static PBoolean GetAdjustedIpAndPort(const OpalTransportAddress &address, OpalEndPoint &endpoint, OpalTransportAddress::BindOptions option, PIPSocket::Address &ip, WORD &port, PBoolean &reuseAddr)
PCaselessString GetProto(bool withDollar=false) const
Definition: transports.h:193
virtual PBoolean Connect()
PINDEX m_bufferSize
Definition: transports.h:693
Definition: transports.h:809
virtual OpalTransportAddress GetLocalAddress(const OpalTransportAddress &remoteAddress=OpalTransportAddress()) const
WORD listenerPort
Definition: transports.h:509
virtual PBoolean Open(const PNotifier &acceptHandler, ThreadMode mode=SpawnNewThreadMode)=0
OpalListenerUDP(OpalEndPoint &endpoint, PIPSocket::Address binding=PIPSocket::GetDefaultIpAny(), WORD port=0, PBoolean exclusive=true)
PBoolean ConnectTo(const OpalTransportAddress &address)
Definition: transports.h:784
Definition: transports.h:219
OpalTransport(OpalEndPoint &endpoint)
OpalManager & manager
Definition: transports.h:1220
PTCPSocket listener
Definition: transports.h:592
virtual OpalTransport * CreateTransport(const OpalTransportAddress &localAddress, const OpalTransportAddress &remoteAddress) const
Definition: transports.h:596
OpalTransport * CreateTransport(const OpalTransportAddress &address, OpalEndPoint &endpoint, OpalTransportAddress::BindOptions options) const
Definition: transports.h:1297
virtual PBoolean SetLocalAddress(const OpalTransportAddress &address)
PBYTEArray m_preReadPacket
Definition: transports.h:1222
virtual PBoolean WriteConnect(WriteConnectCallback function, void *userData)
virtual OpalTransport * CreateTransport(const OpalTransportAddress &localAddress, const OpalTransportAddress &remoteAddress) const =0
PMutex & GetWriteMutex()
Definition: transports.h:899
virtual OpalTransport * CreateTransport(const OpalTransportAddress &localAddress, const OpalTransportAddress &remoteAddress) const
PBoolean IsCompatible(const OpalTransportAddress &address) const
PromisciousModes
Definition: transports.h:808
PIPSocket::Address localAddress
Definition: transports.h:959
Definition: transports.h:966
virtual PBoolean IsReliable() const
PMonitoredSocketsPtr listenerBundle
Definition: transports.h:692
virtual PBoolean IsCompatibleTransport(const OpalTransportAddress &address) const
PNotifier acceptHandler
Definition: transports.h:458
Definition: transports.h:216
virtual PString GetLastReceivedInterface() const
OpalInternalIPTransportTemplate< OpalListenerUDP, OpalTransportUDP, OpalTransportAddress::Streamed, OpalTransportTCP > OpalInternalUDPTransport
Definition: transports.h:1317
Definition: transports.h:217
PDECLARE_NOTIFIER(PThread, OpalListener, ListenForConnections)
virtual PBoolean Connect()
Definition: transports.h:351
PThread * thread
Definition: transports.h:457
virtual PBoolean SetRemoteAddress(const OpalTransportAddress &address)=0
PBoolean GetIpAddress(PIPSocket::Address &ip) const
PIPSocket::Address remoteAddress
Definition: transports.h:961
PBoolean GetIpAndPort(PIPSocket::Address &ip, WORD &port) const
Definition: transports.h:811
virtual PBoolean IsReliable() const =0
Definition: transports.h:218
void PrintOn(ostream &strm) const
void CleanUpOnTermination()
Definition: transports.h:799
virtual PBoolean SetRemoteAddress(const OpalTransportAddress &address)
Definition: transports.h:220
OpalEndPoint & endpoint
Definition: transports.h:456
Definition: transports.h:810
virtual OpalTransport * Accept(const PTimeInterval &timeout)
virtual OpalTransportAddress GetLastReceivedAddress() const
OpalTransportUDP(OpalEndPoint &endpoint, PIPSocket::Address binding=PIPSocket::GetDefaultIpAny(), WORD port=0, bool reuseAddr=false, bool preOpen=false)
PBoolean exclusiveListener
Definition: transports.h:510
OpalListenerIP(OpalEndPoint &endpoint, PIPSocket::Address binding=PIPSocket::GetDefaultIpAny(), WORD port=0, PBoolean exclusive=true)
virtual const char * GetProtoPrefix() const
void SetBufferSize(PINDEX size)
Definition: transports.h:1210
virtual PBoolean GetIpAndPort(const OpalTransportAddress &address, PIPSocket::Address &ip, WORD &port) const
virtual PString GetHostName(bool includeService=false) const
void SetInternalTransport(WORD port, const char *proto)
virtual PBoolean ReadPDU(PBYTEArray &packet)
virtual OpalTransportAddress GetLocalAddress(bool allowNAT=true) const =0
OpalListener * CreateListener(OpalEndPoint &endpoint, BindOptions option) const
Definition: transports.h:378
virtual void SetPromiscuous(PromisciousModes promiscuous)
void PrintOn(ostream &strm) const
virtual PBoolean OnOpen()
Definition: transports.h:1285
Definition: transports.h:812
PLIST(OpalListenerList, OpalListener)
~OpalTransportTCP()
Destroy the TCP channel.
virtual PBoolean WritePDU(const PBYTEArray &pdu)
virtual bool SetInterface(const PString &iface)
Definition: transports.h:1262
WORD localPort
Definition: transports.h:960
PThread * thread
Thread handling the transport.
Definition: transports.h:903
virtual PBoolean IsCompatibleTransport(const OpalTransportAddress &address) const
virtual PBoolean ReadPDU(PBYTEArray &pdu)
virtual const char * GetProtoPrefix() const
Definition: transports.h:466
virtual bool SetInterface(const PString &iface)
virtual OpalTransportAddress GetLastReceivedAddress() const
OpalTransportAddressArray(const OpalTransportAddress &address)
Definition: transports.h:305
virtual PBoolean IsReliable() const
virtual PString GetHostName(const OpalTransportAddress &address, bool includeService) const
WORD GetListenerPort() const
Definition: transports.h:501
virtual PBoolean SetLocalAddress(const OpalTransportAddress &address)=0
Definition: transports.h:214
virtual PBoolean SetRemoteAddress(const OpalTransportAddress &address)
virtual PBoolean ReadPDU(PBYTEArray &packet)=0
virtual OpalTransportAddress GetLocalAddress(const OpalTransportAddress &remoteAddress=OpalTransportAddress()) const =0
PBoolean reuseAddressFlag
Definition: transports.h:1046
virtual const char * GetProtoPrefix() const
PINDEX m_bufferSize
Definition: transports.h:1221
Definition: transports.h:376
Definition: transports.h:514
virtual OpalTransport * CreateTransport(OpalEndPoint &endpoint, BindOptions option=HostOnly) const
WORD remotePort
Definition: transports.h:962
BindOptions
Definition: transports.h:213
virtual PBoolean WritePDU(const PBYTEArray &pdu)
Definition: transports.h:1050
void AppendString(const char *address)
ThreadMode threadMode
Definition: transports.h:459
virtual OpalTransportAddress GetRemoteAddress() const
virtual PString GetLastReceivedInterface() const
virtual PBoolean IsCompatibleTransport(const OpalTransportAddress &address) const =0
Promiscious modes for transport.
OpalListener * CreateListener(const OpalTransportAddress &address, OpalEndPoint &endpoint, OpalTransportAddress::BindOptions options) const
Definition: transports.h:1288
virtual PBoolean IsOpen()
PBoolean StartThread(const PNotifier &acceptHandler, ThreadMode mode)
virtual PBoolean Read(void *buffer, PINDEX length)
Definition: transports.h:1231
ThreadMode
Definition: transports.h:375
void CleanUpOnTermination()
Definition: transports.h:437
virtual const char * GetProtoPrefix() const =0
virtual const char * GetProtoPrefix() const =0
OpalEndPoint & GetEndPoint() const
Definition: transports.h:893
Definition: transports.h:149
OpalInternalTransport * transport
Definition: transports.h:299
PBoolean IsEquivalent(const OpalTransportAddress &address, bool wildcards=false) const
virtual PBoolean Open(const PNotifier &acceptHandler, ThreadMode mode=SpawnNewThreadMode)
virtual void SetPromiscuous(PromisciousModes promiscuous)
void SetBufferSize(PINDEX size)
Definition: transports.h:683
OpalListener(OpalEndPoint &endpoint)
virtual PBoolean Connect()=0
OpalListenerTCP(OpalEndPoint &endpoint, PIPSocket::Address binding=PIPSocket::GetDefaultIpAny(), WORD port=0, PBoolean exclusive=true)