OPAL  Version 3.10.10
h323con.h
Go to the documentation of this file.
1 /*
2  * h323con.h
3  *
4  * H.323 protocol handler
5  *
6  * Open H323 Library
7  *
8  * Copyright (c) 1998-2001 Equivalence Pty. Ltd.
9  *
10  * The contents of this file are subject to the Mozilla Public License
11  * Version 1.0 (the "License"); you may not use this file except in
12  * compliance with the License. You may obtain a copy of the License at
13  * http://www.mozilla.org/MPL/
14  *
15  * Software distributed under the License is distributed on an "AS IS"
16  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17  * the License for the specific language governing rights and limitations
18  * under the License.
19  *
20  * The Original Code is Open H323 Library.
21  *
22  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
23  *
24  * Portions of this code were written with the assisance of funding from
25  * Vovida Networks, Inc. http://www.vovida.com.
26  *
27  * Contributor(s): ______________________________________.
28  *
29  * $Revision: 28579 $
30  * $Author: rjongbloed $
31  * $Date: 2012-11-25 23:46:48 -0600 (Sun, 25 Nov 2012) $
32  */
33 
34 #ifndef OPAL_H323_H323CON_H
35 #define OPAL_H323_H323CON_H
36 
37 #ifdef P_USE_PRAGMA
38 #pragma interface
39 #endif
40 
41 #include <opal/buildopts.h>
42 
43 #if OPAL_H323
44 
45 #include <opal/rtpconn.h>
46 #include <opal/guid.h>
47 #include <opal/buildopts.h>
48 #include <h323/h323caps.h>
49 #include <ptclib/dtmf.h>
50 
51 
52 /* The following classes have forward references to avoid including the VERY
53  large header files for H225 and H245. If an application requires access
54  to the protocol classes they can include them, but for simple usage their
55  inclusion can be avoided.
56  */
57 class PPER_Stream;
58 class PASN_OctetString;
59 
60 class H225_EndpointType;
61 class H225_TransportAddress;
62 class H225_ArrayOf_PASN_OctetString;
63 class H225_ProtocolIdentifier;
64 class H225_AdmissionRequest;
65 class H225_AdmissionConfirm;
66 class H225_AdmissionReject;
67 class H225_InfoRequestResponse;
68 class H225_DisengageRequest;
69 class H225_FeatureSet;
70 
71 class H245_TerminalCapabilitySet;
72 class H245_TerminalCapabilitySetReject;
73 class H245_OpenLogicalChannel;
74 class H245_OpenLogicalChannelAck;
75 class H245_TransportAddress;
76 class H245_UserInputIndication;
77 class H245_RequestMode;
78 class H245_RequestModeAck;
79 class H245_RequestModeReject;
80 class H245_ModeDescription;
81 class H245_ArrayOf_ModeDescription;
82 class H245_SendTerminalCapabilitySet;
83 class H245_MultiplexCapability;
84 class H245_FlowControlCommand;
85 class H245_MiscellaneousCommand;
86 class H245_MiscellaneousIndication;
87 class H245_JitterIndication;
88 class H245_ArrayOf_GenericParameter;
89 
90 class H323SignalPDU;
91 class H323ControlPDU;
92 class H323EndPoint;
94 
95 class H235Authenticators;
96 
100 class H245NegRequestMode;
102 
103 class H450xDispatcher;
104 class H4502Handler;
105 class H4504Handler;
106 class H4506Handler;
107 class H4507Handler;
108 class H45011Handler;
109 
110 class OpalCall;
111 
112 #if OPAL_H460
113 class H460_FeatureSet;
114 #endif
115 
116 
119 #define OPAL_OPT_Q931_BEARER_CAPS "Q931-Bearer-Caps"
120 
121 
123 
131 {
132  PCLASSINFO(H323Connection, OpalRTPConnection);
133 
134  public:
140  OpalCall & call,
142  const PString & token,
143  const PString & alias,
144  const H323TransportAddress & address,
145  unsigned options = 0,
146  OpalConnection::StringOptions * stringOptions = NULL
147  );
148 
151  ~H323Connection();
153 
164  virtual bool IsNetworkConnection() const { return true; }
165 
168  virtual PString GetPrefixName() const;
169 
171  virtual void OnApplyStringOptions();
172 
179  virtual PBoolean SetUpConnection();
180 
190  virtual PBoolean SetAlerting(
191  const PString & calleeName,
192  PBoolean withMedia
193  );
194 
199  virtual PBoolean SetConnected();
200 
205  virtual PBoolean SetProgressed();
206 
214  virtual void OnEstablished();
215 
233  virtual void OnReleased();
234 
239  virtual PString GetDestinationAddress();
240 
254  virtual PString GetAlertingType() const;
255 
269  virtual bool SetAlertingType(const PString & info);
270 
273  unsigned GetProgressIndicator() const { return m_progressIndicator; }
274 
277  void SetProgressIndicator(unsigned indicator) { m_progressIndicator = indicator; }
278 
286  virtual OpalMediaFormatList GetMediaFormats() const;
287 
290  virtual unsigned GetNextSessionID(
291  const OpalMediaType & mediaType,
292  bool isSource
293  );
294 
295 #if OPAL_FAX
296 
298  virtual bool SwitchFaxMediaStreams(
299  bool toT38
300  );
301 #endif
302 
306  const OpalMediaFormat & mediaFormat,
307  unsigned sessionID,
308  bool isSource
309  );
310 
315  virtual bool CloseMediaStream(
316  OpalMediaStream & stream
317  );
318 
323  virtual PBoolean GetMediaInformation(
324  unsigned sessionID,
325  MediaInformation & info
326  ) const;
328 
333  void AttachSignalChannel(
334  const PString & token,
335  H323Transport * channel,
336  PBoolean answeringCall
337  );
338 
341  PBoolean WriteSignalPDU(
342  H323SignalPDU & pdu
343  );
344 
348  virtual void HandleSignallingChannel();
349 
353  virtual PBoolean HandleSignalPDU(
354  H323SignalPDU & pdu
355  );
356 
360  virtual void HandleTunnelPDU(
361  H323SignalPDU * txPDU
362  );
363 
371  virtual PBoolean OnReceivedSignalSetup(
372  const H323SignalPDU & pdu
373  );
374 
381  virtual PBoolean OnReceivedSignalSetupAck(
382  const H323SignalPDU & pdu
383  );
384 
391  virtual PBoolean OnReceivedSignalInformation(
392  const H323SignalPDU & pdu
393  );
394 
403  virtual PBoolean OnReceivedCallProceeding(
404  const H323SignalPDU & pdu
405  );
406 
415  virtual PBoolean OnReceivedProgress(
416  const H323SignalPDU & pdu
417  );
418 
425  virtual PBoolean OnReceivedAlerting(
426  const H323SignalPDU & pdu
427  );
428 
437  virtual PBoolean OnReceivedSignalConnect(
438  const H323SignalPDU & pdu
439  );
440 
449  virtual PBoolean OnReceivedFacility(
450  const H323SignalPDU & pdu
451  );
452 
459  virtual PBoolean OnReceivedSignalNotify(
460  const H323SignalPDU & pdu
461  );
462 
469  virtual PBoolean OnReceivedSignalStatus(
470  const H323SignalPDU & pdu
471  );
472 
479  virtual PBoolean OnReceivedStatusEnquiry(
480  const H323SignalPDU & pdu
481  );
482 
487  virtual void OnReceivedReleaseComplete(
488  const H323SignalPDU & pdu
489  );
490 
497  virtual PBoolean OnUnknownSignalPDU(
498  const H323SignalPDU & pdu
499  );
500 
507  virtual void OnSendARQ(
508  H225_AdmissionRequest & arq
509  );
510 
516  virtual void OnReceivedACF(
517  const H225_AdmissionConfirm & acf
518  );
519 
525  virtual void OnReceivedARJ(
526  const H225_AdmissionReject & arj
527  );
528 
535  virtual void OnSendIRR(
536  H225_InfoRequestResponse & irr
537  ) const;
538 
545  virtual void OnSendDRQ(
546  H225_DisengageRequest & drq
547  ) const;
548 
560  virtual PBoolean OnIncomingCall(
561  const H323SignalPDU & setupPDU,
563  );
564 
574  virtual PBoolean ForwardCall(
575  const PString & forwardParty
576  );
577 
584  virtual bool TransferConnection(
585  const PString & remoteParty
586  );
587 
595  virtual bool Hold(
596  bool fromRemote,
597  bool placeOnHold
598  );
599 
604  virtual bool IsOnHold(
605  bool fromRemote
606  );
607 
608 #if OPAL_H450
609 
614  bool TransferCall(
615  const PString & remoteParty,
616  const PString & callIdentity = PString::Empty()
618  );
619 
625  const PString & primaryCallToken
626  );
627 
634  virtual void HandleConsultationTransfer(
635  const PString & callIdentity,
637  H323Connection & incoming
638  );
639 
642  PBoolean IsTransferringCall() const;
643 
646  PBoolean IsTransferredCall() const;
647 
652  virtual void HandleTransferCall(
653  const PString & token,
654  const PString & identity
655  );
656 
662 
670  virtual void HandleCallTransferFailure(
671  const int returnError
672  );
673 
679  const PString & token
680  );
681 
686  virtual void OnConsultationTransferSuccess(
687  H323Connection & secondaryCall
688  );
689 
694  virtual void IntrudeCall(
695  unsigned capabilityLevel
696  );
697 
702  virtual void HandleIntrudeCall(
703  const PString & token,
704  const PString & identity
705  );
706 
713 
714  PBoolean IsCallIntrusion() { return isCallIntrusion; }
715 
719 
723  virtual PBoolean GetRemoteCallIntrusionProtectionLevel(
724  const PString & callToken,
726  );
727 
728  virtual void SetIntrusionImpending();
729 
730  virtual void SetForcedReleaseAccepted();
731 
732  virtual void SetIntrusionNotAuthorized();
733 
741  const unsigned nbOfAddWaitingCalls = 0
742  );
743 
744 #endif
745 
773  const PString & callerName,
774  const H323SignalPDU & setupPDU,
777  );
778 
780  const PString & callerName
781  );
782 
793  void AnsweringCall(
794  AnswerCallResponse response
795  );
796 
807  virtual CallEndReason SendSignalSetup(
808  const PString & alias,
809  const H323TransportAddress & address
810  );
811 
823  virtual PBoolean OnSendSignalSetup(
825  );
826 
835  virtual PBoolean OnSendCallProceeding(
836  H323SignalPDU & callProceedingPDU
837  );
838 
850  virtual PBoolean OnSendReleaseComplete(
851  H323SignalPDU & releaseCompletePDU
852  );
853 
864  virtual PBoolean OnAlerting(
865  const H323SignalPDU & alertingPDU,
866  const PString & user
867  );
868 
883  virtual PBoolean OnInsufficientDigits();
884 
897  virtual void SendMoreDigits(
898  const PString & digits
899  );
900 
910  virtual PBoolean OnOutgoingCall(
911  const H323SignalPDU & connectPDU
912  );
913 
925  virtual PBoolean SendFastStartAcknowledge(
926  H225_ArrayOf_PASN_OctetString & array
927  );
928 
940  virtual PBoolean HandleFastStartAcknowledge(
941  const H225_ArrayOf_PASN_OctetString & array
942  );
944 
958  virtual PBoolean CreateOutgoingControlChannel(
959  const H225_TransportAddress & h245Address
960  );
961 
974  virtual PBoolean CreateIncomingControlChannel(
975  H225_TransportAddress & h245Address
976  );
977 
982  virtual PBoolean WriteControlPDU(
983  const H323ControlPDU & pdu
984  );
985 
988  virtual PBoolean StartControlNegotiations();
989 
992  virtual void HandleControlChannel();
993 
1000  virtual PBoolean HandleControlData(
1001  PPER_Stream & strm
1002  );
1003 
1010  virtual PBoolean HandleControlPDU(
1011  const H323ControlPDU & pdu
1012  );
1013 
1023  virtual PBoolean OnUnknownControlPDU(
1024  const H323ControlPDU & pdu
1025  );
1026 
1030  virtual PBoolean OnH245Request(
1031  const H323ControlPDU & pdu
1032  );
1033 
1037  virtual PBoolean OnH245Response(
1038  const H323ControlPDU & pdu
1039  );
1040 
1044  virtual PBoolean OnH245Command(
1045  const H323ControlPDU & pdu
1046  );
1047 
1051  virtual PBoolean OnH245Indication(
1052  const H323ControlPDU & pdu
1053  );
1054 
1057  virtual PBoolean OnH245_SendTerminalCapabilitySet(
1058  const H245_SendTerminalCapabilitySet & pdu
1059  );
1060 
1065  virtual PBoolean OnH245_FlowControlCommand(
1066  const H245_FlowControlCommand & pdu
1067  );
1068 
1073  virtual PBoolean OnH245_MiscellaneousCommand(
1074  const H245_MiscellaneousCommand & pdu
1075  );
1076 
1081  virtual PBoolean OnH245_MiscellaneousIndication(
1082  const H245_MiscellaneousIndication & pdu
1083  );
1084 
1089  virtual PBoolean OnH245_JitterIndication(
1090  const H245_JitterIndication & pdu
1091  );
1092 
1093 #if OPAL_H239
1094 
1096  virtual bool OnH239Message(
1097  unsigned subMessage,
1098  const H245_ArrayOf_GenericParameter & params
1099  );
1100 
1104  virtual bool OnH239FlowControlRequest(
1105  unsigned logicalChannel,
1106  unsigned bitRate
1107  );
1108 
1112  virtual bool OnH239FlowControlResponse(
1113  unsigned logicalChannel,
1114  bool rejected
1115  );
1116 
1120  virtual bool OnH239PresentationRequest(
1121  unsigned logicalChannel,
1122  unsigned symmetryBreaking,
1123  unsigned terminalLabel
1124  );
1125 
1131  virtual bool SendH239PresentationRequest(
1132  unsigned logicalChannel,
1133  unsigned symmetryBreaking,
1134  unsigned terminalLabel
1135  );
1136 
1140  virtual bool OnH239PresentationResponse(
1141  unsigned logicalChannel,
1142  unsigned terminalLabel,
1143  bool rejected
1144  );
1145 
1149  virtual bool OnH239PresentationRelease(
1150  unsigned logicalChannel,
1151  unsigned terminalLabel
1152  );
1153 
1158  virtual bool SendH239PresentationRelease(
1159  unsigned logicalChannel,
1160  unsigned terminalLabel
1161  );
1162 
1166  virtual bool OnH239PresentationIndication(
1167  unsigned logicalChannel,
1168  unsigned terminalLabel
1169  );
1170 #endif
1171 
1180  };
1181 
1193  virtual PBoolean OnControlProtocolError(
1194  ControlProtocolErrors errorSource,
1195  const void * errorData = NULL
1196  );
1197 
1205  virtual void OnSendCapabilitySet(
1206  H245_TerminalCapabilitySet & pdu
1207  );
1208 
1220  virtual PBoolean OnReceivedCapabilitySet(
1221  const H323Capabilities & remoteCaps,
1222  const H245_MultiplexCapability * muxCap,
1223  H245_TerminalCapabilitySetReject & reject
1224  );
1225 
1228  virtual bool SendCapabilitySet(
1229  PBoolean empty
1230  );
1231 
1234  virtual bool IsSendingCapabilitySet();
1235 
1244  virtual void OnSetLocalCapabilities();
1245 
1248  PBoolean IsH245Master() const;
1249 
1252  void StartRoundTripDelay();
1253 
1256  PTimeInterval GetRoundTripDelay() const;
1258 
1298  virtual void OnSelectLogicalChannels();
1299 
1302  virtual void SelectDefaultLogicalChannel(
1303  const OpalMediaType & mediaType,
1304  unsigned sessionID
1305  );
1306 
1310  virtual void SelectFastStartChannels(
1311  unsigned sessionID,
1312  PBoolean transmitter,
1313  PBoolean receiver
1314  );
1315 
1319  virtual void StartFastStartChannel(
1320  unsigned sessionID,
1321  H323Channel::Directions direction
1322  );
1323 
1338  virtual PBoolean OpenLogicalChannel(
1339  const H323Capability & capability,
1340  unsigned sessionID,
1342  );
1343 
1344  virtual void SendFlowControlCommand(
1345  unsigned channelNumber,
1346  unsigned newBitRate
1347  );
1348 
1358  virtual PBoolean OnOpenLogicalChannel(
1359  const H245_OpenLogicalChannel & openPDU,
1360  H245_OpenLogicalChannelAck & ackPDU,
1361  unsigned & errorCode
1362  );
1363 
1371  virtual PBoolean OnConflictingLogicalChannel(
1372  H323Channel & channel
1373  );
1374 
1380  const H245_OpenLogicalChannel & open,
1381  PBoolean startingFast,
1382  unsigned & errorCode
1383  );
1384 
1420  const H323Capability & capability,
1422  unsigned sessionID,
1423  const H245_H2250LogicalChannelParameters * param,
1425  RTP_QOS * rtpqos = NULL
1426  );
1427 
1432  const H323Capability & capability,
1433  H323Channel::Directions direction,
1434  RTP_Session & rtp
1435  );
1436 
1447  virtual PBoolean OnCreateLogicalChannel(
1448  const H323Capability & capability,
1450  unsigned & errorCode
1451  );
1452 
1457  virtual PBoolean OnStartLogicalChannel(
1458  H323Channel & channel
1459  );
1460 
1463  virtual void CloseLogicalChannel(
1464  unsigned number,
1465  PBoolean fromRemote
1466  );
1467 
1470  virtual void CloseLogicalChannelNumber(
1471  const H323ChannelNumber & number
1472  );
1473 
1476  virtual void CloseAllLogicalChannels(
1477  PBoolean fromRemote
1478  );
1479 
1485  virtual void OnClosedLogicalChannel(
1486  const H323Channel & channel
1487  );
1488 
1497  virtual PBoolean OnClosingLogicalChannel(
1498  H323Channel & channel
1499  );
1500 
1509  virtual void OnLogicalChannelFlowControl(
1510  H323Channel * channel,
1511  long bitRateRestriction
1512  );
1513 
1522  virtual void OnLogicalChannelJitter(
1523  H323Channel * channel,
1524  DWORD jitter,
1525  int skippedFrameCount,
1526  int additionalBuffer
1527  );
1528 
1533  unsigned number,
1534  PBoolean fromRemote
1535  ) const;
1536 
1543  unsigned sessionId,
1544  PBoolean fromRemote
1545  ) const;
1547 
1554  virtual PBoolean SetBandwidthAvailable(
1555  unsigned newBandwidth,
1556  PBoolean force = false
1557  );
1558 
1563  virtual unsigned GetBandwidthUsed() const;
1565 
1574 
1588  virtual PBoolean SendUserInputString(
1589  const PString & value
1590  );
1591 
1616  virtual PBoolean SendUserInputTone(
1617  char tone,
1618  unsigned duration = 0
1619  );
1620 
1627  virtual PBoolean SendUserInputIndicationQ931(
1628  const PString & value
1629  );
1630 
1637  virtual PBoolean SendUserInputIndicationString(
1638  const PString & value
1639  );
1640 
1645  virtual PBoolean SendUserInputIndicationTone(
1646  char tone,
1647  unsigned duration = 0,
1648  unsigned logicalChannel = 0,
1649  unsigned rtpTimestamp = 0
1650  );
1651 
1660  virtual PBoolean SendUserInputIndication(
1661  const H245_UserInputIndication & pdu
1662  );
1663 
1668  virtual void OnUserInputIndication(
1669  const H245_UserInputIndication & pdu
1670  );
1672 
1679  unsigned sessionID
1680  ) const;
1681 
1687  virtual RTP_Session * UseSession(
1688  const OpalTransport & transport,
1689  unsigned sessionID,
1690  const OpalMediaType & mediatype,
1691  RTP_QOS * rtpqos = NULL
1692  );
1693 
1701  virtual void OnRTPStatistics(
1702  const RTP_Session & session
1703  ) const;
1704 
1708  virtual PString GetSessionCodecNames(
1709  unsigned sessionID
1710  ) const;
1711 
1713 
1731  virtual PBoolean RequestModeChange(
1732  const PString & newModes
1733  );
1734 
1742  virtual PBoolean RequestModeChange(
1743  const H245_ArrayOf_ModeDescription & newModes
1744  );
1745 
1748  virtual PBoolean OnRequestModeChange(
1749  const H245_RequestMode & pdu,
1750  H245_RequestModeAck & ack,
1751  H245_RequestModeReject & reject,
1752  PINDEX & selectedMode
1753  );
1754 
1761  virtual void OnModeChanged(
1762  const H245_ModeDescription & newMode
1763  );
1764 
1769  virtual void OnAcceptModeChange(
1770  const H245_RequestModeAck & pdu
1771  );
1772 
1777  virtual void OnRefusedModeChange(
1778  const H245_RequestModeReject * pdu
1779  );
1781 
1789  virtual PBoolean RequestModeChangeT38(
1790  const char * capabilityNames = "T.38\nT38FaxUDP"
1791  );
1792 
1802  virtual PBoolean GetAdmissionRequestAuthentication(
1803  const H225_AdmissionRequest & arq,
1804  H235Authenticators & authenticators
1805  );
1807 
1812  H323EndPoint & GetEndPoint() const { return endpoint; }
1813 
1816  PBoolean HadAnsweredCall() const { return !originating; }
1817 
1820  PBoolean IsGatekeeperRouted() const { return gatekeeperRouted; }
1821 
1826  unsigned GetDistinctiveRing() const { return distinctiveRing; }
1827 
1834  void SetDistinctiveRing(unsigned pattern) { distinctiveRing = pattern&7; }
1835 
1839  const PString & GetCallToken() const { return GetToken(); }
1840 
1843  unsigned GetCallReference() const { return callReference; }
1844 
1847  inline const OpalGloballyUniqueID & GetCallIdentifier() const
1848  { return callIdentifier; }
1849 
1852  virtual PString GetIdentifier() const;
1853 
1857 
1860  void SetLocalPartyName(const PString & name);
1861 
1864  const PStringList & GetLocalAliasNames() const { return localAliasNames; }
1865 
1868  virtual void SetRemotePartyInfo(
1869  const H323SignalPDU & pdu
1870  );
1871 
1874  void SetRemoteApplication(
1875  const H225_EndpointType & pdu
1876  );
1877 
1881 
1885 
1889 
1893 
1896  unsigned GetSignallingVersion() const { return h225version; }
1897 
1900  const H323Transport & GetControlChannel() const;
1901 
1904  OpalTransport & GetTransport() const;
1905 
1908  unsigned GetControlVersion() const { return h245version; }
1909 
1912  unsigned GetUUIEsRequested() const { return uuiesRequested; }
1913 
1916  void SetUUIEsRequested(unsigned mask) { uuiesRequested = mask; }
1917 
1920  const PString GetGkAccessTokenOID() const { return gkAccessTokenOID; }
1921 
1924  void SetGkAccessTokenOID(const PString & oid) { gkAccessTokenOID = oid; }
1925 
1928  const PBYTEArray & GetGkAccessTokenData() const { return gkAccessTokenData; }
1929 
1933  const PString & info
1934  ) { destExtraCallInfo = info; }
1935 
1938  void SetRemotCallWaiting(const unsigned value) { remoteCallWaiting = value; }
1939 
1945  int GetRemoteCallWaiting() const { return remoteCallWaiting; }
1946 
1952  unsigned seconds
1953  );
1955 
1956 #if OPAL_H239
1957 
1959  bool GetLocalH239Control() const { return m_h239Control; }
1960 
1964  bool on
1965  ) { m_h239Control = on; }
1966 
1969  bool GetRemoteH239Control() const;
1970 
1974 #endif
1975 
1976  virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &) const;
1977 
1978  virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &) const;
1979 
1980 #if OPAL_H460
1981 
1983  virtual H460_FeatureSet * GetFeatureSet();
1984 #endif
1985 
1986 
1987 #if OPAL_H450
1988 
1993 #endif
1994 
2000  virtual bool OnMediaCommand(
2001  OpalMediaStream & stream,
2002  const OpalMediaCommand & command
2003  );
2004 
2005  protected:
2011  virtual void InternalEstablishedConnectionCheck();
2012  PBoolean InternalEndSessionCheck(PPER_Stream & strm);
2013  void SetRemoteVersions(const H225_ProtocolIdentifier & id);
2014  void SetBearerCapabilities(H323SignalPDU & pdu) const;
2015  void MonitorCallStatus();
2016  PDECLARE_NOTIFIER(PThread, H323Connection, StartOutgoing);
2017  PDECLARE_NOTIFIER(PThread, H323Connection, NewOutgoingControlChannel);
2018  PDECLARE_NOTIFIER(PThread, H323Connection, NewIncomingControlChannel);
2019 
2021 
2023  int remoteCallWaiting; // Number of call's waiting at the remote endpoint
2026  unsigned callReference;
2030 
2032  PStringList localAliasNames;
2033  H323Capabilities localCapabilities; // Capabilities local system supports
2035  H323Capabilities remoteCapabilities; // Capabilities remote system supports
2038  unsigned uuiesRequested;
2040  PBYTEArray gkAccessTokenData;
2042 
2053 
2064  } connectionState;
2065 
2066  unsigned h225version;
2067  unsigned h245version;
2071 
2078  PSyncPoint digitsWaitFlag;
2083 
2087 
2094  };
2096  H323LogicalChannelList fastStartChannels;
2098 
2099 #if PTRACING
2100  static const char * GetConnectionStatesName(ConnectionStates s);
2101  friend ostream & operator<<(ostream & o, ConnectionStates s) { return o << GetConnectionStatesName(s); }
2102  static const char * GetFastStartStateName(FastStartStates s);
2103  friend ostream & operator<<(ostream & o, FastStartStates s) { return o << GetFastStartStateName(s); }
2104 #endif
2105 
2106 
2107  // The following pointers are to protocol procedures, they are pointers to
2108  // hide their complexity from the H323Connection classes users.
2114 
2115 #if OPAL_H239
2117 #endif
2118 
2119 #if OPAL_H450
2126 #endif
2127 
2128 #if OPAL_H460
2130 #endif
2131 
2132  private:
2133  P_REMOVE_VIRTUAL_VOID(CleanUpOnCallEnd());
2134  P_REMOVE_VIRTUAL_VOID(OnCleared());
2135 };
2136 
2137 
2138 PDICTIONARY(H323CallIdentityDict, PString, H323Connection);
2139 
2140 
2141 #endif // OPAL_H323
2142 
2143 #endif // OPAL_H323_H323CON_H
2144 
2145