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
00042 #include <opal/rtpconn.h>
00043 #include <opal/guid.h>
00044 #include <opal/buildopts.h>
00045 #include <h323/h323caps.h>
00046 #include <ptclib/dtmf.h>
00047
00048
00049
00050
00051
00052
00053
00054 class PPER_Stream;
00055 class PASN_OctetString;
00056
00057 class H225_EndpointType;
00058 class H225_TransportAddress;
00059 class H225_ArrayOf_PASN_OctetString;
00060 class H225_ProtocolIdentifier;
00061 class H225_AdmissionRequest;
00062 class H225_AdmissionConfirm;
00063 class H225_AdmissionReject;
00064 class H225_InfoRequestResponse;
00065 class H225_DisengageRequest;
00066 class H225_FeatureSet;
00067
00068 class H245_TerminalCapabilitySet;
00069 class H245_TerminalCapabilitySetReject;
00070 class H245_OpenLogicalChannel;
00071 class H245_OpenLogicalChannelAck;
00072 class H245_TransportAddress;
00073 class H245_UserInputIndication;
00074 class H245_RequestMode;
00075 class H245_RequestModeAck;
00076 class H245_RequestModeReject;
00077 class H245_ModeDescription;
00078 class H245_ArrayOf_ModeDescription;
00079 class H245_SendTerminalCapabilitySet;
00080 class H245_MultiplexCapability;
00081 class H245_FlowControlCommand;
00082 class H245_MiscellaneousCommand;
00083 class H245_MiscellaneousIndication;
00084 class H245_JitterIndication;
00085
00086 class H323SignalPDU;
00087 class H323ControlPDU;
00088 class H323EndPoint;
00089 class H323TransportAddress;
00090
00091 class H235Authenticators;
00092
00093 class H245NegMasterSlaveDetermination;
00094 class H245NegTerminalCapabilitySet;
00095 class H245NegLogicalChannels;
00096 class H245NegRequestMode;
00097 class H245NegRoundTripDelay;
00098
00099 class H450xDispatcher;
00100 class H4502Handler;
00101 class H4504Handler;
00102 class H4506Handler;
00103 class H4507Handler;
00104 class H45011Handler;
00105
00106 class OpalCall;
00107
00108 #ifdef OPAL_H460
00109 class H460_FeatureSet;
00110 #endif
00111
00112
00114
00121 class H323Connection : public OpalRTPConnection
00122 {
00123 PCLASSINFO(H323Connection, OpalRTPConnection);
00124
00125 public:
00130 H323Connection(
00131 OpalCall & call,
00132 H323EndPoint & endpoint,
00133 const PString & token,
00134 const PString & alias,
00135 const H323TransportAddress & address,
00136 unsigned options = 0,
00137 OpalConnection::StringOptions * stringOptions = NULL
00138 );
00139
00142 ~H323Connection();
00144
00155 virtual bool IsNetworkConnection() const { return true; }
00156
00159 virtual PString GetPrefixName() const;
00160
00167 virtual PBoolean SetUpConnection();
00168
00178 virtual PBoolean SetAlerting(
00179 const PString & calleeName,
00180 PBoolean withMedia
00181 );
00182
00187 virtual PBoolean SetConnected();
00188
00193 virtual PBoolean SetProgressed();
00194
00202 virtual void OnEstablished();
00203
00221 virtual void OnReleased();
00222
00227 virtual PString GetDestinationAddress();
00228
00236 virtual OpalMediaFormatList GetMediaFormats() const;
00237
00240 virtual OpalMediaStreamPtr OpenMediaStream(
00241 const OpalMediaFormat & mediaFormat,
00242 unsigned sessionID,
00243 bool isSource
00244 );
00245
00250 virtual bool CloseMediaStream(
00251 OpalMediaStream & stream
00252 );
00253
00258 virtual PBoolean GetMediaInformation(
00259 unsigned sessionID,
00260 MediaInformation & info
00261 ) const;
00263
00269 virtual void OnCleared();
00270
00276 PBoolean IsEstablished() const { return connectionState == EstablishedConnection; }
00277
00286 virtual void CleanUpOnCallEnd();
00288
00289
00294 void AttachSignalChannel(
00295 const PString & token,
00296 H323Transport * channel,
00297 PBoolean answeringCall
00298 );
00299
00302 PBoolean WriteSignalPDU(
00303 H323SignalPDU & pdu
00304 );
00305
00309 virtual void HandleSignallingChannel();
00310
00314 virtual PBoolean HandleSignalPDU(
00315 H323SignalPDU & pdu
00316 );
00317
00321 virtual void HandleTunnelPDU(
00322 H323SignalPDU * txPDU
00323 );
00324
00332 virtual PBoolean OnReceivedSignalSetup(
00333 const H323SignalPDU & pdu
00334 );
00335
00342 virtual PBoolean OnReceivedSignalSetupAck(
00343 const H323SignalPDU & pdu
00344 );
00345
00352 virtual PBoolean OnReceivedSignalInformation(
00353 const H323SignalPDU & pdu
00354 );
00355
00364 virtual PBoolean OnReceivedCallProceeding(
00365 const H323SignalPDU & pdu
00366 );
00367
00376 virtual PBoolean OnReceivedProgress(
00377 const H323SignalPDU & pdu
00378 );
00379
00386 virtual PBoolean OnReceivedAlerting(
00387 const H323SignalPDU & pdu
00388 );
00389
00398 virtual PBoolean OnReceivedSignalConnect(
00399 const H323SignalPDU & pdu
00400 );
00401
00410 virtual PBoolean OnReceivedFacility(
00411 const H323SignalPDU & pdu
00412 );
00413
00420 virtual PBoolean OnReceivedSignalNotify(
00421 const H323SignalPDU & pdu
00422 );
00423
00430 virtual PBoolean OnReceivedSignalStatus(
00431 const H323SignalPDU & pdu
00432 );
00433
00440 virtual PBoolean OnReceivedStatusEnquiry(
00441 const H323SignalPDU & pdu
00442 );
00443
00448 virtual void OnReceivedReleaseComplete(
00449 const H323SignalPDU & pdu
00450 );
00451
00458 virtual PBoolean OnUnknownSignalPDU(
00459 const H323SignalPDU & pdu
00460 );
00461
00468 virtual void OnSendARQ(
00469 H225_AdmissionRequest & arq
00470 );
00471
00477 virtual void OnReceivedACF(
00478 const H225_AdmissionConfirm & acf
00479 );
00480
00486 virtual void OnReceivedARJ(
00487 const H225_AdmissionReject & arj
00488 );
00489
00496 virtual void OnSendIRR(
00497 H225_InfoRequestResponse & irr
00498 ) const;
00499
00506 virtual void OnSendDRQ(
00507 H225_DisengageRequest & drq
00508 ) const;
00509
00521 virtual PBoolean OnIncomingCall(
00522 const H323SignalPDU & setupPDU,
00523 H323SignalPDU & alertingPDU
00524 );
00525
00535 virtual PBoolean ForwardCall(
00536 const PString & forwardParty
00537 );
00538
00545 virtual bool TransferConnection(
00546 const PString & remoteParty
00547 );
00548
00552 virtual bool HoldConnection();
00553
00558 virtual bool RetrieveConnection();
00559
00563 virtual PBoolean IsConnectionOnHold();
00564
00565 #if OPAL_H450
00566
00571 bool TransferCall(
00572 const PString & remoteParty,
00573 const PString & callIdentity = PString::Empty()
00575 );
00576
00581 void ConsultationTransfer(
00582 const PString & primaryCallToken
00583 );
00584
00591 virtual void HandleConsultationTransfer(
00592 const PString & callIdentity,
00594 H323Connection & incoming
00595 );
00596
00599 PBoolean IsTransferringCall() const;
00600
00603 PBoolean IsTransferredCall() const;
00604
00609 virtual void HandleTransferCall(
00610 const PString & token,
00611 const PString & identity
00612 );
00613
00618 int GetCallTransferInvokeId();
00619
00627 virtual void HandleCallTransferFailure(
00628 const int returnError
00629 );
00630
00635 void SetAssociatedCallToken(
00636 const PString & token
00637 );
00638
00643 virtual void OnConsultationTransferSuccess(
00644 H323Connection & secondaryCall
00645 );
00646
00651 bool HoldCall(
00652 PBoolean localHold
00653 );
00654
00660 bool RetrieveCall();
00661
00668 void SetHoldMedia(
00669 PChannel * audioChannel
00670 );
00671
00674 PBoolean IsMediaOnHold() const;
00675
00678 PBoolean IsLocalHold() const;
00679
00682 PBoolean IsRemoteHold() const;
00683
00686 PBoolean IsCallOnHold() const;
00687
00692 virtual void IntrudeCall(
00693 unsigned capabilityLevel
00694 );
00695
00700 virtual void HandleIntrudeCall(
00701 const PString & token,
00702 const PString & identity
00703 );
00704
00710 void SetCallIntrusion() { isCallIntrusion = PTrue; }
00711
00712 PBoolean IsCallIntrusion() { return isCallIntrusion; }
00713
00716 unsigned GetLocalCallIntrusionProtectionLevel() { return callIntrusionProtectionLevel; }
00717
00721 virtual PBoolean GetRemoteCallIntrusionProtectionLevel(
00722 const PString & callToken,
00723 unsigned callIntrusionProtectionLevel
00724 );
00725
00726 virtual void SetIntrusionImpending();
00727
00728 virtual void SetForcedReleaseAccepted();
00729
00730 virtual void SetIntrusionNotAuthorized();
00731
00738 void SendCallWaitingIndication(
00739 const unsigned nbOfAddWaitingCalls = 0
00740 );
00741
00742 #endif
00743
00770 virtual AnswerCallResponse OnAnswerCall(
00771 const PString & callerName,
00772 const H323SignalPDU & setupPDU,
00773 H323SignalPDU & connectPDU,
00774 H323SignalPDU & progressPDU
00775 );
00776
00777 virtual AnswerCallResponse OnAnswerCall(
00778 const PString & callerName
00779 );
00780
00791 void AnsweringCall(
00792 AnswerCallResponse response
00793 );
00794
00805 virtual CallEndReason SendSignalSetup(
00806 const PString & alias,
00807 const H323TransportAddress & address
00808 );
00809
00821 virtual PBoolean OnSendSignalSetup(
00822 H323SignalPDU & setupPDU
00823 );
00824
00833 virtual PBoolean OnSendCallProceeding(
00834 H323SignalPDU & callProceedingPDU
00835 );
00836
00848 virtual PBoolean OnSendReleaseComplete(
00849 H323SignalPDU & releaseCompletePDU
00850 );
00851
00862 virtual PBoolean OnAlerting(
00863 const H323SignalPDU & alertingPDU,
00864 const PString & user
00865 );
00866
00881 virtual PBoolean OnInsufficientDigits();
00882
00895 virtual void SendMoreDigits(
00896 const PString & digits
00897 );
00898
00908 virtual PBoolean OnOutgoingCall(
00909 const H323SignalPDU & connectPDU
00910 );
00911
00923 virtual PBoolean SendFastStartAcknowledge(
00924 H225_ArrayOf_PASN_OctetString & array
00925 );
00926
00938 virtual PBoolean HandleFastStartAcknowledge(
00939 const H225_ArrayOf_PASN_OctetString & array
00940 );
00942
00956 virtual PBoolean CreateOutgoingControlChannel(
00957 const H225_TransportAddress & h245Address
00958 );
00959
00972 virtual PBoolean CreateIncomingControlChannel(
00973 H225_TransportAddress & h245Address
00974 );
00975
00980 virtual PBoolean WriteControlPDU(
00981 const H323ControlPDU & pdu
00982 );
00983
00986 virtual PBoolean StartControlNegotiations();
00987
00990 virtual void HandleControlChannel();
00991
00998 virtual PBoolean HandleControlData(
00999 PPER_Stream & strm
01000 );
01001
01008 virtual PBoolean HandleControlPDU(
01009 const H323ControlPDU & pdu
01010 );
01011
01021 virtual PBoolean OnUnknownControlPDU(
01022 const H323ControlPDU & pdu
01023 );
01024
01028 virtual PBoolean OnH245Request(
01029 const H323ControlPDU & pdu
01030 );
01031
01035 virtual PBoolean OnH245Response(
01036 const H323ControlPDU & pdu
01037 );
01038
01042 virtual PBoolean OnH245Command(
01043 const H323ControlPDU & pdu
01044 );
01045
01049 virtual PBoolean OnH245Indication(
01050 const H323ControlPDU & pdu
01051 );
01052
01055 virtual PBoolean OnH245_SendTerminalCapabilitySet(
01056 const H245_SendTerminalCapabilitySet & pdu
01057 );
01058
01063 virtual PBoolean OnH245_FlowControlCommand(
01064 const H245_FlowControlCommand & pdu
01065 );
01066
01071 virtual PBoolean OnH245_MiscellaneousCommand(
01072 const H245_MiscellaneousCommand & pdu
01073 );
01074
01079 virtual PBoolean OnH245_MiscellaneousIndication(
01080 const H245_MiscellaneousIndication & pdu
01081 );
01082
01087 virtual PBoolean OnH245_JitterIndication(
01088 const H245_JitterIndication & pdu
01089 );
01090
01093 enum ControlProtocolErrors {
01094 e_MasterSlaveDetermination,
01095 e_CapabilityExchange,
01096 e_LogicalChannel,
01097 e_ModeRequest,
01098 e_RoundTripDelay
01099 };
01100
01112 virtual PBoolean OnControlProtocolError(
01113 ControlProtocolErrors errorSource,
01114 const void * errorData = NULL
01115 );
01116
01124 virtual void OnSendCapabilitySet(
01125 H245_TerminalCapabilitySet & pdu
01126 );
01127
01139 virtual PBoolean OnReceivedCapabilitySet(
01140 const H323Capabilities & remoteCaps,
01141 const H245_MultiplexCapability * muxCap,
01142 H245_TerminalCapabilitySetReject & reject
01143 );
01144
01147 virtual bool SendCapabilitySet(
01148 PBoolean empty
01149 );
01150
01153 virtual bool IsSendingCapabilitySet();
01154
01163 virtual void OnSetLocalCapabilities();
01164
01167 PBoolean IsH245Master() const;
01168
01171 void StartRoundTripDelay();
01172
01175 PTimeInterval GetRoundTripDelay() const;
01177
01217 virtual void OnSelectLogicalChannels();
01218
01221 virtual void SelectDefaultLogicalChannel(
01222 const OpalMediaType & mediaType,
01223 unsigned sessionID
01224 );
01225
01229 virtual void SelectFastStartChannels(
01230 unsigned sessionID,
01231 PBoolean transmitter,
01232 PBoolean receiver
01233 );
01234
01238 virtual void StartFastStartChannel(
01239 unsigned sessionID,
01240 H323Channel::Directions direction
01241 );
01242
01257 virtual PBoolean OpenLogicalChannel(
01258 const H323Capability & capability,
01259 unsigned sessionID,
01260 H323Channel::Directions dir
01261 );
01262
01263 virtual void SendFlowControlCommand(
01264 unsigned channelNumber,
01265 unsigned newBitRate
01266 );
01267
01277 virtual PBoolean OnOpenLogicalChannel(
01278 const H245_OpenLogicalChannel & openPDU,
01279 H245_OpenLogicalChannelAck & ackPDU,
01280 unsigned & errorCode
01281 );
01282
01290 virtual PBoolean OnConflictingLogicalChannel(
01291 H323Channel & channel
01292 );
01293
01298 virtual H323Channel * CreateLogicalChannel(
01299 const H245_OpenLogicalChannel & open,
01300 PBoolean startingFast,
01301 unsigned & errorCode
01302 );
01303
01338 virtual H323Channel * CreateRealTimeLogicalChannel(
01339 const H323Capability & capability,
01340 H323Channel::Directions dir,
01341 unsigned sessionID,
01342 const H245_H2250LogicalChannelParameters * param,
01344 RTP_QOS * rtpqos = NULL
01345 );
01346
01357 virtual PBoolean OnCreateLogicalChannel(
01358 const H323Capability & capability,
01359 H323Channel::Directions dir,
01360 unsigned & errorCode
01361 );
01362
01367 virtual PBoolean OnStartLogicalChannel(
01368 H323Channel & channel
01369 );
01370
01373 virtual void CloseLogicalChannel(
01374 unsigned number,
01375 PBoolean fromRemote
01376 );
01377
01380 virtual void CloseLogicalChannelNumber(
01381 const H323ChannelNumber & number
01382 );
01383
01386 virtual void CloseAllLogicalChannels(
01387 PBoolean fromRemote
01388 );
01389
01395 virtual void OnClosedLogicalChannel(
01396 const H323Channel & channel
01397 );
01398
01407 virtual PBoolean OnClosingLogicalChannel(
01408 H323Channel & channel
01409 );
01410
01419 virtual void OnLogicalChannelFlowControl(
01420 H323Channel * channel,
01421 long bitRateRestriction
01422 );
01423
01432 virtual void OnLogicalChannelJitter(
01433 H323Channel * channel,
01434 DWORD jitter,
01435 int skippedFrameCount,
01436 int additionalBuffer
01437 );
01438
01442 H323Channel * GetLogicalChannel(
01443 unsigned number,
01444 PBoolean fromRemote
01445 ) const;
01446
01452 H323Channel * FindChannel(
01453 unsigned sessionId,
01454 PBoolean fromRemote
01455 ) const;
01457
01464 virtual PBoolean SetBandwidthAvailable(
01465 unsigned newBandwidth,
01466 PBoolean force = PFalse
01467 );
01468
01473 virtual unsigned GetBandwidthUsed() const;
01475
01483 virtual SendUserInputModes GetRealSendUserInputMode() const;
01484
01498 virtual PBoolean SendUserInputString(
01499 const PString & value
01500 );
01501
01526 virtual PBoolean SendUserInputTone(
01527 char tone,
01528 unsigned duration = 0
01529 );
01530
01537 virtual PBoolean SendUserInputIndicationQ931(
01538 const PString & value
01539 );
01540
01547 virtual PBoolean SendUserInputIndicationString(
01548 const PString & value
01549 );
01550
01555 virtual PBoolean SendUserInputIndicationTone(
01556 char tone,
01557 unsigned duration = 0,
01558 unsigned logicalChannel = 0,
01559 unsigned rtpTimestamp = 0
01560 );
01561
01570 virtual PBoolean SendUserInputIndication(
01571 const H245_UserInputIndication & pdu
01572 );
01573
01578 virtual void OnUserInputIndication(
01579 const H245_UserInputIndication & pdu
01580 );
01582
01588 virtual H323_RTP_Session * GetSessionCallbacks(
01589 unsigned sessionID
01590 ) const;
01591
01601 virtual RTP_Session * UseSession(
01602 const OpalTransport & transport,
01603 unsigned sessionID,
01604 const OpalMediaType & mediatype,
01605 RTP_QOS * rtpqos = NULL
01606 );
01607
01611 virtual void ReleaseSession(
01612 unsigned sessionID
01613 );
01614
01622 virtual void OnRTPStatistics(
01623 const RTP_Session & session
01624 ) const;
01625
01629 virtual PString GetSessionCodecNames(
01630 unsigned sessionID
01631 ) const;
01632
01634
01652 virtual PBoolean RequestModeChange(
01653 const PString & newModes
01654 );
01655
01663 virtual PBoolean RequestModeChange(
01664 const H245_ArrayOf_ModeDescription & newModes
01665 );
01666
01669 virtual PBoolean OnRequestModeChange(
01670 const H245_RequestMode & pdu,
01671 H245_RequestModeAck & ack,
01672 H245_RequestModeReject & reject,
01673 PINDEX & selectedMode
01674 );
01675
01682 virtual void OnModeChanged(
01683 const H245_ModeDescription & newMode
01684 );
01685
01690 virtual void OnAcceptModeChange(
01691 const H245_RequestModeAck & pdu
01692 );
01693
01698 virtual void OnRefusedModeChange(
01699 const H245_RequestModeReject * pdu
01700 );
01702
01707 virtual PBoolean RequestModeChangeT38(
01708 const char * capabilityNames = "T.38\nT38FaxUDP"
01709 );
01710
01720 virtual PBoolean GetAdmissionRequestAuthentication(
01721 const H225_AdmissionRequest & arq,
01722 H235Authenticators & authenticators
01723 );
01725
01730 H323EndPoint & GetEndPoint() const { return endpoint; }
01731
01734 PBoolean HadAnsweredCall() const { return !originating; }
01735
01738 PBoolean IsGatekeeperRouted() const { return gatekeeperRouted; }
01739
01744 unsigned GetDistinctiveRing() const { return distinctiveRing; }
01745
01752 void SetDistinctiveRing(unsigned pattern) { distinctiveRing = pattern&7; }
01753
01757 const PString & GetCallToken() const { return GetToken(); }
01758
01761 unsigned GetCallReference() const { return callReference; }
01762
01766 inline const OpalGloballyUniqueID & GetCallIdentifier() const
01767 { return GetIdentifier(); }
01768
01771 const OpalGloballyUniqueID & GetConferenceIdentifier() const { return conferenceIdentifier; }
01772
01775 void SetLocalPartyName(const PString & name);
01776
01779 const PStringList & GetLocalAliasNames() const { return localAliasNames; }
01780
01783 virtual void SetRemotePartyInfo(
01784 const H323SignalPDU & pdu
01785 );
01786
01789 void SetRemoteApplication(
01790 const H225_EndpointType & pdu
01791 );
01792
01797 PString GetRemotePartyURL() const;
01798
01801 const H323Capabilities & GetLocalCapabilities() const { return localCapabilities; }
01802
01805 const H323Capabilities & GetRemoteCapabilities() const { return remoteCapabilities; }
01806
01809 unsigned GetRemoteMaxAudioDelayJitter() const { return remoteMaxAudioDelayJitter; }
01810
01813 const H323Transport * GetSignallingChannel() const { return signallingChannel; }
01814
01817 unsigned GetSignallingVersion() const { return h225version; }
01818
01821 const H323Transport & GetControlChannel() const;
01822
01825 OpalTransport & GetTransport() const;
01826
01829 unsigned GetControlVersion() const { return h245version; }
01830
01833 unsigned GetUUIEsRequested() const { return uuiesRequested; }
01834
01837 void SetUUIEsRequested(unsigned mask) { uuiesRequested = mask; }
01838
01841 const PString GetGkAccessTokenOID() const { return gkAccessTokenOID; }
01842
01845 void SetGkAccessTokenOID(const PString & oid) { gkAccessTokenOID = oid; }
01846
01849 const PBYTEArray & GetGkAccessTokenData() const { return gkAccessTokenData; }
01850
01853 void SetDestExtraCallInfo(
01854 const PString & info
01855 ) { destExtraCallInfo = info; }
01856
01859 void SetRemotCallWaiting(const unsigned value) { remoteCallWaiting = value; }
01860
01866 int GetRemoteCallWaiting() const { return remoteCallWaiting; }
01867
01872 void SetEnforcedDurationLimit(
01873 unsigned seconds
01874 );
01876
01877 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &) const;
01878
01879 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &) const;
01880
01881 #if OPAL_H460
01882
01884 virtual H460_FeatureSet * GetFeatureSet();
01885 #endif
01886
01887
01888 #if OPAL_H450
01889
01893 H4507Handler& getH4507handler(){return *h4507handler;}
01894 #endif
01895
01913 virtual PBoolean OnOpenIncomingMediaChannels();
01914
01915 virtual void OnMediaCommand(OpalMediaCommand & note, INT extra);
01916
01917 protected:
01923 virtual void InternalEstablishedConnectionCheck();
01924 PBoolean InternalEndSessionCheck(PPER_Stream & strm);
01925 void SetRemoteVersions(const H225_ProtocolIdentifier & id);
01926 void MonitorCallStatus();
01927 PDECLARE_NOTIFIER(PThread, H323Connection, StartOutgoing);
01928 PDECLARE_NOTIFIER(PThread, H323Connection, NewOutgoingControlChannel);
01929 PDECLARE_NOTIFIER(PThread, H323Connection, NewIncomingControlChannel);
01930
01931 H323EndPoint & endpoint;
01932
01933 int remoteCallWaiting;
01934 PBoolean gatekeeperRouted;
01935 unsigned distinctiveRing;
01936 unsigned callReference;
01937 OpalGloballyUniqueID conferenceIdentifier;
01938
01939 PString localDestinationAddress;
01940 PStringList localAliasNames;
01941 H323Capabilities localCapabilities;
01942 PString destExtraCallInfo;
01943 H323Capabilities remoteCapabilities;
01944 unsigned remoteMaxAudioDelayJitter;
01945 PTimer roundTripDelayTimer;
01946 WORD maxAudioDelayJitter;
01947 unsigned uuiesRequested;
01948 PString gkAccessTokenOID;
01949 PBYTEArray gkAccessTokenData;
01950 PBoolean addAccessTokenToSetup;
01951 PBoolean alertDone;
01952
01953 H323Transport * signallingChannel;
01954 H323Transport * controlChannel;
01955 OpalListener * controlListener;
01956 PBoolean h245Tunneling;
01957 H323SignalPDU * h245TunnelRxPDU;
01958 H323SignalPDU * h245TunnelTxPDU;
01959 H323SignalPDU * setupPDU;
01960 H323SignalPDU * alertingPDU;
01961 H323SignalPDU * connectPDU;
01962 H323SignalPDU * progressPDU;
01963
01964 enum ConnectionStates {
01965 NoConnectionActive,
01966 AwaitingGatekeeperAdmission,
01967 AwaitingTransportConnect,
01968 AwaitingSignalConnect,
01969 AwaitingLocalAnswer,
01970 HasExecutedSignalConnect,
01971 EstablishedConnection,
01972 ShuttingDownConnection,
01973 NumConnectionStates
01974 } connectionState;
01975
01976 unsigned h225version;
01977 unsigned h245version;
01978 PBoolean h245versionSet;
01979 PBoolean doH245inSETUP;
01980 PBoolean lastPDUWasH245inSETUP;
01981
01982 PBoolean mustSendDRQ;
01983 PBoolean mediaWaitForConnect;
01984 PBoolean transmitterSidePaused;
01985 bool remoteTransmitPaused;
01986 PBoolean earlyStart;
01987 PString t38ModeChangeCapabilities;
01988 PSyncPoint digitsWaitFlag;
01989 PBoolean endSessionNeeded;
01990 PSyncPoint endSessionReceived;
01991 PTimer enforcedDurationLimit;
01992
01993
01994 PChannel * holdMediaChannel;
01995 PBoolean isConsultationTransfer;
01996
01998 PBoolean isCallIntrusion;
01999 unsigned callIntrusionProtectionLevel;
02000
02001 enum FastStartStates {
02002 FastStartDisabled,
02003 FastStartInitiate,
02004 FastStartResponse,
02005 FastStartAcknowledged,
02006 NumFastStartStates
02007 };
02008 FastStartStates fastStartState;
02009 H323LogicalChannelList fastStartChannels;
02010 OpalMediaStreamPtr fastStartMediaStream;
02011
02012 #if PTRACING
02013 static const char * GetConnectionStatesName(ConnectionStates s);
02014 friend ostream & operator<<(ostream & o, ConnectionStates s) { return o << GetConnectionStatesName(s); }
02015 static const char * GetFastStartStateName(FastStartStates s);
02016 friend ostream & operator<<(ostream & o, FastStartStates s) { return o << GetFastStartStateName(s); }
02017 #endif
02018
02019
02020
02021
02022 H245NegMasterSlaveDetermination * masterSlaveDeterminationProcedure;
02023 H245NegTerminalCapabilitySet * capabilityExchangeProcedure;
02024 H245NegLogicalChannels * logicalChannels;
02025 H245NegRequestMode * requestModeProcedure;
02026 H245NegRoundTripDelay * roundTripDelayProcedure;
02027
02028 #if OPAL_H450
02029 H450xDispatcher * h450dispatcher;
02030 H4502Handler * h4502handler;
02031 H4504Handler * h4504handler;
02032 H4506Handler * h4506handler;
02033 H4507Handler * h4507handler;
02034 H45011Handler * h45011handler;
02035 #endif
02036
02037 #ifdef OPAL_H460
02038 H460_FeatureSet * features;
02039 #endif
02040
02041 private:
02042 PChannel * SwapHoldMediaChannels(PChannel * newChannel);
02043 };
02044
02045
02046 PDICTIONARY(H323CallIdentityDict, PString, H323Connection);
02047
02048
02049 #endif // __OPAL_H323CON_H
02050
02051