OPAL  Version 3.10.10
transports.h
Go to the documentation of this file.
1 /*
2  * transport.h
3  *
4  * Transport declarations
5  *
6  * Open Phone Abstraction Library (OPAL)
7  * Formally known as the Open H323 project.
8  *
9  * Copyright (c) 2001 Equivalence Pty. Ltd.
10  * Portions Copyright (C) 2006 by Post Increment
11  *
12  * The contents of this file are subject to the Mozilla Public License
13  * Version 1.0 (the "License"); you may not use this file except in
14  * compliance with the License. You may obtain a copy of the License at
15  * http://www.mozilla.org/MPL/
16  *
17  * Software distributed under the License is distributed on an "AS IS"
18  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
19  * the License for the specific language governing rights and limitations
20  * under the License.
21  *
22  * The Original Code is Open Phone Abstraction Library.
23  *
24  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
25  *
26  * Contributor(s): Post Increment
27  * Portions of this code were written with the assistance of funding from
28  * US Joint Forces Command Joint Concept Development & Experimentation (J9)
29  * http://www.jfcom.mil/about/abt_j9.htm
30  *
31  * $Revision: 27884 $
32  * $Author: rjongbloed $
33  * $Date: 2012-06-24 19:43:04 -0500 (Sun, 24 Jun 2012) $
34  */
35 
36 #ifndef OPAL_OPAL_TRANSPORT_H
37 #define OPAL_OPAL_TRANSPORT_H
38 
39 #ifdef P_USE_PRAGMA
40 #pragma interface
41 #endif
42 
43 #include <opal/buildopts.h>
44 
45 #include <ptlib/sockets.h>
46 #include <ptclib/psockbun.h>
47 
48 
49 class OpalManager;
50 class OpalEndPoint;
51 class OpalListener;
52 class OpalTransport;
54 
55 
57 
149 class OpalTransportAddress : public PCaselessString
150 {
151  PCLASSINFO(OpalTransportAddress, PCaselessString);
152  public:
157  const char * address,
158  WORD port = 0,
159  const char * proto = NULL
160  );
162  const PString & address,
163  WORD port = 0,
164  const char * proto = NULL
165  );
167  const PIPSocket::Address & ip,
168  WORD port,
169  const char * proto = NULL
170  );
172 
180  PBoolean IsEquivalent(
181  const OpalTransportAddress & address,
182  bool wildcards = false
183  ) const;
184 
187  PBoolean IsCompatible(
188  const OpalTransportAddress & address
189  ) const;
190 
193  PCaselessString GetProto(bool withDollar = false) const { return Left(Find('$')+(withDollar?1:0)); }
194 
198  PBoolean GetIpAddress(PIPSocket::Address & ip) const;
199 
203  PBoolean GetIpAndPort(PIPSocket::Address & ip, WORD & port) const;
204  PBoolean GetIpAndPort(PIPSocketAddressAndPort & ipPort) const;
205 
209  virtual PString GetHostName(
210  bool includeService = false
211  ) const;
212 
213  enum BindOptions {
221  };
222 
255  OpalEndPoint & endpoint,
256  BindOptions option
257  ) const;
258 
286  virtual OpalTransport * CreateTransport(
287  OpalEndPoint & endpoint,
288  BindOptions option = HostOnly
289  ) const;
291 
292 
293  protected:
295  WORD port,
296  const char * proto
297  );
298 
300 };
301 
302 
304  public:
306  const OpalTransportAddress & address
307  ) { AppendAddress(address); }
309  const PStringArray & array
310  ) { AppendStringCollection(array); }
312  const PStringList & list
313  ) { AppendStringCollection(list); }
315  const PSortedStringList & list
316  ) { AppendStringCollection(list); }
317 
318  void AppendString(
319  const char * address
320  );
321  void AppendString(
322  const PString & address
323  );
324  void AppendAddress(
325  const OpalTransportAddress & address
326  );
327 
328  protected:
330  const PCollection & coll
331  );
332 };
333 
334 
335 
336 
338 
351 class OpalListener : public PObject
352 {
353  PCLASSINFO(OpalListener, PObject);
354  public:
359  OpalListener(
361  );
363 
368  void PrintOn(
369  ostream & strm
370  ) const;
372 
375  enum ThreadMode {
379  };
380 
395  virtual PBoolean Open(
396  const PNotifier & acceptHandler,
398  ) = 0;
399 
402  virtual PBoolean IsOpen() = 0;
403 
406  virtual void Close() = 0;
407 
410  virtual OpalTransport * Accept(
411  const PTimeInterval & timeout
412  ) = 0;
413 
416  virtual OpalTransport * CreateTransport(
417  const OpalTransportAddress & localAddress,
418  const OpalTransportAddress & remoteAddress
419  ) const = 0;
420 
427  const OpalTransportAddress & remoteAddress = OpalTransportAddress()
428  ) const = 0;
429 
432  void CloseWait();
433 
439 
440 
441  protected:
450  PDECLARE_NOTIFIER(PThread, OpalListener, ListenForConnections);
451  PBoolean StartThread(
452  const PNotifier & acceptHandler,
453  ThreadMode mode
454  );
455 
457  PThread * thread;
458  PNotifier acceptHandler;
460 };
461 
462 
463 PLIST(OpalListenerList, OpalListener);
464 
465 
467 {
468  PCLASSINFO(OpalListenerIP, OpalListener);
469  public:
475  OpalEndPoint & endpoint,
476  PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
477  WORD port = 0,
478  PBoolean exclusive = true
479  );
481  OpalEndPoint & endpoint,
482  const OpalTransportAddress & binding,
484  );
486 
495  const OpalTransportAddress & remoteAddress = OpalTransportAddress()
496  ) const;
498 
501  WORD GetListenerPort() const { return listenerPort; }
502 
503  virtual const char * GetProtoPrefix() const = 0;
505 
506 
507  protected:
508  PIPSocket::Address localAddress;
511 };
512 
513 
515 {
516  PCLASSINFO(OpalListenerTCP, OpalListenerIP);
517  public:
523  OpalEndPoint & endpoint,
524  PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
525  WORD port = 0,
526  PBoolean exclusive = true
527  );
529  OpalEndPoint & endpoint,
530  const OpalTransportAddress & binding,
532  );
533 
538 
561  virtual PBoolean Open(
562  const PNotifier & acceptHandler,
564  );
565 
568  virtual PBoolean IsOpen();
569 
572  virtual void Close();
573 
576  virtual OpalTransport * Accept(
577  const PTimeInterval & timeout
578  );
579 
582  virtual OpalTransport * CreateTransport(
584  const OpalTransportAddress & remoteAddress
585  ) const;
587 
588 
589  protected:
590  virtual const char * GetProtoPrefix() const;
591 
592  PTCPSocket listener;
593 };
594 
595 
597 {
598  PCLASSINFO(OpalListenerUDP, OpalListenerIP);
599  public:
605  OpalEndPoint & endpoint,
606  PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
607  WORD port = 0,
608  PBoolean exclusive = true
609  );
611  OpalEndPoint & endpoint,
612  const OpalTransportAddress & binding,
614  );
615 
620 
643  virtual PBoolean Open(
644  const PNotifier & acceptHandler,
646  );
647 
650  virtual PBoolean IsOpen();
651 
654  virtual void Close();
655 
658  virtual OpalTransport * Accept(
659  const PTimeInterval & timeout
660  );
661 
664  virtual OpalTransport * CreateTransport(
666  const OpalTransportAddress & remoteAddress
667  ) const;
668 
675  const OpalTransportAddress & remoteAddress = OpalTransportAddress()
676  ) const;
678 
684  PINDEX size
685  ) { m_bufferSize = size; }
687 
688 
689  protected:
690  virtual const char * GetProtoPrefix() const;
691 
692  PMonitoredSocketsPtr listenerBundle;
693  PINDEX m_bufferSize;
694 };
695 
696 
698 
703 class OpalTransport : public PIndirectChannel
704 {
705  PCLASSINFO(OpalTransport, PIndirectChannel);
706  public:
711  OpalTransport(OpalEndPoint & endpoint);
712 
715  ~OpalTransport();
717 
722  void PrintOn(
723  ostream & strm
724  ) const;
726 
731  virtual PBoolean IsReliable() const = 0;
732 
739  virtual PString GetInterface() const;
740 
747  virtual bool SetInterface(
748  const PString & iface
749  );
750 
754  bool allowNAT = true
755  ) const = 0;
756 
761  virtual PBoolean SetLocalAddress(
762  const OpalTransportAddress & address
763  ) = 0;
764 
767  virtual OpalTransportAddress GetRemoteAddress() const = 0;
768 
774  virtual PBoolean SetRemoteAddress(
775  const OpalTransportAddress & address
776  ) = 0;
777 
780  virtual PBoolean Connect() = 0;
781 
784  PBoolean ConnectTo(
785  const OpalTransportAddress & address
786  ) { return SetRemoteAddress(address) && Connect(); }
787 
790  virtual PBoolean Close();
791 
794  void CloseWait();
795 
800 
803  virtual PBoolean IsCompatibleTransport(
804  const OpalTransportAddress & address
805  ) const = 0;
806 
813  };
814 
825  virtual void SetPromiscuous(
826  PromisciousModes promiscuous
827  );
828 
834 
839  virtual PString GetLastReceivedInterface() const;
840 
850  virtual PBoolean ReadPDU(
851  PBYTEArray & packet
852  ) = 0;
853 
859  virtual PBoolean WritePDU(
860  const PBYTEArray & pdu
861  ) = 0;
862 
863  typedef PBoolean (*WriteConnectCallback)(OpalTransport & transport, void * userData);
864 
877  virtual PBoolean WriteConnect(
878  WriteConnectCallback function,
879  void * userData
880  );
881 
884  virtual void AttachThread(
885  PThread * thread
886  );
887 
890  virtual PBoolean IsRunning() const;
892 
893  OpalEndPoint & GetEndPoint() const { return endpoint; }
894 
897  virtual const char * GetProtoPrefix() const = 0;
898 
899  PMutex & GetWriteMutex() { return m_writeMutex; }
900 
901  protected:
903  PThread * thread;
904  PMutex m_writeMutex;
905 };
906 
907 
909 {
910  PCLASSINFO(OpalTransportIP, OpalTransport);
911  public:
917  OpalEndPoint & endpoint,
918  PIPSocket::Address binding,
919  WORD port
920  );
922 
928  bool allowNAT = true
929  ) const;
930 
935  virtual PBoolean SetLocalAddress(
936  const OpalTransportAddress & address
937  );
938 
941  virtual OpalTransportAddress GetRemoteAddress() const;
942 
948  virtual PBoolean SetRemoteAddress(
949  const OpalTransportAddress & address
950  );
951 
953 
954  protected:
957  virtual const char * GetProtoPrefix() const = 0;
958 
959  PIPSocket::Address localAddress; // Address of the local interface
960  WORD localPort;
961  PIPSocket::Address remoteAddress; // Address of the remote host
963 };
964 
965 
967 {
968  PCLASSINFO(OpalTransportTCP, OpalTransportIP);
969  public:
975  OpalEndPoint & endpoint,
976  PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
977  WORD port = 0,
978  PBoolean reuseAddr = false
979  );
981  OpalEndPoint & endpoint,
982  PTCPSocket * socket
983  );
984 
988 
993  virtual PBoolean IsReliable() const;
994 
997  virtual PBoolean IsCompatibleTransport(
998  const OpalTransportAddress & address
999  ) const;
1000 
1003  virtual PBoolean Connect();
1004 
1014  virtual PBoolean ReadPDU(
1015  PBYTEArray & pdu
1016  );
1017 
1023  virtual PBoolean WritePDU(
1024  const PBYTEArray & pdu
1025  );
1027 
1028 
1029  protected:
1032  virtual const char * GetProtoPrefix() const;
1033 
1043  virtual PBoolean OnOpen();
1044 
1045 
1047 };
1048 
1049 
1051 {
1052  PCLASSINFO(OpalTransportUDP, OpalTransportIP);
1053  public:
1059  OpalEndPoint & endpoint,
1060  PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1061  WORD port = 0,
1062  bool reuseAddr = false,
1063  bool preOpen = false
1064  );
1065 
1069  OpalEndPoint & endpoint,
1070  const PMonitoredSocketsPtr & sockets,
1071  const PString & iface
1072  );
1073 
1077 
1080  virtual PBoolean Read(
1081  void * buffer,
1082  PINDEX length
1083  );
1085 
1090  virtual PBoolean IsReliable() const;
1091 
1094  virtual PBoolean IsCompatibleTransport(
1095  const OpalTransportAddress & address
1096  ) const;
1097 
1105  virtual PBoolean Connect();
1106 
1109  virtual PString GetInterface() const;
1110 
1117  virtual bool SetInterface(
1118  const PString & iface
1119  );
1120 
1124  bool allowNAT = true
1125  ) const;
1126 
1131  virtual PBoolean SetLocalAddress(
1132  const OpalTransportAddress & address
1133  );
1134 
1140  virtual PBoolean SetRemoteAddress(
1141  const OpalTransportAddress & address
1142  );
1143 
1155  virtual void SetPromiscuous(
1156  PromisciousModes promiscuous
1157  );
1158 
1164 
1169  virtual PString GetLastReceivedInterface() const;
1170 
1180  virtual PBoolean ReadPDU(
1181  PBYTEArray & packet
1182  );
1183 
1189  virtual PBoolean WritePDU(
1190  const PBYTEArray & pdu
1191  );
1192 
1203  virtual PBoolean WriteConnect(
1204  WriteConnectCallback function,
1205  void * userData
1206  );
1207 
1211  PINDEX size
1212  ) { m_bufferSize = size; }
1214 
1215  protected:
1218  virtual const char * GetProtoPrefix() const;
1219 
1222  PBYTEArray m_preReadPacket;
1224 
1225  friend class OpalListenerUDP;
1226 };
1227 
1228 
1230 
1231 class OpalInternalTransport : public PObject
1232 {
1233  PCLASSINFO(OpalInternalTransport, PObject);
1234  public:
1235  virtual PString GetHostName(
1236  const OpalTransportAddress & address,
1237  bool includeService
1238  ) const;
1239 
1240  virtual PBoolean GetIpAndPort(
1241  const OpalTransportAddress & address,
1242  PIPSocket::Address & ip,
1243  WORD & port
1244  ) const;
1245 
1246  virtual OpalListener * CreateListener(
1247  const OpalTransportAddress & address,
1248  OpalEndPoint & endpoint,
1250  ) const = 0;
1251 
1252  virtual OpalTransport * CreateTransport(
1253  const OpalTransportAddress & address,
1254  OpalEndPoint & endpoint,
1256  ) const = 0;
1257 };
1258 
1259 
1261 
1263 {
1265  public:
1266  virtual PString GetHostName(
1267  const OpalTransportAddress & address,
1268  bool includeService
1269  ) const;
1270  virtual PBoolean GetIpAndPort(
1271  const OpalTransportAddress & address,
1272  PIPSocket::Address & ip,
1273  WORD & port
1274  ) const;
1275 
1276  static PBoolean GetAdjustedIpAndPort(const OpalTransportAddress & address,
1277  OpalEndPoint & endpoint,
1279  PIPSocket::Address & ip,
1280  WORD & port,
1281  PBoolean & reuseAddr);
1282 };
1283 
1284 template <class ListenerType, class TransportType, unsigned AltTypeOption, class AltTypeClass>
1286 {
1287  public:
1289  const OpalTransportAddress & address,
1290  OpalEndPoint & endpoint,
1292  ) const
1293  {
1294  return new ListenerType(endpoint, address, options);
1295  }
1296 
1298  const OpalTransportAddress & address,
1299  OpalEndPoint & endpoint,
1301  ) const
1302  {
1303  PIPSocket::Address ip;
1304  WORD port;
1305  PBoolean reuseAddr;
1306  if (GetAdjustedIpAndPort(address, endpoint, options, ip, port, reuseAddr)) {
1307  if (options == AltTypeOption)
1308  return new AltTypeClass(endpoint, ip, 0, reuseAddr);
1309  else
1310  return new TransportType(endpoint, ip, 0, reuseAddr);
1311  }
1312  return NULL;
1313  }
1314 };
1315 
1318 
1319 #if OPAL_PTLIB_SSL
1320 
1321 class PSSLContext;
1322 
1323 class OpalListenerTCPS : public OpalListenerTCP
1324 {
1325  PCLASSINFO(OpalListenerTCPS, OpalListenerTCP);
1326  public:
1327  OpalListenerTCPS(
1328  OpalEndPoint & endpoint,
1329  PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1330  WORD port = 0,
1331  PBoolean exclusive = true
1332  );
1333  OpalListenerTCPS(
1334  OpalEndPoint & endpoint,
1335  const OpalTransportAddress & binding,
1337  );
1338 
1341  ~OpalListenerTCPS();
1342 
1343  OpalTransport * Accept(const PTimeInterval & timeout);
1344  const char * GetProtoPrefix() const;
1345 
1346  protected:
1347  void Construct();
1348 
1349  PSSLContext * sslContext;
1350 };
1351 
1352 class OpalTransportTCPS : public OpalTransportTCP
1353 {
1354  PCLASSINFO(OpalTransportTCPS, OpalTransportTCP);
1355  public:
1356  OpalTransportTCPS(
1357  OpalEndPoint & endpoint,
1358  PIPSocket::Address binding = PIPSocket::GetDefaultIpAny(),
1359  WORD port = 0,
1360  PBoolean reuseAddr = false
1361  );
1362  OpalTransportTCPS(
1363  OpalEndPoint & endpoint,
1364  PTCPSocket * socket
1365  );
1366 
1368  ~OpalTransportTCPS();
1369 
1370  PBoolean IsCompatibleTransport(const OpalTransportAddress & address) const;
1371  PBoolean Connect();
1372  PBoolean OnOpen();
1373  const char * GetProtoPrefix() const;
1374 
1375  protected:
1376  PSSLContext * sslContext;
1377 };
1378 
1380 
1381 
1382 #endif // OPAL_PTLIB_SSL
1383 
1384 
1385 #endif // OPAL_OPAL_TRANSPORT_H
1386 
1387 
1388 // End of File ///////////////////////////////////////////////////////////////
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: manager.h:74
Definition: endpoint.h:67
virtual PBoolean IsRunning() const
virtual void Close()
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
void CloseWait()
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 PBoolean Close()
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 void Close()
virtual PBoolean OnOpen()
Definition: transports.h:1285
void CloseWait()
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 void Close()=0
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)