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

Generated on Mon Sep 15 11:49:05 2008 for OPAL by  doxygen 1.5.1