00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
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 & ,
01102 PINDEX ,
01103 const PString &
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
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;
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
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
01423
01424 PTimeInterval callTransferT1;
01425
01426
01427 PTimeInterval callTransferT2;
01428
01429
01430 PTimeInterval callTransferT3;
01431
01432
01433 PTimeInterval callTransferT4;
01434
01436 PTimeInterval callIntrusionT1;
01437 PTimeInterval callIntrusionT2;
01438 PTimeInterval callIntrusionT3;
01439 PTimeInterval callIntrusionT4;
01440 PTimeInterval callIntrusionT5;
01441 PTimeInterval callIntrusionT6;
01442
01443
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
01475
01476 friend class H46018Transport;
01477 #endif
01478 };
01479
01480 #endif // OPAL_H323
01481
01482 #endif // OPAL_H323_H323EP_H
01483
01484