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_H323_H323CON_H
00035 #define OPAL_H323_H323CON_H
00036
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040
00041 #include <opal/buildopts.h>
00042
00043 #if OPAL_H323
00044
00045 #include <opal/rtpconn.h>
00046 #include <opal/guid.h>
00047 #include <opal/buildopts.h>
00048 #include <h323/h323caps.h>
00049 #include <ptclib/dtmf.h>
00050
00051
00052
00053
00054
00055
00056
00057 class PPER_Stream;
00058 class PASN_OctetString;
00059
00060 class H225_EndpointType;
00061 class H225_TransportAddress;
00062 class H225_ArrayOf_PASN_OctetString;
00063 class H225_ProtocolIdentifier;
00064 class H225_AdmissionRequest;
00065 class H225_AdmissionConfirm;
00066 class H225_AdmissionReject;
00067 class H225_InfoRequestResponse;
00068 class H225_DisengageRequest;
00069 class H225_FeatureSet;
00070
00071 class H245_TerminalCapabilitySet;
00072 class H245_TerminalCapabilitySetReject;
00073 class H245_OpenLogicalChannel;
00074 class H245_OpenLogicalChannelAck;
00075 class H245_TransportAddress;
00076 class H245_UserInputIndication;
00077 class H245_RequestMode;
00078 class H245_RequestModeAck;
00079 class H245_RequestModeReject;
00080 class H245_ModeDescription;
00081 class H245_ArrayOf_ModeDescription;
00082 class H245_SendTerminalCapabilitySet;
00083 class H245_MultiplexCapability;
00084 class H245_FlowControlCommand;
00085 class H245_MiscellaneousCommand;
00086 class H245_MiscellaneousIndication;
00087 class H245_JitterIndication;
00088
00089 class H323SignalPDU;
00090 class H323ControlPDU;
00091 class H323EndPoint;
00092 class H323TransportAddress;
00093
00094 class H235Authenticators;
00095
00096 class H245NegMasterSlaveDetermination;
00097 class H245NegTerminalCapabilitySet;
00098 class H245NegLogicalChannels;
00099 class H245NegRequestMode;
00100 class H245NegRoundTripDelay;
00101
00102 class H450xDispatcher;
00103 class H4502Handler;
00104 class H4504Handler;
00105 class H4506Handler;
00106 class H4507Handler;
00107 class H45011Handler;
00108
00109 class OpalCall;
00110
00111 #if OPAL_H460
00112 class H460_FeatureSet;
00113 #endif
00114
00115
00117
00124 class H323Connection : public OpalRTPConnection
00125 {
00126 PCLASSINFO(H323Connection, OpalRTPConnection);
00127
00128 public:
00133 H323Connection(
00134 OpalCall & call,
00135 H323EndPoint & endpoint,
00136 const PString & token,
00137 const PString & alias,
00138 const H323TransportAddress & address,
00139 unsigned options = 0,
00140 OpalConnection::StringOptions * stringOptions = NULL
00141 );
00142
00145 ~H323Connection();
00147
00158 virtual bool IsNetworkConnection() const { return true; }
00159
00162 virtual PString GetPrefixName() const;
00163
00170 virtual PBoolean SetUpConnection();
00171
00181 virtual PBoolean SetAlerting(
00182 const PString & calleeName,
00183 PBoolean withMedia
00184 );
00185
00190 virtual PBoolean SetConnected();
00191
00196 virtual PBoolean SetProgressed();
00197
00205 virtual void OnEstablished();
00206
00224 virtual void OnReleased();
00225
00230 virtual PString GetDestinationAddress();
00231
00239 virtual OpalMediaFormatList GetMediaFormats() const;
00240
00243 virtual OpalMediaStreamPtr OpenMediaStream(
00244 const OpalMediaFormat & mediaFormat,
00245 unsigned sessionID,
00246 bool isSource
00247 );
00248
00253 virtual bool CloseMediaStream(
00254 OpalMediaStream & stream
00255 );
00256
00261 virtual PBoolean GetMediaInformation(
00262 unsigned sessionID,
00263 MediaInformation & info
00264 ) const;
00266
00272 virtual void OnCleared();
00273
00279 PBoolean IsEstablished() const { return connectionState == EstablishedConnection; }
00280
00289 virtual void CleanUpOnCallEnd();
00291
00292
00297 void AttachSignalChannel(
00298 const PString & token,
00299 H323Transport * channel,
00300 PBoolean answeringCall
00301 );
00302
00305 PBoolean WriteSignalPDU(
00306 H323SignalPDU & pdu
00307 );
00308
00312 virtual void HandleSignallingChannel();
00313
00317 virtual PBoolean HandleSignalPDU(
00318 H323SignalPDU & pdu
00319 );
00320
00324 virtual void HandleTunnelPDU(
00325 H323SignalPDU * txPDU
00326 );
00327
00335 virtual PBoolean OnReceivedSignalSetup(
00336 const H323SignalPDU & pdu
00337 );
00338
00345 virtual PBoolean OnReceivedSignalSetupAck(
00346 const H323SignalPDU & pdu
00347 );
00348
00355 virtual PBoolean OnReceivedSignalInformation(
00356 const H323SignalPDU & pdu
00357 );
00358
00367 virtual PBoolean OnReceivedCallProceeding(
00368 const H323SignalPDU & pdu
00369 );
00370
00379 virtual PBoolean OnReceivedProgress(
00380 const H323SignalPDU & pdu
00381 );
00382
00389 virtual PBoolean OnReceivedAlerting(
00390 const H323SignalPDU & pdu
00391 );
00392
00401 virtual PBoolean OnReceivedSignalConnect(
00402 const H323SignalPDU & pdu
00403 );
00404
00413 virtual PBoolean OnReceivedFacility(
00414 const H323SignalPDU & pdu
00415 );
00416
00423 virtual PBoolean OnReceivedSignalNotify(
00424 const H323SignalPDU & pdu
00425 );
00426
00433 virtual PBoolean OnReceivedSignalStatus(
00434 const H323SignalPDU & pdu
00435 );
00436
00443 virtual PBoolean OnReceivedStatusEnquiry(
00444 const H323SignalPDU & pdu
00445 );
00446
00451 virtual void OnReceivedReleaseComplete(
00452 const H323SignalPDU & pdu
00453 );
00454
00461 virtual PBoolean OnUnknownSignalPDU(
00462 const H323SignalPDU & pdu
00463 );
00464
00471 virtual void OnSendARQ(
00472 H225_AdmissionRequest & arq
00473 );
00474
00480 virtual void OnReceivedACF(
00481 const H225_AdmissionConfirm & acf
00482 );
00483
00489 virtual void OnReceivedARJ(
00490 const H225_AdmissionReject & arj
00491 );
00492
00499 virtual void OnSendIRR(
00500 H225_InfoRequestResponse & irr
00501 ) const;
00502
00509 virtual void OnSendDRQ(
00510 H225_DisengageRequest & drq
00511 ) const;
00512
00524 virtual PBoolean OnIncomingCall(
00525 const H323SignalPDU & setupPDU,
00526 H323SignalPDU & alertingPDU
00527 );
00528
00538 virtual PBoolean ForwardCall(
00539 const PString & forwardParty
00540 );
00541
00548 virtual bool TransferConnection(
00549 const PString & remoteParty
00550 );
00551
00555 virtual bool HoldConnection();
00556
00561 virtual bool RetrieveConnection();
00562
00566 virtual PBoolean IsConnectionOnHold();
00567
00568 #if OPAL_H450
00569
00574 bool TransferCall(
00575 const PString & remoteParty,
00576 const PString & callIdentity = PString::Empty()
00578 );
00579
00584 void ConsultationTransfer(
00585 const PString & primaryCallToken
00586 );
00587
00594 virtual void HandleConsultationTransfer(
00595 const PString & callIdentity,
00597 H323Connection & incoming
00598 );
00599
00602 PBoolean IsTransferringCall() const;
00603
00606 PBoolean IsTransferredCall() const;
00607
00612 virtual void HandleTransferCall(
00613 const PString & token,
00614 const PString & identity
00615 );
00616
00621 int GetCallTransferInvokeId();
00622
00630 virtual void HandleCallTransferFailure(
00631 const int returnError
00632 );
00633
00638 void SetAssociatedCallToken(
00639 const PString & token
00640 );
00641
00646 virtual void OnConsultationTransferSuccess(
00647 H323Connection & secondaryCall
00648 );
00649
00654 bool HoldCall(
00655 PBoolean localHold
00656 );
00657
00663 bool RetrieveCall();
00664
00671 void SetHoldMedia(
00672 PChannel * audioChannel
00673 );
00674
00677 PBoolean IsMediaOnHold() const;
00678
00681 PBoolean IsLocalHold() const;
00682
00685 PBoolean IsRemoteHold() const;
00686
00689 PBoolean IsCallOnHold() const;
00690
00695 virtual void IntrudeCall(
00696 unsigned capabilityLevel
00697 );
00698
00703 virtual void HandleIntrudeCall(
00704 const PString & token,
00705 const PString & identity
00706 );
00707
00713 void SetCallIntrusion() { isCallIntrusion = PTrue; }
00714
00715 PBoolean IsCallIntrusion() { return isCallIntrusion; }
00716
00719 unsigned GetLocalCallIntrusionProtectionLevel() { return callIntrusionProtectionLevel; }
00720
00724 virtual PBoolean GetRemoteCallIntrusionProtectionLevel(
00725 const PString & callToken,
00726 unsigned callIntrusionProtectionLevel
00727 );
00728
00729 virtual void SetIntrusionImpending();
00730
00731 virtual void SetForcedReleaseAccepted();
00732
00733 virtual void SetIntrusionNotAuthorized();
00734
00741 void SendCallWaitingIndication(
00742 const unsigned nbOfAddWaitingCalls = 0
00743 );
00744
00745 #endif
00746
00773 virtual AnswerCallResponse OnAnswerCall(
00774 const PString & callerName,
00775 const H323SignalPDU & setupPDU,
00776 H323SignalPDU & connectPDU,
00777 H323SignalPDU & progressPDU
00778 );
00779
00780 virtual AnswerCallResponse OnAnswerCall(
00781 const PString & callerName
00782 );
00783
00794 void AnsweringCall(
00795 AnswerCallResponse response
00796 );
00797
00808 virtual CallEndReason SendSignalSetup(
00809 const PString & alias,
00810 const H323TransportAddress & address
00811 );
00812
00824 virtual PBoolean OnSendSignalSetup(
00825 H323SignalPDU & setupPDU
00826 );
00827
00836 virtual PBoolean OnSendCallProceeding(
00837 H323SignalPDU & callProceedingPDU
00838 );
00839
00851 virtual PBoolean OnSendReleaseComplete(
00852 H323SignalPDU & releaseCompletePDU
00853 );
00854
00865 virtual PBoolean OnAlerting(
00866 const H323SignalPDU & alertingPDU,
00867 const PString & user
00868 );
00869
00884 virtual PBoolean OnInsufficientDigits();
00885
00898 virtual void SendMoreDigits(
00899 const PString & digits
00900 );
00901
00911 virtual PBoolean OnOutgoingCall(
00912 const H323SignalPDU & connectPDU
00913 );
00914
00926 virtual PBoolean SendFastStartAcknowledge(
00927 H225_ArrayOf_PASN_OctetString & array
00928 );
00929
00941 virtual PBoolean HandleFastStartAcknowledge(
00942 const H225_ArrayOf_PASN_OctetString & array
00943 );
00945
00959 virtual PBoolean CreateOutgoingControlChannel(
00960 const H225_TransportAddress & h245Address
00961 );
00962
00975 virtual PBoolean CreateIncomingControlChannel(
00976 H225_TransportAddress & h245Address
00977 );
00978
00983 virtual PBoolean WriteControlPDU(
00984 const H323ControlPDU & pdu
00985 );
00986
00989 virtual PBoolean StartControlNegotiations();
00990
00993 virtual void HandleControlChannel();
00994
01001 virtual PBoolean HandleControlData(
01002 PPER_Stream & strm
01003 );
01004
01011 virtual PBoolean HandleControlPDU(
01012 const H323ControlPDU & pdu
01013 );
01014
01024 virtual PBoolean OnUnknownControlPDU(
01025 const H323ControlPDU & pdu
01026 );
01027
01031 virtual PBoolean OnH245Request(
01032 const H323ControlPDU & pdu
01033 );
01034
01038 virtual PBoolean OnH245Response(
01039 const H323ControlPDU & pdu
01040 );
01041
01045 virtual PBoolean OnH245Command(
01046 const H323ControlPDU & pdu
01047 );
01048
01052 virtual PBoolean OnH245Indication(
01053 const H323ControlPDU & pdu
01054 );
01055
01058 virtual PBoolean OnH245_SendTerminalCapabilitySet(
01059 const H245_SendTerminalCapabilitySet & pdu
01060 );
01061
01066 virtual PBoolean OnH245_FlowControlCommand(
01067 const H245_FlowControlCommand & pdu
01068 );
01069
01074 virtual PBoolean OnH245_MiscellaneousCommand(
01075 const H245_MiscellaneousCommand & pdu
01076 );
01077
01082 virtual PBoolean OnH245_MiscellaneousIndication(
01083 const H245_MiscellaneousIndication & pdu
01084 );
01085
01090 virtual PBoolean OnH245_JitterIndication(
01091 const H245_JitterIndication & pdu
01092 );
01093
01096 enum ControlProtocolErrors {
01097 e_MasterSlaveDetermination,
01098 e_CapabilityExchange,
01099 e_LogicalChannel,
01100 e_ModeRequest,
01101 e_RoundTripDelay
01102 };
01103
01115 virtual PBoolean OnControlProtocolError(
01116 ControlProtocolErrors errorSource,
01117 const void * errorData = NULL
01118 );
01119
01127 virtual void OnSendCapabilitySet(
01128 H245_TerminalCapabilitySet & pdu
01129 );
01130
01142 virtual PBoolean OnReceivedCapabilitySet(
01143 const H323Capabilities & remoteCaps,
01144 const H245_MultiplexCapability * muxCap,
01145 H245_TerminalCapabilitySetReject & reject
01146 );
01147
01150 virtual bool SendCapabilitySet(
01151 PBoolean empty
01152 );
01153
01156 virtual bool IsSendingCapabilitySet();
01157
01166 virtual void OnSetLocalCapabilities();
01167
01170 PBoolean IsH245Master() const;
01171
01174 void StartRoundTripDelay();
01175
01178 PTimeInterval GetRoundTripDelay() const;
01180
01220 virtual void OnSelectLogicalChannels();
01221
01224 virtual void SelectDefaultLogicalChannel(
01225 const OpalMediaType & mediaType,
01226 unsigned sessionID
01227 );
01228
01232 virtual void SelectFastStartChannels(
01233 unsigned sessionID,
01234 PBoolean transmitter,
01235 PBoolean receiver
01236 );
01237
01241 virtual void StartFastStartChannel(
01242 unsigned sessionID,
01243 H323Channel::Directions direction
01244 );
01245
01260 virtual PBoolean OpenLogicalChannel(
01261 const H323Capability & capability,
01262 unsigned sessionID,
01263 H323Channel::Directions dir
01264 );
01265
01266 virtual void SendFlowControlCommand(
01267 unsigned channelNumber,
01268 unsigned newBitRate
01269 );
01270
01280 virtual PBoolean OnOpenLogicalChannel(
01281 const H245_OpenLogicalChannel & openPDU,
01282 H245_OpenLogicalChannelAck & ackPDU,
01283 unsigned & errorCode
01284 );
01285
01293 virtual PBoolean OnConflictingLogicalChannel(
01294 H323Channel & channel
01295 );
01296
01301 virtual H323Channel * CreateLogicalChannel(
01302 const H245_OpenLogicalChannel & open,
01303 PBoolean startingFast,
01304 unsigned & errorCode
01305 );
01306
01341 virtual H323Channel * CreateRealTimeLogicalChannel(
01342 const H323Capability & capability,
01343 H323Channel::Directions dir,
01344 unsigned sessionID,
01345 const H245_H2250LogicalChannelParameters * param,
01347 RTP_QOS * rtpqos = NULL
01348 );
01349
01360 virtual PBoolean OnCreateLogicalChannel(
01361 const H323Capability & capability,
01362 H323Channel::Directions dir,
01363 unsigned & errorCode
01364 );
01365
01370 virtual PBoolean OnStartLogicalChannel(
01371 H323Channel & channel
01372 );
01373
01376 virtual void CloseLogicalChannel(
01377 unsigned number,
01378 PBoolean fromRemote
01379 );
01380
01383 virtual void CloseLogicalChannelNumber(
01384 const H323ChannelNumber & number
01385 );
01386
01389 virtual void CloseAllLogicalChannels(
01390 PBoolean fromRemote
01391 );
01392
01398 virtual void OnClosedLogicalChannel(
01399 const H323Channel & channel
01400 );
01401
01410 virtual PBoolean OnClosingLogicalChannel(
01411 H323Channel & channel
01412 );
01413
01422 virtual void OnLogicalChannelFlowControl(
01423 H323Channel * channel,
01424 long bitRateRestriction
01425 );
01426
01435 virtual void OnLogicalChannelJitter(
01436 H323Channel * channel,
01437 DWORD jitter,
01438 int skippedFrameCount,
01439 int additionalBuffer
01440 );
01441
01445 H323Channel * GetLogicalChannel(
01446 unsigned number,
01447 PBoolean fromRemote
01448 ) const;
01449
01455 H323Channel * FindChannel(
01456 unsigned sessionId,
01457 PBoolean fromRemote
01458 ) const;
01460
01467 virtual PBoolean SetBandwidthAvailable(
01468 unsigned newBandwidth,
01469 PBoolean force = PFalse
01470 );
01471
01476 virtual unsigned GetBandwidthUsed() const;
01478
01486 virtual SendUserInputModes GetRealSendUserInputMode() const;
01487
01501 virtual PBoolean SendUserInputString(
01502 const PString & value
01503 );
01504
01529 virtual PBoolean SendUserInputTone(
01530 char tone,
01531 unsigned duration = 0
01532 );
01533
01540 virtual PBoolean SendUserInputIndicationQ931(
01541 const PString & value
01542 );
01543
01550 virtual PBoolean SendUserInputIndicationString(
01551 const PString & value
01552 );
01553
01558 virtual PBoolean SendUserInputIndicationTone(
01559 char tone,
01560 unsigned duration = 0,
01561 unsigned logicalChannel = 0,
01562 unsigned rtpTimestamp = 0
01563 );
01564
01573 virtual PBoolean SendUserInputIndication(
01574 const H245_UserInputIndication & pdu
01575 );
01576
01581 virtual void OnUserInputIndication(
01582 const H245_UserInputIndication & pdu
01583 );
01585
01591 virtual H323_RTP_Session * GetSessionCallbacks(
01592 unsigned sessionID
01593 ) const;
01594
01604 virtual RTP_Session * UseSession(
01605 const OpalTransport & transport,
01606 unsigned sessionID,
01607 const OpalMediaType & mediatype,
01608 RTP_QOS * rtpqos = NULL
01609 );
01610
01614 virtual void ReleaseSession(
01615 unsigned sessionID
01616 );
01617
01625 virtual void OnRTPStatistics(
01626 const RTP_Session & session
01627 ) const;
01628
01632 virtual PString GetSessionCodecNames(
01633 unsigned sessionID
01634 ) const;
01635
01637
01655 virtual PBoolean RequestModeChange(
01656 const PString & newModes
01657 );
01658
01666 virtual PBoolean RequestModeChange(
01667 const H245_ArrayOf_ModeDescription & newModes
01668 );
01669
01672 virtual PBoolean OnRequestModeChange(
01673 const H245_RequestMode & pdu,
01674 H245_RequestModeAck & ack,
01675 H245_RequestModeReject & reject,
01676 PINDEX & selectedMode
01677 );
01678
01685 virtual void OnModeChanged(
01686 const H245_ModeDescription & newMode
01687 );
01688
01693 virtual void OnAcceptModeChange(
01694 const H245_RequestModeAck & pdu
01695 );
01696
01701 virtual void OnRefusedModeChange(
01702 const H245_RequestModeReject * pdu
01703 );
01705
01710 virtual PBoolean RequestModeChangeT38(
01711 const char * capabilityNames = "T.38\nT38FaxUDP"
01712 );
01713
01723 virtual PBoolean GetAdmissionRequestAuthentication(
01724 const H225_AdmissionRequest & arq,
01725 H235Authenticators & authenticators
01726 );
01728
01733 H323EndPoint & GetEndPoint() const { return endpoint; }
01734
01737 PBoolean HadAnsweredCall() const { return !originating; }
01738
01741 PBoolean IsGatekeeperRouted() const { return gatekeeperRouted; }
01742
01747 unsigned GetDistinctiveRing() const { return distinctiveRing; }
01748
01755 void SetDistinctiveRing(unsigned pattern) { distinctiveRing = pattern&7; }
01756
01760 const PString & GetCallToken() const { return GetToken(); }
01761
01764 unsigned GetCallReference() const { return callReference; }
01765
01769 inline const OpalGloballyUniqueID & GetCallIdentifier() const
01770 { return GetIdentifier(); }
01771
01774 const OpalGloballyUniqueID & GetConferenceIdentifier() const { return conferenceIdentifier; }
01775
01778 void SetLocalPartyName(const PString & name);
01779
01782 const PStringList & GetLocalAliasNames() const { return localAliasNames; }
01783
01786 virtual void SetRemotePartyInfo(
01787 const H323SignalPDU & pdu
01788 );
01789
01792 void SetRemoteApplication(
01793 const H225_EndpointType & pdu
01794 );
01795
01800 PString GetRemotePartyURL() const;
01801
01804 const H323Capabilities & GetLocalCapabilities() const { return localCapabilities; }
01805
01808 const H323Capabilities & GetRemoteCapabilities() const { return remoteCapabilities; }
01809
01812 unsigned GetRemoteMaxAudioDelayJitter() const { return remoteMaxAudioDelayJitter; }
01813
01816 const H323Transport * GetSignallingChannel() const { return signallingChannel; }
01817
01820 unsigned GetSignallingVersion() const { return h225version; }
01821
01824 const H323Transport & GetControlChannel() const;
01825
01828 OpalTransport & GetTransport() const;
01829
01832 unsigned GetControlVersion() const { return h245version; }
01833
01836 unsigned GetUUIEsRequested() const { return uuiesRequested; }
01837
01840 void SetUUIEsRequested(unsigned mask) { uuiesRequested = mask; }
01841
01844 const PString GetGkAccessTokenOID() const { return gkAccessTokenOID; }
01845
01848 void SetGkAccessTokenOID(const PString & oid) { gkAccessTokenOID = oid; }
01849
01852 const PBYTEArray & GetGkAccessTokenData() const { return gkAccessTokenData; }
01853
01856 void SetDestExtraCallInfo(
01857 const PString & info
01858 ) { destExtraCallInfo = info; }
01859
01862 void SetRemotCallWaiting(const unsigned value) { remoteCallWaiting = value; }
01863
01869 int GetRemoteCallWaiting() const { return remoteCallWaiting; }
01870
01875 void SetEnforcedDurationLimit(
01876 unsigned seconds
01877 );
01879
01880 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &) const;
01881
01882 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &) const;
01883
01884 #if OPAL_H460
01885
01887 virtual H460_FeatureSet * GetFeatureSet();
01888 #endif
01889
01890
01891 #if OPAL_H450
01892
01896 H4507Handler& getH4507handler(){return *h4507handler;}
01897 #endif
01898
01916 virtual PBoolean OnOpenIncomingMediaChannels();
01917
01918 virtual void OnMediaCommand(OpalMediaCommand & note, INT extra);
01919
01920 protected:
01926 virtual void InternalEstablishedConnectionCheck();
01927 PBoolean InternalEndSessionCheck(PPER_Stream & strm);
01928 void SetRemoteVersions(const H225_ProtocolIdentifier & id);
01929 void MonitorCallStatus();
01930 PDECLARE_NOTIFIER(PThread, H323Connection, StartOutgoing);
01931 PDECLARE_NOTIFIER(PThread, H323Connection, NewOutgoingControlChannel);
01932 PDECLARE_NOTIFIER(PThread, H323Connection, NewIncomingControlChannel);
01933
01934 H323EndPoint & endpoint;
01935
01936 int remoteCallWaiting;
01937 PBoolean gatekeeperRouted;
01938 unsigned distinctiveRing;
01939 unsigned callReference;
01940 OpalGloballyUniqueID conferenceIdentifier;
01941
01942 PString localDestinationAddress;
01943 PStringList localAliasNames;
01944 H323Capabilities localCapabilities;
01945 PString destExtraCallInfo;
01946 H323Capabilities remoteCapabilities;
01947 unsigned remoteMaxAudioDelayJitter;
01948 PTimer roundTripDelayTimer;
01949 WORD maxAudioDelayJitter;
01950 unsigned uuiesRequested;
01951 PString gkAccessTokenOID;
01952 PBYTEArray gkAccessTokenData;
01953 PBoolean addAccessTokenToSetup;
01954 PBoolean alertDone;
01955
01956 H323Transport * signallingChannel;
01957 H323Transport * controlChannel;
01958 OpalListener * controlListener;
01959 PBoolean h245Tunneling;
01960 H323SignalPDU * h245TunnelRxPDU;
01961 H323SignalPDU * h245TunnelTxPDU;
01962 H323SignalPDU * setupPDU;
01963 H323SignalPDU * alertingPDU;
01964 H323SignalPDU * connectPDU;
01965 H323SignalPDU * progressPDU;
01966
01967 enum ConnectionStates {
01968 NoConnectionActive,
01969 AwaitingGatekeeperAdmission,
01970 AwaitingTransportConnect,
01971 AwaitingSignalConnect,
01972 AwaitingLocalAnswer,
01973 HasExecutedSignalConnect,
01974 EstablishedConnection,
01975 ShuttingDownConnection,
01976 NumConnectionStates
01977 } connectionState;
01978
01979 unsigned h225version;
01980 unsigned h245version;
01981 PBoolean h245versionSet;
01982 PBoolean doH245inSETUP;
01983 PBoolean lastPDUWasH245inSETUP;
01984
01985 PBoolean mustSendDRQ;
01986 PBoolean mediaWaitForConnect;
01987 PBoolean transmitterSidePaused;
01988 bool remoteTransmitPaused;
01989 PBoolean earlyStart;
01990 PString t38ModeChangeCapabilities;
01991 PSyncPoint digitsWaitFlag;
01992 PBoolean endSessionNeeded;
01993 PSyncPoint endSessionReceived;
01994 PTimer enforcedDurationLimit;
01995
01996
01997 PChannel * holdMediaChannel;
01998 PBoolean isConsultationTransfer;
01999
02001 PBoolean isCallIntrusion;
02002 unsigned callIntrusionProtectionLevel;
02003
02004 enum FastStartStates {
02005 FastStartDisabled,
02006 FastStartInitiate,
02007 FastStartResponse,
02008 FastStartAcknowledged,
02009 NumFastStartStates
02010 };
02011 FastStartStates fastStartState;
02012 H323LogicalChannelList fastStartChannels;
02013 OpalMediaStreamPtr fastStartMediaStream;
02014
02015 #if PTRACING
02016 static const char * GetConnectionStatesName(ConnectionStates s);
02017 friend ostream & operator<<(ostream & o, ConnectionStates s) { return o << GetConnectionStatesName(s); }
02018 static const char * GetFastStartStateName(FastStartStates s);
02019 friend ostream & operator<<(ostream & o, FastStartStates s) { return o << GetFastStartStateName(s); }
02020 #endif
02021
02022
02023
02024
02025 H245NegMasterSlaveDetermination * masterSlaveDeterminationProcedure;
02026 H245NegTerminalCapabilitySet * capabilityExchangeProcedure;
02027 H245NegLogicalChannels * logicalChannels;
02028 H245NegRequestMode * requestModeProcedure;
02029 H245NegRoundTripDelay * roundTripDelayProcedure;
02030
02031 #if OPAL_H450
02032 H450xDispatcher * h450dispatcher;
02033 H4502Handler * h4502handler;
02034 H4504Handler * h4504handler;
02035 H4506Handler * h4506handler;
02036 H4507Handler * h4507handler;
02037 H45011Handler * h45011handler;
02038 #endif
02039
02040 #if OPAL_H460
02041 H460_FeatureSet * features;
02042 #endif
02043
02044 private:
02045 PChannel * SwapHoldMediaChannels(PChannel * newChannel);
02046 };
02047
02048
02049 PDICTIONARY(H323CallIdentityDict, PString, H323Connection);
02050
02051
02052 #endif // OPAL_H323
02053
02054 #endif // OPAL_H323_H323CON_H
02055
02056