00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef __OPAL_H323CON_H
00035 #define __OPAL_H323CON_H
00036
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040
00041 #include <opal/buildopts.h>
00042
00043 #include <opal/rtpconn.h>
00044 #include <opal/guid.h>
00045 #include <opal/buildopts.h>
00046 #include <h323/h323caps.h>
00047 #include <ptclib/dtmf.h>
00048
00049
00050
00051
00052
00053
00054
00055 class PPER_Stream;
00056 class PASN_OctetString;
00057
00058 class H225_EndpointType;
00059 class H225_TransportAddress;
00060 class H225_ArrayOf_PASN_OctetString;
00061 class H225_ProtocolIdentifier;
00062 class H225_AdmissionRequest;
00063 class H225_AdmissionConfirm;
00064 class H225_AdmissionReject;
00065 class H225_InfoRequestResponse;
00066 class H225_DisengageRequest;
00067 class H225_FeatureSet;
00068
00069 class H245_TerminalCapabilitySet;
00070 class H245_TerminalCapabilitySetReject;
00071 class H245_OpenLogicalChannel;
00072 class H245_OpenLogicalChannelAck;
00073 class H245_TransportAddress;
00074 class H245_UserInputIndication;
00075 class H245_RequestMode;
00076 class H245_RequestModeAck;
00077 class H245_RequestModeReject;
00078 class H245_ModeDescription;
00079 class H245_ArrayOf_ModeDescription;
00080 class H245_SendTerminalCapabilitySet;
00081 class H245_MultiplexCapability;
00082 class H245_FlowControlCommand;
00083 class H245_MiscellaneousCommand;
00084 class H245_MiscellaneousIndication;
00085 class H245_JitterIndication;
00086
00087 class H323SignalPDU;
00088 class H323ControlPDU;
00089 class H323EndPoint;
00090 class H323TransportAddress;
00091
00092 class H235Authenticators;
00093
00094 class H245NegMasterSlaveDetermination;
00095 class H245NegTerminalCapabilitySet;
00096 class H245NegLogicalChannels;
00097 class H245NegRequestMode;
00098 class H245NegRoundTripDelay;
00099
00100 class H450xDispatcher;
00101 class H4502Handler;
00102 class H4504Handler;
00103 class H4506Handler;
00104 class H4507Handler;
00105 class H45011Handler;
00106
00107 class OpalCall;
00108
00109 #if OPAL_H460
00110 class H460_FeatureSet;
00111 #endif
00112
00113
00115
00122 class H323Connection : public OpalRTPConnection
00123 {
00124 PCLASSINFO(H323Connection, OpalRTPConnection);
00125
00126 public:
00131 H323Connection(
00132 OpalCall & call,
00133 H323EndPoint & endpoint,
00134 const PString & token,
00135 const PString & alias,
00136 const H323TransportAddress & address,
00137 unsigned options = 0,
00138 OpalConnection::StringOptions * stringOptions = NULL
00139 );
00140
00143 ~H323Connection();
00145
00156 virtual bool IsNetworkConnection() const { return true; }
00157
00160 virtual PString GetPrefixName() const;
00161
00168 virtual PBoolean SetUpConnection();
00169
00179 virtual PBoolean SetAlerting(
00180 const PString & calleeName,
00181 PBoolean withMedia
00182 );
00183
00188 virtual PBoolean SetConnected();
00189
00194 virtual PBoolean SetProgressed();
00195
00203 virtual void OnEstablished();
00204
00222 virtual void OnReleased();
00223
00228 virtual PString GetDestinationAddress();
00229
00237 virtual OpalMediaFormatList GetMediaFormats() const;
00238
00241 virtual OpalMediaStreamPtr OpenMediaStream(
00242 const OpalMediaFormat & mediaFormat,
00243 unsigned sessionID,
00244 bool isSource
00245 );
00246
00251 virtual bool CloseMediaStream(
00252 OpalMediaStream & stream
00253 );
00254
00259 virtual PBoolean GetMediaInformation(
00260 unsigned sessionID,
00261 MediaInformation & info
00262 ) const;
00264
00270 virtual void OnCleared();
00271
00277 PBoolean IsEstablished() const { return connectionState == EstablishedConnection; }
00278
00287 virtual void CleanUpOnCallEnd();
00289
00290
00295 void AttachSignalChannel(
00296 const PString & token,
00297 H323Transport * channel,
00298 PBoolean answeringCall
00299 );
00300
00303 PBoolean WriteSignalPDU(
00304 H323SignalPDU & pdu
00305 );
00306
00310 virtual void HandleSignallingChannel();
00311
00315 virtual PBoolean HandleSignalPDU(
00316 H323SignalPDU & pdu
00317 );
00318
00322 virtual void HandleTunnelPDU(
00323 H323SignalPDU * txPDU
00324 );
00325
00333 virtual PBoolean OnReceivedSignalSetup(
00334 const H323SignalPDU & pdu
00335 );
00336
00343 virtual PBoolean OnReceivedSignalSetupAck(
00344 const H323SignalPDU & pdu
00345 );
00346
00353 virtual PBoolean OnReceivedSignalInformation(
00354 const H323SignalPDU & pdu
00355 );
00356
00365 virtual PBoolean OnReceivedCallProceeding(
00366 const H323SignalPDU & pdu
00367 );
00368
00377 virtual PBoolean OnReceivedProgress(
00378 const H323SignalPDU & pdu
00379 );
00380
00387 virtual PBoolean OnReceivedAlerting(
00388 const H323SignalPDU & pdu
00389 );
00390
00399 virtual PBoolean OnReceivedSignalConnect(
00400 const H323SignalPDU & pdu
00401 );
00402
00411 virtual PBoolean OnReceivedFacility(
00412 const H323SignalPDU & pdu
00413 );
00414
00421 virtual PBoolean OnReceivedSignalNotify(
00422 const H323SignalPDU & pdu
00423 );
00424
00431 virtual PBoolean OnReceivedSignalStatus(
00432 const H323SignalPDU & pdu
00433 );
00434
00441 virtual PBoolean OnReceivedStatusEnquiry(
00442 const H323SignalPDU & pdu
00443 );
00444
00449 virtual void OnReceivedReleaseComplete(
00450 const H323SignalPDU & pdu
00451 );
00452
00459 virtual PBoolean OnUnknownSignalPDU(
00460 const H323SignalPDU & pdu
00461 );
00462
00469 virtual void OnSendARQ(
00470 H225_AdmissionRequest & arq
00471 );
00472
00478 virtual void OnReceivedACF(
00479 const H225_AdmissionConfirm & acf
00480 );
00481
00487 virtual void OnReceivedARJ(
00488 const H225_AdmissionReject & arj
00489 );
00490
00497 virtual void OnSendIRR(
00498 H225_InfoRequestResponse & irr
00499 ) const;
00500
00507 virtual void OnSendDRQ(
00508 H225_DisengageRequest & drq
00509 ) const;
00510
00522 virtual PBoolean OnIncomingCall(
00523 const H323SignalPDU & setupPDU,
00524 H323SignalPDU & alertingPDU
00525 );
00526
00536 virtual PBoolean ForwardCall(
00537 const PString & forwardParty
00538 );
00539
00546 virtual bool TransferConnection(
00547 const PString & remoteParty
00548 );
00549
00553 virtual bool HoldConnection();
00554
00559 virtual bool RetrieveConnection();
00560
00564 virtual PBoolean IsConnectionOnHold();
00565
00566 #if OPAL_H450
00567
00572 bool TransferCall(
00573 const PString & remoteParty,
00574 const PString & callIdentity = PString::Empty()
00576 );
00577
00582 void ConsultationTransfer(
00583 const PString & primaryCallToken
00584 );
00585
00592 virtual void HandleConsultationTransfer(
00593 const PString & callIdentity,
00595 H323Connection & incoming
00596 );
00597
00600 PBoolean IsTransferringCall() const;
00601
00604 PBoolean IsTransferredCall() const;
00605
00610 virtual void HandleTransferCall(
00611 const PString & token,
00612 const PString & identity
00613 );
00614
00619 int GetCallTransferInvokeId();
00620
00628 virtual void HandleCallTransferFailure(
00629 const int returnError
00630 );
00631
00636 void SetAssociatedCallToken(
00637 const PString & token
00638 );
00639
00644 virtual void OnConsultationTransferSuccess(
00645 H323Connection & secondaryCall
00646 );
00647
00652 bool HoldCall(
00653 PBoolean localHold
00654 );
00655
00661 bool RetrieveCall();
00662
00669 void SetHoldMedia(
00670 PChannel * audioChannel
00671 );
00672
00675 PBoolean IsMediaOnHold() const;
00676
00679 PBoolean IsLocalHold() const;
00680
00683 PBoolean IsRemoteHold() const;
00684
00687 PBoolean IsCallOnHold() const;
00688
00693 virtual void IntrudeCall(
00694 unsigned capabilityLevel
00695 );
00696
00701 virtual void HandleIntrudeCall(
00702 const PString & token,
00703 const PString & identity
00704 );
00705
00711 void SetCallIntrusion() { isCallIntrusion = PTrue; }
00712
00713 PBoolean IsCallIntrusion() { return isCallIntrusion; }
00714
00717 unsigned GetLocalCallIntrusionProtectionLevel() { return callIntrusionProtectionLevel; }
00718
00722 virtual PBoolean GetRemoteCallIntrusionProtectionLevel(
00723 const PString & callToken,
00724 unsigned callIntrusionProtectionLevel
00725 );
00726
00727 virtual void SetIntrusionImpending();
00728
00729 virtual void SetForcedReleaseAccepted();
00730
00731 virtual void SetIntrusionNotAuthorized();
00732
00739 void SendCallWaitingIndication(
00740 const unsigned nbOfAddWaitingCalls = 0
00741 );
00742
00743 #endif
00744
00771 virtual AnswerCallResponse OnAnswerCall(
00772 const PString & callerName,
00773 const H323SignalPDU & setupPDU,
00774 H323SignalPDU & connectPDU,
00775 H323SignalPDU & progressPDU
00776 );
00777
00778 virtual AnswerCallResponse OnAnswerCall(
00779 const PString & callerName
00780 );
00781
00792 void AnsweringCall(
00793 AnswerCallResponse response
00794 );
00795
00806 virtual CallEndReason SendSignalSetup(
00807 const PString & alias,
00808 const H323TransportAddress & address
00809 );
00810
00822 virtual PBoolean OnSendSignalSetup(
00823 H323SignalPDU & setupPDU
00824 );
00825
00834 virtual PBoolean OnSendCallProceeding(
00835 H323SignalPDU & callProceedingPDU
00836 );
00837
00849 virtual PBoolean OnSendReleaseComplete(
00850 H323SignalPDU & releaseCompletePDU
00851 );
00852
00863 virtual PBoolean OnAlerting(
00864 const H323SignalPDU & alertingPDU,
00865 const PString & user
00866 );
00867
00882 virtual PBoolean OnInsufficientDigits();
00883
00896 virtual void SendMoreDigits(
00897 const PString & digits
00898 );
00899
00909 virtual PBoolean OnOutgoingCall(
00910 const H323SignalPDU & connectPDU
00911 );
00912
00924 virtual PBoolean SendFastStartAcknowledge(
00925 H225_ArrayOf_PASN_OctetString & array
00926 );
00927
00939 virtual PBoolean HandleFastStartAcknowledge(
00940 const H225_ArrayOf_PASN_OctetString & array
00941 );
00943
00957 virtual PBoolean CreateOutgoingControlChannel(
00958 const H225_TransportAddress & h245Address
00959 );
00960
00973 virtual PBoolean CreateIncomingControlChannel(
00974 H225_TransportAddress & h245Address
00975 );
00976
00981 virtual PBoolean WriteControlPDU(
00982 const H323ControlPDU & pdu
00983 );
00984
00987 virtual PBoolean StartControlNegotiations();
00988
00991 virtual void HandleControlChannel();
00992
00999 virtual PBoolean HandleControlData(
01000 PPER_Stream & strm
01001 );
01002
01009 virtual PBoolean HandleControlPDU(
01010 const H323ControlPDU & pdu
01011 );
01012
01022 virtual PBoolean OnUnknownControlPDU(
01023 const H323ControlPDU & pdu
01024 );
01025
01029 virtual PBoolean OnH245Request(
01030 const H323ControlPDU & pdu
01031 );
01032
01036 virtual PBoolean OnH245Response(
01037 const H323ControlPDU & pdu
01038 );
01039
01043 virtual PBoolean OnH245Command(
01044 const H323ControlPDU & pdu
01045 );
01046
01050 virtual PBoolean OnH245Indication(
01051 const H323ControlPDU & pdu
01052 );
01053
01056 virtual PBoolean OnH245_SendTerminalCapabilitySet(
01057 const H245_SendTerminalCapabilitySet & pdu
01058 );
01059
01064 virtual PBoolean OnH245_FlowControlCommand(
01065 const H245_FlowControlCommand & pdu
01066 );
01067
01072 virtual PBoolean OnH245_MiscellaneousCommand(
01073 const H245_MiscellaneousCommand & pdu
01074 );
01075
01080 virtual PBoolean OnH245_MiscellaneousIndication(
01081 const H245_MiscellaneousIndication & pdu
01082 );
01083
01088 virtual PBoolean OnH245_JitterIndication(
01089 const H245_JitterIndication & pdu
01090 );
01091
01094 enum ControlProtocolErrors {
01095 e_MasterSlaveDetermination,
01096 e_CapabilityExchange,
01097 e_LogicalChannel,
01098 e_ModeRequest,
01099 e_RoundTripDelay
01100 };
01101
01113 virtual PBoolean OnControlProtocolError(
01114 ControlProtocolErrors errorSource,
01115 const void * errorData = NULL
01116 );
01117
01125 virtual void OnSendCapabilitySet(
01126 H245_TerminalCapabilitySet & pdu
01127 );
01128
01140 virtual PBoolean OnReceivedCapabilitySet(
01141 const H323Capabilities & remoteCaps,
01142 const H245_MultiplexCapability * muxCap,
01143 H245_TerminalCapabilitySetReject & reject
01144 );
01145
01148 virtual bool SendCapabilitySet(
01149 PBoolean empty
01150 );
01151
01154 virtual bool IsSendingCapabilitySet();
01155
01164 virtual void OnSetLocalCapabilities();
01165
01168 PBoolean IsH245Master() const;
01169
01172 void StartRoundTripDelay();
01173
01176 PTimeInterval GetRoundTripDelay() const;
01178
01218 virtual void OnSelectLogicalChannels();
01219
01222 virtual void SelectDefaultLogicalChannel(
01223 const OpalMediaType & mediaType,
01224 unsigned sessionID
01225 );
01226
01230 virtual void SelectFastStartChannels(
01231 unsigned sessionID,
01232 PBoolean transmitter,
01233 PBoolean receiver
01234 );
01235
01239 virtual void StartFastStartChannel(
01240 unsigned sessionID,
01241 H323Channel::Directions direction
01242 );
01243
01258 virtual PBoolean OpenLogicalChannel(
01259 const H323Capability & capability,
01260 unsigned sessionID,
01261 H323Channel::Directions dir
01262 );
01263
01264 virtual void SendFlowControlCommand(
01265 unsigned channelNumber,
01266 unsigned newBitRate
01267 );
01268
01278 virtual PBoolean OnOpenLogicalChannel(
01279 const H245_OpenLogicalChannel & openPDU,
01280 H245_OpenLogicalChannelAck & ackPDU,
01281 unsigned & errorCode
01282 );
01283
01291 virtual PBoolean OnConflictingLogicalChannel(
01292 H323Channel & channel
01293 );
01294
01299 virtual H323Channel * CreateLogicalChannel(
01300 const H245_OpenLogicalChannel & open,
01301 PBoolean startingFast,
01302 unsigned & errorCode
01303 );
01304
01339 virtual H323Channel * CreateRealTimeLogicalChannel(
01340 const H323Capability & capability,
01341 H323Channel::Directions dir,
01342 unsigned sessionID,
01343 const H245_H2250LogicalChannelParameters * param,
01345 RTP_QOS * rtpqos = NULL
01346 );
01347
01358 virtual PBoolean OnCreateLogicalChannel(
01359 const H323Capability & capability,
01360 H323Channel::Directions dir,
01361 unsigned & errorCode
01362 );
01363
01368 virtual PBoolean OnStartLogicalChannel(
01369 H323Channel & channel
01370 );
01371
01374 virtual void CloseLogicalChannel(
01375 unsigned number,
01376 PBoolean fromRemote
01377 );
01378
01381 virtual void CloseLogicalChannelNumber(
01382 const H323ChannelNumber & number
01383 );
01384
01387 virtual void CloseAllLogicalChannels(
01388 PBoolean fromRemote
01389 );
01390
01396 virtual void OnClosedLogicalChannel(
01397 const H323Channel & channel
01398 );
01399
01408 virtual PBoolean OnClosingLogicalChannel(
01409 H323Channel & channel
01410 );
01411
01420 virtual void OnLogicalChannelFlowControl(
01421 H323Channel * channel,
01422 long bitRateRestriction
01423 );
01424
01433 virtual void OnLogicalChannelJitter(
01434 H323Channel * channel,
01435 DWORD jitter,
01436 int skippedFrameCount,
01437 int additionalBuffer
01438 );
01439
01443 H323Channel * GetLogicalChannel(
01444 unsigned number,
01445 PBoolean fromRemote
01446 ) const;
01447
01453 H323Channel * FindChannel(
01454 unsigned sessionId,
01455 PBoolean fromRemote
01456 ) const;
01458
01465 virtual PBoolean SetBandwidthAvailable(
01466 unsigned newBandwidth,
01467 PBoolean force = PFalse
01468 );
01469
01474 virtual unsigned GetBandwidthUsed() const;
01476
01484 virtual SendUserInputModes GetRealSendUserInputMode() const;
01485
01499 virtual PBoolean SendUserInputString(
01500 const PString & value
01501 );
01502
01527 virtual PBoolean SendUserInputTone(
01528 char tone,
01529 unsigned duration = 0
01530 );
01531
01538 virtual PBoolean SendUserInputIndicationQ931(
01539 const PString & value
01540 );
01541
01548 virtual PBoolean SendUserInputIndicationString(
01549 const PString & value
01550 );
01551
01556 virtual PBoolean SendUserInputIndicationTone(
01557 char tone,
01558 unsigned duration = 0,
01559 unsigned logicalChannel = 0,
01560 unsigned rtpTimestamp = 0
01561 );
01562
01571 virtual PBoolean SendUserInputIndication(
01572 const H245_UserInputIndication & pdu
01573 );
01574
01579 virtual void OnUserInputIndication(
01580 const H245_UserInputIndication & pdu
01581 );
01583
01589 virtual H323_RTP_Session * GetSessionCallbacks(
01590 unsigned sessionID
01591 ) const;
01592
01602 virtual RTP_Session * UseSession(
01603 const OpalTransport & transport,
01604 unsigned sessionID,
01605 const OpalMediaType & mediatype,
01606 RTP_QOS * rtpqos = NULL
01607 );
01608
01612 virtual void ReleaseSession(
01613 unsigned sessionID
01614 );
01615
01623 virtual void OnRTPStatistics(
01624 const RTP_Session & session
01625 ) const;
01626
01630 virtual PString GetSessionCodecNames(
01631 unsigned sessionID
01632 ) const;
01633
01635
01653 virtual PBoolean RequestModeChange(
01654 const PString & newModes
01655 );
01656
01664 virtual PBoolean RequestModeChange(
01665 const H245_ArrayOf_ModeDescription & newModes
01666 );
01667
01670 virtual PBoolean OnRequestModeChange(
01671 const H245_RequestMode & pdu,
01672 H245_RequestModeAck & ack,
01673 H245_RequestModeReject & reject,
01674 PINDEX & selectedMode
01675 );
01676
01683 virtual void OnModeChanged(
01684 const H245_ModeDescription & newMode
01685 );
01686
01691 virtual void OnAcceptModeChange(
01692 const H245_RequestModeAck & pdu
01693 );
01694
01699 virtual void OnRefusedModeChange(
01700 const H245_RequestModeReject * pdu
01701 );
01703
01708 virtual PBoolean RequestModeChangeT38(
01709 const char * capabilityNames = "T.38\nT38FaxUDP"
01710 );
01711
01721 virtual PBoolean GetAdmissionRequestAuthentication(
01722 const H225_AdmissionRequest & arq,
01723 H235Authenticators & authenticators
01724 );
01726
01731 H323EndPoint & GetEndPoint() const { return endpoint; }
01732
01735 PBoolean HadAnsweredCall() const { return !originating; }
01736
01739 PBoolean IsGatekeeperRouted() const { return gatekeeperRouted; }
01740
01745 unsigned GetDistinctiveRing() const { return distinctiveRing; }
01746
01753 void SetDistinctiveRing(unsigned pattern) { distinctiveRing = pattern&7; }
01754
01758 const PString & GetCallToken() const { return GetToken(); }
01759
01762 unsigned GetCallReference() const { return callReference; }
01763
01767 inline const OpalGloballyUniqueID & GetCallIdentifier() const
01768 { return GetIdentifier(); }
01769
01772 const OpalGloballyUniqueID & GetConferenceIdentifier() const { return conferenceIdentifier; }
01773
01776 void SetLocalPartyName(const PString & name);
01777
01780 const PStringList & GetLocalAliasNames() const { return localAliasNames; }
01781
01784 virtual void SetRemotePartyInfo(
01785 const H323SignalPDU & pdu
01786 );
01787
01790 void SetRemoteApplication(
01791 const H225_EndpointType & pdu
01792 );
01793
01798 PString GetRemotePartyURL() const;
01799
01802 const H323Capabilities & GetLocalCapabilities() const { return localCapabilities; }
01803
01806 const H323Capabilities & GetRemoteCapabilities() const { return remoteCapabilities; }
01807
01810 unsigned GetRemoteMaxAudioDelayJitter() const { return remoteMaxAudioDelayJitter; }
01811
01814 const H323Transport * GetSignallingChannel() const { return signallingChannel; }
01815
01818 unsigned GetSignallingVersion() const { return h225version; }
01819
01822 const H323Transport & GetControlChannel() const;
01823
01826 OpalTransport & GetTransport() const;
01827
01830 unsigned GetControlVersion() const { return h245version; }
01831
01834 unsigned GetUUIEsRequested() const { return uuiesRequested; }
01835
01838 void SetUUIEsRequested(unsigned mask) { uuiesRequested = mask; }
01839
01842 const PString GetGkAccessTokenOID() const { return gkAccessTokenOID; }
01843
01846 void SetGkAccessTokenOID(const PString & oid) { gkAccessTokenOID = oid; }
01847
01850 const PBYTEArray & GetGkAccessTokenData() const { return gkAccessTokenData; }
01851
01854 void SetDestExtraCallInfo(
01855 const PString & info
01856 ) { destExtraCallInfo = info; }
01857
01860 void SetRemotCallWaiting(const unsigned value) { remoteCallWaiting = value; }
01861
01867 int GetRemoteCallWaiting() const { return remoteCallWaiting; }
01868
01873 void SetEnforcedDurationLimit(
01874 unsigned seconds
01875 );
01877
01878 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &) const;
01879
01880 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &) const;
01881
01882 #if OPAL_H460
01883
01885 virtual H460_FeatureSet * GetFeatureSet();
01886 #endif
01887
01888
01889 #if OPAL_H450
01890
01894 H4507Handler& getH4507handler(){return *h4507handler;}
01895 #endif
01896
01914 virtual PBoolean OnOpenIncomingMediaChannels();
01915
01916 virtual void OnMediaCommand(OpalMediaCommand & note, INT extra);
01917
01918 protected:
01924 virtual void InternalEstablishedConnectionCheck();
01925 PBoolean InternalEndSessionCheck(PPER_Stream & strm);
01926 void SetRemoteVersions(const H225_ProtocolIdentifier & id);
01927 void MonitorCallStatus();
01928 PDECLARE_NOTIFIER(PThread, H323Connection, StartOutgoing);
01929 PDECLARE_NOTIFIER(PThread, H323Connection, NewOutgoingControlChannel);
01930 PDECLARE_NOTIFIER(PThread, H323Connection, NewIncomingControlChannel);
01931
01932 H323EndPoint & endpoint;
01933
01934 int remoteCallWaiting;
01935 PBoolean gatekeeperRouted;
01936 unsigned distinctiveRing;
01937 unsigned callReference;
01938 OpalGloballyUniqueID conferenceIdentifier;
01939
01940 PString localDestinationAddress;
01941 PStringList localAliasNames;
01942 H323Capabilities localCapabilities;
01943 PString destExtraCallInfo;
01944 H323Capabilities remoteCapabilities;
01945 unsigned remoteMaxAudioDelayJitter;
01946 PTimer roundTripDelayTimer;
01947 WORD maxAudioDelayJitter;
01948 unsigned uuiesRequested;
01949 PString gkAccessTokenOID;
01950 PBYTEArray gkAccessTokenData;
01951 PBoolean addAccessTokenToSetup;
01952 PBoolean alertDone;
01953
01954 H323Transport * signallingChannel;
01955 H323Transport * controlChannel;
01956 OpalListener * controlListener;
01957 PBoolean h245Tunneling;
01958 H323SignalPDU * h245TunnelRxPDU;
01959 H323SignalPDU * h245TunnelTxPDU;
01960 H323SignalPDU * setupPDU;
01961 H323SignalPDU * alertingPDU;
01962 H323SignalPDU * connectPDU;
01963 H323SignalPDU * progressPDU;
01964
01965 enum ConnectionStates {
01966 NoConnectionActive,
01967 AwaitingGatekeeperAdmission,
01968 AwaitingTransportConnect,
01969 AwaitingSignalConnect,
01970 AwaitingLocalAnswer,
01971 HasExecutedSignalConnect,
01972 EstablishedConnection,
01973 ShuttingDownConnection,
01974 NumConnectionStates
01975 } connectionState;
01976
01977 unsigned h225version;
01978 unsigned h245version;
01979 PBoolean h245versionSet;
01980 PBoolean doH245inSETUP;
01981 PBoolean lastPDUWasH245inSETUP;
01982
01983 PBoolean mustSendDRQ;
01984 PBoolean mediaWaitForConnect;
01985 PBoolean transmitterSidePaused;
01986 bool remoteTransmitPaused;
01987 PBoolean earlyStart;
01988 PString t38ModeChangeCapabilities;
01989 PSyncPoint digitsWaitFlag;
01990 PBoolean endSessionNeeded;
01991 PSyncPoint endSessionReceived;
01992 PTimer enforcedDurationLimit;
01993
01994
01995 PChannel * holdMediaChannel;
01996 PBoolean isConsultationTransfer;
01997
01999 PBoolean isCallIntrusion;
02000 unsigned callIntrusionProtectionLevel;
02001
02002 enum FastStartStates {
02003 FastStartDisabled,
02004 FastStartInitiate,
02005 FastStartResponse,
02006 FastStartAcknowledged,
02007 NumFastStartStates
02008 };
02009 FastStartStates fastStartState;
02010 H323LogicalChannelList fastStartChannels;
02011 OpalMediaStreamPtr fastStartMediaStream;
02012
02013 #if PTRACING
02014 static const char * GetConnectionStatesName(ConnectionStates s);
02015 friend ostream & operator<<(ostream & o, ConnectionStates s) { return o << GetConnectionStatesName(s); }
02016 static const char * GetFastStartStateName(FastStartStates s);
02017 friend ostream & operator<<(ostream & o, FastStartStates s) { return o << GetFastStartStateName(s); }
02018 #endif
02019
02020
02021
02022
02023 H245NegMasterSlaveDetermination * masterSlaveDeterminationProcedure;
02024 H245NegTerminalCapabilitySet * capabilityExchangeProcedure;
02025 H245NegLogicalChannels * logicalChannels;
02026 H245NegRequestMode * requestModeProcedure;
02027 H245NegRoundTripDelay * roundTripDelayProcedure;
02028
02029 #if OPAL_H450
02030 H450xDispatcher * h450dispatcher;
02031 H4502Handler * h4502handler;
02032 H4504Handler * h4504handler;
02033 H4506Handler * h4506handler;
02034 H4507Handler * h4507handler;
02035 H45011Handler * h45011handler;
02036 #endif
02037
02038 #if OPAL_H460
02039 H460_FeatureSet * features;
02040 #endif
02041
02042 private:
02043 PChannel * SwapHoldMediaChannels(PChannel * newChannel);
02044 };
02045
02046
02047 PDICTIONARY(H323CallIdentityDict, PString, H323Connection);
02048
02049
02050 #endif // __OPAL_H323CON_H
02051
02052