36 #ifndef OPAL_OPAL_TRANSPORT_H
37 #define OPAL_OPAL_TRANSPORT_H
45 #include <ptlib/sockets.h>
46 #include <ptclib/psockbun.h>
158 static const PCaselessString &
IpPrefix();
159 static const PCaselessString &
UdpPrefix();
160 static const PCaselessString &
TcpPrefix();
162 static const PCaselessString & TlsPrefix();
169 const char * address,
171 const char * proto = NULL
174 const PString & address,
176 const char * proto = NULL
179 const PIPSocket::Address & ip,
181 const char * proto = NULL
197 bool wildcards =
false
211 PCaselessString
GetProto(
bool withDollar =
false)
const {
return Left(Find(
'$')+(withDollar?1:0)); }
221 PBoolean
GetIpAndPort(PIPSocket::Address & ip, WORD & port)
const;
222 PBoolean
GetIpAndPort(PIPSocketAddressAndPort & ipPort)
const;
228 bool includeService =
false
323 typedef PArray<OpalTransportAddress> ParentClass;
328 : ParentClass(dummy, c) { }
332 : ParentClass(initialSize) { }
337 const PStringArray & array
340 const PStringList & list
343 const PSortedStringList & list
350 const PString & address
363 const PCollection & coll
415 #define PDECLARE_AcceptHandlerNotifier(cls, fn) PDECLARE_NOTIFIER2(OpalListener, cls, fn, const OpalTransportPtr &)
439 virtual bool IsOpen()
const = 0;
443 virtual void Close() = 0;
448 const PTimeInterval & timeout
510 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
512 PBoolean exclusive =
true
563 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
565 PBoolean exclusive =
true
607 virtual bool IsOpen()
const;
611 virtual void Close();
616 const PTimeInterval & timeout
645 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
647 PBoolean exclusive =
true
689 virtual bool IsOpen()
const;
693 virtual void Close();
698 const PTimeInterval & timeout
780 virtual PBoolean
Write(
797 )
const {
return true; }
814 const PString & iface
846 virtual PBoolean
Connect() = 0;
856 virtual PBoolean
Close();
926 const PBYTEArray & pdu
930 #define PDECLARE_WriteConnectCallback(cls, fn) PDECLARE_NOTIFIER2(OpalTransport, cls, fn, bool &)
953 const PTimeInterval & timeout,
954 const PBYTEArray & data
980 PChannel::Errors
GetErrorCode(PChannel::ErrorGroup group = PChannel::NumErrorGroups)
const
983 PString
GetErrorText(PChannel::ErrorGroup group = PChannel::NumErrorGroups)
const
1024 PIPSocket::Address binding,
1035 bool allowNAT =
true
1083 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1085 PBoolean reuseAddr =
false
1131 const PBYTEArray & pdu
1157 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1159 bool reuseAddr =
false,
1160 bool preOpen =
false
1167 const PMonitoredSocketsPtr & sockets,
1168 const PString & iface
1177 virtual PBoolean
Read(
1215 const PString & iface
1221 bool allowNAT =
true
1287 const PBYTEArray & pdu
1343 PIPSocket::Address & ip,
1377 PIPSocket::Address & ip,
1384 PIPSocket::Address & ip,
1386 PBoolean & reuseAddr);
1389 template <
class ListenerType,
class TransportType,
unsigned AltTypeOption,
class AltTypeClass>
1399 return new ListenerType(endpoint, address, options);
1408 PIPSocket::Address ip;
1412 if (options == AltTypeOption)
1413 return new AltTypeClass(endpoint, ip, 0, reuseAddr);
1415 return new TransportType(endpoint, ip, 0, reuseAddr);
1435 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1437 PBoolean exclusive =
true
1449 virtual PBoolean
Open(
const AcceptHandler & acceptHandler, ThreadMode mode = SpawnNewThreadMode);
1458 PSSLContext * m_sslContext;
1473 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1475 PBoolean reuseAddr =
false
1479 ~OpalTransportTLS();
1490 typedef OpalTransportTLS OpalTransportTCPS;
1491 typedef OpalListenerTLS OpalListenerTCPS;
1494 #endif // OPAL_PTLIB_SSL
1497 #endif // OPAL_OPAL_TRANSPORT_H