OPAL Version 3.10.2
|
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: 25678 $ 00030 * $Author: rjongbloed $ 00031 * $Date: 2011-05-05 17:46:37 -0500 (Thu, 05 May 2011) $ 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 = NULL, 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 void HoldCall( 00501 const PString & token, 00502 PBoolean localHold 00503 ); 00504 00508 PBoolean IntrudeCall( 00509 const PString & remoteParty, 00510 unsigned capabilityLevel, 00511 void * userData = NULL 00512 ); 00513 00520 PBoolean ParsePartyName( 00521 const PString & party, 00522 PString & alias, 00523 H323TransportAddress & address, 00524 OpalConnection::StringOptions * stringOptions = NULL 00525 ); 00526 00537 PSafePtr<H323Connection> FindConnectionWithLock( 00538 const PString & token, 00539 PSafetyMode mode = PSafeReadWrite 00540 ); 00541 00549 virtual PBoolean OnSendSignalSetup(H323Connection & connection, 00550 H323SignalPDU & setupPDU); 00551 00563 virtual PBoolean OnSendCallProceeding( 00564 H323Connection & connection, 00565 H323SignalPDU & callProceedingPDU 00566 ); 00567 00579 virtual PBoolean OnSendConnect( 00580 H323Connection & connection, 00581 H323SignalPDU & connectPDU 00582 ); 00583 00595 virtual PBoolean OnIncomingCall( 00596 H323Connection & connection, 00597 const H323SignalPDU & setupPDU, 00598 H323SignalPDU & alertingPDU 00599 ); 00600 00607 virtual PBoolean OnOutgoingCall( 00608 H323Connection & conn, 00609 const H323SignalPDU & connectPDU 00610 ); 00611 00616 virtual PBoolean OnCallTransferInitiate( 00617 H323Connection & connection, 00618 const PString & remoteParty 00619 ); 00620 00625 virtual PBoolean OnCallTransferIdentify( 00626 H323Connection & connection 00627 ); 00628 00633 virtual void OnSendARQ( 00634 H323Connection & conn, 00635 H225_AdmissionRequest & arq 00636 ); 00637 00644 virtual OpalConnection::AnswerCallResponse OnAnswerCall( 00645 H323Connection & connection, 00646 const PString & callerName, 00647 const H323SignalPDU & setupPDU, 00648 H323SignalPDU & connectPDU, 00649 H323SignalPDU & progressPDU 00650 ); 00651 virtual OpalConnection::AnswerCallResponse OnAnswerCall( 00652 OpalConnection & connection, 00653 const PString & caller 00654 ); 00655 00666 virtual PBoolean OnAlerting( 00667 H323Connection & connection, 00668 const H323SignalPDU & alertingPDU, 00669 const PString & user 00670 ); 00671 00676 virtual PBoolean OnSendAlerting( 00677 H323Connection & connection, 00678 H323SignalPDU & alerting, 00679 const PString & calleeName, 00680 PBoolean withMedia 00681 ); 00682 00686 virtual PBoolean OnSentAlerting( 00687 H323Connection & connection 00688 ); 00689 00698 virtual PBoolean OnConnectionForwarded( 00699 H323Connection & connection, 00700 const PString & forwardParty, 00701 const H323SignalPDU & pdu 00702 ); 00703 00712 virtual PBoolean ForwardConnection( 00713 H323Connection & connection, 00714 const PString & forwardParty, 00715 const H323SignalPDU & pdu 00716 ); 00717 00724 virtual void OnConnectionEstablished( 00725 H323Connection & connection, 00726 const PString & token 00727 ); 00728 00731 virtual PBoolean IsConnectionEstablished( 00732 const PString & token 00733 ); 00735 00736 00743 virtual PBoolean OnStartLogicalChannel( 00744 H323Connection & connection, 00745 H323Channel & channel 00746 ); 00747 00752 virtual void OnClosedLogicalChannel( 00753 H323Connection & connection, 00754 const H323Channel & channel 00755 ); 00756 00764 virtual void OnRTPStatistics( 00765 const H323Connection & connection, 00766 const RTP_Session & session 00767 ) const; 00768 00774 virtual void OnGatekeeperNATDetect( 00775 PIPSocket::Address publicAddr, 00776 PString & gkIdentifier, 00777 H323TransportAddress & gkRouteAddress 00778 ); 00780 00790 virtual void OnHTTPServiceControl( 00791 unsigned operation, 00792 unsigned sessionId, 00793 const PString & url 00794 ); 00795 00805 virtual void OnCallCreditServiceControl( 00806 const PString & amount, 00807 PBoolean mode 00808 ); 00809 00813 virtual void OnServiceControlSession( 00814 unsigned type, 00815 unsigned sessionid, 00816 const H323ServiceControlSession & session, 00817 H323Connection * connection 00818 ); 00819 00822 virtual H323ServiceControlSession * CreateServiceControlSession( 00823 const H225_ServiceControlDescriptor & contents 00824 ); 00826 00834 virtual PBoolean OnConferenceInvite( 00835 const H323SignalPDU & setupPDU 00836 ); 00837 00843 virtual PBoolean OnCallIndependentSupplementaryService( 00844 const H323SignalPDU & setupPDU 00845 ); 00846 00852 virtual PBoolean OnNegotiateConferenceCapabilities( 00853 const H323SignalPDU & setupPDU 00854 ); 00856 00861 virtual void SetDefaultLocalPartyName( 00862 const PString & name 00863 ); 00864 00873 virtual void SetLocalUserName( 00874 const PString & name 00875 ); 00876 00881 virtual const PString & GetLocalUserName() const { return localAliasNames.front(); } 00882 00889 PBoolean AddAliasName( 00890 const PString & name 00891 ); 00892 00896 PBoolean RemoveAliasName( 00897 const PString & name 00898 ); 00899 00904 const PStringList & GetAliasNames() const { return localAliasNames; } 00905 00908 const PStringList & GetAliasNamePatterns() const { return localAliasPatterns; } 00909 00913 PBoolean AddAliasNamePattern( 00914 const PString & pattern 00915 ); 00916 00919 const PString & GetDefaultILSServer() const { return manager.GetDefaultILSServer(); } 00920 00923 void SetDefaultILSServer( 00924 const PString & server 00925 ) { manager.SetDefaultILSServer(server); } 00926 00929 PBoolean IsFastStartDisabled() const 00930 { return disableFastStart; } 00931 00934 void DisableFastStart( 00935 PBoolean mode 00936 ) { disableFastStart = mode; } 00937 00940 PBoolean IsH245TunnelingDisabled() const 00941 { return disableH245Tunneling; } 00942 00945 void DisableH245Tunneling( 00946 PBoolean mode 00947 ) { disableH245Tunneling = mode; } 00948 00951 PBoolean IsH245inSetupDisabled() const 00952 { return disableH245inSetup; } 00953 00956 void DisableH245inSetup( 00957 PBoolean mode 00958 ) { disableH245inSetup = mode; } 00959 00963 PBoolean IsH245Disabled() const 00964 { return m_bH245Disabled; } 00965 00969 void DisableH245(PBoolean bH245Disabled) { m_bH245Disabled = bH245Disabled; } 00970 00973 PBoolean CanDisplayAmountString() const 00974 { return canDisplayAmountString; } 00975 00978 void SetCanDisplayAmountString( 00979 PBoolean mode 00980 ) { canDisplayAmountString = mode; } 00981 00984 PBoolean CanEnforceDurationLimit() const 00985 { return canEnforceDurationLimit; } 00986 00989 void SetCanEnforceDurationLimit( 00990 PBoolean mode 00991 ) { canEnforceDurationLimit = mode; } 00992 00993 #if OPAL_H450 00994 00996 unsigned GetCallIntrusionProtectionLevel() const { return callIntrusionProtectionLevel; } 00997 01000 void SetCallIntrusionProtectionLevel( 01001 unsigned level 01002 ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; } 01003 #endif 01004 01007 virtual void OnReceivedInitiateReturnError(); 01008 01011 PBoolean CanAutoCallForward() const { return autoCallForward; } 01012 01015 const H323Capabilities & GetCapabilities() const; 01016 01019 enum TerminalTypes { 01020 e_TerminalOnly = 50, 01021 e_TerminalAndMC = 70, 01022 e_GatewayOnly = 60, 01023 e_GatewayAndMC = 80, 01024 e_GatewayAndMCWithDataMP = 90, 01025 e_GatewayAndMCWithAudioMP = 100, 01026 e_GatewayAndMCWithAVMP = 110, 01027 e_GatekeeperOnly = 120, 01028 e_GatekeeperWithDataMP = 130, 01029 e_GatekeeperWithAudioMP = 140, 01030 e_GatekeeperWithAVMP = 150, 01031 e_MCUOnly = 160, 01032 e_MCUWithDataMP = 170, 01033 e_MCUWithAudioMP = 180, 01034 e_MCUWithAVMP = 190 01035 }; 01036 01039 void SetTerminalType(TerminalTypes type) { terminalType = type; } 01040 01043 TerminalTypes GetTerminalType() const { return terminalType; } 01044 01047 PBoolean IsTerminal() const; 01048 01051 PBoolean IsGateway() const; 01052 01055 PBoolean IsGatekeeper() const; 01056 01059 PBoolean IsMCU() const; 01060 01064 unsigned GetMinAudioJitterDelay() const { return manager.GetMinAudioJitterDelay(); } 01065 01069 unsigned GetMaxAudioJitterDelay() const { return manager.GetMaxAudioJitterDelay(); } 01070 01073 void SetAudioJitterDelay( 01074 unsigned minDelay, 01075 unsigned maxDelay 01076 ) { manager.SetAudioJitterDelay(minDelay, maxDelay); } 01077 01080 unsigned GetInitialBandwidth() const { return initialBandwidth; } 01081 01084 void SetInitialBandwidth(unsigned bandwidth) { initialBandwidth = bandwidth; } 01085 01086 #if OPAL_H239 01087 01089 bool GetDefaultH239Control() const { return m_defaultH239Control; } 01090 01093 void SetDefaultH239Control( 01094 bool on 01095 ) { m_defaultH239Control = on; } 01096 #endif 01097 01100 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &); 01101 01104 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &); 01105 01109 virtual void LoadBaseFeatureSet(); 01110 01115 virtual bool OnFeatureInstance( 01116 int instType, 01117 const PString & identifer 01118 ); 01119 01120 #if OPAL_H460 01121 01123 bool FeatureSetDisabled() const { return disableH460; } 01124 01127 void FeatureSetDisable() { disableH460 = true; } 01128 01132 H460_FeatureSet * GetFeatureSet() { return features.DeriveNewFeatureSet(); }; 01133 #endif 01134 01137 virtual PBoolean IsLocalAddress( 01138 const PIPSocket::Address & remoteAddress 01139 ) const { return manager.IsLocalAddress(remoteAddress); } 01140 01143 virtual void TranslateTCPAddress( 01144 PIPSocket::Address & localAddr, 01145 const PIPSocket::Address & remoteAddr 01146 ); 01147 01150 WORD GetTCPPortBase() const { return manager.GetTCPPortBase(); } 01151 01154 WORD GetTCPPortMax() const { return manager.GetTCPPortMax(); } 01155 01158 void SetTCPPorts(unsigned tcpBase, unsigned tcpMax) { manager.SetTCPPorts(tcpBase, tcpMax); } 01159 01162 WORD GetNextTCPPort() { return manager.GetNextTCPPort(); } 01163 01166 WORD GetUDPPortBase() const { return manager.GetUDPPortBase(); } 01167 01170 WORD GetUDPPortMax() const { return manager.GetUDPPortMax(); } 01171 01174 void SetUDPPorts(unsigned udpBase, unsigned udpMax) { manager.SetUDPPorts(udpBase, udpMax); } 01175 01178 WORD GetNextUDPPort() { return manager.GetNextUDPPort(); } 01179 01182 WORD GetRtpIpPortBase() const { return manager.GetRtpIpPortBase(); } 01183 01186 WORD GetRtpIpPortMax() const { return manager.GetRtpIpPortMax(); } 01187 01190 void SetRtpIpPorts(unsigned udpBase, unsigned udpMax) { manager.SetRtpIpPorts(udpBase, udpMax); } 01191 01194 WORD GetRtpIpPortPair() { return manager.GetRtpIpPortPair(); } 01195 01198 BYTE P_DEPRECATED GetRtpIpTypeofService() const { return manager.GetMediaTypeOfService(); } 01199 01202 void P_DEPRECATED SetRtpIpTypeofService(unsigned tos) { manager.SetMediaTypeOfService(tos); } 01203 01206 const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; } 01207 01210 const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; } 01211 01214 const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; } 01215 01218 const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; } 01219 01222 unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; } 01223 01226 const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; } 01227 01230 const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; } 01231 01234 const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; } 01235 01238 const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; } 01239 01242 const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; } 01243 01246 PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; } 01247 01250 const PTimeInterval & GetNoMediaTimeout() const { return manager.GetNoMediaTimeout(); } 01251 01254 PBoolean SetNoMediaTimeout( 01255 const PTimeInterval & newInterval 01256 ) { return manager.SetNoMediaTimeout(newInterval); } 01257 01260 const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; } 01261 01264 unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; } 01265 01268 const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; } 01269 01272 unsigned GetRasRequestRetries() const { return rasRequestRetries; } 01273 01277 const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; } 01278 01282 void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; } 01283 01286 const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; } 01287 01290 void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; } 01291 01294 PBoolean GetSendGRQ() const 01295 { return sendGRQ; } 01296 01299 void SetSendGRQ(PBoolean v) 01300 { sendGRQ = v; } 01301 01304 const PTimeInterval & GetCallTransferT1() const { return callTransferT1; } 01305 01308 const PTimeInterval & GetCallTransferT2() const { return callTransferT2; } 01309 01312 const PTimeInterval & GetCallTransferT3() const { return callTransferT3; } 01313 01316 const PTimeInterval & GetCallTransferT4() const { return callTransferT4; } 01317 01319 const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; } 01320 const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; } 01321 const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; } 01322 const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; } 01323 const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; } 01324 const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; } 01325 01328 H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; } 01329 01332 #if OPAL_H450 01333 unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; } 01334 #endif 01335 01336 PString GetDefaultTransport() const; 01338 01339 protected: 01340 bool InternalCreateGatekeeper(H323Transport * transport); 01341 H323Connection * InternalMakeCall( 01342 OpalCall & call, 01343 const PString & existingToken, 01344 const PString & callIdentity, 01345 unsigned capabilityLevel, 01346 const PString & remoteParty, 01347 void * userData, 01348 unsigned int options = 0, 01349 OpalConnection::StringOptions * stringOptions = NULL 01350 ); 01351 01352 // Configuration variables, commonly changed 01353 PStringList localAliasNames; 01354 PStringList localAliasPatterns; 01355 PBoolean autoCallForward; 01356 PBoolean disableFastStart; 01357 PBoolean disableH245Tunneling; 01358 PBoolean disableH245inSetup; 01359 PBoolean m_bH245Disabled; /* enabled or disabled h245 */ 01360 PBoolean canDisplayAmountString; 01361 PBoolean canEnforceDurationLimit; 01362 #if OPAL_H450 01363 unsigned callIntrusionProtectionLevel; 01364 #endif 01365 01366 TerminalTypes terminalType; 01367 01368 #if OPAL_H239 01369 bool m_defaultH239Control; 01370 #endif 01371 01372 PBoolean clearCallOnRoundTripFail; 01373 01374 // Some more configuration variables, rarely changed. 01375 PTimeInterval signallingChannelCallTimeout; 01376 PTimeInterval controlChannelStartTimeout; 01377 PTimeInterval endSessionTimeout; 01378 PTimeInterval masterSlaveDeterminationTimeout; 01379 unsigned masterSlaveDeterminationRetries; 01380 PTimeInterval capabilityExchangeTimeout; 01381 PTimeInterval logicalChannelTimeout; 01382 PTimeInterval requestModeTimeout; 01383 PTimeInterval roundTripDelayTimeout; 01384 PTimeInterval roundTripDelayRate; 01385 PTimeInterval gatekeeperRequestTimeout; 01386 unsigned gatekeeperRequestRetries; 01387 PTimeInterval rasRequestTimeout; 01388 unsigned rasRequestRetries; 01389 PTimeInterval registrationTimeToLive; 01390 01391 PString gkAccessTokenOID; 01392 PBoolean sendGRQ; 01393 01394 /* Protect against absence of a response to the ctIdentify reqest 01395 (Transferring Endpoint - Call Transfer with a secondary Call) */ 01396 PTimeInterval callTransferT1; 01397 /* Protect against failure of completion of the call transfer operation 01398 involving a secondary Call (Transferred-to Endpoint) */ 01399 PTimeInterval callTransferT2; 01400 /* Protect against failure of the Transferred Endpoint not responding 01401 within sufficient time to the ctInitiate APDU (Transferring Endpoint) */ 01402 PTimeInterval callTransferT3; 01403 /* May optionally operate - protects against absence of a response to the 01404 ctSetup request (Transferred Endpoint) */ 01405 PTimeInterval callTransferT4; 01406 01408 PTimeInterval callIntrusionT1; 01409 PTimeInterval callIntrusionT2; 01410 PTimeInterval callIntrusionT3; 01411 PTimeInterval callIntrusionT4; 01412 PTimeInterval callIntrusionT5; 01413 PTimeInterval callIntrusionT6; 01414 01415 // Dynamic variables 01416 mutable H323Capabilities capabilities; 01417 H323Gatekeeper * gatekeeper; 01418 PString gatekeeperUsername; 01419 PString gatekeeperPassword; 01420 H323CallIdentityDict secondaryConnectionsActive; 01421 01422 #if OPAL_H450 01423 mutable PAtomicInteger nextH450CallIdentity; 01425 #endif 01426 01427 #if OPAL_H460 01428 bool disableH460; 01429 H460_FeatureSet features; 01430 #endif 01431 01432 private: 01433 P_REMOVE_VIRTUAL_VOID(OnConnectionCleared(H323Connection &, const PString &)); 01434 }; 01435 01436 #endif // OPAL_H323 01437 01438 #endif // OPAL_H323_H323EP_H 01439 01440