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(
396 const PNotifier & acceptHandler,
402 virtual PBoolean IsOpen() = 0;
406 virtual void Close() = 0;
411 const PTimeInterval & timeout
450 PDECLARE_NOTIFIER(PThread,
OpalListener, ListenForConnections);
451 PBoolean StartThread(
452 const PNotifier & acceptHandler,
476 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
478 PBoolean exclusive =
true 503 virtual const char * GetProtoPrefix()
const = 0;
524 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
526 PBoolean exclusive =
true 561 virtual PBoolean Open(
562 const PNotifier & acceptHandler,
568 virtual PBoolean IsOpen();
572 virtual void Close();
577 const PTimeInterval & timeout
590 virtual const char * GetProtoPrefix()
const;
606 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
608 PBoolean exclusive =
true 643 virtual PBoolean Open(
644 const PNotifier & acceptHandler,
650 virtual PBoolean IsOpen();
654 virtual void Close();
659 const PTimeInterval & timeout
685 ) { m_bufferSize = size; }
690 virtual const char * GetProtoPrefix()
const;
731 virtual PBoolean IsReliable()
const = 0;
739 virtual PString GetInterface()
const;
747 virtual bool SetInterface(
748 const PString & iface
761 virtual PBoolean SetLocalAddress(
774 virtual PBoolean SetRemoteAddress(
780 virtual PBoolean Connect() = 0;
786 ) {
return SetRemoteAddress(address) && Connect(); }
790 virtual PBoolean Close();
803 virtual PBoolean IsCompatibleTransport(
825 virtual void SetPromiscuous(
839 virtual PString GetLastReceivedInterface()
const;
850 virtual PBoolean ReadPDU(
859 virtual PBoolean WritePDU(
860 const PBYTEArray & pdu
877 virtual PBoolean WriteConnect(
878 WriteConnectCallback
function,
884 virtual void AttachThread(
890 virtual PBoolean IsRunning()
const;
897 virtual const char * GetProtoPrefix()
const = 0;
918 PIPSocket::Address binding,
935 virtual PBoolean SetLocalAddress(
948 virtual PBoolean SetRemoteAddress(
957 virtual const char * GetProtoPrefix()
const = 0;
976 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
978 PBoolean reuseAddr =
false 993 virtual PBoolean IsReliable()
const;
997 virtual PBoolean IsCompatibleTransport(
1003 virtual PBoolean Connect();
1014 virtual PBoolean ReadPDU(
1023 virtual PBoolean WritePDU(
1024 const PBYTEArray & pdu
1032 virtual const char * GetProtoPrefix()
const;
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(
1090 virtual PBoolean IsReliable()
const;
1094 virtual PBoolean IsCompatibleTransport(
1105 virtual PBoolean Connect();
1109 virtual PString GetInterface()
const;
1117 virtual bool SetInterface(
1118 const PString & iface
1124 bool allowNAT =
true 1131 virtual PBoolean SetLocalAddress(
1140 virtual PBoolean SetRemoteAddress(
1155 virtual void SetPromiscuous(
1169 virtual PString GetLastReceivedInterface()
const;
1180 virtual PBoolean ReadPDU(
1189 virtual PBoolean WritePDU(
1190 const PBYTEArray & pdu
1203 virtual PBoolean WriteConnect(
1204 WriteConnectCallback
function,
1212 ) { m_bufferSize = size; }
1218 virtual const char * GetProtoPrefix()
const;
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;
1306 if (GetAdjustedIpAndPort(address, endpoint, options, ip, port, reuseAddr)) {
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();
1344 const char * GetProtoPrefix()
const;
1349 PSSLContext * sslContext;
1358 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1360 PBoolean reuseAddr =
false 1368 ~OpalTransportTCPS();
1373 const char * GetProtoPrefix()
const;
1376 PSSLContext * sslContext;
1382 #endif // OPAL_PTLIB_SSL 1385 #endif // OPAL_OPAL_TRANSPORT_H Definition: transports.h:908
Definition: endpoint.h:67
PIPSocket::Address localAddress
Definition: transports.h:508
Definition: transports.h:377
void AppendAddress(const OpalTransportAddress &address)
OpalInternalIPTransportTemplate< OpalListenerTCP, OpalTransportTCP, OpalTransportAddress::Datagram, OpalTransportUDP > OpalInternalTCPTransport
Definition: transports.h:1316
void AppendStringCollection(const PCollection &coll)
OpalEndPoint & endpoint
Definition: transports.h:902
PMutex m_writeMutex
Definition: transports.h:904
Definition: transports.h:215
bool m_preReadOK
Definition: transports.h:1223
Definition: transports.h:703
PCaselessString GetProto(bool withDollar=false) const
Definition: transports.h:193
PINDEX m_bufferSize
Definition: transports.h:693
Definition: transports.h:809
WORD listenerPort
Definition: transports.h:509
PBoolean ConnectTo(const OpalTransportAddress &address)
Definition: transports.h:784
Definition: transports.h:219
OpalManager & manager
Definition: transports.h:1220
PTCPSocket listener
Definition: transports.h:592
Definition: transports.h:596
OpalTransport * CreateTransport(const OpalTransportAddress &address, OpalEndPoint &endpoint, OpalTransportAddress::BindOptions options) const
Definition: transports.h:1297
PBYTEArray m_preReadPacket
Definition: transports.h:1222
PMutex & GetWriteMutex()
Definition: transports.h:899
PBoolean IsCompatible(const OpalTransportAddress &address) const
PromisciousModes
Definition: transports.h:808
PIPSocket::Address localAddress
Definition: transports.h:959
Definition: transports.h:966
PMonitoredSocketsPtr listenerBundle
Definition: transports.h:692
PNotifier acceptHandler
Definition: transports.h:458
Definition: transports.h:216
OpalInternalIPTransportTemplate< OpalListenerUDP, OpalTransportUDP, OpalTransportAddress::Streamed, OpalTransportTCP > OpalInternalUDPTransport
Definition: transports.h:1317
Definition: transports.h:217
Definition: transports.h:351
PThread * thread
Definition: transports.h:457
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
Definition: transports.h:218
void CleanUpOnTermination()
Definition: transports.h:799
Definition: transports.h:220
OpalEndPoint & endpoint
Definition: transports.h:456
Definition: transports.h:810
PBoolean exclusiveListener
Definition: transports.h:510
void SetBufferSize(PINDEX size)
Definition: transports.h:1210
virtual PString GetHostName(bool includeService=false) const
void SetInternalTransport(WORD port, const char *proto)
OpalListener * CreateListener(OpalEndPoint &endpoint, BindOptions option) const
Definition: transports.h:1285
PLIST(OpalListenerList, OpalListener)
Definition: transports.h:1262
WORD localPort
Definition: transports.h:960
PThread * thread
Thread handling the transport.
Definition: transports.h:903
Definition: transports.h:466
OpalTransportAddressArray(const OpalTransportAddress &address)
Definition: transports.h:305
WORD GetListenerPort() const
Definition: transports.h:501
Definition: transports.h:214
PBoolean reuseAddressFlag
Definition: transports.h:1046
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
Definition: transports.h:1050
void AppendString(const char *address)
ThreadMode threadMode
Definition: transports.h:459
OpalListener * CreateListener(const OpalTransportAddress &address, OpalEndPoint &endpoint, OpalTransportAddress::BindOptions options) const
Definition: transports.h:1288
Definition: transports.h:1231
ThreadMode
Definition: transports.h:375
void CleanUpOnTermination()
Definition: transports.h:437
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
void SetBufferSize(PINDEX size)
Definition: transports.h:683