h323con.h

Go to the documentation of this file.
00001 /*
00002  * h323con.h
00003  *
00004  * H.323 protocol handler
00005  *
00006  * Open H323 Library
00007  *
00008  * Copyright (c) 1998-2001 Equivalence Pty. Ltd.
00009  *
00010  * The contents of this file are subject to the Mozilla Public License
00011  * Version 1.0 (the "License"); you may not use this file except in
00012  * compliance with the License. You may obtain a copy of the License at
00013  * http://www.mozilla.org/MPL/
00014  *
00015  * Software distributed under the License is distributed on an "AS IS"
00016  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
00017  * the License for the specific language governing rights and limitations
00018  * under the License.
00019  *
00020  * The Original Code is Open H323 Library.
00021  *
00022  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
00023  *
00024  * Portions of this code were written with the assisance of funding from
00025  * Vovida Networks, Inc. http://www.vovida.com.
00026  *
00027  * Contributor(s): ______________________________________.
00028  *
00029  * $Revision: 21283 $
00030  * $Author: rjongbloed $
00031  * $Date: 2008-10-11 07:10:58 +0000 (Sat, 11 Oct 2008) $
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 /* The following classes have forward references to avoid including the VERY
00053    large header files for H225 and H245. If an application requires access
00054    to the protocol classes they can include them, but for simple usage their
00055    inclusion can be avoided.
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; // Number of call's waiting at the remote endpoint
01937     PBoolean                 gatekeeperRouted;
01938     unsigned             distinctiveRing;
01939     unsigned             callReference;
01940     OpalGloballyUniqueID conferenceIdentifier;
01941 
01942     PString            localDestinationAddress;
01943     PStringList        localAliasNames;
01944     H323Capabilities   localCapabilities; // Capabilities local system supports
01945     PString            destExtraCallInfo;
01946     H323Capabilities   remoteCapabilities; // Capabilities remote system supports
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     // Used as part of a local call hold operation involving MOH
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     // The following pointers are to protocol procedures, they are pointers to
02024     // hide their complexity from the H323Connection classes users.
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 

Generated on Mon Feb 23 02:01:30 2009 for OPAL by  doxygen 1.5.1