36 #ifndef OPAL_OPAL_TRANSPORT_H
37 #define OPAL_OPAL_TRANSPORT_H
45 #include <ptlib/sockets.h>
46 #include <ptclib/psockbun.h>
47 #include <ptclib/http.h>
159 static const PCaselessString &
IpPrefix();
160 static const PCaselessString &
UdpPrefix();
161 static const PCaselessString &
TcpPrefix();
163 static const PCaselessString & TlsPrefix();
165 static const PCaselessString & WsPrefix();
166 static const PCaselessString & WssPrefix();
174 const char * address,
176 const char * proto = NULL
179 const PString & address,
181 const char * proto = NULL
184 const PIPSocket::Address & ip,
186 const char * proto = NULL
189 const PIPSocket::AddressAndPort & ap,
190 const char * proto = NULL
206 bool wildcards =
false
220 PCaselessString
GetProto(
bool withDollar =
false)
const {
return Left(Find(
'$')+(withDollar?1:0)); }
230 PBoolean
GetIpAndPort(PIPSocket::Address & ip, WORD & port)
const;
231 PBoolean
GetIpAndPort(PIPSocketAddressAndPort & ipPort)
const;
237 bool includeService =
false
332 typedef PArray<OpalTransportAddress> ParentClass;
337 : ParentClass(dummy, c) { }
341 : ParentClass(initialSize) { }
346 const PStringArray & array
349 const PStringList & list
352 const PSortedStringList & list
359 const PString & address
376 const PCollection & coll
428 #define PDECLARE_AcceptHandlerNotifier(cls, fn) PDECLARE_NOTIFIER2(OpalListener, cls, fn, const OpalTransportPtr &)
452 virtual bool IsOpen()
const = 0;
456 virtual void Close() = 0;
461 const PTimeInterval & timeout
529 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
531 PBoolean exclusive =
true
581 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
583 PBoolean exclusive =
true
625 virtual bool IsOpen()
const;
629 virtual void Close();
634 const PTimeInterval & timeout
664 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
666 PBoolean exclusive =
true
708 virtual bool IsOpen()
const;
712 virtual void Close();
717 const PTimeInterval & timeout
799 virtual PBoolean
Write(
816 )
const {
return true; }
833 const PString & iface
855 virtual PBoolean
Connect() = 0;
865 virtual PBoolean
Close();
935 const PBYTEArray & pdu
939 #define PDECLARE_WriteConnectCallback(cls, fn) PDECLARE_NOTIFIER2(OpalTransport, cls, fn, bool &)
962 const PTimeInterval & timeout,
963 const PBYTEArray & data
989 PChannel::Errors
GetErrorCode(PChannel::ErrorGroup group = PChannel::NumErrorGroups)
const
992 PString
GetErrorText(PChannel::ErrorGroup group = PChannel::NumErrorGroups)
const
1036 PIPSocket::Address binding,
1087 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1135 const PBYTEArray & pdu
1180 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1182 bool reuseAddr =
false,
1183 bool preOpen =
false
1190 const PMonitoredSocketsPtr & sockets,
1191 const PString & iface
1200 virtual PBoolean
Read(
1238 const PString & iface
1300 const PBYTEArray & pdu
1356 PIPSocket::Address & ip,
1390 PIPSocket::Address & ip,
1397 PIPSocketAddressAndPort & ap,
1398 PBoolean & reuseAddr);
1401 template <
class ListenerType,
class TransportType,
unsigned AltTypeOption,
class AltTypeClass>
1411 return new ListenerType(endpoint, address, options);
1420 PIPSocketAddressAndPort ap;
1423 if (options == AltTypeOption)
1424 return new AltTypeClass(endpoint, ap.GetAddress(), 0, reuseAddr);
1426 return new TransportType(endpoint, ap.GetAddress(), 0, reuseAddr);
1450 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1452 PBoolean exclusive =
true
1464 virtual PBoolean
Open(
const AcceptHandler & acceptHandler, ThreadMode mode = SpawnNewThreadMode);
1474 PSSLContext * m_sslContext;
1489 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1495 ~OpalTransportTLS();
1507 typedef OpalTransportTLS OpalTransportTCPS;
1508 typedef OpalListenerTLS OpalListenerTCPS;
1525 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1527 bool exclusive =
true
1548 class OpalListenerWSS :
public OpalListenerTLS
1550 PCLASSINFO(OpalListenerWSS, OpalListenerTLS);
1554 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1556 PBoolean exclusive =
true
1564 virtual const PCaselessString & GetProtoPrefix()
const;
1577 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1609 const PBYTEArray & pdu
1617 class OpalTransportWSS :
public OpalTransportTLS
1619 PCLASSINFO(OpalTransportWSS, OpalTransportTLS);
1623 PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1634 virtual PBoolean Connect();
1645 virtual PBoolean ReadPDU(
1654 virtual PBoolean WritePDU(
1655 const PBYTEArray & pdu
1659 virtual const PCaselessString & GetProtoPrefix()
const;
1667 class OpalHTTPConnector :
public PHTTPResource
1669 PCLASSINFO(OpalHTTPConnector, PHTTPResource)
1678 const PHTTPAuthority & auth
1681 virtual
bool OnWebSocket(PHTTPServer & server, PHTTPConnectionInfo & connectInfo);
1688 #endif // OPAL_PTLIB_HTTP
1689 #endif // OPAL_PTLIB_SSL
1692 #endif // OPAL_OPAL_TRANSPORT_H