# 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: 29731 $
    00030  * $Author: rjongbloed $
    00031  * $Date: 2013-05-16 22:48:59 -0500 (Thu, 16 May 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 <rtp/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 <h323/gkclient.h>
    00053 #include <asn/h225.h>
    00054
    00055 #if OPAL_H460
    00056 #include <h460/h4601.h>
    00057 #endif
    00058
    00059
    00060 class H225_EndpointType;
    00061 class H225_VendorIdentifier;
    00062 class H225_H221NonStandard;
    00063 class H225_ServiceControlDescriptor;
    00064 class H225_FeatureSet;
    00065
    00066 class H235SecurityInfo;
    00067
    00068 class H323Gatekeeper;
    00069 class H323SignalPDU;
    00070 class H323ServiceControlSession;
    00071
    00073
    00086 class H323EndPoint : public OpalRTPEndPoint
    00087 {
    00088   PCLASSINFO(H323EndPoint, OpalRTPEndPoint);
    00089
    00090   public:
    00091     enum {
    00092       DefaultTcpSignalPort = 1720
    00093     };
    00094
    00099     H323EndPoint(
    00100       OpalManager & manager
    00101     );
    00102
    00105     ~H323EndPoint();
    00107
    00114     virtual void ShutDown();
    00115
    00145     virtual PSafePtr<OpalConnection> MakeConnection(
    00146       OpalCall & call,
    00147       const PString & party,
    00148       void * userData  = NULL,
    00149       unsigned int options = 0,
    00150       OpalConnection::StringOptions * stringOptions = NULL
    00151     );
    00153
    00158     virtual void SetEndpointTypeInfo(
    00159       H225_EndpointType & info
    00160     ) const;
    00161
    00164     virtual void SetVendorIdentifierInfo(
    00165       H225_VendorIdentifier & info
    00166     ) const;
    00167
    00170     virtual void SetH221NonStandardInfo(
    00171       H225_H221NonStandard & info
    00172     ) const;
    00173
    00176     virtual bool SetGatewaySupportedProtocol(
    00177       H225_ArrayOf_SupportedProtocols & protocols
    00178     ) const;
    00179
    00183     virtual bool OnSetGatewayPrefixes(
    00184       PStringList & prefixes
    00185     ) const;
    00187
    00188
    00199     void AddCapability(
    00200       H323Capability * capability
    00201     );
    00202
    00223     PINDEX SetCapability(
    00224       PINDEX descriptorNum,
    00225       PINDEX simultaneous,
    00226       H323Capability * cap
    00227     );
    00228
    00233     PINDEX AddAllCapabilities(
    00234       PINDEX descriptorNum,
    00235       PINDEX simultaneous,
    00236       const PString & name
    00237     );
    00238
    00241     void AddAllUserInputCapabilities(
    00242       PINDEX descriptorNum,
    00243       PINDEX simultaneous
    00244     );
    00245
    00248     void RemoveCapabilities(
    00249       const PStringArray & codecNames
    00250     );
    00251
    00254     void ReorderCapabilities(
    00255       const PStringArray & preferenceOrder
    00256     );
    00257
    00260     H323Capability * FindCapability(
    00261       const H245_Capability & cap
    00262     ) const;
    00263
    00266     H323Capability * FindCapability(
    00267       const H245_DataType & dataType
    00268     ) const;
    00269
    00272     H323Capability * FindCapability(
    00273       H323Capability::MainTypes mainType,
    00274       unsigned subType
    00275     ) const;
    00277
    00300     PBoolean UseGatekeeper(
    00301       const PString & address = PString::Empty(),
    00302       const PString & identifier = PString::Empty(),
    00303       const PString & localAddress = PString::Empty()
    00304     );
    00305
    00316     PBoolean SetGatekeeper(
    00317       const PString & address,
    00318       H323Transport * transport = NULL
    00319     );
    00320
    00335     PBoolean SetGatekeeperZone(
    00336       const PString & address,
    00337       const PString & identifier,
    00338       H323Transport * transport = NULL
    00339     );
    00340
    00350     PBoolean LocateGatekeeper(
    00351       const PString & identifier,
    00352       H323Transport * transport = NULL
    00353     );
    00354
    00363     PBoolean DiscoverGatekeeper(
    00364       H323Transport * transport = NULL
    00365     );
    00366
    00374     virtual H323Gatekeeper * CreateGatekeeper(
    00375       H323Transport * transport
    00376     );
    00377
    00380     H323Gatekeeper * GetGatekeeper() const { return gatekeeper; }
    00381
    00384     PBoolean IsRegisteredWithGatekeeper() const;
    00385
    00391     PBoolean RemoveGatekeeper(
    00392       int reason = -1
    00393     );
    00394
    00397     virtual void SetGatekeeperPassword(
    00398       const PString & password,
    00399       const PString & username = PString::Empty()
    00400     );
    00401
    00404     virtual const PString & GetGatekeeperUsername() const { return gatekeeperUsername; }
    00405
    00408     virtual const PString & GetGatekeeperPassword() const { return gatekeeperPassword; }
    00409
    00412     virtual H235Authenticators CreateAuthenticators();
    00413
    00416     virtual void OnGatekeeperStatus(
    00417       H323Gatekeeper::RegistrationFailReasons status
    00418     );
    00420
    00425     virtual void NewIncomingConnection(
    00426       OpalListener & listener,
    00427       const OpalTransportPtr & transport
    00428     );
    00429
    00432     virtual H323Connection * CreateConnection(
    00433       OpalCall & call,
    00434       const PString & token,
    00435       void * userData,
    00436       OpalTransport & transport,
    00437       const PString & alias,
    00438       const H323TransportAddress & address,
    00439       H323SignalPDU * setupPDU,
    00440       unsigned options = 0,
    00441       OpalConnection::StringOptions * stringOptions = NULL
    00442     );
    00443
    00459     virtual PBoolean SetupTransfer(
    00460       const PString & token,
    00461       const PString & callIdentity,
    00462       const PString & remoteParty,
    00463       void * userData = NULL
    00464     );
    00465
    00471     void TransferCall(
    00472       const PString & token,
    00473       const PString & remoteParty,
    00474       const PString & callIdentity = PString::Empty()
    00476     );
    00477
    00484     void ConsultationTransfer(
    00485       const PString & primaryCallToken,
    00486       const PString & secondaryCallToken
    00487     );
    00488
    00492     PBoolean IntrudeCall(
    00493       const PString & remoteParty,
    00494       unsigned capabilityLevel,
    00495       void * userData = NULL
    00496     );
    00497
    00504     PBoolean ParsePartyName(
    00505       const PString & party,
    00506       PString & alias,
    00507       H323TransportAddress & address,
    00508       OpalConnection::StringOptions * stringOptions = NULL
    00509     );
    00510
    00521     PSafePtr<H323Connection> FindConnectionWithLock(
    00522       const PString & token,
    00523       PSafetyMode mode = PSafeReadWrite
    00524     );
    00525
    00533     virtual PBoolean OnSendSignalSetup(H323Connection & connection,
    00534                                    H323SignalPDU & setupPDU);
    00535
    00547     virtual PBoolean OnSendCallProceeding(
    00548       H323Connection & connection,
    00549       H323SignalPDU & callProceedingPDU
    00550     );
    00551
    00563     virtual PBoolean OnSendConnect(
    00564       H323Connection & connection,
    00565       H323SignalPDU & connectPDU
    00566     );
    00567
    00579     virtual PBoolean OnIncomingCall(
    00580       H323Connection & connection,
    00581       const H323SignalPDU & setupPDU,
    00582       H323SignalPDU & alertingPDU
    00583     );
    00584
    00591     virtual PBoolean OnOutgoingCall(
    00592       H323Connection & conn,
    00593       const H323SignalPDU & connectPDU
    00594     );
    00595
    00600     virtual PBoolean OnCallTransferInitiate(
    00601       H323Connection & connection,
    00602       const PString & remoteParty
    00603     );
    00604
    00609     virtual PBoolean OnCallTransferIdentify(
    00610       H323Connection & connection
    00611     );
    00612
    00617     virtual void OnSendARQ(
    00618       H323Connection & conn,
    00619       H225_AdmissionRequest & arq
    00620     );
    00621
    00628     virtual OpalConnection::AnswerCallResponse OnAnswerCall(
    00629       H323Connection & connection,
    00630       const PString & callerName,
    00631       const H323SignalPDU & setupPDU,
    00632       H323SignalPDU & connectPDU,
    00633       H323SignalPDU & progressPDU
    00634     );
    00635     virtual OpalConnection::AnswerCallResponse OnAnswerCall(
    00636        OpalConnection & connection,
    00637        const PString & caller
    00638     );
    00639
    00650     virtual PBoolean OnAlerting(
    00651       H323Connection & connection,
    00652       const H323SignalPDU & alertingPDU,
    00653       const PString & user
    00654     );
    00655
    00660     virtual PBoolean OnSendAlerting(
    00661       H323Connection & connection,
    00662       H323SignalPDU & alerting,
    00663       const PString & calleeName,
    00664       PBoolean withMedia
    00665     );
    00666
    00670     virtual PBoolean OnSentAlerting(
    00671       H323Connection & connection
    00672     );
    00673
    00682     virtual PBoolean OnConnectionForwarded(
    00683       H323Connection & connection,
    00684       const PString & forwardParty,
    00685       const H323SignalPDU & pdu
    00686     );
    00687
    00696     virtual PBoolean ForwardConnection(
    00697       H323Connection & connection,
    00698       const PString & forwardParty,
    00699       const H323SignalPDU & pdu
    00700     );
    00701
    00708     virtual void OnConnectionEstablished(
    00709       H323Connection & connection,
    00710       const PString & token
    00711     );
    00712
    00715     virtual PBoolean IsConnectionEstablished(
    00716       const PString & token
    00717     );
    00719
    00720
    00727     virtual PBoolean OnStartLogicalChannel(
    00728       H323Connection & connection,
    00729       H323Channel & channel
    00730     );
    00731
    00736     virtual void OnClosedLogicalChannel(
    00737       H323Connection & connection,
    00738       const H323Channel & channel
    00739     );
    00740
    00746     virtual void OnGatekeeperNATDetect(
    00747       PIPSocket::Address publicAddr,
    00748       PString & gkIdentifier,
    00749       H323TransportAddress & gkRouteAddress
    00750     );
    00752
    00762     virtual void OnHTTPServiceControl(
    00763       unsigned operation,
    00764       unsigned sessionId,
    00765       const PString & url
    00766     );
    00767
    00777     virtual void OnCallCreditServiceControl(
    00778       const PString & amount,
    00779       PBoolean mode
    00780     );
    00781
    00785     virtual void OnServiceControlSession(
    00786       unsigned type,
    00787       unsigned sessionid,
    00788       const H323ServiceControlSession & session,
    00789       H323Connection * connection
    00790     );
    00791
    00794     virtual H323ServiceControlSession * CreateServiceControlSession(
    00795       const H225_ServiceControlDescriptor & contents
    00796     );
    00798
    00806     virtual PBoolean OnCallIndependentSupplementaryService(
    00807       const H323SignalPDU & setupPDU
    00808     );
    00809
    00815     virtual PBoolean OnNegotiateConferenceCapabilities(
    00816       const H323SignalPDU & setupPDU
    00817     );
    00819
    00824     virtual void SetDefaultLocalPartyName(
    00825       const PString & name
    00826     );
    00827
    00836     virtual void SetLocalUserName(
    00837       const PString & name
    00838     );
    00839
    00844     virtual const PString & GetLocalUserName() const { return localAliasNames.front(); }
    00845
    00852     PBoolean AddAliasName(
    00853       const PString & name
    00854     );
    00855
    00859     PBoolean RemoveAliasName(
    00860       const PString & name
    00861     );
    00862
    00867     const PStringList & GetAliasNames() const { return localAliasNames; }
    00868
    00871     const PStringList & GetAliasNamePatterns() const { return localAliasPatterns; }
    00872
    00876     PBoolean AddAliasNamePattern(
    00877       const PString & pattern
    00878     );
    00879
    00882     const PString & GetDefaultILSServer() const { return manager.GetDefaultILSServer(); }
    00883
    00886     void SetDefaultILSServer(
    00887       const PString & server
    00888     ) { manager.SetDefaultILSServer(server); }
    00889
    00892     PBoolean IsFastStartDisabled() const
    00893       { return disableFastStart; }
    00894
    00897     void DisableFastStart(
    00898       PBoolean mode
    00899     ) { disableFastStart = mode; }
    00900
    00903     PBoolean IsH245TunnelingDisabled() const
    00904       { return disableH245Tunneling; }
    00905
    00908     void DisableH245Tunneling(
    00909       PBoolean mode
    00910     ) { disableH245Tunneling = mode; }
    00911
    00914     PBoolean IsH245inSetupDisabled() const
    00915       { return disableH245inSetup; }
    00916
    00919     void DisableH245inSetup(
    00920       PBoolean mode
    00921     ) { disableH245inSetup = mode; }
    00922
    00925     bool IsForcedSymmetricTCS() const
    00926       { return m_forceSymmetricTCS; }
    00927
    00930     void ForceSymmetricTCS(
    00931       bool mode
    00932     ) { m_forceSymmetricTCS = mode; }
    00933
    00937     PBoolean IsH245Disabled() const
    00938     { return m_bH245Disabled; }
    00939
    00943     void DisableH245(PBoolean bH245Disabled) { m_bH245Disabled = bH245Disabled; }
    00944
    00947     PBoolean CanDisplayAmountString() const
    00948       { return canDisplayAmountString; }
    00949
    00952     void SetCanDisplayAmountString(
    00953       PBoolean mode
    00954     ) { canDisplayAmountString = mode; }
    00955
    00958     PBoolean CanEnforceDurationLimit() const
    00959       { return canEnforceDurationLimit; }
    00960
    00963     void SetCanEnforceDurationLimit(
    00964       PBoolean mode
    00965     ) { canEnforceDurationLimit = mode; }
    00966
    00967 #if OPAL_H450
    00968
    00970     unsigned GetCallIntrusionProtectionLevel() const { return callIntrusionProtectionLevel; }
    00971
    00974     void SetCallIntrusionProtectionLevel(
    00975       unsigned level
    00976     ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; }
    00977 #endif
    00978
    00981     virtual void OnReceivedInitiateReturnError();
    00982
    00985     PBoolean CanAutoCallForward() const { return autoCallForward; }
    00986
    00989     const H323Capabilities & GetCapabilities() const;
    00990
    00993     enum TerminalTypes {
    00994       e_TerminalOnly = 50,
    00995       e_TerminalAndMC = 70,
    00996       e_GatewayOnly = 60,
    00997       e_GatewayAndMC = 80,
    00998       e_GatewayAndMCWithDataMP = 90,
    00999       e_GatewayAndMCWithAudioMP = 100,
    01000       e_GatewayAndMCWithAVMP = 110,
    01001       e_GatekeeperOnly = 120,
    01002       e_GatekeeperWithDataMP = 130,
    01003       e_GatekeeperWithAudioMP = 140,
    01004       e_GatekeeperWithAVMP = 150,
    01005       e_MCUOnly = 160,
    01006       e_MCUWithDataMP = 170,
    01007       e_MCUWithAudioMP = 180,
    01008       e_MCUWithAVMP = 190
    01009     };
    01010
    01013     void SetTerminalType(TerminalTypes type) { terminalType = type; }
    01014
    01017     TerminalTypes GetTerminalType() const { return terminalType; }
    01018
    01021     PBoolean IsTerminal() const;
    01022
    01025     PBoolean IsGateway() const;
    01026
    01029     PBoolean IsGatekeeper() const;
    01030
    01033     PBoolean IsMCU() const;
    01034
    01038     unsigned GetMinAudioJitterDelay() const { return manager.GetMinAudioJitterDelay(); }
    01039
    01043     unsigned GetMaxAudioJitterDelay() const { return manager.GetMaxAudioJitterDelay(); }
    01044
    01047     void SetAudioJitterDelay(
    01048       unsigned minDelay,
    01049       unsigned maxDelay
    01050     ) { manager.SetAudioJitterDelay(minDelay, maxDelay); }
    01051
    01052 #if OPAL_H239
    01053
    01055     bool GetDefaultH239Control() const { return m_defaultH239Control; }
    01056
    01059     void SetDefaultH239Control(
    01060       bool on
    01061     ) { m_defaultH239Control = on; }
    01062 #endif
    01063
    01066     virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &);
    01067
    01070     virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &);
    01071
    01075     virtual void LoadBaseFeatureSet();
    01076
    01081     virtual bool OnFeatureInstance(
    01082       int instType,
    01083       const PString & identifer
    01084     );
    01085
    01086 #if OPAL_H460
    01087
    01089     bool FeatureSetDisabled() const { return disableH460; }
    01090
    01093     void FeatureSetDisable() { disableH460 = true; }
    01094
    01098     H460_FeatureSet * GetFeatureSet() { return features.DeriveNewFeatureSet(); };
    01099
    01100     virtual void NATMethodCallBack(
    01101       const PString & /*NatID*/,
    01102       PINDEX /*msgID*/,
    01103       const PString & /*message*/
    01104     ) { }
    01105
    01108     void H46018Enable(PBoolean enable);
    01109
    01112     PBoolean H46018IsEnabled();
    01113
    01116     void H46018Received() {};
    01117
    01120     PBoolean H46018InOperation();
    01121
    01124     H460_FeatureSet *GetGatekeeperFeatures();
    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     const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; }
    01191
    01194     const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; }
    01195
    01198     const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; }
    01199
    01202     const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; }
    01203
    01206     unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; }
    01207
    01210     const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; }
    01211
    01214     const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; }
    01215
    01218     const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; }
    01219
    01222     const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; }
    01223
    01226     const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; }
    01227
    01230     PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; }
    01231
    01234     const PTimeInterval & GetNoMediaTimeout() const { return manager.GetNoMediaTimeout(); }
    01235
    01238     void SetNoMediaTimeout(
    01239       const PTimeInterval & newInterval
    01240     ) { manager.SetNoMediaTimeout(newInterval); }
    01241
    01244     const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; }
    01245
    01248     unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; }
    01249
    01252     const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; }
    01253
    01256     unsigned GetRasRequestRetries() const { return rasRequestRetries; }
    01257
    01261     const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; }
    01262
    01266     void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; }
    01267
    01270     const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; }
    01271
    01274     void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; }
    01275
    01278     PBoolean GetSendGRQ() const
    01279     { return sendGRQ; }
    01280
    01283     void SetSendGRQ(PBoolean v)
    01284     { sendGRQ = v; }
    01285
    01288     const PTimeInterval & GetCallTransferT1() const { return callTransferT1; }
    01289
    01292     const PTimeInterval & GetCallTransferT2() const { return callTransferT2; }
    01293
    01296     const PTimeInterval & GetCallTransferT3() const { return callTransferT3; }
    01297
    01300     const PTimeInterval & GetCallTransferT4() const { return callTransferT4; }
    01301
    01303     const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; }
    01304     const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; }
    01305     const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; }
    01306     const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; }
    01307     const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; }
    01308     const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; }
    01309
    01312     H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; }
    01313
    01316 #if OPAL_H450
    01317     unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; }
    01318 #endif
    01319
    01323     virtual PString GetDefaultTransport() const;
    01324
    01327     virtual WORD GetDefaultSignalPort() const;
    01328
    01330     PString GetCompatibility(
    01331       H323Connection::CompatibilityIssues issue
    01332     ) const;
    01333
    01339     bool SetCompatibility(
    01340       H323Connection::CompatibilityIssues issue,
    01341       const PString & regex
    01342     );
    01343
    01351     bool AddCompatibility(
    01352       H323Connection::CompatibilityIssues issue,
    01353       const PString & regex
    01354     );
    01355
    01357     bool HasCompatibilityIssue(
    01358       H323Connection::CompatibilityIssues issue,
    01359       const OpalProductInfo & productInfo
    01360     ) const;
    01362
    01363   protected:
    01364     bool InternalCreateGatekeeper(
    01365       H323Transport * transport,
    01366       const H323TransportAddress & gkAddress
    01367     );
    01368     H323Connection * InternalMakeCall(
    01369       OpalCall & call,
    01370       const PString & existingToken,
    01371       const PString & callIdentity,
    01372       unsigned capabilityLevel,
    01373       const PString & remoteParty,
    01374       void * userData,
    01375       unsigned int options = 0,
    01376       OpalConnection::StringOptions * stringOptions = NULL
    01377     );
    01378
    01379     // Configuration variables, commonly changed
    01380     PStringList     localAliasNames;
    01381     PStringList     localAliasPatterns;
    01382     PBoolean        autoCallForward;
    01383     PBoolean        disableFastStart;
    01384     PBoolean        disableH245Tunneling;
    01385     PBoolean        disableH245inSetup;
    01386     bool            m_forceSymmetricTCS;
    01387     PBoolean        m_bH245Disabled; /* enabled or disabled h245 */
    01388     PBoolean        canDisplayAmountString;
    01389     PBoolean        canEnforceDurationLimit;
    01390 #if OPAL_H450
    01391     unsigned        callIntrusionProtectionLevel;
    01392 #endif
    01393
    01394     TerminalTypes   terminalType;
    01395
    01396 #if OPAL_H239
    01397     bool            m_defaultH239Control;
    01398 #endif
    01399
    01400     PBoolean        clearCallOnRoundTripFail;
    01401
    01402     // Some more configuration variables, rarely changed.
    01403     PTimeInterval signallingChannelCallTimeout;
    01404     PTimeInterval controlChannelStartTimeout;
    01405     PTimeInterval endSessionTimeout;
    01406     PTimeInterval masterSlaveDeterminationTimeout;
    01407     unsigned      masterSlaveDeterminationRetries;
    01408     PTimeInterval capabilityExchangeTimeout;
    01409     PTimeInterval logicalChannelTimeout;
    01410     PTimeInterval requestModeTimeout;
    01411     PTimeInterval roundTripDelayTimeout;
    01412     PTimeInterval roundTripDelayRate;
    01413     PTimeInterval gatekeeperRequestTimeout;
    01414     unsigned      gatekeeperRequestRetries;
    01415     PTimeInterval rasRequestTimeout;
    01416     unsigned      rasRequestRetries;
    01417     PTimeInterval registrationTimeToLive;
    01418
    01419     PString       gkAccessTokenOID;
    01420     PBoolean          sendGRQ;
    01421
    01422     /* Protect against absence of a response to the ctIdentify reqest
    01423        (Transferring Endpoint - Call Transfer with a secondary Call) */
    01424     PTimeInterval callTransferT1;
    01425     /* Protect against failure of completion of the call transfer operation
    01426        involving a secondary Call (Transferred-to Endpoint) */
    01427     PTimeInterval callTransferT2;
    01428     /* Protect against failure of the Transferred Endpoint not responding
    01429        within sufficient time to the ctInitiate APDU (Transferring Endpoint) */
    01430     PTimeInterval callTransferT3;
    01431     /* May optionally operate - protects against absence of a response to the
    01432        ctSetup request (Transferred Endpoint) */
    01433     PTimeInterval callTransferT4;
    01434
    01436     PTimeInterval callIntrusionT1;
    01437     PTimeInterval callIntrusionT2;
    01438     PTimeInterval callIntrusionT3;
    01439     PTimeInterval callIntrusionT4;
    01440     PTimeInterval callIntrusionT5;
    01441     PTimeInterval callIntrusionT6;
    01442
    01443     // Dynamic variables
    01444     mutable H323Capabilities capabilities;
    01445     H323Gatekeeper *     gatekeeper;
    01446     PString              gatekeeperUsername;
    01447     PString              gatekeeperPassword;
    01448     H323CallIdentityDict secondaryConnectionsActive;
    01449
    01450 #if OPAL_H450
    01451     mutable PAtomicInteger nextH450CallIdentity;
    01453 #endif
    01454
    01455 #if OPAL_H460
    01456     bool            disableH460;
    01457     H460_FeatureSet features;
    01458     bool m_h46018enabled;
    01459 #endif
    01460
    01461     typedef map<H323Connection::CompatibilityIssues, PRegularExpression> CompatibilityEndpoints;
    01462     CompatibilityEndpoints m_compatibility;
    01463
    01464   private:
    01465     P_REMOVE_VIRTUAL_VOID(OnConnectionCleared(H323Connection &, const PString &));
    01466     P_REMOVE_VIRTUAL_VOID(OnRTPStatistics(const H323Connection &, const OpalRTPSession &) const);
    01467     P_REMOVE_VIRTUAL(PBoolean, OnConferenceInvite(const H323SignalPDU &), false);
    01468     P_REMOVE_VIRTUAL_VOID(OnGatekeeperConfirm());
    01469     P_REMOVE_VIRTUAL_VOID(OnGatekeeperReject());
    01470     P_REMOVE_VIRTUAL_VOID(OnRegistrationConfirm());
    01471     P_REMOVE_VIRTUAL_VOID(OnRegistrationReject());
    01472
    01473 #if OPAL_H460
    01474   // This is because there h323plus had
    01475   // a public way of adding a connection
    01476   friend class H46018Transport;
    01477 #endif
    01478 };
    01479
    01480 #endif // OPAL_H323
    01481
    01482 #endif // OPAL_H323_H323EP_H
    01483
    01484