# 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: 29144 $
    00030  * $Author: ededu $
    00031  * $Date: 2013-02-19 14:00:55 -0600 (Tue, 19 Feb 2013) $
    00032  */
    00033
    00034 #ifndef OPAL_H323_H323EP_H
    00035 #define OPAL_H323_H323EP_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/rtpep.h>
    00046 #include <opal/manager.h>
    00047 #include <opal/call.h>
    00048 #include <opal/transports.h>
    00049 #include <h323/h323con.h>
    00050 #include <h323/h323caps.h>
    00051 #include <h323/h235auth.h>
    00052 #include <asn/h225.h>
    00053
    00054 #if OPAL_H460
    00055 #include <h460/h4601.h>
    00056 #endif
    00057
    00058
    00059 class H225_EndpointType;
    00060 class H225_VendorIdentifier;
    00061 class H225_H221NonStandard;
    00062 class H225_ServiceControlDescriptor;
    00063 class H225_FeatureSet;
    00064
    00065 class H235SecurityInfo;
    00066
    00067 class H323Gatekeeper;
    00068 class H323SignalPDU;
    00069 class H323ServiceControlSession;
    00070
    00072
    00085 class H323EndPoint : public OpalRTPEndPoint
    00086 {
    00087   PCLASSINFO(H323EndPoint, OpalRTPEndPoint);
    00088
    00089   public:
    00090     enum {
    00091       DefaultTcpSignalPort = 1720
    00092     };
    00093
    00098     H323EndPoint(
    00099       OpalManager & manager
    00100     );
    00101
    00104     ~H323EndPoint();
    00106
    00113     virtual void ShutDown();
    00114
    00144     virtual PSafePtr<OpalConnection> MakeConnection(
    00145       OpalCall & call,
    00146       const PString & party,
    00147       void * userData  = NULL,
    00148       unsigned int options = 0,
    00149       OpalConnection::StringOptions * stringOptions = NULL
    00150     );
    00152
    00157     virtual void SetEndpointTypeInfo(
    00158       H225_EndpointType & info
    00159     ) const;
    00160
    00163     virtual void SetVendorIdentifierInfo(
    00164       H225_VendorIdentifier & info
    00165     ) const;
    00166
    00169     virtual void SetH221NonStandardInfo(
    00170       H225_H221NonStandard & info
    00171     ) const;
    00172
    00175     virtual bool SetGatewaySupportedProtocol(
    00176       H225_ArrayOf_SupportedProtocols & protocols
    00177     ) const;
    00178
    00182     virtual bool OnSetGatewayPrefixes(
    00183       PStringList & prefixes
    00184     ) const;
    00186
    00187
    00198     void AddCapability(
    00199       H323Capability * capability
    00200     );
    00201
    00222     PINDEX SetCapability(
    00223       PINDEX descriptorNum,
    00224       PINDEX simultaneous,
    00225       H323Capability * cap
    00226     );
    00227
    00232     PINDEX AddAllCapabilities(
    00233       PINDEX descriptorNum,
    00234       PINDEX simultaneous,
    00235       const PString & name
    00236     );
    00237
    00240     void AddAllUserInputCapabilities(
    00241       PINDEX descriptorNum,
    00242       PINDEX simultaneous
    00243     );
    00244
    00247     void RemoveCapabilities(
    00248       const PStringArray & codecNames
    00249     );
    00250
    00253     void ReorderCapabilities(
    00254       const PStringArray & preferenceOrder
    00255     );
    00256
    00259     H323Capability * FindCapability(
    00260       const H245_Capability & cap
    00261     ) const;
    00262
    00265     H323Capability * FindCapability(
    00266       const H245_DataType & dataType
    00267     ) const;
    00268
    00271     H323Capability * FindCapability(
    00272       H323Capability::MainTypes mainType,
    00273       unsigned subType
    00274     ) const;
    00276
    00299     PBoolean UseGatekeeper(
    00300       const PString & address = PString::Empty(),
    00301       const PString & identifier = PString::Empty(),
    00302       const PString & localAddress = PString::Empty()
    00303     );
    00304
    00315     PBoolean SetGatekeeper(
    00316       const PString & address,
    00317       H323Transport * transport = NULL
    00318     );
    00319
    00334     PBoolean SetGatekeeperZone(
    00335       const PString & address,
    00336       const PString & identifier,
    00337       H323Transport * transport = NULL
    00338     );
    00339
    00349     PBoolean LocateGatekeeper(
    00350       const PString & identifier,
    00351       H323Transport * transport = NULL
    00352     );
    00353
    00362     PBoolean DiscoverGatekeeper(
    00363       H323Transport * transport = NULL
    00364     );
    00365
    00373     virtual H323Gatekeeper * CreateGatekeeper(
    00374       H323Transport * transport
    00375     );
    00376
    00379     H323Gatekeeper * GetGatekeeper() const { return gatekeeper; }
    00380
    00383     PBoolean IsRegisteredWithGatekeeper() const;
    00384
    00390     PBoolean RemoveGatekeeper(
    00391       int reason = -1
    00392     );
    00393
    00396     virtual void SetGatekeeperPassword(
    00397       const PString & password,
    00398       const PString & username = PString::Empty()
    00399     );
    00400
    00403     virtual const PString & GetGatekeeperUsername() const { return gatekeeperUsername; }
    00404
    00407     virtual const PString & GetGatekeeperPassword() const { return gatekeeperPassword; }
    00408
    00411     virtual H235Authenticators CreateAuthenticators();
    00412
    00415     virtual void  OnGatekeeperConfirm();
    00416
    00419     virtual void  OnGatekeeperReject();
    00420
    00423     virtual void OnRegistrationConfirm();
    00424
    00427     virtual void  OnRegistrationReject();
    00429
    00434     virtual PBoolean NewIncomingConnection(
    00435       OpalTransport * transport
    00436     );
    00437
    00440     virtual H323Connection * CreateConnection(
    00441       OpalCall & call,
    00442       const PString & token,
    00443       void * userData,
    00444       OpalTransport & transport,
    00445       const PString & alias,
    00446       const H323TransportAddress & address,
    00447       H323SignalPDU * setupPDU,
    00448       unsigned options = 0,
    00449       OpalConnection::StringOptions * stringOptions = NULL
    00450     );
    00451
    00467     virtual PBoolean SetupTransfer(
    00468       const PString & token,
    00469       const PString & callIdentity,
    00470       const PString & remoteParty,
    00471       void * userData = NULL
    00472     );
    00473
    00479     void TransferCall(
    00480       const PString & token,
    00481       const PString & remoteParty,
    00482       const PString & callIdentity = PString::Empty()
    00484     );
    00485
    00492     void ConsultationTransfer(
    00493       const PString & primaryCallToken,
    00494       const PString & secondaryCallToken
    00495     );
    00496
    00500     PBoolean IntrudeCall(
    00501       const PString & remoteParty,
    00502       unsigned capabilityLevel,
    00503       void * userData = NULL
    00504     );
    00505
    00512     PBoolean ParsePartyName(
    00513       const PString & party,
    00514       PString & alias,
    00515       H323TransportAddress & address,
    00516       OpalConnection::StringOptions * stringOptions = NULL
    00517     );
    00518
    00529     PSafePtr<H323Connection> FindConnectionWithLock(
    00530       const PString & token,
    00531       PSafetyMode mode = PSafeReadWrite
    00532     );
    00533
    00541     virtual PBoolean OnSendSignalSetup(H323Connection & connection,
    00542                                    H323SignalPDU & setupPDU);
    00543
    00555     virtual PBoolean OnSendCallProceeding(
    00556       H323Connection & connection,
    00557       H323SignalPDU & callProceedingPDU
    00558     );
    00559
    00571     virtual PBoolean OnSendConnect(
    00572       H323Connection & connection,
    00573       H323SignalPDU & connectPDU
    00574     );
    00575
    00587     virtual PBoolean OnIncomingCall(
    00588       H323Connection & connection,
    00589       const H323SignalPDU & setupPDU,
    00590       H323SignalPDU & alertingPDU
    00591     );
    00592
    00599     virtual PBoolean OnOutgoingCall(
    00600       H323Connection & conn,
    00601       const H323SignalPDU & connectPDU
    00602     );
    00603
    00608     virtual PBoolean OnCallTransferInitiate(
    00609       H323Connection & connection,
    00610       const PString & remoteParty
    00611     );
    00612
    00617     virtual PBoolean OnCallTransferIdentify(
    00618       H323Connection & connection
    00619     );
    00620
    00625     virtual void OnSendARQ(
    00626       H323Connection & conn,
    00627       H225_AdmissionRequest & arq
    00628     );
    00629
    00636     virtual OpalConnection::AnswerCallResponse OnAnswerCall(
    00637       H323Connection & connection,
    00638       const PString & callerName,
    00639       const H323SignalPDU & setupPDU,
    00640       H323SignalPDU & connectPDU,
    00641       H323SignalPDU & progressPDU
    00642     );
    00643     virtual OpalConnection::AnswerCallResponse OnAnswerCall(
    00644        OpalConnection & connection,
    00645        const PString & caller
    00646     );
    00647
    00658     virtual PBoolean OnAlerting(
    00659       H323Connection & connection,
    00660       const H323SignalPDU & alertingPDU,
    00661       const PString & user
    00662     );
    00663
    00668     virtual PBoolean OnSendAlerting(
    00669       H323Connection & connection,
    00670       H323SignalPDU & alerting,
    00671       const PString & calleeName,
    00672       PBoolean withMedia
    00673     );
    00674
    00678     virtual PBoolean OnSentAlerting(
    00679       H323Connection & connection
    00680     );
    00681
    00690     virtual PBoolean OnConnectionForwarded(
    00691       H323Connection & connection,
    00692       const PString & forwardParty,
    00693       const H323SignalPDU & pdu
    00694     );
    00695
    00704     virtual PBoolean ForwardConnection(
    00705       H323Connection & connection,
    00706       const PString & forwardParty,
    00707       const H323SignalPDU & pdu
    00708     );
    00709
    00716     virtual void OnConnectionEstablished(
    00717       H323Connection & connection,
    00718       const PString & token
    00719     );
    00720
    00723     virtual PBoolean IsConnectionEstablished(
    00724       const PString & token
    00725     );
    00727
    00728
    00735     virtual PBoolean OnStartLogicalChannel(
    00736       H323Connection & connection,
    00737       H323Channel & channel
    00738     );
    00739
    00744     virtual void OnClosedLogicalChannel(
    00745       H323Connection & connection,
    00746       const H323Channel & channel
    00747     );
    00748
    00756     virtual void OnRTPStatistics(
    00757       const H323Connection & connection,
    00758       const RTP_Session & session
    00759     ) const;
    00760
    00766     virtual void OnGatekeeperNATDetect(
    00767       PIPSocket::Address publicAddr,
    00768       PString & gkIdentifier,
    00769       H323TransportAddress & gkRouteAddress
    00770     );
    00772
    00782     virtual void OnHTTPServiceControl(
    00783       unsigned operation,
    00784       unsigned sessionId,
    00785       const PString & url
    00786     );
    00787
    00797     virtual void OnCallCreditServiceControl(
    00798       const PString & amount,
    00799       PBoolean mode
    00800     );
    00801
    00805     virtual void OnServiceControlSession(
    00806       unsigned type,
    00807       unsigned sessionid,
    00808       const H323ServiceControlSession & session,
    00809       H323Connection * connection
    00810     );
    00811
    00814     virtual H323ServiceControlSession * CreateServiceControlSession(
    00815       const H225_ServiceControlDescriptor & contents
    00816     );
    00818
    00826     virtual PBoolean OnConferenceInvite(
    00827       const H323SignalPDU & setupPDU
    00828     );
    00829
    00835     virtual PBoolean OnCallIndependentSupplementaryService(
    00836       const H323SignalPDU & setupPDU
    00837     );
    00838
    00844     virtual PBoolean OnNegotiateConferenceCapabilities(
    00845       const H323SignalPDU & setupPDU
    00846     );
    00848
    00853     virtual void SetDefaultLocalPartyName(
    00854       const PString & name
    00855     );
    00856
    00865     virtual void SetLocalUserName(
    00866       const PString & name
    00867     );
    00868
    00873     virtual const PString & GetLocalUserName() const { return localAliasNames.front(); }
    00874
    00881     PBoolean AddAliasName(
    00882       const PString & name
    00883     );
    00884
    00888     PBoolean RemoveAliasName(
    00889       const PString & name
    00890     );
    00891
    00896     const PStringList & GetAliasNames() const { return localAliasNames; }
    00897
    00900     const PStringList & GetAliasNamePatterns() const { return localAliasPatterns; }
    00901
    00905     PBoolean AddAliasNamePattern(
    00906       const PString & pattern
    00907     );
    00908
    00911     const PString & GetDefaultILSServer() const { return manager.GetDefaultILSServer(); }
    00912
    00915     void SetDefaultILSServer(
    00916       const PString & server
    00917     ) { manager.SetDefaultILSServer(server); }
    00918
    00921     PBoolean IsFastStartDisabled() const
    00922       { return disableFastStart; }
    00923
    00926     void DisableFastStart(
    00927       PBoolean mode
    00928     ) { disableFastStart = mode; }
    00929
    00932     PBoolean IsH245TunnelingDisabled() const
    00933       { return disableH245Tunneling; }
    00934
    00937     void DisableH245Tunneling(
    00938       PBoolean mode
    00939     ) { disableH245Tunneling = mode; }
    00940
    00943     PBoolean IsH245inSetupDisabled() const
    00944       { return disableH245inSetup; }
    00945
    00948     void DisableH245inSetup(
    00949       PBoolean mode
    00950     ) { disableH245inSetup = mode; }
    00951
    00955     PBoolean IsH245Disabled() const
    00956     { return m_bH245Disabled; }
    00957
    00961     void DisableH245(PBoolean bH245Disabled) { m_bH245Disabled = bH245Disabled; }
    00962
    00965     PBoolean CanDisplayAmountString() const
    00966       { return canDisplayAmountString; }
    00967
    00970     void SetCanDisplayAmountString(
    00971       PBoolean mode
    00972     ) { canDisplayAmountString = mode; }
    00973
    00976     PBoolean CanEnforceDurationLimit() const
    00977       { return canEnforceDurationLimit; }
    00978
    00981     void SetCanEnforceDurationLimit(
    00982       PBoolean mode
    00983     ) { canEnforceDurationLimit = mode; }
    00984
    00985 #if OPAL_H450
    00986
    00988     unsigned GetCallIntrusionProtectionLevel() const { return callIntrusionProtectionLevel; }
    00989
    00992     void SetCallIntrusionProtectionLevel(
    00993       unsigned level
    00994     ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; }
    00995 #endif
    00996
    00999     virtual void OnReceivedInitiateReturnError();
    01000
    01003     PBoolean CanAutoCallForward() const { return autoCallForward; }
    01004
    01007     const H323Capabilities & GetCapabilities() const;
    01008
    01011     enum TerminalTypes {
    01012       e_TerminalOnly = 50,
    01013       e_TerminalAndMC = 70,
    01014       e_GatewayOnly = 60,
    01015       e_GatewayAndMC = 80,
    01016       e_GatewayAndMCWithDataMP = 90,
    01017       e_GatewayAndMCWithAudioMP = 100,
    01018       e_GatewayAndMCWithAVMP = 110,
    01019       e_GatekeeperOnly = 120,
    01020       e_GatekeeperWithDataMP = 130,
    01021       e_GatekeeperWithAudioMP = 140,
    01022       e_GatekeeperWithAVMP = 150,
    01023       e_MCUOnly = 160,
    01024       e_MCUWithDataMP = 170,
    01025       e_MCUWithAudioMP = 180,
    01026       e_MCUWithAVMP = 190
    01027     };
    01028
    01031     void SetTerminalType(TerminalTypes type) { terminalType = type; }
    01032
    01035     TerminalTypes GetTerminalType() const { return terminalType; }
    01036
    01039     PBoolean IsTerminal() const;
    01040
    01043     PBoolean IsGateway() const;
    01044
    01047     PBoolean IsGatekeeper() const;
    01048
    01051     PBoolean IsMCU() const;
    01052
    01056     unsigned GetMinAudioJitterDelay() const { return manager.GetMinAudioJitterDelay(); }
    01057
    01061     unsigned GetMaxAudioJitterDelay() const { return manager.GetMaxAudioJitterDelay(); }
    01062
    01065     void SetAudioJitterDelay(
    01066       unsigned minDelay,
    01067       unsigned maxDelay
    01068     ) { manager.SetAudioJitterDelay(minDelay, maxDelay); }
    01069
    01072     unsigned GetInitialBandwidth() const { return initialBandwidth; }
    01073
    01076     void SetInitialBandwidth(unsigned bandwidth) { initialBandwidth = bandwidth; }
    01077
    01078 #if OPAL_H239
    01079
    01081     bool GetDefaultH239Control() const { return m_defaultH239Control; }
    01082
    01085     void SetDefaultH239Control(
    01086       bool on
    01087     ) { m_defaultH239Control = on; }
    01088 #endif
    01089
    01092     virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &);
    01093
    01096     virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &);
    01097
    01101     virtual void LoadBaseFeatureSet();
    01102
    01107     virtual bool OnFeatureInstance(
    01108       int instType,
    01109       const PString & identifer
    01110     );
    01111
    01112 #if OPAL_H460
    01113
    01115     bool FeatureSetDisabled() const { return disableH460; }
    01116
    01119     void FeatureSetDisable() { disableH460 = true; }
    01120
    01124     H460_FeatureSet * GetFeatureSet() { return features.DeriveNewFeatureSet(); };
    01125 #endif
    01126
    01129     virtual PBoolean IsLocalAddress(
    01130       const PIPSocket::Address & remoteAddress
    01131     ) const { return manager.IsLocalAddress(remoteAddress); }
    01132
    01135     virtual void TranslateTCPAddress(
    01136       PIPSocket::Address & localAddr,
    01137       const PIPSocket::Address & remoteAddr
    01138     );
    01139
    01142     WORD GetTCPPortBase() const { return manager.GetTCPPortBase(); }
    01143
    01146     WORD GetTCPPortMax() const { return manager.GetTCPPortMax(); }
    01147
    01150     void SetTCPPorts(unsigned tcpBase, unsigned tcpMax) { manager.SetTCPPorts(tcpBase, tcpMax); }
    01151
    01154     WORD GetNextTCPPort() { return manager.GetNextTCPPort(); }
    01155
    01158     WORD GetUDPPortBase() const { return manager.GetUDPPortBase(); }
    01159
    01162     WORD GetUDPPortMax() const { return manager.GetUDPPortMax(); }
    01163
    01166     void SetUDPPorts(unsigned udpBase, unsigned udpMax) { manager.SetUDPPorts(udpBase, udpMax); }
    01167
    01170     WORD GetNextUDPPort() { return manager.GetNextUDPPort(); }
    01171
    01174     WORD GetRtpIpPortBase() const { return manager.GetRtpIpPortBase(); }
    01175
    01178     WORD GetRtpIpPortMax() const { return manager.GetRtpIpPortMax(); }
    01179
    01182     void SetRtpIpPorts(unsigned udpBase, unsigned udpMax) { manager.SetRtpIpPorts(udpBase, udpMax); }
    01183
    01186     WORD GetRtpIpPortPair() { return manager.GetRtpIpPortPair(); }
    01187
    01190     BYTE P_DEPRECATED GetRtpIpTypeofService() const { return manager.GetMediaTypeOfService(); }
    01191
    01194     void P_DEPRECATED SetRtpIpTypeofService(unsigned tos) { manager.SetMediaTypeOfService(tos); }
    01195
    01198     const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; }
    01199
    01202     const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; }
    01203
    01206     const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; }
    01207
    01210     const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; }
    01211
    01214     unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; }
    01215
    01218     const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; }
    01219
    01222     const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; }
    01223
    01226     const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; }
    01227
    01230     const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; }
    01231
    01234     const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; }
    01235
    01238     PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; }
    01239
    01242     const PTimeInterval & GetNoMediaTimeout() const { return manager.GetNoMediaTimeout(); }
    01243
    01246     PBoolean SetNoMediaTimeout(
    01247       const PTimeInterval & newInterval
    01248     ) { return manager.SetNoMediaTimeout(newInterval); }
    01249
    01252     const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; }
    01253
    01256     unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; }
    01257
    01260     const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; }
    01261
    01264     unsigned GetRasRequestRetries() const { return rasRequestRetries; }
    01265
    01269     const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; }
    01270
    01274     void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; }
    01275
    01278     const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; }
    01279
    01282     void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; }
    01283
    01286     PBoolean GetSendGRQ() const
    01287     { return sendGRQ; }
    01288
    01291     void SetSendGRQ(PBoolean v)
    01292     { sendGRQ = v; }
    01293
    01296     const PTimeInterval & GetCallTransferT1() const { return callTransferT1; }
    01297
    01300     const PTimeInterval & GetCallTransferT2() const { return callTransferT2; }
    01301
    01304     const PTimeInterval & GetCallTransferT3() const { return callTransferT3; }
    01305
    01308     const PTimeInterval & GetCallTransferT4() const { return callTransferT4; }
    01309
    01311     const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; }
    01312     const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; }
    01313     const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; }
    01314     const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; }
    01315     const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; }
    01316     const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; }
    01317
    01320     H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; }
    01321
    01324 #if OPAL_H450
    01325     unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; }
    01326 #endif
    01327
    01328     PString GetDefaultTransport() const;
    01330
    01331   protected:
    01332     bool InternalCreateGatekeeper(H323Transport * transport);
    01333     H323Connection * InternalMakeCall(
    01334       OpalCall & call,
    01335       const PString & existingToken,
    01336       const PString & callIdentity,
    01337       unsigned capabilityLevel,
    01338       const PString & remoteParty,
    01339       void * userData,
    01340       unsigned int options = 0,
    01341       OpalConnection::StringOptions * stringOptions = NULL
    01342     );
    01343
    01344     // Configuration variables, commonly changed
    01345     PStringList     localAliasNames;
    01346     PStringList     localAliasPatterns;
    01347     PBoolean        autoCallForward;
    01348     PBoolean        disableFastStart;
    01349     PBoolean        disableH245Tunneling;
    01350     PBoolean        disableH245inSetup;
    01351     PBoolean        m_bH245Disabled; /* enabled or disabled h245 */
    01352     PBoolean        canDisplayAmountString;
    01353     PBoolean        canEnforceDurationLimit;
    01354 #if OPAL_H450
    01355     unsigned        callIntrusionProtectionLevel;
    01356 #endif
    01357
    01358     TerminalTypes   terminalType;
    01359
    01360 #if OPAL_H239
    01361     bool            m_defaultH239Control;
    01362 #endif
    01363
    01364     PBoolean        clearCallOnRoundTripFail;
    01365
    01366     // Some more configuration variables, rarely changed.
    01367     PTimeInterval signallingChannelCallTimeout;
    01368     PTimeInterval controlChannelStartTimeout;
    01369     PTimeInterval endSessionTimeout;
    01370     PTimeInterval masterSlaveDeterminationTimeout;
    01371     unsigned      masterSlaveDeterminationRetries;
    01372     PTimeInterval capabilityExchangeTimeout;
    01373     PTimeInterval logicalChannelTimeout;
    01374     PTimeInterval requestModeTimeout;
    01375     PTimeInterval roundTripDelayTimeout;
    01376     PTimeInterval roundTripDelayRate;
    01377     PTimeInterval gatekeeperRequestTimeout;
    01378     unsigned      gatekeeperRequestRetries;
    01379     PTimeInterval rasRequestTimeout;
    01380     unsigned      rasRequestRetries;
    01381     PTimeInterval registrationTimeToLive;
    01382
    01383     PString       gkAccessTokenOID;
    01384     PBoolean          sendGRQ;
    01385
    01386     /* Protect against absence of a response to the ctIdentify reqest
    01387        (Transferring Endpoint - Call Transfer with a secondary Call) */
    01388     PTimeInterval callTransferT1;
    01389     /* Protect against failure of completion of the call transfer operation
    01390        involving a secondary Call (Transferred-to Endpoint) */
    01391     PTimeInterval callTransferT2;
    01392     /* Protect against failure of the Transferred Endpoint not responding
    01393        within sufficient time to the ctInitiate APDU (Transferring Endpoint) */
    01394     PTimeInterval callTransferT3;
    01395     /* May optionally operate - protects against absence of a response to the
    01396        ctSetup request (Transferred Endpoint) */
    01397     PTimeInterval callTransferT4;
    01398
    01400     PTimeInterval callIntrusionT1;
    01401     PTimeInterval callIntrusionT2;
    01402     PTimeInterval callIntrusionT3;
    01403     PTimeInterval callIntrusionT4;
    01404     PTimeInterval callIntrusionT5;
    01405     PTimeInterval callIntrusionT6;
    01406
    01407     // Dynamic variables
    01408     mutable H323Capabilities capabilities;
    01409     H323Gatekeeper *     gatekeeper;
    01410     PString              gatekeeperUsername;
    01411     PString              gatekeeperPassword;
    01412     H323CallIdentityDict secondaryConnectionsActive;
    01413
    01414 #if OPAL_H450
    01415     mutable PAtomicInteger nextH450CallIdentity;
    01417 #endif
    01418
    01419 #if OPAL_H460
    01420     bool            disableH460;
    01421     H460_FeatureSet features;
    01422 #endif
    01423
    01424   private:
    01425     P_REMOVE_VIRTUAL_VOID(OnConnectionCleared(H323Connection &, const PString &));
    01426 };
    01427
    01428 #endif // OPAL_H323
    01429
    01430 #endif // OPAL_H323_H323EP_H
    01431
    01432