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 <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
01345 PStringList localAliasNames;
01346 PStringList localAliasPatterns;
01347 PBoolean autoCallForward;
01348 PBoolean disableFastStart;
01349 PBoolean disableH245Tunneling;
01350 PBoolean disableH245inSetup;
01351 PBoolean m_bH245Disabled;
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
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
01387
01388 PTimeInterval callTransferT1;
01389
01390
01391 PTimeInterval callTransferT2;
01392
01393
01394 PTimeInterval callTransferT3;
01395
01396
01397 PTimeInterval callTransferT4;
01398
01400 PTimeInterval callIntrusionT1;
01401 PTimeInterval callIntrusionT2;
01402 PTimeInterval callIntrusionT3;
01403 PTimeInterval callIntrusionT4;
01404 PTimeInterval callIntrusionT5;
01405 PTimeInterval callIntrusionT6;
01406
01407
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