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
1020 PIPSocket::Address binding,
1031 bool allowNAT =
true
1079 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1081 PBoolean reuseAddr =
false
1127 const PBYTEArray & pdu
1153 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1155 bool reuseAddr =
false,
1156 bool preOpen =
false
1163 const PMonitoredSocketsPtr & sockets,
1164 const PString & iface
1173 virtual PBoolean
Read(
1211 const PString & iface
1217 bool allowNAT =
true
1283 const PBYTEArray & pdu
1339 PIPSocket::Address & ip,
1373 PIPSocket::Address & ip,
1380 PIPSocket::Address & ip,
1382 PBoolean & reuseAddr);
1385 template <
class ListenerType,
class TransportType,
unsigned AltTypeOption,
class AltTypeClass>
1395 return new ListenerType(endpoint, address, options);
1404 PIPSocket::Address ip;
1408 if (options == AltTypeOption)
1409 return new AltTypeClass(endpoint, ip, 0, reuseAddr);
1411 return new TransportType(endpoint, ip, 0, reuseAddr);
1431 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1433 PBoolean exclusive =
true
1445 virtual PBoolean
Open(
const AcceptHandler & acceptHandler, ThreadMode mode = SpawnNewThreadMode);
1454 PSSLContext * m_sslContext;
1469 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1471 PBoolean reuseAddr =
false
1475 ~OpalTransportTLS();
1486 typedef OpalTransportTLS OpalTransportTCPS;
1487 typedef OpalListenerTLS OpalListenerTCPS;
1490 #endif // OPAL_PTLIB_SSL
1493 #endif // OPAL_OPAL_TRANSPORT_H