OPAL  Version 3.18.8
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 
30 #ifndef OPAL_H323_H323CON_H
31 #define OPAL_H323_H323CON_H
32 
33 #ifdef P_USE_PRAGMA
34 #pragma interface
35 #endif
36 
37 #include <opal_config.h>
38 
39 #if OPAL_H323
40 
41 #include <rtp/rtpconn.h>
42 #include <opal/guid.h>
43 #include <opal_config.h>
44 #include <h323/h323caps.h>
45 #include <h323/h235dh.h>
46 #include <h460/h460.h>
47 #include <ptclib/dtmf.h>
48 
49 
50 /* The following classes have forward references to avoid including the VERY
51  large header files for H225 and H245. If an application requires access
52  to the protocol classes they can include them, but for simple usage their
53  inclusion can be avoided.
54  */
55 class PPER_Stream;
56 class PASN_OctetString;
57 class PASN_Sequence;
58 
59 class H225_EndpointType;
60 class H225_TransportAddress;
61 class H225_ArrayOf_PASN_OctetString;
62 class H225_ProtocolIdentifier;
63 class H225_AdmissionRequest;
64 class H225_AdmissionConfirm;
65 class H225_AdmissionReject;
66 class H225_InfoRequestResponse;
67 class H225_DisengageRequest;
68 class H225_FeatureSet;
69 class H225_H245Security;
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 class H245_ArrayOf_GenericInformation;
90 
91 class H323SignalPDU;
92 class H323ControlPDU;
93 class H323EndPoint;
97 
98 class H235Authenticators;
99 
103 class H245NegRequestMode;
105 
106 class H450xDispatcher;
107 class H4502Handler;
108 class H4504Handler;
109 class H4506Handler;
110 class H4507Handler;
111 class H45011Handler;
112 
113 class OpalCall;
114 
115 class H460_FeatureSet;
116 
117 
121 #define OPAL_OPT_Q931_BEARER_CAPS "Q931-Bearer-Caps"
122 
126 #define OPAL_OPT_Q931_BEARER_BANDWIDTH "Q931-Bearer-Bandwidth"
127 
128 
130 
138 {
139  PCLASSINFO(H323Connection, OpalRTPConnection);
140 
141  public:
147  OpalCall & call,
148  H323EndPoint & endpoint,
149  const PString & token,
150  const PString & alias,
151  const H323TransportAddress & address,
152  unsigned options = 0,
153  OpalConnection::StringOptions * stringOptions = NULL
154  );
155 
158  ~H323Connection();
160 
171  virtual bool IsNetworkConnection() const { return true; }
172 
175  virtual PString GetPrefixName() const;
176 
178  virtual void OnApplyStringOptions();
179 
186  virtual PBoolean SetUpConnection();
187 
197  virtual PBoolean SetAlerting(
198  const PString & calleeName,
199  PBoolean withMedia
200  );
201 
206  virtual PBoolean SetConnected();
207 
212  virtual PBoolean SetProgressed();
213 
221  virtual void OnEstablished();
222 
240  virtual void OnReleased();
241 
245 
250  virtual PString GetDestinationAddress();
251 
265  virtual PString GetAlertingType() const;
266 
280  virtual bool SetAlertingType(const PString & info);
281 
290  virtual PString GetSupportedFeatures() const;
291 
294  unsigned GetProgressIndicator() const { return m_progressIndicator; }
295 
298  void SetProgressIndicator(unsigned indicator) { m_progressIndicator = indicator; }
299 
307  virtual OpalMediaFormatList GetMediaFormats() const;
308 
313  virtual PStringArray GetMediaCryptoSuites() const;
314 
317  virtual unsigned GetNextSessionID(
318  const OpalMediaType & mediaType,
319  bool isSource
320  );
321 
322 #if OPAL_T38_CAPABILITY
323 
325  virtual bool SwitchFaxMediaStreams(
326  bool toT38
327  );
328 #endif
329 
333  const OpalMediaFormat & mediaFormat,
334  unsigned sessionID,
335  bool isSource
336  );
337 
342  virtual void OnClosedMediaStream(
343  const OpalMediaStream & stream
344  );
345 
355  virtual bool GetMediaTransportAddresses(
356  OpalConnection & otherConnection,
357  unsigned sessionId,
358  const OpalMediaType & mediaType,
359  OpalTransportAddressArray & transports
360  ) const;
361 
362 #if OPAL_H239
363 
374  virtual bool RequestPresentationRole(
375  bool release
376  );
377 
382  virtual bool HasPresentationRole() const;
383 #endif // OPAL_H239
384 
385 
390  void AttachSignalChannel(
391  const PString & token,
392  H323Transport * channel,
393  PBoolean answeringCall
394  );
395 
398  PBoolean WriteSignalPDU(
399  H323SignalPDU & pdu
400  );
401 
405  virtual void HandleSignallingChannel();
406 
410  virtual PBoolean HandleSignalPDU(
411  H323SignalPDU & pdu
412  );
413 
417  virtual void HandleTunnelPDU(
418  H323SignalPDU * txPDU
419  );
420 
428  virtual PBoolean OnReceivedSignalSetup(
429  const H323SignalPDU & pdu
430  );
431 
438  virtual PBoolean OnReceivedSignalSetupAck(
439  const H323SignalPDU & pdu
440  );
441 
448  virtual PBoolean OnReceivedSignalInformation(
449  const H323SignalPDU & pdu
450  );
451 
460  virtual PBoolean OnReceivedCallProceeding(
461  const H323SignalPDU & pdu
462  );
463 
472  virtual PBoolean OnReceivedProgress(
473  const H323SignalPDU & pdu
474  );
475 
482  virtual PBoolean OnReceivedAlerting(
483  const H323SignalPDU & pdu
484  );
485 
494  virtual PBoolean OnReceivedSignalConnect(
495  const H323SignalPDU & pdu
496  );
497 
506  virtual PBoolean OnReceivedFacility(
507  const H323SignalPDU & pdu
508  );
509 
516  virtual PBoolean OnReceivedSignalNotify(
517  const H323SignalPDU & pdu
518  );
519 
526  virtual PBoolean OnReceivedSignalStatus(
527  const H323SignalPDU & pdu
528  );
529 
536  virtual PBoolean OnReceivedStatusEnquiry(
537  const H323SignalPDU & pdu
538  );
539 
544  virtual void OnReceivedReleaseComplete(
545  const H323SignalPDU & pdu
546  );
547 
554  virtual PBoolean OnUnknownSignalPDU(
555  const H323SignalPDU & pdu
556  );
557 
564  virtual void OnSendARQ(
565  H225_AdmissionRequest & arq
566  );
567 
573  virtual void OnReceivedACF(
574  const H225_AdmissionConfirm & acf
575  );
576 
582  virtual void OnReceivedARJ(
583  const H225_AdmissionReject & arj
584  );
585 
592  virtual void OnSendIRR(
593  H225_InfoRequestResponse & irr
594  ) const;
595 
602  virtual void OnSendDRQ(
603  H225_DisengageRequest & drq
604  ) const;
605 
617  virtual PBoolean OnIncomingCall(
618  const H323SignalPDU & setupPDU,
619  H323SignalPDU & alertingPDU
620  );
621 
631  virtual PBoolean ForwardCall(
632  const PString & forwardParty
633  );
634 
641  virtual bool TransferConnection(
642  const PString & remoteParty
643  );
644 
659  virtual bool HoldRemote(
660  bool placeOnHold
661  );
662 
667  virtual bool IsOnHold(
668  bool fromRemote
669  ) const;
670 
671 #if OPAL_H450
672 
677  bool TransferCall(
678  const PString & remoteParty,
679  const PString & callIdentity = PString::Empty()
681  );
682 
688  const PString & primaryCallToken
689  );
690 
697  virtual void HandleConsultationTransfer(
698  const PString & callIdentity,
700  H323Connection & incoming
701  );
702 
705  PBoolean IsTransferringCall() const;
706 
709  PBoolean IsTransferredCall() const;
710 
715  virtual void HandleTransferCall(
716  const PString & token,
717  const PString & identity
718  );
719 
725 
733  virtual void HandleCallTransferFailure(
734  const int returnError
735  );
736 
742  const PString & token
743  );
744 
749  virtual void OnConsultationTransferSuccess(
750  H323Connection & secondaryCall
751  );
752 
757  virtual void IntrudeCall(
758  unsigned capabilityLevel
759  );
760 
765  virtual void HandleIntrudeCall(
766  const PString & token,
767  const PString & identity
768  );
769 
776 
777  PBoolean IsCallIntrusion() { return m_isCallIntrusion; }
778 
782 
786  virtual PBoolean GetRemoteCallIntrusionProtectionLevel(
787  const PString & callToken,
788  unsigned callIntrusionProtectionLevel
789  );
790 
791  virtual void SetIntrusionImpending();
792 
793  virtual void SetForcedReleaseAccepted();
794 
795  virtual void SetIntrusionNotAuthorized();
796 
804  const unsigned nbOfAddWaitingCalls = 0
805  );
806 
807 #endif
808 
835  virtual AnswerCallResponse OnAnswerCall(
836  const PString & callerName,
837  const H323SignalPDU & setupPDU,
838  H323SignalPDU & connectPDU,
839  H323SignalPDU & progressPDU
840  );
841 
842  virtual AnswerCallResponse OnAnswerCall(
843  const PString & callerName
844  );
845 
856  void AnsweringCall(
857  AnswerCallResponse response
858  );
859 
870  virtual CallEndReason SendSignalSetup(
871  const PString & alias,
872  const H323TransportAddress & address
873  );
874 
886  virtual PBoolean OnSendSignalSetup(
887  H323SignalPDU & setupPDU
888  );
889 
898  virtual PBoolean OnSendCallProceeding(
899  H323SignalPDU & callProceedingPDU
900  );
901 
913  virtual PBoolean OnSendReleaseComplete(
914  H323SignalPDU & releaseCompletePDU
915  );
916 
927  virtual PBoolean OnAlerting(
928  const H323SignalPDU & alertingPDU,
929  const PString & user
930  );
931 
946  virtual PBoolean OnInsufficientDigits();
947 
960  virtual void SendMoreDigits(
961  const PString & digits
962  );
963 
973  virtual PBoolean OnOutgoingCall(
974  const H323SignalPDU & connectPDU
975  );
976 
988  virtual PBoolean SendFastStartAcknowledge(
989  H225_ArrayOf_PASN_OctetString & array
990  );
991 
1003  virtual PBoolean HandleFastStartAcknowledge(
1004  const H225_ArrayOf_PASN_OctetString & array
1005  );
1007 
1021  virtual PBoolean CreateOutgoingControlChannel(
1022  const PASN_Sequence & enclosingPDU,
1023  const H225_TransportAddress & h245Address,
1024  unsigned h245AddressField,
1025  const H225_H245Security & h245Security,
1026  unsigned h245SecurityField
1027  );
1028 
1041  virtual PBoolean CreateIncomingControlChannel(
1042  PASN_Sequence & enclosingPDU,
1043  H225_TransportAddress & h245Address,
1044  unsigned h245AddressField,
1045  H225_H245Security & h245Security,
1046  unsigned h245SecurityField
1047  );
1048 
1053  virtual PBoolean WriteControlPDU(
1054  const H323ControlPDU & pdu
1055  );
1056 
1059  virtual PBoolean StartControlNegotiations();
1060 
1063  virtual void HandleControlChannel();
1064 
1071  virtual PBoolean HandleControlData(
1072  PPER_Stream & strm
1073  );
1074 
1081  virtual PBoolean HandleControlPDU(
1082  const H323ControlPDU & pdu
1083  );
1084 
1088  virtual PBoolean HandleReceivedControlPDU(
1089  PBoolean readStatus,
1090  PPER_Stream & strm
1091  );
1092 
1102  virtual PBoolean OnUnknownControlPDU(
1103  const H323ControlPDU & pdu
1104  );
1105 
1109  virtual PBoolean OnH245Request(
1110  const H323ControlPDU & pdu
1111  );
1112 
1116  virtual PBoolean OnH245Response(
1117  const H323ControlPDU & pdu
1118  );
1119 
1123  virtual PBoolean OnH245Command(
1124  const H323ControlPDU & pdu
1125  );
1126 
1130  virtual PBoolean OnH245Indication(
1131  const H323ControlPDU & pdu
1132  );
1133 
1136  virtual PBoolean OnH245_SendTerminalCapabilitySet(
1137  const H245_SendTerminalCapabilitySet & pdu
1138  );
1139 
1144  virtual PBoolean OnH245_FlowControlCommand(
1145  const H245_FlowControlCommand & pdu
1146  );
1147 
1152  virtual PBoolean OnH245_MiscellaneousCommand(
1153  const H245_MiscellaneousCommand & pdu
1154  );
1155 
1160  virtual PBoolean OnH245_MiscellaneousIndication(
1161  const H245_MiscellaneousIndication & pdu
1162  );
1163 
1168  virtual PBoolean OnH245_JitterIndication(
1169  const H245_JitterIndication & pdu
1170  );
1171 
1172 #if OPAL_H239
1173 
1175  virtual bool OnH239Message(
1176  unsigned subMessage,
1177  const H245_ArrayOf_GenericParameter & params
1178  );
1179 
1183  virtual bool OnH239FlowControlRequest(
1184  unsigned logicalChannel,
1185  unsigned bitRate
1186  );
1187 
1191  virtual bool OnH239FlowControlResponse(
1192  unsigned logicalChannel,
1193  bool rejected
1194  );
1195 
1199  virtual bool OnH239PresentationRequest(
1200  unsigned logicalChannel,
1201  unsigned symmetryBreaking,
1202  unsigned terminalLabel
1203  );
1204 
1210  virtual bool SendH239PresentationRequest(
1211  unsigned logicalChannel,
1212  unsigned symmetryBreaking,
1213  unsigned terminalLabel
1214  );
1215 
1219  virtual bool OnH239PresentationResponse(
1220  unsigned logicalChannel,
1221  unsigned terminalLabel,
1222  bool rejected
1223  );
1224 
1228  virtual bool OnH239PresentationRelease(
1229  unsigned logicalChannel,
1230  unsigned terminalLabel
1231  );
1232 
1237  virtual bool SendH239PresentationRelease(
1238  unsigned logicalChannel,
1239  unsigned terminalLabel
1240  );
1241 
1245  virtual bool OnH239PresentationIndication(
1246  unsigned logicalChannel,
1247  unsigned terminalLabel
1248  );
1249 #endif // OPAL_H239
1250 
1259  };
1260 
1272  virtual PBoolean OnControlProtocolError(
1273  ControlProtocolErrors errorSource,
1274  const void * errorData = NULL
1275  );
1276 
1284  virtual void OnSendCapabilitySet(
1285  H245_TerminalCapabilitySet & pdu
1286  );
1287 
1299  virtual PBoolean OnReceivedCapabilitySet(
1300  const H323Capabilities & remoteCaps,
1301  const H245_MultiplexCapability * muxCap,
1302  H245_TerminalCapabilitySetReject & reject
1303  );
1304 
1307  virtual bool SendCapabilitySet(
1308  PBoolean empty
1309  );
1310 
1313  virtual bool IsSendingCapabilitySet();
1314 
1323  virtual void OnSetLocalCapabilities();
1324 
1329  H245_OpenLogicalChannel & /*open*/,
1330  PBoolean /*forward*/
1331  ) { }
1332 
1335  PBoolean IsH245Master() const;
1336 
1339  void StartRoundTripDelay();
1340 
1343  PTimeInterval GetRoundTripDelay() const;
1345 
1385  virtual void OnSelectLogicalChannels();
1386 
1389  virtual void SelectDefaultLogicalChannel(
1390  const OpalMediaType & mediaType,
1391  unsigned sessionID
1392  );
1393 
1397  virtual void SelectFastStartChannels(
1398  unsigned sessionID,
1399  PBoolean transmitter,
1400  PBoolean receiver
1401  );
1402 
1406  virtual void OpenFastStartChannel(
1407  unsigned sessionID,
1408  H323Channel::Directions direction
1409  );
1410 
1425  virtual PBoolean OpenLogicalChannel(
1426  const H323Capability & capability,
1427  unsigned sessionID,
1429  );
1430 
1431  virtual void SendFlowControlCommand(
1432  unsigned channelNumber,
1433  unsigned newBitRate
1434  );
1435 
1445  virtual PBoolean OnOpenLogicalChannel(
1446  const H245_OpenLogicalChannel & openPDU,
1447  H245_OpenLogicalChannelAck & ackPDU,
1448  unsigned & errorCode,
1449  H323Channel & channel
1450  );
1451 
1459  virtual PBoolean OnConflictingLogicalChannel(
1460  H323Channel & channel
1461  );
1462 
1468  const H245_OpenLogicalChannel & open,
1469  PBoolean startingFast,
1470  unsigned & errorCode
1471  );
1472 
1508  const H323Capability & capability,
1510  unsigned sessionID,
1511  const H245_H2250LogicalChannelParameters * param
1513  );
1514 
1519  const H323Capability & capability,
1520  H323Channel::Directions direction,
1521  H323RTPSession & rtp
1522  );
1523 
1534  virtual PBoolean OnCreateLogicalChannel(
1535  const H323Capability & capability,
1537  unsigned & errorCode
1538  );
1539 
1544  virtual PBoolean OnStartLogicalChannel(
1545  H323Channel & channel
1546  );
1547 
1550  virtual void CloseLogicalChannel(
1551  unsigned number,
1552  PBoolean fromRemote
1553  );
1554 
1557  virtual void CloseLogicalChannelNumber(
1558  const H323ChannelNumber & number
1559  );
1560 
1563  virtual void CloseAllLogicalChannels(
1564  PBoolean fromRemote
1565  );
1566 
1572  virtual void OnClosedLogicalChannel(
1573  const H323Channel & channel
1574  );
1575 
1584  virtual PBoolean OnClosingLogicalChannel(
1585  H323Channel & channel
1586  );
1587 
1596  virtual void OnLogicalChannelFlowControl(
1597  H323Channel * channel,
1598  long bitRateRestriction
1599  );
1600 
1609  virtual void OnLogicalChannelJitter(
1610  H323Channel * channel,
1611  DWORD jitter,
1612  int skippedFrameCount,
1613  int additionalBuffer
1614  );
1615 
1620  unsigned number,
1621  PBoolean fromRemote
1622  ) const;
1623 
1630  unsigned sessionId,
1631  bool fromRemote,
1632  bool anyState = false
1633  ) const;
1635 
1644  ) const;
1646 
1654  virtual SendUserInputModes GetRealSendUserInputMode() const;
1655 
1669  virtual PBoolean SendUserInputString(
1670  const PString & value
1671  );
1672 
1697  virtual PBoolean SendUserInputTone(
1698  char tone,
1699  unsigned duration = 0
1700  );
1701 
1708  virtual PBoolean SendUserInputIndicationQ931(
1709  const PString & value
1710  );
1711 
1718  virtual PBoolean SendUserInputIndicationString(
1719  const PString & value
1720  );
1721 
1726  virtual PBoolean SendUserInputIndicationTone(
1727  char tone,
1728  unsigned duration = 0,
1729  unsigned logicalChannel = 0,
1730  unsigned rtpTimestamp = 0
1731  );
1732 
1741  virtual PBoolean SendUserInputIndication(
1742  const H245_UserInputIndication & pdu
1743  );
1744 
1749  virtual void OnUserInputIndication(
1750  const H245_UserInputIndication & pdu
1751  );
1753 
1759  virtual PString GetSessionCodecNames(
1760  unsigned sessionID
1761  ) const;
1762 
1767  virtual void DetermineRTPNAT(
1768  const OpalTransport & transport,
1769  const OpalTransportAddress & signalAddr
1770  );
1771 
1789  virtual PBoolean RequestModeChange(
1790  const PString & newModes
1791  );
1792 
1800  virtual PBoolean RequestModeChange(
1801  const H245_ArrayOf_ModeDescription & newModes
1802  );
1803 
1806  virtual PBoolean OnRequestModeChange(
1807  const H245_RequestMode & pdu,
1808  H245_RequestModeAck & ack,
1809  H245_RequestModeReject & reject,
1810  PINDEX & selectedMode
1811  );
1812 
1819  virtual void OnModeChanged(
1820  const H245_ModeDescription & newMode
1821  );
1822 
1827  virtual void OnAcceptModeChange(
1828  const H245_RequestModeAck & pdu
1829  );
1830 
1835  virtual void OnRefusedModeChange(
1836  const H245_RequestModeReject * pdu
1837  );
1839 
1847  virtual PBoolean RequestModeChangeT38(
1848  const char * capabilityNames = "T.38\nT38FaxUDP"
1849  );
1850 
1860  virtual PBoolean GetAdmissionRequestAuthentication(
1861  const H225_AdmissionRequest & arq,
1862  H235Authenticators & authenticators
1863  );
1864 
1867  virtual bool SendNonStandardControl(
1868  const PString & identifier,
1869  const PBYTEArray & data
1870  );
1872 
1877  H323EndPoint & GetEndPoint() const { return m_endpoint; }
1878 
1881  PBoolean HadAnsweredCall() const { return !IsOriginating(); }
1882 
1885  PBoolean IsGatekeeperRouted() const { return m_gatekeeperRouted; }
1886 
1891  unsigned GetDistinctiveRing() const { return m_distinctiveRing; }
1892 
1899  void SetDistinctiveRing(unsigned pattern) { m_distinctiveRing = pattern&7; }
1900 
1904  const PString & GetCallToken() const { return GetToken(); }
1905 
1908  unsigned GetCallReference() const { return m_callReference; }
1909 
1912  inline const OpalGloballyUniqueID & GetCallIdentifier() const
1913  { return m_callIdentifier; }
1914 
1917  virtual PString GetIdentifier() const;
1918 
1922 
1925  void SetLocalPartyName(const PString & name);
1926 
1929  const PStringList & GetLocalAliasNames() const { return m_localAliasNames; }
1930 
1933  virtual void SetRemotePartyInfo(
1934  const H323SignalPDU & pdu
1935  );
1936 
1939  void SetRemoteApplication(
1940  const H225_EndpointType & pdu
1941  );
1942 
1949  };
1950 
1954 
1958 
1962 
1966 
1970 
1974 
1977  unsigned GetSignallingVersion() const { return m_h225version; }
1978 
1981  const H323Transport & GetControlChannel() const;
1982 
1985  OpalTransport & GetTransport() const;
1986 
1989  unsigned GetControlVersion() const { return m_h245version; }
1990 
1993  unsigned GetUUIEsRequested() const { return m_uuiesRequested; }
1994 
1997  void SetUUIEsRequested(unsigned mask) { m_uuiesRequested = mask; }
1998 
2001  const PString GetGkAccessTokenOID() const { return m_gkAccessTokenOID; }
2002 
2005  void SetGkAccessTokenOID(const PString & oid) { m_gkAccessTokenOID = oid; }
2006 
2009  const PBYTEArray & GetGkAccessTokenData() const { return m_gkAccessTokenData; }
2010 
2014  const PString & info
2015  ) { m_destExtraCallInfo = info; }
2016 
2019  void SetRemotCallWaiting(const unsigned value) { m_remoteCallWaiting = value; }
2020 
2027 
2033  unsigned seconds
2034  );
2036 
2037 
2038 #if OPAL_H239
2039 
2041  bool GetLocalH239Control() const { return m_h239Control; }
2042 
2046  bool on
2047  ) { m_h239Control = on; }
2048 
2051  bool GetRemoteH239Control() const;
2052 
2056 #endif
2057 
2058 #if OPAL_H235_6
2059  const H235DiffieHellman & GetDiffieHellman() const { return m_dh; }
2061  H235DiffieHellman & GetDiffieHellman() { return m_dh; }
2062 #endif
2063 
2064 #if OPAL_H450
2065 
2070 #endif
2071 
2072 #if OPAL_H460
2073 
2076 
2077  virtual bool OnSendFeatureSet(H460_MessageType pduType, H225_FeatureSet &) const;
2078  virtual void OnReceiveFeatureSet(H460_MessageType pduType, const H225_FeatureSet &) const;
2079 #endif
2080 
2085  virtual void OnReceiveOLCGenericInformation(
2086  unsigned sessionID,
2087  const H245_ArrayOf_GenericInformation & info,
2088  bool isAck
2089  ) const;
2090 
2094  virtual bool OnSendingOLCGenericInformation(
2095  unsigned sessionID,
2096  H245_ArrayOf_GenericInformation & info,
2097  bool isAck
2098  ) const;
2099 
2105  virtual bool OnMediaCommand(
2106  OpalMediaStream & stream,
2107  const OpalMediaCommand & command
2108  );
2109 
2112  P_DECLARE_ENUM(CompatibilityIssues,
2113  e_NoMultipleTunnelledH245,
2114  e_BadMasterSlaveConflict,
2115  e_NoUserInputCapability,
2116  e_H224MustBeSession3,
2117  e_NeedTCSAfterNonEmptyTCS,
2118  e_NeedMSDAfterNonEmptyTCS,
2119  e_ForceMaintainConnection
2120  );
2121  P_DECLARE_ENUM_NAMES(CompatibilityIssues,
2122  "No-Multiple-Tunnelled-H245",
2123  "Bad-Master-Slave-Conflict",
2124  "No-User-Input-Capability",
2125  "H.224-Must-Be-Session-3",
2126  "Need-TCS-after-Non-Empty-TCS",
2127  "Need-MSD-after-Non-Empty-TCS",
2128  "Force-Maintain-TCP-Connection"
2129  );
2130 
2132  bool HasCompatibilityIssue(
2133  CompatibilityIssues issue
2134  ) const;
2135 
2136  PBoolean StartHandleControlChannel();
2137  virtual PBoolean OnStartHandleControlChannel();
2138  void EndHandleControlChannel();
2139 
2140  protected:
2146  virtual void InternalEstablishedConnectionCheck();
2147  bool InternalEndSessionCheck(PPER_Stream & strm);
2148  bool SendReleaseComplete();
2149  void SetRemoteVersions(const H225_ProtocolIdentifier & id);
2150  void SetOutgoingBearerCapabilities(H323SignalPDU & pdu) const;
2151  void SetIncomingBearerCapabilities(const H323SignalPDU & pdu);
2152  void MonitorCallStatus();
2153  PDECLARE_NOTIFIER(PThread, H323Connection, NewOutgoingControlChannel);
2154  PDECLARE_AcceptHandlerNotifier(H323Connection, NewIncomingControlChannel);
2155 
2157 
2159  int m_remoteCallWaiting; // Number of call's waiting at the remote endpoint
2166 
2168  PStringList m_localAliasNames;
2169  H323Capabilities m_localCapabilities; // Capabilities local system supports
2171  H323Capabilities m_remoteCapabilities; // Capabilities remote system supports
2178 
2189 
2190  P_DECLARE_TRACED_ENUM(ConnectionStates,
2191  NoConnectionActive,
2192  AwaitingGatekeeperAdmission,
2193  AwaitingTransportConnect,
2194  AwaitingSignalConnect,
2195  AwaitingLocalAnswer,
2196  HasExecutedSignalConnect,
2197  EstablishedConnection,
2198  ShuttingDownConnection
2199  );
2200  ConnectionStates m_connectionState;
2201 
2202  unsigned m_h225version;
2203  unsigned m_h245version;
2208 
2214  PSyncPoint m_digitsWaitFlag;
2221 
2222  template <class PDU> void SetMaintainConnectionFlag(const PDU & pdu)
2223  {
2224  if (pdu.HasOptionalField(PDU::e_maintainConnection) && pdu.m_maintainConnection)
2225  m_maintainConnection = true;
2226  }
2227 
2228  PSafeDictionary<POrdinalKey, OpalMediaStream> m_conflictingChannels;
2229 
2230  P_DECLARE_TRACED_ENUM(RemoteHoldStates,
2231  eOffHoldFromRemote,
2232  eOnHoldFromRemote,
2233  eRetrieveFromRemote
2234  );
2235  RemoteHoldStates m_holdFromRemote;
2236 
2238 
2239 #if OPAL_H450
2240 
2243 #endif
2244 
2245  P_DECLARE_TRACED_ENUM(FastStartStates,
2246  FastStartDisabled,
2247  FastStartInitiate,
2248  FastStartResponse,
2249  FastStartAcknowledged
2250  );
2251  FastStartStates m_fastStartState;
2252  H323LogicalChannelList m_fastStartChannels;
2253 
2254 
2255  // The following pointers are to protocol procedures, they are pointers to
2256  // hide their complexity from the H323Connection classes users.
2262 
2263 #if OPAL_H239
2269 #endif
2270 
2271 #if OPAL_H450
2278 #endif
2279 
2280 #if OPAL_H460
2282 #endif
2283 
2284 #if OPAL_VIDEO
2286 #endif
2287 
2288 #if OPAL_H235_6
2289  H235DiffieHellman m_dh;
2290 
2291  template <class PDU> void SetDiffieHellman(const PDU & pdu)
2292  {
2293  if (pdu.HasOptionalField(PDU::e_tokens))
2294  m_dh.FromTokens(pdu.m_tokens);
2295  }
2296 #endif
2297 
2301  PDECLARE_NOTIFIER(PTimer, H323Connection, UserInputIndicationTimeout);
2302 
2303  private:
2304  P_REMOVE_VIRTUAL_VOID(CleanUpOnCallEnd());
2305  P_REMOVE_VIRTUAL_VOID(OnCleared());
2306  P_REMOVE_VIRTUAL_VOID(OnRTPStatistics(const OpalRTPSession &) const);
2307  P_REMOVE_VIRTUAL(PBoolean, OnOpenLogicalChannel(const H245_OpenLogicalChannel&,H245_OpenLogicalChannelAck&,unsigned&), false);
2308  P_REMOVE_VIRTUAL(PBoolean, OnOpenLogicalChannel(const H245_OpenLogicalChannel &, H245_OpenLogicalChannelAck &, unsigned &, const unsigned &), false);
2309  P_REMOVE_VIRTUAL_VOID(NatDetection(const PIPSocket::Address &, const PIPSocket::Address &));
2310  P_REMOVE_VIRTUAL(PBoolean, OnNatDetected(), false);
2311 };
2312 
2313 
2314 PDICTIONARY(H323CallIdentityDict, PString, H323Connection);
2315 
2316 
2317 #endif // OPAL_H323
2318 
2319 #endif // OPAL_H323_H323CON_H
2320 
2321 
virtual void OnSendARQ(H225_AdmissionRequest &arq)
virtual PBoolean OnReceivedSignalNotify(const H323SignalPDU &pdu)
unsigned m_h239TerminalLabel
Definition: h323con.h:2267
unsigned GetCallReference() const
Definition: h323con.h:1908
bool HasCompatibilityIssue(CompatibilityIssues issue) const
Determine if we must compensate for remote endpoint.
Definition: h4601.h:636
virtual void HandleConsultationTransfer(const PString &callIdentity, H323Connection &incoming)
virtual bool OnH239PresentationIndication(unsigned logicalChannel, unsigned terminalLabel)
H323TransportAddress m_remoteConnectAddress
Definition: h323con.h:2158
unsigned m_distinctiveRing
Definition: h323con.h:2161
virtual PString GetDestinationAddress()
H323Channel * GetLogicalChannel(unsigned number, PBoolean fromRemote) const
H4507Handler * m_h4507handler
Definition: h323con.h:2276
virtual PBoolean SendUserInputTone(char tone, unsigned duration=0)
virtual void OnSendIRR(H225_InfoRequestResponse &irr) const
virtual PBoolean OnH245_FlowControlCommand(const H245_FlowControlCommand &pdu)
unsigned GetDistinctiveRing() const
Definition: h323con.h:1891
PSimpleTimer m_lastUserInputIndicationStart
Definition: h323con.h:2299
virtual bool HasPresentationRole() const
Definition: rtpconn.h:57
OpalTransportPtr m_controlChannel
Definition: h323con.h:2180
virtual PBoolean OnH245Indication(const H323ControlPDU &pdu)
ConnectionStates m_connectionState
Definition: h323con.h:2200
virtual PBoolean OnReceivedSignalSetup(const H323SignalPDU &pdu)
Definition: h323con.h:1257
virtual void SetIntrusionImpending()
Definition: h323con.h:1946
virtual void OnClosedMediaStream(const OpalMediaStream &stream)
PSimpleTimer m_h245FastUpdatePictureTimer
Definition: h323con.h:2285
virtual void OnLogicalChannelJitter(H323Channel *channel, DWORD jitter, int skippedFrameCount, int additionalBuffer)
ControlProtocolErrors
Definition: h323con.h:1253
PStringList m_localAliasNames
Definition: h323con.h:2168
virtual PBoolean RequestModeChange(const PString &newModes)
H323SignalPDU * m_h245TunnelTxPDU
Definition: h323con.h:2184
virtual bool SendH239PresentationRelease(unsigned logicalChannel, unsigned terminalLabel)
virtual void OnSendH245_OpenLogicalChannel(H245_OpenLogicalChannel &, PBoolean)
Definition: h323con.h:1328
PSyncPoint m_digitsWaitFlag
Definition: h323con.h:2214
virtual void OnAlerting()
virtual bool OnMediaCommand(OpalMediaStream &stream, const OpalMediaCommand &command)
virtual PBoolean SetAlerting(const PString &calleeName, PBoolean withMedia)
unsigned m_progressIndicator
Definition: h323con.h:2163
virtual void OnAcceptModeChange(const H245_RequestModeAck &pdu)
Definition: h450pdu.h:179
virtual void HandleControlChannel()
virtual void OnSelectLogicalChannels()
Definition: mediacmd.h:43
virtual void OnReceivedReleaseComplete(const H323SignalPDU &pdu)
H323SignalPDU * m_progressPDU
Definition: h323con.h:2188
const H323Transport & GetControlChannel() const
ConferenceGoal GetConferenceGoal()
Definition: h323con.h:1953
H323EndPoint & GetEndPoint() const
Definition: h323con.h:1877
PBoolean IsCallIntrusion()
Definition: h323con.h:777
Definition: h323pdu.h:66
void SetAssociatedCallToken(const PString &token)
virtual OpalTransportAddress GetRemoteAddress() const =0
Definition: h323neg.h:204
Definition: mediasession.h:647
virtual void HandleCallTransferFailure(const int returnError)
virtual PBoolean HandleReceivedControlPDU(PBoolean readStatus, PPER_Stream &strm)
virtual PStringArray GetMediaCryptoSuites() const
Definition: h323caps.h:95
void SetDistinctiveRing(unsigned pattern)
Definition: h323con.h:1899
PBoolean IsTransferredCall() const
Definition: h323con.h:1256
void SetMaintainConnectionFlag(const PDU &pdu)
Definition: h323con.h:2222
PTimeInterval GetRoundTripDelay() const
Directions
Definition: channels.h:125
Definition: transports.h:788
Definition: h323con.h:1258
void EndHandleControlChannel()
PSafePtr< OpalMediaStream > OpalMediaStreamPtr
Definition: mediastrm.h:493
virtual PBoolean SendFastStartAcknowledge(H225_ArrayOf_PASN_OctetString &array)
FastStartStates m_fastStartState
Definition: h323con.h:2251
H245NegMasterSlaveDetermination * m_masterSlaveDeterminationProcedure
Definition: h323con.h:2257
virtual PBoolean SendUserInputIndicationString(const PString &value)
virtual bool TransferConnection(const PString &remoteParty)
H4507Handler & getH4507handler()
Definition: h323con.h:2069
virtual void OnClosedLogicalChannel(const H323Channel &channel)
const PStringList & GetLocalAliasNames() const
Definition: h323con.h:1929
PBYTEArray m_gkAccessTokenData
Definition: h323con.h:2176
Definition: h323rtp.h:62
virtual PBoolean SendUserInputIndicationQ931(const PString &value)
bool m_isConsultationTransfer
Definition: h323con.h:2219
virtual PBoolean ForwardCall(const PString &forwardParty)
bool m_releaseCompleteNeeded
Definition: h323con.h:2215
virtual PBoolean OnReceivedSignalInformation(const H323SignalPDU &pdu)
Definition: h450pdu.h:267
Definition: mediatype.h:66
PSyncPoint m_endSessionReceived
Definition: h323con.h:2217
virtual bool RequestPresentationRole(bool release)
virtual AnswerCallResponse OnAnswerCall(const PString &callerName, const H323SignalPDU &setupPDU, H323SignalPDU &connectPDU, H323SignalPDU &progressPDU)
virtual void OnLogicalChannelFlowControl(H323Channel *channel, long bitRateRestriction)
unsigned GetProgressIndicator() const
Definition: h323con.h:294
int m_remoteCallWaiting
Definition: h323con.h:2159
virtual PBoolean CreateIncomingControlChannel(PASN_Sequence &enclosingPDU, H225_TransportAddress &h245Address, unsigned h245AddressField, H225_H245Security &h245Security, unsigned h245SecurityField)
bool m_lastPDUWasH245inSETUP
Definition: h323con.h:2206
Definition: h323neg.h:272
PTimer m_UserInputIndicationTimer
Definition: h323con.h:2300
const H323Capabilities & GetLocalCapabilities() const
Definition: h323con.h:1961
virtual PBoolean OnUnknownSignalPDU(const H323SignalPDU &pdu)
virtual bool IsNetworkConnection() const
Definition: h323con.h:171
unsigned m_uuiesRequested
Definition: h323con.h:2174
virtual PBoolean OnSendSignalSetup(H323SignalPDU &setupPDU)
virtual bool IsSendingCapabilitySet()
virtual PBoolean SendUserInputIndication(const H245_UserInputIndication &pdu)
unsigned m_callIntrusionProtectionLevel
Definition: h323con.h:2242
bool m_holdToRemote
Definition: h323con.h:2211
void SetLocalH239Control(bool on)
Definition: h323con.h:2045
const PString GetGkAccessTokenOID() const
Definition: h323con.h:2001
virtual PBoolean HandleSignalPDU(H323SignalPDU &pdu)
virtual PBoolean OnOpenLogicalChannel(const H245_OpenLogicalChannel &openPDU, H245_OpenLogicalChannelAck &ackPDU, unsigned &errorCode, H323Channel &channel)
virtual PBoolean SendUserInputIndicationTone(char tone, unsigned duration=0, unsigned logicalChannel=0, unsigned rtpTimestamp=0)
virtual PBoolean OnClosingLogicalChannel(H323Channel &channel)
PBoolean StartHandleControlChannel()
virtual PBoolean OnH245Response(const H323ControlPDU &pdu)
bool GetLocalH239Control() const
Definition: h323con.h:2041
PDECLARE_NOTIFIER(PThread, H323Connection, NewOutgoingControlChannel)
void SetOutgoingBearerCapabilities(H323SignalPDU &pdu) const
virtual void IntrudeCall(unsigned capabilityLevel)
virtual PBoolean SetProgressed()
void AnsweringCall(AnswerCallResponse response)
virtual void OnReceivedARJ(const H225_AdmissionReject &arj)
const OpalGloballyUniqueID & GetConferenceIdentifier() const
Definition: h323con.h:1921
PBoolean IsGatekeeperRouted() const
Definition: h323con.h:1885
virtual void CloseLogicalChannel(unsigned number, PBoolean fromRemote)
bool m_h239TokenOwned
Definition: h323con.h:2268
virtual PBoolean OnReceivedStatusEnquiry(const H323SignalPDU &pdu)
PBoolean IsH245Master() const
virtual PBoolean OnInsufficientDigits()
Definition: h450pdu.h:640
H245NegTerminalCapabilitySet * m_capabilityExchangeProcedure
Definition: h323con.h:2258
Definition: transports.h:411
bool GetRemoteH239Control() const
virtual PBoolean OnReceivedSignalSetupAck(const H323SignalPDU &pdu)
virtual PBoolean OnReceivedCallProceeding(const H323SignalPDU &pdu)
virtual PBoolean OnReceivedProgress(const H323SignalPDU &pdu)
void SetEnforcedDurationLimit(unsigned seconds)
H323SignalPDU * m_alertingPDU
Definition: h323con.h:2186
P_DECLARE_ENUM_NAMES(CompatibilityIssues,"No-Multiple-Tunnelled-H245","Bad-Master-Slave-Conflict","No-User-Input-Capability","H.224-Must-Be-Session-3","Need-TCS-after-Non-Empty-TCS","Need-MSD-after-Non-Empty-TCS","Force-Maintain-TCP-Connection")
virtual PBoolean HandleControlPDU(const H323ControlPDU &pdu)
virtual PBoolean OnH245_MiscellaneousIndication(const H245_MiscellaneousIndication &pdu)
unsigned GetLocalCallIntrusionProtectionLevel()
Definition: h323con.h:781
void SetRemoteVersions(const H225_ProtocolIdentifier &id)
virtual void OnReleased()
PBoolean IsTransferringCall() const
virtual PBoolean OnStartLogicalChannel(H323Channel &channel)
OpalMediaSession H323RTPSession
Definition: h323con.h:95
virtual PBoolean HandleFastStartAcknowledge(const H225_ArrayOf_PASN_OctetString &array)
virtual void InternalEstablishedConnectionCheck()
const PString & GetCallToken() const
Definition: h323con.h:1904
PString m_localDestinationAddress
Definition: h323con.h:2167
bool m_h239Control
Definition: h323con.h:2264
virtual OpalBandwidth GetBandwidthUsed(OpalBandwidth::Direction dir) const
bool m_isCallIntrusion
Definition: h323con.h:2241
virtual void SetRemotePartyInfo(const H323SignalPDU &pdu)
Definition: mediafmt.h:112
virtual PString GetPrefixName() const
Definition: channels.h:95
PSafeDictionary< POrdinalKey, OpalMediaStream > m_conflictingChannels
Definition: h323con.h:2228
Definition: mediafmt.h:60
H323Capabilities m_remoteCapabilities
Definition: h323con.h:2171
virtual PString GetSupportedFeatures() const
Definition: connection.h:530
virtual PBoolean OnControlProtocolError(ControlProtocolErrors errorSource, const void *errorData=NULL)
void SetIncomingBearerCapabilities(const H323SignalPDU &pdu)
H323Capabilities m_localCapabilities
Definition: h323con.h:2169
P_DECLARE_TRACED_ENUM(ConnectionStates, NoConnectionActive, AwaitingGatekeeperAdmission, AwaitingTransportConnect, AwaitingSignalConnect, AwaitingLocalAnswer, HasExecutedSignalConnect, EstablishedConnection, ShuttingDownConnection)
virtual CallEndReason SendSignalSetup(const PString &alias, const H323TransportAddress &address)
void AttachSignalChannel(const PString &token, H323Transport *channel, PBoolean answeringCall)
virtual PString GetIdentifier() const
PBoolean HadAnsweredCall() const
Definition: h323con.h:1881
virtual PBoolean OnReceivedCapabilitySet(const H323Capabilities &remoteCaps, const H245_MultiplexCapability *muxCap, H245_TerminalCapabilitySetReject &reject)
void SetRemotCallWaiting(const unsigned value)
Definition: h323con.h:2019
virtual void OnSetLocalCapabilities()
virtual void HandleIntrudeCall(const PString &token, const PString &identity)
unsigned m_h239TokenChannel
Definition: h323con.h:2266
const OpalGloballyUniqueID & GetCallIdentifier() const
Definition: h323con.h:1912
virtual PBoolean OnReceivedSignalStatus(const H323SignalPDU &pdu)
virtual PBoolean WriteControlPDU(const H323ControlPDU &pdu)
void ConsultationTransfer(const PString &primaryCallToken)
Definition: mediafmt.h:806
virtual PBoolean OnIncomingCall(const H323SignalPDU &setupPDU, H323SignalPDU &alertingPDU)
PString m_gkAccessTokenOID
Definition: h323con.h:2175
virtual bool OnH239PresentationRequest(unsigned logicalChannel, unsigned symmetryBreaking, unsigned terminalLabel)
H4504Handler * m_h4504handler
Definition: h323con.h:2274
virtual PBoolean SendUserInputString(const PString &value)
Direction
Definition: mediafmt.h:64
virtual void OnRefusedModeChange(const H245_RequestModeReject *pdu)
virtual PBoolean GetRemoteCallIntrusionProtectionLevel(const PString &callToken, unsigned callIntrusionProtectionLevel)
virtual void SelectFastStartChannels(unsigned sessionID, PBoolean transmitter, PBoolean receiver)
virtual PBoolean OpenLogicalChannel(const H323Capability &capability, unsigned sessionID, H323Channel::Directions dir)
virtual void OnEstablished()
H323LogicalChannelList m_fastStartChannels
Definition: h323con.h:2252
virtual void SetForcedReleaseAccepted()
Definition: call.h:62
virtual PBoolean OnH245_MiscellaneousCommand(const H245_MiscellaneousCommand &pdu)
OpalTransportPtr GetSignallingChannel() const
Definition: h323con.h:1973
unsigned GetControlVersion() const
Definition: h323con.h:1989
PTimer m_roundTripDelayTimer
Definition: h323con.h:2173
H245NegRequestMode * m_requestModeProcedure
Definition: h323con.h:2260
void SendCallWaitingIndication(const unsigned nbOfAddWaitingCalls=0)
virtual PBoolean OnUnknownControlPDU(const H323ControlPDU &pdu)
void SetUUIEsRequested(unsigned mask)
Definition: h323con.h:1997
ConferenceGoal
Definition: h323con.h:1945
void SetCallIntrusion()
Definition: h323con.h:775
virtual PBoolean OnSendReleaseComplete(H323SignalPDU &releaseCompletePDU)
H323EndPoint & m_endpoint
Definition: h323con.h:2156
virtual void SendMoreDigits(const PString &digits)
unsigned m_remoteMaxAudioDelayJitter
Definition: h323con.h:2172
virtual bool HoldRemote(bool placeOnHold)
virtual SendUserInputModes GetRealSendUserInputMode() const
Definition: rtp_session.h:90
void SetRemoteApplication(const H225_EndpointType &pdu)
virtual bool IsOnHold(bool fromRemote) const
Definition: h323con.h:137
bool SendReleaseComplete()
unsigned m_h245version
Definition: h323con.h:2203
Definition: h460.h:53
virtual PBoolean OnSendCallProceeding(H323SignalPDU &callProceedingPDU)
virtual PString GetSessionCodecNames(unsigned sessionID) const
virtual PBoolean StartControlNegotiations()
RemoteHoldStates m_holdFromRemote
Definition: h323con.h:2235
virtual void HandleSignallingChannel()
void SetLocalPartyName(const PString &name)
virtual H323Channel * CreateLogicalChannel(const H245_OpenLogicalChannel &open, PBoolean startingFast, unsigned &errorCode)
H323SignalPDU * m_h245TunnelRxPDU
Definition: h323con.h:2183
virtual void CloseLogicalChannelNumber(const H323ChannelNumber &number)
void SetProgressIndicator(unsigned indicator)
Definition: h323con.h:298
virtual void OnSendDRQ(H225_DisengageRequest &drq) const
Definition: h323caps.h:2508
Definition: h323con.h:1947
bool InternalEndSessionCheck(PPER_Stream &strm)
H323SignalPDU * m_connectPDU
Definition: h323con.h:2187
Definition: h323con.h:1255
virtual void HandleTunnelPDU(H323SignalPDU *txPDU)
virtual bool SetAlertingType(const PString &info)
void SetGkAccessTokenOID(const PString &oid)
Definition: h323con.h:2005
unsigned m_callReference
Definition: h323con.h:2162
const PString & GetToken() const
Definition: connection.h:1641
H323Channel * FindChannel(unsigned sessionId, bool fromRemote, bool anyState=false) const
virtual PBoolean OnReceivedAlerting(const H323SignalPDU &pdu)
PTimer m_enforcedDurationLimit
Definition: h323con.h:2218
Definition: h323pdu.h:255
virtual bool OnH239FlowControlRequest(unsigned logicalChannel, unsigned bitRate)
PSafePtr< OpalTransport > OpalTransportPtr
Definition: transports.h:50
int GetCallTransferInvokeId()
Definition: h323neg.h:106
PBoolean IsOriginating() const
Definition: connection.h:1653
virtual bool OnSendFeatureSet(H460_MessageType pduType, H225_FeatureSet &) const
virtual PBoolean SetUpConnection()
OpalGloballyUniqueID m_conferenceIdentifier
Definition: h323con.h:2165
H4502Handler * m_h4502handler
Definition: h323con.h:2273
virtual PBoolean OnH245Command(const H323ControlPDU &pdu)
PDICTIONARY(H323CallIdentityDict, PString, H323Connection)
virtual void OpenFastStartChannel(unsigned sessionID, H323Channel::Directions direction)
virtual void SetIntrusionNotAuthorized()
bool TransferCall(const PString &remoteParty, const PString &callIdentity=PString::Empty())
virtual unsigned GetNextSessionID(const OpalMediaType &mediaType, bool isSource)
Definition: mediastrm.h:110
virtual bool GetMediaTransportAddresses(OpalConnection &otherConnection, unsigned sessionId, const OpalMediaType &mediaType, OpalTransportAddressArray &transports) const
virtual void OnConsultationTransferSuccess(H323Connection &secondaryCall)
virtual bool OnH239FlowControlResponse(unsigned logicalChannel, bool rejected)
bool m_forceSymmetricTCS
Definition: h323con.h:2207
H245NegRoundTripDelay * m_roundTripDelayProcedure
Definition: h323con.h:2261
Definition: channels.h:66
virtual void CloseAllLogicalChannels(PBoolean fromRemote)
PString m_t38ModeChangeCapabilities
Definition: h323con.h:2213
const PBYTEArray & GetGkAccessTokenData() const
Definition: h323con.h:2009
bool m_gatekeeperRouted
Definition: h323con.h:2160
virtual PBoolean OnReceivedSignalConnect(const H323SignalPDU &pdu)
P_DECLARE_ENUM(CompatibilityIssues, e_NoMultipleTunnelledH245, e_BadMasterSlaveConflict, e_NoUserInputCapability, e_H224MustBeSession3, e_NeedTCSAfterNonEmptyTCS, e_NeedMSDAfterNonEmptyTCS, e_ForceMaintainConnection)
bool m_endSessionNeeded
Definition: h323con.h:2216
H460_FeatureSet * m_features
Definition: h323con.h:2281
virtual PBoolean OnH245Request(const H323ControlPDU &pdu)
PString m_destExtraCallInfo
Definition: h323con.h:2170
virtual OpalMediaFormatList GetMediaFormats() const
Definition: connection.h:415
Definition: h450pdu.h:590
bool m_mustSendDRQ
Definition: h323con.h:2209
unsigned m_h225version
Definition: h323con.h:2202
unsigned GetSignallingVersion() const
Definition: h323con.h:1977
H323Connection(OpalCall &call, H323EndPoint &endpoint, const PString &token, const PString &alias, const H323TransportAddress &address, unsigned options=0, OpalConnection::StringOptions *stringOptions=NULL)
virtual PBoolean OnConflictingLogicalChannel(H323Channel &channel)
H245NegLogicalChannels * m_logicalChannels
Definition: h323con.h:2259
const H323Capabilities & GetRemoteCapabilities() const
Definition: h323con.h:1965
virtual bool SendH239PresentationRequest(unsigned logicalChannel, unsigned symmetryBreaking, unsigned terminalLabel)
virtual PBoolean OnRequestModeChange(const H245_RequestMode &pdu, H245_RequestModeAck &ack, H245_RequestModeReject &reject, PINDEX &selectedMode)
bool m_earlyStart
Definition: h323con.h:2212
virtual PBoolean SetConnected()
H450xDispatcher * m_h450dispatcher
Definition: h323con.h:2272
H323SignalPDU * m_setupPDU
Definition: h323con.h:2185
H4506Handler * m_h4506handler
Definition: h323con.h:2275
unsigned m_h239SymmetryBreaking
Definition: h323con.h:2265
virtual bool SendCapabilitySet(PBoolean empty)
bool m_doH245inSETUP
Definition: h323con.h:2205
H460_FeatureSet * GetFeatureSet() const
Definition: h323con.h:2075
OpalTransportPtr m_signallingChannel
Definition: h323con.h:2179
bool m_h245versionSet
Definition: h323con.h:2204
bool m_maintainConnection
Definition: h323con.h:2220
#define OpalGloballyUniqueID
Definition: guid.h:38
virtual PBoolean OnReceivedFacility(const H323SignalPDU &pdu)
virtual void OnModeChanged(const H245_ModeDescription &newMode)
virtual void OnReceivedACF(const H225_AdmissionConfirm &acf)
Definition: transports.h:151
virtual H323_RTPChannel * CreateRTPChannel(const H323Capability &capability, H323Channel::Directions direction, H323RTPSession &rtp)
Definition: transports.h:326
H45011Handler * m_h45011handler
Definition: h323con.h:2277
virtual OpalMediaStreamPtr OpenMediaStream(const OpalMediaFormat &mediaFormat, unsigned sessionID, bool isSource)
Definition: h323ep.h:82
virtual bool OnSendingOLCGenericInformation(unsigned sessionID, H245_ArrayOf_GenericInformation &info, bool isAck) const
char m_lastUserInputIndication
Definition: h323con.h:2298
virtual PBoolean OnH245_JitterIndication(const H245_JitterIndication &pdu)
virtual PBoolean CreateOutgoingControlChannel(const PASN_Sequence &enclosingPDU, const H225_TransportAddress &h245Address, unsigned h245AddressField, const H225_H245Security &h245Security, unsigned h245SecurityField)
unsigned GetRemoteMaxAudioDelayJitter() const
Definition: h323con.h:1969
Definition: h450pdu.h:518
void MonitorCallStatus()
virtual void SendFlowControlCommand(unsigned channelNumber, unsigned newBitRate)
virtual PBoolean HandleControlData(PPER_Stream &strm)
virtual PBoolean OnStartHandleControlChannel()
Definition: transaddr.h:62
virtual void OnSendCapabilitySet(H245_TerminalCapabilitySet &pdu)
virtual bool SendNonStandardControl(const PString &identifier, const PBYTEArray &data)
virtual bool OnH239PresentationResponse(unsigned logicalChannel, unsigned terminalLabel, bool rejected)
ConferenceGoal m_conferenceGoal
Definition: h323con.h:2237
Definition: h323neg.h:72
OpalTransport & GetTransport() const
Definition: h323con.h:1948
bool m_addAccessTokenToSetup
Definition: h323con.h:2177
virtual PBoolean GetAdmissionRequestAuthentication(const H225_AdmissionRequest &arq, H235Authenticators &authenticators)
virtual bool OnH239PresentationRelease(unsigned logicalChannel, unsigned terminalLabel)
virtual bool OnH239Message(unsigned subMessage, const H245_ArrayOf_GenericParameter &params)
void SetDestExtraCallInfo(const PString &info)
Definition: h323con.h:2013
void StartRoundTripDelay()
Definition: h450pdu.h:685
OpalGloballyUniqueID m_callIdentifier
Definition: h323con.h:2164
virtual void OnReceiveFeatureSet(H460_MessageType pduType, const H225_FeatureSet &) const
virtual PBoolean OnCreateLogicalChannel(const H323Capability &capability, H323Channel::Directions dir, unsigned &errorCode)
virtual OpalTransportAddress GetRemoteAddress() const
Definition: h323con.h:244
OpalMediaFormatList GetRemoteH239Formats() const
virtual H323Channel * CreateRealTimeLogicalChannel(const H323Capability &capability, H323Channel::Directions dir, unsigned sessionID, const H245_H2250LogicalChannelParameters *param)
PBoolean WriteSignalPDU(H323SignalPDU &pdu)
virtual PString GetAlertingType() const
OpalListener * m_controlListener
Definition: h323con.h:2181
virtual void OnReceiveOLCGenericInformation(unsigned sessionID, const H245_ArrayOf_GenericInformation &info, bool isAck) const
virtual void DetermineRTPNAT(const OpalTransport &transport, const OpalTransportAddress &signalAddr)
virtual void OnUserInputIndication(const H245_UserInputIndication &pdu)
virtual PBoolean OnOutgoingCall(const H323SignalPDU &connectPDU)
int GetRemoteCallWaiting() const
Definition: h323con.h:2026
virtual PBoolean OnH245_SendTerminalCapabilitySet(const H245_SendTerminalCapabilitySet &pdu)
bool m_mediaWaitForConnect
Definition: h323con.h:2210
virtual PBoolean RequestModeChangeT38(const char *capabilityNames="T.38\nT38FaxUDP")
void SetConferenceGoal(ConferenceGoal goal)
Definition: h323con.h:1957
virtual void OnApplyStringOptions()
Call back for connection to act on changed string options.
bool m_h245Tunneling
Definition: h323con.h:2182
virtual void SelectDefaultLogicalChannel(const OpalMediaType &mediaType, unsigned sessionID)
virtual void HandleTransferCall(const PString &token, const PString &identity)
unsigned GetUUIEsRequested() const
Definition: h323con.h:1993
PDECLARE_AcceptHandlerNotifier(H323Connection, NewIncomingControlChannel)
Definition: h323neg.h:248