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: 19675 $
00030  * $Author: dereksmithies $
00031  * $Date: 2008-03-06 03:41:38 +0000 (Thu, 06 Mar 2008) $
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 /* The following classes have forward references to avoid including the VERY
00050    large header files for H225 and H245. If an application requires access
00051    to the protocol classes they can include them, but for simple usage their
00052    inclusion can be avoided.
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; // Number of call's waiting at the remote endpoint
01907     PBoolean                 gatekeeperRouted;
01908     unsigned             distinctiveRing;
01909     unsigned             callReference;
01910     OpalGloballyUniqueID conferenceIdentifier;
01911 
01912     PString            localDestinationAddress;
01913     PStringList        localAliasNames;
01914     H323Capabilities   localCapabilities; // Capabilities local system supports
01915     PString            destExtraCallInfo;
01916     H323Capabilities   remoteCapabilities; // Capabilities remote system supports
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     // Used as part of a local call hold operation involving MOH
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     // The following pointers are to protocol procedures, they are pointers to
01999     // hide their complexity from the H323Connection classes users.
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 

Generated on Fri Mar 7 07:36:29 2008 for OPAL by  doxygen 1.5.1