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/connection.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_FeatureSet;
00063
00064 class H245_TerminalCapabilitySet;
00065 class H245_TerminalCapabilitySetReject;
00066 class H245_OpenLogicalChannel;
00067 class H245_OpenLogicalChannelAck;
00068 class H245_TransportAddress;
00069 class H245_UserInputIndication;
00070 class H245_RequestMode;
00071 class H245_RequestModeAck;
00072 class H245_RequestModeReject;
00073 class H245_ModeDescription;
00074 class H245_ArrayOf_ModeDescription;
00075 class H245_SendTerminalCapabilitySet;
00076 class H245_MultiplexCapability;
00077 class H245_FlowControlCommand;
00078 class H245_MiscellaneousCommand;
00079 class H245_MiscellaneousIndication;
00080 class H245_JitterIndication;
00081
00082 class H323SignalPDU;
00083 class H323ControlPDU;
00084 class H323EndPoint;
00085 class H323TransportAddress;
00086
00087 class H235Authenticators;
00088
00089 class H245NegMasterSlaveDetermination;
00090 class H245NegTerminalCapabilitySet;
00091 class H245NegLogicalChannels;
00092 class H245NegRequestMode;
00093 class H245NegRoundTripDelay;
00094
00095 class H450xDispatcher;
00096 class H4502Handler;
00097 class H4504Handler;
00098 class H4506Handler;
00099 class H4507Handler;
00100 class H45011Handler;
00101
00102 class OpalCall;
00103
00104 #ifdef H323_H460
00105 class H460_FeatureSet;
00106 #endif
00107
00108
00110
00117 class H323Connection : public OpalConnection
00118 {
00119 PCLASSINFO(H323Connection, OpalConnection);
00120
00121 public:
00126 H323Connection(
00127 OpalCall & call,
00128 H323EndPoint & endpoint,
00129 const PString & token,
00130 const PString & alias,
00131 const H323TransportAddress & address,
00132 unsigned options = 0,
00133 OpalConnection::StringOptions * stringOptions = NULL
00134 );
00135
00138 ~H323Connection();
00140
00149 virtual PBoolean SetUpConnection();
00150
00160 virtual PBoolean SetAlerting(
00161 const PString & calleeName,
00162 PBoolean withMedia
00163 );
00164
00169 virtual PBoolean SetConnected();
00170
00177 virtual void OnSendARQ(
00178 H225_AdmissionRequest & arq
00179 );
00180
00181
00186 virtual PBoolean SetProgressed();
00187
00195 virtual void OnEstablished();
00196
00214 virtual void OnReleased();
00215
00220 virtual PString GetDestinationAddress();
00221
00229 virtual OpalMediaFormatList GetMediaFormats() const;
00230
00233 virtual OpalMediaStreamPtr OpenMediaStream(
00234 const OpalMediaFormat & mediaFormat,
00235 unsigned sessionID,
00236 bool isSource
00237 );
00238
00243 virtual bool CloseMediaStream(
00244 OpalMediaStream & stream
00245 );
00246
00261 virtual OpalMediaStream * CreateMediaStream(
00262 const OpalMediaFormat & mediaFormat,
00263 unsigned sessionID,
00264 PBoolean isSource
00265 );
00266
00269 void OnPatchMediaStream(PBoolean isSource, OpalMediaPatch & patch);
00270
00275 virtual PBoolean IsMediaBypassPossible(
00276 unsigned sessionID
00277 ) const;
00278
00283 virtual PBoolean GetMediaInformation(
00284 unsigned sessionID,
00285 MediaInformation & info
00286 ) const;
00288
00294 virtual void OnCleared();
00295
00301 PBoolean IsEstablished() const { return connectionState == EstablishedConnection; }
00302
00311 virtual void CleanUpOnCallEnd();
00313
00314
00319 void AttachSignalChannel(
00320 const PString & token,
00321 H323Transport * channel,
00322 PBoolean answeringCall
00323 );
00324
00327 PBoolean WriteSignalPDU(
00328 H323SignalPDU & pdu
00329 );
00330
00334 virtual void HandleSignallingChannel();
00335
00339 virtual PBoolean HandleSignalPDU(
00340 H323SignalPDU & pdu
00341 );
00342
00346 virtual void HandleTunnelPDU(
00347 H323SignalPDU * txPDU
00348 );
00349
00357 virtual PBoolean OnReceivedSignalSetup(
00358 const H323SignalPDU & pdu
00359 );
00360
00367 virtual PBoolean OnReceivedSignalSetupAck(
00368 const H323SignalPDU & pdu
00369 );
00370
00377 virtual PBoolean OnReceivedSignalInformation(
00378 const H323SignalPDU & pdu
00379 );
00380
00389 virtual PBoolean OnReceivedCallProceeding(
00390 const H323SignalPDU & pdu
00391 );
00392
00401 virtual PBoolean OnReceivedProgress(
00402 const H323SignalPDU & pdu
00403 );
00404
00411 virtual PBoolean OnReceivedAlerting(
00412 const H323SignalPDU & pdu
00413 );
00414
00423 virtual PBoolean OnReceivedSignalConnect(
00424 const H323SignalPDU & pdu
00425 );
00426
00435 virtual PBoolean OnReceivedFacility(
00436 const H323SignalPDU & pdu
00437 );
00438
00445 virtual PBoolean OnReceivedSignalNotify(
00446 const H323SignalPDU & pdu
00447 );
00448
00455 virtual PBoolean OnReceivedSignalStatus(
00456 const H323SignalPDU & pdu
00457 );
00458
00465 virtual PBoolean OnReceivedStatusEnquiry(
00466 const H323SignalPDU & pdu
00467 );
00468
00473 virtual void OnReceivedReleaseComplete(
00474 const H323SignalPDU & pdu
00475 );
00476
00483 virtual PBoolean OnUnknownSignalPDU(
00484 const H323SignalPDU & pdu
00485 );
00486
00498 virtual PBoolean OnIncomingCall(
00499 const H323SignalPDU & setupPDU,
00500 H323SignalPDU & alertingPDU
00501 );
00502
00512 virtual PBoolean ForwardCall(
00513 const PString & forwardParty
00514 );
00515
00516 #if OPAL_H450
00517
00522 void TransferCall(
00523 const PString & remoteParty,
00524 const PString & callIdentity = PString::Empty()
00526 );
00527
00532 void ConsultationTransfer(
00533 const PString & primaryCallToken
00534 );
00535
00542 virtual void HandleConsultationTransfer(
00543 const PString & callIdentity,
00545 H323Connection & incoming
00546 );
00547
00550 PBoolean IsTransferringCall() const;
00551
00554 PBoolean IsTransferredCall() const;
00555
00560 virtual void HandleTransferCall(
00561 const PString & token,
00562 const PString & identity
00563 );
00564
00569 int GetCallTransferInvokeId();
00570
00578 virtual void HandleCallTransferFailure(
00579 const int returnError
00580 );
00581
00586 void SetAssociatedCallToken(
00587 const PString & token
00588 );
00589
00594 virtual void OnConsultationTransferSuccess(
00595 H323Connection & secondaryCall
00596 );
00597
00601 virtual void TransferConnection(
00602 const PString & remoteParty,
00603 const PString & callIdentity = PString::Empty()
00604 );
00605
00609 virtual void HoldConnection();
00610
00615 virtual void RetrieveConnection();
00616
00620 virtual PBoolean IsConnectionOnHold();
00621
00626 void HoldCall(
00627 PBoolean localHold
00628 );
00629
00635 void RetrieveCall();
00636
00643 void SetHoldMedia(
00644 PChannel * audioChannel
00645 );
00646
00649 PBoolean IsMediaOnHold() const;
00650
00653 PBoolean IsLocalHold() const;
00654
00657 PBoolean IsRemoteHold() const;
00658
00661 PBoolean IsCallOnHold() const;
00662
00667 virtual void IntrudeCall(
00668 unsigned capabilityLevel
00669 );
00670
00675 virtual void HandleIntrudeCall(
00676 const PString & token,
00677 const PString & identity
00678 );
00679
00685 void SetCallIntrusion() { isCallIntrusion = PTrue; }
00686
00687 PBoolean IsCallIntrusion() { return isCallIntrusion; }
00688
00691 unsigned GetLocalCallIntrusionProtectionLevel() { return callIntrusionProtectionLevel; }
00692
00696 virtual PBoolean GetRemoteCallIntrusionProtectionLevel(
00697 const PString & callToken,
00698 unsigned callIntrusionProtectionLevel
00699 );
00700
00701 virtual void SetIntrusionImpending();
00702
00703 virtual void SetForcedReleaseAccepted();
00704
00705 virtual void SetIntrusionNotAuthorized();
00706
00713 void SendCallWaitingIndication(
00714 const unsigned nbOfAddWaitingCalls = 0
00715 );
00716
00717 #endif
00718
00745 virtual AnswerCallResponse OnAnswerCall(
00746 const PString & callerName,
00747 const H323SignalPDU & setupPDU,
00748 H323SignalPDU & connectPDU,
00749 H323SignalPDU & progressPDU
00750 );
00751
00752 virtual AnswerCallResponse OnAnswerCall(
00753 const PString & callerName
00754 );
00755
00766 void AnsweringCall(
00767 AnswerCallResponse response
00768 );
00769
00780 virtual CallEndReason SendSignalSetup(
00781 const PString & alias,
00782 const H323TransportAddress & address
00783 );
00784
00796 virtual PBoolean OnSendSignalSetup(
00797 H323SignalPDU & setupPDU
00798 );
00799
00808 virtual PBoolean OnSendCallProceeding(
00809 H323SignalPDU & callProceedingPDU
00810 );
00811
00823 virtual PBoolean OnSendReleaseComplete(
00824 H323SignalPDU & releaseCompletePDU
00825 );
00826
00837 virtual PBoolean OnAlerting(
00838 const H323SignalPDU & alertingPDU,
00839 const PString & user
00840 );
00841
00856 virtual PBoolean OnInsufficientDigits();
00857
00870 virtual void SendMoreDigits(
00871 const PString & digits
00872 );
00873
00883 virtual PBoolean OnOutgoingCall(
00884 const H323SignalPDU & connectPDU
00885 );
00886
00898 virtual PBoolean SendFastStartAcknowledge(
00899 H225_ArrayOf_PASN_OctetString & array
00900 );
00901
00913 virtual PBoolean HandleFastStartAcknowledge(
00914 const H225_ArrayOf_PASN_OctetString & array
00915 );
00917
00931 virtual PBoolean CreateOutgoingControlChannel(
00932 const H225_TransportAddress & h245Address
00933 );
00934
00947 virtual PBoolean CreateIncomingControlChannel(
00948 H225_TransportAddress & h245Address
00949 );
00950
00955 virtual PBoolean WriteControlPDU(
00956 const H323ControlPDU & pdu
00957 );
00958
00961 virtual PBoolean StartControlNegotiations();
00962
00965 virtual void HandleControlChannel();
00966
00973 virtual PBoolean HandleControlData(
00974 PPER_Stream & strm
00975 );
00976
00983 virtual PBoolean HandleControlPDU(
00984 const H323ControlPDU & pdu
00985 );
00986
00996 virtual PBoolean OnUnknownControlPDU(
00997 const H323ControlPDU & pdu
00998 );
00999
01003 virtual PBoolean OnH245Request(
01004 const H323ControlPDU & pdu
01005 );
01006
01010 virtual PBoolean OnH245Response(
01011 const H323ControlPDU & pdu
01012 );
01013
01017 virtual PBoolean OnH245Command(
01018 const H323ControlPDU & pdu
01019 );
01020
01024 virtual PBoolean OnH245Indication(
01025 const H323ControlPDU & pdu
01026 );
01027
01030 virtual PBoolean OnH245_SendTerminalCapabilitySet(
01031 const H245_SendTerminalCapabilitySet & pdu
01032 );
01033
01038 virtual PBoolean OnH245_FlowControlCommand(
01039 const H245_FlowControlCommand & pdu
01040 );
01041
01046 virtual PBoolean OnH245_MiscellaneousCommand(
01047 const H245_MiscellaneousCommand & pdu
01048 );
01049
01054 virtual PBoolean OnH245_MiscellaneousIndication(
01055 const H245_MiscellaneousIndication & pdu
01056 );
01057
01062 virtual PBoolean OnH245_JitterIndication(
01063 const H245_JitterIndication & pdu
01064 );
01065
01068 enum ControlProtocolErrors {
01069 e_MasterSlaveDetermination,
01070 e_CapabilityExchange,
01071 e_LogicalChannel,
01072 e_ModeRequest,
01073 e_RoundTripDelay
01074 };
01075
01087 virtual PBoolean OnControlProtocolError(
01088 ControlProtocolErrors errorSource,
01089 const void * errorData = NULL
01090 );
01091
01099 virtual void OnSendCapabilitySet(
01100 H245_TerminalCapabilitySet & pdu
01101 );
01102
01114 virtual PBoolean OnReceivedCapabilitySet(
01115 const H323Capabilities & remoteCaps,
01116 const H245_MultiplexCapability * muxCap,
01117 H245_TerminalCapabilitySetReject & reject
01118 );
01119
01122 virtual bool SendCapabilitySet(
01123 PBoolean empty
01124 );
01125
01128 virtual bool IsSendingCapabilitySet();
01129
01138 virtual void OnSetLocalCapabilities();
01139
01142 PBoolean IsH245Master() const;
01143
01146 void StartRoundTripDelay();
01147
01150 PTimeInterval GetRoundTripDelay() const;
01152
01192 virtual void OnSelectLogicalChannels();
01193
01196 virtual void SelectDefaultLogicalChannel(
01197 unsigned sessionID
01198 );
01199
01203 virtual void SelectFastStartChannels(
01204 unsigned sessionID,
01205 PBoolean transmitter,
01206 PBoolean receiver
01207 );
01208
01212 virtual void StartFastStartChannel(
01213 unsigned sessionID,
01214 H323Channel::Directions direction
01215 );
01216
01231 virtual PBoolean OpenLogicalChannel(
01232 const H323Capability & capability,
01233 unsigned sessionID,
01234 H323Channel::Directions dir
01235 );
01236
01237 virtual void SendFlowControlCommand(
01238 unsigned channelNumber,
01239 unsigned newBitRate
01240 );
01241
01251 virtual PBoolean OnOpenLogicalChannel(
01252 const H245_OpenLogicalChannel & openPDU,
01253 H245_OpenLogicalChannelAck & ackPDU,
01254 unsigned & errorCode
01255 );
01256
01264 virtual PBoolean OnConflictingLogicalChannel(
01265 H323Channel & channel
01266 );
01267
01272 virtual H323Channel * CreateLogicalChannel(
01273 const H245_OpenLogicalChannel & open,
01274 PBoolean startingFast,
01275 unsigned & errorCode
01276 );
01277
01312 virtual H323Channel * CreateRealTimeLogicalChannel(
01313 const H323Capability & capability,
01314 H323Channel::Directions dir,
01315 unsigned sessionID,
01316 const H245_H2250LogicalChannelParameters * param,
01318 RTP_QOS * rtpqos = NULL
01319 );
01320
01331 virtual PBoolean OnCreateLogicalChannel(
01332 const H323Capability & capability,
01333 H323Channel::Directions dir,
01334 unsigned & errorCode
01335 );
01336
01341 virtual PBoolean OnStartLogicalChannel(
01342 H323Channel & channel
01343 );
01344
01347 virtual void CloseLogicalChannel(
01348 unsigned number,
01349 PBoolean fromRemote
01350 );
01351
01354 virtual void CloseLogicalChannelNumber(
01355 const H323ChannelNumber & number
01356 );
01357
01360 virtual void CloseAllLogicalChannels(
01361 PBoolean fromRemote
01362 );
01363
01369 virtual void OnClosedLogicalChannel(
01370 const H323Channel & channel
01371 );
01372
01381 virtual PBoolean OnClosingLogicalChannel(
01382 H323Channel & channel
01383 );
01384
01393 virtual void OnLogicalChannelFlowControl(
01394 H323Channel * channel,
01395 long bitRateRestriction
01396 );
01397
01406 virtual void OnLogicalChannelJitter(
01407 H323Channel * channel,
01408 DWORD jitter,
01409 int skippedFrameCount,
01410 int additionalBuffer
01411 );
01412
01416 H323Channel * GetLogicalChannel(
01417 unsigned number,
01418 PBoolean fromRemote
01419 ) const;
01420
01426 H323Channel * FindChannel(
01427 unsigned sessionId,
01428 PBoolean fromRemote
01429 ) const;
01431
01438 virtual PBoolean SetBandwidthAvailable(
01439 unsigned newBandwidth,
01440 PBoolean force = PFalse
01441 );
01442
01447 virtual unsigned GetBandwidthUsed() const;
01449
01457 virtual SendUserInputModes GetRealSendUserInputMode() const;
01458
01472 virtual PBoolean SendUserInputString(
01473 const PString & value
01474 );
01475
01500 virtual PBoolean SendUserInputTone(
01501 char tone,
01502 unsigned duration = 0
01503 );
01504
01511 virtual PBoolean SendUserInputIndicationQ931(
01512 const PString & value
01513 );
01514
01521 virtual PBoolean SendUserInputIndicationString(
01522 const PString & value
01523 );
01524
01529 virtual PBoolean SendUserInputIndicationTone(
01530 char tone,
01531 unsigned duration = 0,
01532 unsigned logicalChannel = 0,
01533 unsigned rtpTimestamp = 0
01534 );
01535
01544 virtual PBoolean SendUserInputIndication(
01545 const H245_UserInputIndication & pdu
01546 );
01547
01552 virtual void OnUserInputIndication(
01553 const H245_UserInputIndication & pdu
01554 );
01556
01562 virtual H323_RTP_Session * GetSessionCallbacks(
01563 unsigned sessionID
01564 ) const;
01565
01575 virtual RTP_Session * UseSession(
01576 const OpalTransport & transport,
01577 unsigned sessionID,
01578 RTP_QOS * rtpqos = NULL
01579 );
01580
01584 virtual void ReleaseSession(
01585 unsigned sessionID
01586 );
01587
01595 virtual void OnRTPStatistics(
01596 const RTP_Session & session
01597 ) const;
01598
01602 virtual PString GetSessionCodecNames(
01603 unsigned sessionID
01604 ) const;
01605
01607
01625 virtual PBoolean RequestModeChange(
01626 const PString & newModes
01627 );
01628
01636 virtual PBoolean RequestModeChange(
01637 const H245_ArrayOf_ModeDescription & newModes
01638 );
01639
01642 virtual PBoolean OnRequestModeChange(
01643 const H245_RequestMode & pdu,
01644 H245_RequestModeAck & ack,
01645 H245_RequestModeReject & reject,
01646 PINDEX & selectedMode
01647 );
01648
01655 virtual void OnModeChanged(
01656 const H245_ModeDescription & newMode
01657 );
01658
01663 virtual void OnAcceptModeChange(
01664 const H245_RequestModeAck & pdu
01665 );
01666
01671 virtual void OnRefusedModeChange(
01672 const H245_RequestModeReject * pdu
01673 );
01675
01680 virtual PBoolean RequestModeChangeT38(
01681 const char * capabilityNames = "T.38\nT38FaxUDP"
01682 );
01683
01693 virtual PBoolean GetAdmissionRequestAuthentication(
01694 const H225_AdmissionRequest & arq,
01695 H235Authenticators & authenticators
01696 );
01698
01703 H323EndPoint & GetEndPoint() const { return endpoint; }
01704
01707 PBoolean HadAnsweredCall() const { return !originating; }
01708
01711 PBoolean IsGatekeeperRouted() const { return gatekeeperRouted; }
01712
01717 unsigned GetDistinctiveRing() const { return distinctiveRing; }
01718
01725 void SetDistinctiveRing(unsigned pattern) { distinctiveRing = pattern&7; }
01726
01730 const PString & GetCallToken() const { return GetToken(); }
01731
01734 unsigned GetCallReference() const { return callReference; }
01735
01739 inline const OpalGloballyUniqueID & GetCallIdentifier() const
01740 { return GetIdentifier(); }
01741
01744 const OpalGloballyUniqueID & GetConferenceIdentifier() const { return conferenceIdentifier; }
01745
01748 void SetLocalPartyName(const PString & name);
01749
01752 const PStringList & GetLocalAliasNames() const { return localAliasNames; }
01753
01756 virtual void SetRemotePartyInfo(
01757 const H323SignalPDU & pdu
01758 );
01759
01762 void SetRemoteApplication(
01763 const H225_EndpointType & pdu
01764 );
01765
01770 const PString GetRemotePartyCallbackURL() const;
01771
01774 const H323Capabilities & GetLocalCapabilities() const { return localCapabilities; }
01775
01778 const H323Capabilities & GetRemoteCapabilities() const { return remoteCapabilities; }
01779
01782 unsigned GetRemoteMaxAudioDelayJitter() const { return remoteMaxAudioDelayJitter; }
01783
01786 const H323Transport * GetSignallingChannel() const { return signallingChannel; }
01787
01790 unsigned GetSignallingVersion() const { return h225version; }
01791
01794 const H323Transport & GetControlChannel() const;
01795
01798 OpalTransport & GetTransport() const;
01799
01802 unsigned GetControlVersion() const { return h245version; }
01803
01806 unsigned GetUUIEsRequested() const { return uuiesRequested; }
01807
01810 void SetUUIEsRequested(unsigned mask) { uuiesRequested = mask; }
01811
01814 const PString GetGkAccessTokenOID() const { return gkAccessTokenOID; }
01815
01818 void SetGkAccessTokenOID(const PString & oid) { gkAccessTokenOID = oid; }
01819
01822 const PBYTEArray & GetGkAccessTokenData() const { return gkAccessTokenData; }
01823
01826 void SetDestExtraCallInfo(
01827 const PString & info
01828 ) { destExtraCallInfo = info; }
01829
01832 void SetRemotCallWaiting(const unsigned value) { remoteCallWaiting = value; }
01833
01839 const int GetRemoteCallWaiting() const { return remoteCallWaiting; }
01840
01845 void SetEnforcedDurationLimit(
01846 unsigned seconds
01847 );
01849
01850 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &) const;
01851
01852 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &) const;
01853
01854 #if H323_H460
01855
01857 virtual H460_FeatureSet * GetFeatureSet();
01858 #endif
01859
01860
01861 #if OPAL_H450
01862
01866 H4507Handler& getH4507handler(){return *h4507handler;}
01867 #endif
01868
01886 virtual PBoolean OnOpenIncomingMediaChannels();
01887
01888 virtual void OnMediaCommand(OpalMediaCommand & note, INT extra);
01889
01890 protected:
01896 virtual void InternalEstablishedConnectionCheck();
01897 PBoolean InternalEndSessionCheck(PPER_Stream & strm);
01898 void SetRemoteVersions(const H225_ProtocolIdentifier & id);
01899 void MonitorCallStatus();
01900 PDECLARE_NOTIFIER(PThread, H323Connection, StartOutgoing);
01901 PDECLARE_NOTIFIER(PThread, H323Connection, NewOutgoingControlChannel);
01902 PDECLARE_NOTIFIER(PThread, H323Connection, NewIncomingControlChannel);
01903
01904 H323EndPoint & endpoint;
01905
01906 int remoteCallWaiting;
01907 PBoolean gatekeeperRouted;
01908 unsigned distinctiveRing;
01909 unsigned callReference;
01910 OpalGloballyUniqueID conferenceIdentifier;
01911
01912 PString localDestinationAddress;
01913 PStringList localAliasNames;
01914 H323Capabilities localCapabilities;
01915 PString destExtraCallInfo;
01916 H323Capabilities remoteCapabilities;
01917 unsigned remoteMaxAudioDelayJitter;
01918 PTimer roundTripDelayTimer;
01919 WORD maxAudioDelayJitter;
01920 unsigned uuiesRequested;
01921 PString gkAccessTokenOID;
01922 PBYTEArray gkAccessTokenData;
01923 PBoolean addAccessTokenToSetup;
01924 PBoolean alertDone;
01925
01926 H323Transport * signallingChannel;
01927 H323Transport * controlChannel;
01928 OpalListener * controlListener;
01929 PBoolean h245Tunneling;
01930 H323SignalPDU * h245TunnelRxPDU;
01931 H323SignalPDU * h245TunnelTxPDU;
01932 H323SignalPDU * setupPDU;
01933 H323SignalPDU * alertingPDU;
01934 H323SignalPDU * connectPDU;
01935 H323SignalPDU * progressPDU;
01936
01937 enum ConnectionStates {
01938 NoConnectionActive,
01939 AwaitingGatekeeperAdmission,
01940 AwaitingTransportConnect,
01941 AwaitingSignalConnect,
01942 AwaitingLocalAnswer,
01943 HasExecutedSignalConnect,
01944 EstablishedConnection,
01945 ShuttingDownConnection,
01946 NumConnectionStates
01947 } connectionState;
01948
01949 unsigned h225version;
01950 unsigned h245version;
01951 PBoolean h245versionSet;
01952 PBoolean doH245inSETUP;
01953 PBoolean lastPDUWasH245inSETUP;
01954
01955 PBoolean mustSendDRQ;
01956 PBoolean mediaWaitForConnect;
01957 PBoolean transmitterSidePaused;
01958 PBoolean earlyStart;
01959 #if OPAL_T120
01960 PBoolean startT120;
01961 #endif
01962 #if OPAL_H224
01963 PBoolean startH224;
01964 #endif
01965 PString t38ModeChangeCapabilities;
01966 PSyncPoint digitsWaitFlag;
01967 PBoolean endSessionNeeded;
01968 PSyncPoint endSessionReceived;
01969 PTimer enforcedDurationLimit;
01970
01971
01972 PChannel * holdMediaChannel;
01973 PBoolean isConsultationTransfer;
01974
01976 PBoolean isCallIntrusion;
01977 unsigned callIntrusionProtectionLevel;
01978
01979 enum FastStartStates {
01980 FastStartDisabled,
01981 FastStartInitiate,
01982 FastStartResponse,
01983 FastStartAcknowledged,
01984 NumFastStartStates
01985 };
01986 FastStartStates fastStartState;
01987 H323LogicalChannelList fastStartChannels;
01988 OpalMediaStreamPtr fastStartMediaStream;
01989
01990 #if PTRACING
01991 static const char * GetConnectionStatesName(ConnectionStates s);
01992 friend ostream & operator<<(ostream & o, ConnectionStates s) { return o << GetConnectionStatesName(s); }
01993 static const char * GetFastStartStateName(FastStartStates s);
01994 friend ostream & operator<<(ostream & o, FastStartStates s) { return o << GetFastStartStateName(s); }
01995 #endif
01996
01997
01998
01999
02000 H245NegMasterSlaveDetermination * masterSlaveDeterminationProcedure;
02001 H245NegTerminalCapabilitySet * capabilityExchangeProcedure;
02002 H245NegLogicalChannels * logicalChannels;
02003 H245NegRequestMode * requestModeProcedure;
02004 H245NegRoundTripDelay * roundTripDelayProcedure;
02005
02006 #if OPAL_H450
02007 H450xDispatcher * h450dispatcher;
02008 H4502Handler * h4502handler;
02009 H4504Handler * h4504handler;
02010 H4506Handler * h4506handler;
02011 H4507Handler * h4507handler;
02012 H45011Handler * h45011handler;
02013 #endif
02014
02015 #ifdef H323_H460
02016 H460_FeatureSet & features;
02017 #endif
02018
02019 private:
02020 PChannel * SwapHoldMediaChannels(PChannel * newChannel);
02021 };
02022
02023
02024 PDICTIONARY(H323CallIdentityDict, PString, H323Connection);
02025
02026
02027 #endif // __OPAL_H323CON_H
02028
02029