# h323ep.h

Go to the documentation of this file.

    00001 /*
    00002  * h323ep.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: 21004 $
    00030  * $Author: rjongbloed $
    00031  * $Date: 2008-09-16 07:08:56 +0000 (Tue, 16 Sep 2008) $
    00032  */
    00033
    00034 #ifndef __OPAL_H323EP_H
    00035 #define __OPAL_H323EP_H
    00036
    00037 #ifdef P_USE_PRAGMA
    00038 #pragma interface
    00039 #endif
    00040
    00041 #include <opal/buildopts.h>
    00042
    00043 #include <opal/rtpep.h>
    00044 #include <opal/manager.h>
    00045 #include <opal/call.h>
    00046 #include <opal/transports.h>
    00047 #include <h323/h323con.h>
    00048 #include <h323/h323caps.h>
    00049 #include <h323/h235auth.h>
    00050
    00051 #if OPAL_H460
    00052 #include <h460/h4601.h>
    00053 #endif
    00054
    00055
    00056 class H225_EndpointType;
    00057 class H225_VendorIdentifier;
    00058 class H225_H221NonStandard;
    00059 class H225_ServiceControlDescriptor;
    00060 class H225_FeatureSet;
    00061
    00062 class H235SecurityInfo;
    00063
    00064 class H323Gatekeeper;
    00065 class H323SignalPDU;
    00066 class H323ServiceControlSession;
    00067
    00069
    00082 class H323EndPoint : public OpalRTPEndPoint
    00083 {
    00084   PCLASSINFO(H323EndPoint, OpalRTPEndPoint);
    00085
    00086   public:
    00087     enum {
    00088       DefaultTcpSignalPort = 1720
    00089     };
    00090
    00095     H323EndPoint(
    00096       OpalManager & manager
    00097     );
    00098
    00101     ~H323EndPoint();
    00103
    00110     virtual void ShutDown();
    00111
    00141     virtual PBoolean MakeConnection(
    00142       OpalCall & call,
    00143       const PString & party,
    00144       void * userData  = NULL,
    00145       unsigned int options = NULL,
    00146       OpalConnection::StringOptions * stringOptions = NULL
    00147     );
    00149
    00154     virtual void SetEndpointTypeInfo(
    00155       H225_EndpointType & info
    00156     ) const;
    00157
    00160     virtual void SetVendorIdentifierInfo(
    00161       H225_VendorIdentifier & info
    00162     ) const;
    00163
    00166     virtual void SetH221NonStandardInfo(
    00167       H225_H221NonStandard & info
    00168     ) const;
    00170
    00171
    00182     void AddCapability(
    00183       H323Capability * capability
    00184     );
    00185
    00206     PINDEX SetCapability(
    00207       PINDEX descriptorNum,
    00208       PINDEX simultaneous,
    00209       H323Capability * cap
    00210     );
    00211
    00216     PINDEX AddAllCapabilities(
    00217       PINDEX descriptorNum,
    00218       PINDEX simultaneous,
    00219       const PString & name
    00220     );
    00221
    00224     void AddAllUserInputCapabilities(
    00225       PINDEX descriptorNum,
    00226       PINDEX simultaneous
    00227     );
    00228
    00231     void RemoveCapabilities(
    00232       const PStringArray & codecNames
    00233     );
    00234
    00237     void ReorderCapabilities(
    00238       const PStringArray & preferenceOrder
    00239     );
    00240
    00243     H323Capability * FindCapability(
    00244       const H245_Capability & cap
    00245     ) const;
    00246
    00249     H323Capability * FindCapability(
    00250       const H245_DataType & dataType
    00251     ) const;
    00252
    00255     H323Capability * FindCapability(
    00256       H323Capability::MainTypes mainType,
    00257       unsigned subType
    00258     ) const;
    00260
    00280     PBoolean UseGatekeeper(
    00281       const PString & address = PString::Empty(),
    00282       const PString & identifier = PString::Empty(),
    00283       const PString & localAddress = PString::Empty()
    00284     );
    00285
    00296     PBoolean SetGatekeeper(
    00297       const PString & address,
    00298       H323Transport * transport = NULL
    00299     );
    00300
    00315     PBoolean SetGatekeeperZone(
    00316       const PString & address,
    00317       const PString & identifier,
    00318       H323Transport * transport = NULL
    00319     );
    00320
    00330     PBoolean LocateGatekeeper(
    00331       const PString & identifier,
    00332       H323Transport * transport = NULL
    00333     );
    00334
    00343     PBoolean DiscoverGatekeeper(
    00344       H323Transport * transport = NULL
    00345     );
    00346
    00354     virtual H323Gatekeeper * CreateGatekeeper(
    00355       H323Transport * transport
    00356     );
    00357
    00360     H323Gatekeeper * GetGatekeeper() const { return gatekeeper; }
    00361
    00364     PBoolean IsRegisteredWithGatekeeper() const;
    00365
    00371     PBoolean RemoveGatekeeper(
    00372       int reason = -1
    00373     );
    00374
    00377     virtual void SetGatekeeperPassword(
    00378       const PString & password,
    00379       const PString & username = PString::Empty()
    00380     );
    00381
    00384     virtual const PString & GetGatekeeperUsername() const { return gatekeeperUsername; }
    00385
    00388     virtual const PString & GetGatekeeperPassword() const { return gatekeeperPassword; }
    00389
    00392     virtual H235Authenticators CreateAuthenticators();
    00393
    00396     virtual void  OnGatekeeperConfirm();
    00397
    00400     virtual void  OnGatekeeperReject();
    00401
    00404     virtual void OnRegistrationConfirm();
    00405
    00408     virtual void  OnRegistrationReject();
    00410
    00415     virtual PBoolean NewIncomingConnection(
    00416       OpalTransport * transport
    00417     );
    00418
    00421     virtual H323Connection * CreateConnection(
    00422       OpalCall & call,
    00423       const PString & token,
    00424       void * userData,
    00425       OpalTransport & transport,
    00426       const PString & alias,
    00427       const H323TransportAddress & address,
    00428       H323SignalPDU * setupPDU,
    00429       unsigned options = 0,
    00430       OpalConnection::StringOptions * stringOptions = NULL
    00431     );
    00432
    00448     virtual PBoolean SetupTransfer(
    00449       const PString & token,
    00450       const PString & callIdentity,
    00451       const PString & remoteParty,
    00452       void * userData = NULL
    00453     );
    00454
    00460     void TransferCall(
    00461       const PString & token,
    00462       const PString & remoteParty,
    00463       const PString & callIdentity = PString::Empty()
    00465     );
    00466
    00473     void ConsultationTransfer(
    00474       const PString & primaryCallToken,
    00475       const PString & secondaryCallToken
    00476     );
    00477
    00481     void HoldCall(
    00482       const PString & token,
    00483       PBoolean localHold
    00484     );
    00485
    00489     PBoolean IntrudeCall(
    00490       const PString & remoteParty,
    00491       unsigned capabilityLevel,
    00492       void * userData = NULL
    00493     );
    00494
    00501     PBoolean ParsePartyName(
    00502       const PString & party,
    00503       PString & alias,
    00504       H323TransportAddress & address
    00505     );
    00506
    00517     PSafePtr<H323Connection> FindConnectionWithLock(
    00518       const PString & token,
    00519       PSafetyMode mode = PSafeReadWrite
    00520     );
    00521
    00529     virtual PBoolean OnSendSignalSetup(H323Connection & connection,
    00530                                    H323SignalPDU & setupPDU);
    00531
    00543     virtual PBoolean OnSendCallProceeding(H323Connection & connection,
    00544                                       H323SignalPDU & callProceedingPDU
    00545                                      );
    00546
    00558     virtual PBoolean OnSendConnect(H323Connection & connection,
    00559                                H323SignalPDU & connectPDU
    00560                               );
    00561
    00573     virtual PBoolean OnIncomingCall(
    00574       H323Connection & connection,
    00575       const H323SignalPDU & setupPDU,
    00576       H323SignalPDU & alertingPDU
    00577     );
    00578
    00585     virtual PBoolean OnOutgoingCall(
    00586         H323Connection & conn,
    00587         const H323SignalPDU & connectPDU
    00588     );
    00589
    00594     virtual PBoolean OnCallTransferInitiate(
    00595       H323Connection & connection,
    00596       const PString & remoteParty
    00597     );
    00598
    00603     virtual PBoolean OnCallTransferIdentify(
    00604       H323Connection & connection
    00605     );
    00606
    00611     virtual void OnSendARQ(
    00612       H323Connection & conn,
    00613       H225_AdmissionRequest & arq
    00614     );
    00615
    00622     virtual OpalConnection::AnswerCallResponse OnAnswerCall(
    00623       H323Connection & connection,
    00624       const PString & callerName,
    00625       const H323SignalPDU & setupPDU,
    00626       H323SignalPDU & connectPDU,
    00627       H323SignalPDU & progressPDU
    00628     );
    00629     virtual OpalConnection::AnswerCallResponse OnAnswerCall(
    00630        OpalConnection & connection,
    00631        const PString & caller
    00632     );
    00633
    00644     virtual PBoolean OnAlerting(
    00645       H323Connection & connection,
    00646       const H323SignalPDU & alertingPDU,
    00647       const PString & user
    00648     );
    00649
    00655     virtual PBoolean OnSendAlerting(H323Connection & connection,
    00656                                 H323SignalPDU & alerting,
    00657                                 const PString & calleeName,
    00658                                 PBoolean withMedia
    00659                                );
    00660
    00665     virtual PBoolean OnSentAlerting(H323Connection & connection);
    00666
    00675     virtual PBoolean OnConnectionForwarded(
    00676       H323Connection & connection,
    00677       const PString & forwardParty,
    00678       const H323SignalPDU & pdu
    00679     );
    00680
    00689     virtual PBoolean ForwardConnection(
    00690       H323Connection & connection,
    00691       const PString & forwardParty,
    00692       const H323SignalPDU & pdu
    00693     );
    00694
    00701     virtual void OnConnectionEstablished(
    00702       H323Connection & connection,
    00703       const PString & token
    00704     );
    00705
    00708     virtual PBoolean IsConnectionEstablished(
    00709       const PString & token
    00710     );
    00711
    00718     virtual void OnConnectionCleared(
    00719       H323Connection & connection,
    00720       const PString & token
    00721     );
    00723
    00724
    00731     virtual PBoolean OnStartLogicalChannel(
    00732       H323Connection & connection,
    00733       H323Channel & channel
    00734     );
    00735
    00740     virtual void OnClosedLogicalChannel(
    00741       H323Connection & connection,
    00742       const H323Channel & channel
    00743     );
    00744
    00752     virtual void OnRTPStatistics(
    00753       const H323Connection & connection,
    00754       const RTP_Session & session
    00755     ) const;
    00756
    00762     virtual void OnGatekeeperNATDetect(
    00763       PIPSocket::Address publicAddr,
    00764       PString & gkIdentifier,
    00765       H323TransportAddress & gkRouteAddress
    00766     );
    00768
    00778     virtual void OnHTTPServiceControl(
    00779       unsigned operation,
    00780       unsigned sessionId,
    00781       const PString & url
    00782     );
    00783
    00793     virtual void OnCallCreditServiceControl(
    00794       const PString & amount,
    00795       PBoolean mode
    00796     );
    00797
    00801     virtual void OnServiceControlSession(
    00802       unsigned type,
    00803       unsigned sessionid,
    00804       const H323ServiceControlSession & session,
    00805       H323Connection * connection
    00806     );
    00807
    00810     virtual H323ServiceControlSession * CreateServiceControlSession(
    00811       const H225_ServiceControlDescriptor & contents
    00812     );
    00814
    00822     virtual PBoolean OnConferenceInvite(
    00823       const H323SignalPDU & setupPDU
    00824     );
    00825
    00831     virtual PBoolean OnCallIndependentSupplementaryService(
    00832       const H323SignalPDU & setupPDU
    00833     );
    00834
    00840     virtual PBoolean OnNegotiateConferenceCapabilities(
    00841       const H323SignalPDU & setupPDU
    00842     );
    00844
    00855     virtual void SetLocalUserName(
    00856       const PString & name
    00857     );
    00858
    00863     virtual const PString & GetLocalUserName() const { return localAliasNames.front(); }
    00864
    00871     PBoolean AddAliasName(
    00872       const PString & name
    00873     );
    00874
    00878     PBoolean RemoveAliasName(
    00879       const PString & name
    00880     );
    00881
    00886     const PStringList & GetAliasNames() const { return localAliasNames; }
    00887
    00890     const PStringList & GetAliasNamePatterns() const { return localAliasPatterns; }
    00891
    00895     PBoolean AddAliasNamePattern(
    00896       const PString & pattern
    00897     );
    00898
    00901     const PString & GetDefaultILSServer() const { return manager.GetDefaultILSServer(); }
    00902
    00905     void SetDefaultILSServer(
    00906       const PString & server
    00907     ) { manager.SetDefaultILSServer(server); }
    00908
    00911     PBoolean IsFastStartDisabled() const
    00912       { return disableFastStart; }
    00913
    00916     void DisableFastStart(
    00917       PBoolean mode
    00918     ) { disableFastStart = mode; }
    00919
    00922     PBoolean IsH245TunnelingDisabled() const
    00923       { return disableH245Tunneling; }
    00924
    00927     void DisableH245Tunneling(
    00928       PBoolean mode
    00929     ) { disableH245Tunneling = mode; }
    00930
    00933     PBoolean IsH245inSetupDisabled() const
    00934       { return disableH245inSetup; }
    00935
    00938     void DisableH245inSetup(
    00939       PBoolean mode
    00940     ) { disableH245inSetup = mode; }
    00941
    00945     PBoolean IsH245Disabled() const
    00946     { return m_bH245Disabled; }
    00947
    00951     void DisableH245(PBoolean bH245Disabled) { m_bH245Disabled = bH245Disabled; }
    00952
    00955     PBoolean CanDisplayAmountString() const
    00956       { return canDisplayAmountString; }
    00957
    00960     void SetCanDisplayAmountString(
    00961       PBoolean mode
    00962     ) { canDisplayAmountString = mode; }
    00963
    00966     PBoolean CanEnforceDurationLimit() const
    00967       { return canEnforceDurationLimit; }
    00968
    00971     void SetCanEnforceDurationLimit(
    00972       PBoolean mode
    00973     ) { canEnforceDurationLimit = mode; }
    00974
    00975 #if OPAL_H450
    00976
    00978     unsigned GetCallIntrusionProtectionLevel() const { return callIntrusionProtectionLevel; }
    00979
    00982     void SetCallIntrusionProtectionLevel(
    00983       unsigned level
    00984     ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; }
    00985 #endif
    00986
    00989     virtual void OnReceivedInitiateReturnError();
    00990
    00991 #if OPAL_VIDEO
    00992
    00994     PBoolean CanAutoStartReceiveVideo() const { return manager.CanAutoStartReceiveVideo(); }
    00995
    00998     PBoolean CanAutoStartTransmitVideo() const { return manager.CanAutoStartTransmitVideo(); }
    00999 #endif
    01000
    01001 #if OPAL_T38_CAPABILITY
    01002
    01004     PBoolean CanAutoStartReceiveFax() const { return autoStartReceiveFax; }
    01005
    01008     PBoolean CanAutoStartTransmitFax() const { return autoStartTransmitFax; }
    01009 #endif
    01010
    01013     PBoolean CanAutoCallForward() const { return autoCallForward; }
    01014
    01017     const H323Capabilities & GetCapabilities() const;
    01018
    01021     enum TerminalTypes {
    01022       e_TerminalOnly = 50,
    01023       e_TerminalAndMC = 70,
    01024       e_GatewayOnly = 60,
    01025       e_GatewayAndMC = 80,
    01026       e_GatewayAndMCWithDataMP = 90,
    01027       e_GatewayAndMCWithAudioMP = 100,
    01028       e_GatewayAndMCWithAVMP = 110,
    01029       e_GatekeeperOnly = 120,
    01030       e_GatekeeperWithDataMP = 130,
    01031       e_GatekeeperWithAudioMP = 140,
    01032       e_GatekeeperWithAVMP = 150,
    01033       e_MCUOnly = 160,
    01034       e_MCUWithDataMP = 170,
    01035       e_MCUWithAudioMP = 180,
    01036       e_MCUWithAVMP = 190
    01037     };
    01038
    01041     TerminalTypes GetTerminalType() const { return terminalType; }
    01042
    01045     PBoolean IsTerminal() const;
    01046
    01049     PBoolean IsGateway() const;
    01050
    01053     PBoolean IsGatekeeper() const;
    01054
    01057     PBoolean IsMCU() const;
    01058
    01062     unsigned GetMinAudioJitterDelay() const { return manager.GetMinAudioJitterDelay(); }
    01063
    01067     unsigned GetMaxAudioJitterDelay() const { return manager.GetMaxAudioJitterDelay(); }
    01068
    01071     void SetAudioJitterDelay(
    01072       unsigned minDelay,
    01073       unsigned maxDelay
    01074     ) { manager.SetAudioJitterDelay(minDelay, maxDelay); }
    01075
    01078     unsigned GetInitialBandwidth() const { return initialBandwidth; }
    01079
    01082     void SetInitialBandwidth(unsigned bandwidth) { initialBandwidth = bandwidth; }
    01083
    01086     virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &);
    01087
    01090     virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &);
    01091
    01095     virtual void LoadBaseFeatureSet();
    01096
    01101     virtual bool OnFeatureInstance(
    01102       int instType,
    01103       const PString & identifer
    01104     );
    01105
    01106 #if OPAL_H460
    01107
    01109     bool FeatureSetDisabled() const { return disableH460; }
    01110
    01113     void FeatureSetDisable() { disableH460 = true; }
    01114
    01118     H460_FeatureSet * GetFeatureSet() { return features.DeriveNewFeatureSet(); };
    01119 #endif
    01120
    01123     virtual PBoolean IsLocalAddress(
    01124       const PIPSocket::Address & remoteAddress
    01125     ) const { return manager.IsLocalAddress(remoteAddress); }
    01126
    01129     virtual void TranslateTCPAddress(
    01130       PIPSocket::Address & localAddr,
    01131       const PIPSocket::Address & remoteAddr
    01132     );
    01133
    01136     WORD GetTCPPortBase() const { return manager.GetTCPPortBase(); }
    01137
    01140     WORD GetTCPPortMax() const { return manager.GetTCPPortMax(); }
    01141
    01144     void SetTCPPorts(unsigned tcpBase, unsigned tcpMax) { manager.SetTCPPorts(tcpBase, tcpMax); }
    01145
    01148     WORD GetNextTCPPort() { return manager.GetNextTCPPort(); }
    01149
    01152     WORD GetUDPPortBase() const { return manager.GetUDPPortBase(); }
    01153
    01156     WORD GetUDPPortMax() const { return manager.GetUDPPortMax(); }
    01157
    01160     void SetUDPPorts(unsigned udpBase, unsigned udpMax) { manager.SetUDPPorts(udpBase, udpMax); }
    01161
    01164     WORD GetNextUDPPort() { return manager.GetNextUDPPort(); }
    01165
    01168     WORD GetRtpIpPortBase() const { return manager.GetRtpIpPortBase(); }
    01169
    01172     WORD GetRtpIpPortMax() const { return manager.GetRtpIpPortMax(); }
    01173
    01176     void SetRtpIpPorts(unsigned udpBase, unsigned udpMax) { manager.SetRtpIpPorts(udpBase, udpMax); }
    01177
    01180     WORD GetRtpIpPortPair() { return manager.GetRtpIpPortPair(); }
    01181
    01184     BYTE GetRtpIpTypeofService() const { return manager.GetRtpIpTypeofService(); }
    01185
    01188     void SetRtpIpTypeofService(unsigned tos) { manager.SetRtpIpTypeofService(tos); }
    01189
    01192     const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; }
    01193
    01196     const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; }
    01197
    01200     const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; }
    01201
    01204     const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; }
    01205
    01208     unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; }
    01209
    01212     const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; }
    01213
    01216     const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; }
    01217
    01220     const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; }
    01221
    01224     const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; }
    01225
    01228     const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; }
    01229
    01232     PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; }
    01233
    01236     const PTimeInterval & GetNoMediaTimeout() const { return manager.GetNoMediaTimeout(); }
    01237
    01240     PBoolean SetNoMediaTimeout(
    01241       const PTimeInterval & newInterval
    01242     ) { return manager.SetNoMediaTimeout(newInterval); }
    01243
    01246     const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; }
    01247
    01250     unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; }
    01251
    01254     const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; }
    01255
    01258     unsigned GetRasRequestRetries() const { return rasRequestRetries; }
    01259
    01263     const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; }
    01264
    01268     void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; }
    01269
    01272     const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; }
    01273
    01276     void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; }
    01277
    01280     PBoolean GetSendGRQ() const
    01281     { return sendGRQ; }
    01282
    01285     void SetSendGRQ(PBoolean v)
    01286     { sendGRQ = v; }
    01287
    01290     const PTimeInterval & GetCallTransferT1() const { return callTransferT1; }
    01291
    01294     const PTimeInterval & GetCallTransferT2() const { return callTransferT2; }
    01295
    01298     const PTimeInterval & GetCallTransferT3() const { return callTransferT3; }
    01299
    01302     const PTimeInterval & GetCallTransferT4() const { return callTransferT4; }
    01303
    01305     const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; }
    01306     const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; }
    01307     const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; }
    01308     const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; }
    01309     const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; }
    01310     const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; }
    01311
    01314     H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; }
    01315
    01318 #if OPAL_H450
    01319     unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; }
    01320 #endif
    01321
    01322     PString GetDefaultTransport() const;
    01324
    01325   protected:
    01326     bool InternalCreateGatekeeper(H323Transport * transport);
    01327     PBoolean InternalMakeCall(
    01328       OpalCall & call,
    01329       const PString & existingToken,
    01330       const PString & callIdentity,
    01331       unsigned capabilityLevel,
    01332       const PString & remoteParty,
    01333       void * userData,
    01334       unsigned int options = 0,
    01335       OpalConnection::StringOptions * stringOptions = NULL
    01336     );
    01337
    01338     // Configuration variables, commonly changed
    01339     PStringList     localAliasNames;
    01340     PStringList     localAliasPatterns;
    01341     PBoolean        autoStartReceiveFax;
    01342     PBoolean        autoStartTransmitFax;
    01343     PBoolean        isH224Enabled;
    01344     PBoolean        autoCallForward;
    01345     PBoolean        disableFastStart;
    01346     PBoolean        disableH245Tunneling;
    01347     PBoolean        disableH245inSetup;
    01348     PBoolean        m_bH245Disabled; /* enabled or disabled h245 */
    01349     PBoolean        canDisplayAmountString;
    01350     PBoolean        canEnforceDurationLimit;
    01351 #if OPAL_H450
    01352     unsigned    callIntrusionProtectionLevel;
    01353 #endif
    01354
    01355     TerminalTypes terminalType;
    01356
    01357     PBoolean          clearCallOnRoundTripFail;
    01358
    01359     // Some more configuration variables, rarely changed.
    01360     PTimeInterval signallingChannelCallTimeout;
    01361     PTimeInterval controlChannelStartTimeout;
    01362     PTimeInterval endSessionTimeout;
    01363     PTimeInterval masterSlaveDeterminationTimeout;
    01364     unsigned      masterSlaveDeterminationRetries;
    01365     PTimeInterval capabilityExchangeTimeout;
    01366     PTimeInterval logicalChannelTimeout;
    01367     PTimeInterval requestModeTimeout;
    01368     PTimeInterval roundTripDelayTimeout;
    01369     PTimeInterval roundTripDelayRate;
    01370     PTimeInterval gatekeeperRequestTimeout;
    01371     unsigned      gatekeeperRequestRetries;
    01372     PTimeInterval rasRequestTimeout;
    01373     unsigned      rasRequestRetries;
    01374     PTimeInterval registrationTimeToLive;
    01375
    01376     PString       gkAccessTokenOID;
    01377     PBoolean          sendGRQ;
    01378
    01379     /* Protect against absence of a response to the ctIdentify reqest
    01380        (Transferring Endpoint - Call Transfer with a secondary Call) */
    01381     PTimeInterval callTransferT1;
    01382     /* Protect against failure of completion of the call transfer operation
    01383        involving a secondary Call (Transferred-to Endpoint) */
    01384     PTimeInterval callTransferT2;
    01385     /* Protect against failure of the Transferred Endpoint not responding
    01386        within sufficient time to the ctInitiate APDU (Transferring Endpoint) */
    01387     PTimeInterval callTransferT3;
    01388     /* May optionally operate - protects against absence of a response to the
    01389        ctSetup request (Transferred Endpoint) */
    01390     PTimeInterval callTransferT4;
    01391
    01393     PTimeInterval callIntrusionT1;
    01394     PTimeInterval callIntrusionT2;
    01395     PTimeInterval callIntrusionT3;
    01396     PTimeInterval callIntrusionT4;
    01397     PTimeInterval callIntrusionT5;
    01398     PTimeInterval callIntrusionT6;
    01399
    01400     // Dynamic variables
    01401     mutable H323Capabilities capabilities;
    01402     H323Gatekeeper *     gatekeeper;
    01403     PString              gatekeeperUsername;
    01404     PString              gatekeeperPassword;
    01405     H323CallIdentityDict secondaryConnectionsActive;
    01406
    01407 #if OPAL_H450
    01408     mutable PAtomicInteger nextH450CallIdentity;
    01410 #endif
    01411
    01412 #if OPAL_H460
    01413     bool            disableH460;
    01414     H460_FeatureSet features;
    01415 #endif
    01416
    01417 };
    01418
    01419 #endif // __OPAL_H323EP_H
    01420
    01421