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 = 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 TerminalTypes GetTerminalType() const { return terminalType; }
01040
01043 PBoolean IsTerminal() const;
01044
01047 PBoolean IsGateway() const;
01048
01051 PBoolean IsGatekeeper() const;
01052
01055 PBoolean IsMCU() const;
01056
01060 unsigned GetMinAudioJitterDelay() const { return manager.GetMinAudioJitterDelay(); }
01061
01065 unsigned GetMaxAudioJitterDelay() const { return manager.GetMaxAudioJitterDelay(); }
01066
01069 void SetAudioJitterDelay(
01070 unsigned minDelay,
01071 unsigned maxDelay
01072 ) { manager.SetAudioJitterDelay(minDelay, maxDelay); }
01073
01076 unsigned GetInitialBandwidth() const { return initialBandwidth; }
01077
01080 void SetInitialBandwidth(unsigned bandwidth) { initialBandwidth = bandwidth; }
01081
01082 #if OPAL_H239
01083
01085 bool GetDefaultH239Control() const { return m_defaultH239Control; }
01086
01089 void SetDefaultH239Control(
01090 bool on
01091 ) { m_defaultH239Control = on; }
01092 #endif
01093
01096 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &);
01097
01100 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &);
01101
01105 virtual void LoadBaseFeatureSet();
01106
01111 virtual bool OnFeatureInstance(
01112 int instType,
01113 const PString & identifer
01114 );
01115
01116 #if OPAL_H460
01117
01119 bool FeatureSetDisabled() const { return disableH460; }
01120
01123 void FeatureSetDisable() { disableH460 = true; }
01124
01128 H460_FeatureSet * GetFeatureSet() { return features.DeriveNewFeatureSet(); };
01129 #endif
01130
01133 virtual PBoolean IsLocalAddress(
01134 const PIPSocket::Address & remoteAddress
01135 ) const { return manager.IsLocalAddress(remoteAddress); }
01136
01139 virtual void TranslateTCPAddress(
01140 PIPSocket::Address & localAddr,
01141 const PIPSocket::Address & remoteAddr
01142 );
01143
01146 WORD GetTCPPortBase() const { return manager.GetTCPPortBase(); }
01147
01150 WORD GetTCPPortMax() const { return manager.GetTCPPortMax(); }
01151
01154 void SetTCPPorts(unsigned tcpBase, unsigned tcpMax) { manager.SetTCPPorts(tcpBase, tcpMax); }
01155
01158 WORD GetNextTCPPort() { return manager.GetNextTCPPort(); }
01159
01162 WORD GetUDPPortBase() const { return manager.GetUDPPortBase(); }
01163
01166 WORD GetUDPPortMax() const { return manager.GetUDPPortMax(); }
01167
01170 void SetUDPPorts(unsigned udpBase, unsigned udpMax) { manager.SetUDPPorts(udpBase, udpMax); }
01171
01174 WORD GetNextUDPPort() { return manager.GetNextUDPPort(); }
01175
01178 WORD GetRtpIpPortBase() const { return manager.GetRtpIpPortBase(); }
01179
01182 WORD GetRtpIpPortMax() const { return manager.GetRtpIpPortMax(); }
01183
01186 void SetRtpIpPorts(unsigned udpBase, unsigned udpMax) { manager.SetRtpIpPorts(udpBase, udpMax); }
01187
01190 WORD GetRtpIpPortPair() { return manager.GetRtpIpPortPair(); }
01191
01194 BYTE P_DEPRECATED GetRtpIpTypeofService() const { return manager.GetMediaTypeOfService(); }
01195
01198 void P_DEPRECATED SetRtpIpTypeofService(unsigned tos) { manager.SetMediaTypeOfService(tos); }
01199
01202 const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; }
01203
01206 const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; }
01207
01210 const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; }
01211
01214 const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; }
01215
01218 unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; }
01219
01222 const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; }
01223
01226 const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; }
01227
01230 const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; }
01231
01234 const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; }
01235
01238 const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; }
01239
01242 PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; }
01243
01246 const PTimeInterval & GetNoMediaTimeout() const { return manager.GetNoMediaTimeout(); }
01247
01250 PBoolean SetNoMediaTimeout(
01251 const PTimeInterval & newInterval
01252 ) { return manager.SetNoMediaTimeout(newInterval); }
01253
01256 const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; }
01257
01260 unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; }
01261
01264 const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; }
01265
01268 unsigned GetRasRequestRetries() const { return rasRequestRetries; }
01269
01273 const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; }
01274
01278 void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; }
01279
01282 const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; }
01283
01286 void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; }
01287
01290 PBoolean GetSendGRQ() const
01291 { return sendGRQ; }
01292
01295 void SetSendGRQ(PBoolean v)
01296 { sendGRQ = v; }
01297
01300 const PTimeInterval & GetCallTransferT1() const { return callTransferT1; }
01301
01304 const PTimeInterval & GetCallTransferT2() const { return callTransferT2; }
01305
01308 const PTimeInterval & GetCallTransferT3() const { return callTransferT3; }
01309
01312 const PTimeInterval & GetCallTransferT4() const { return callTransferT4; }
01313
01315 const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; }
01316 const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; }
01317 const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; }
01318 const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; }
01319 const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; }
01320 const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; }
01321
01324 H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; }
01325
01328 #if OPAL_H450
01329 unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; }
01330 #endif
01331
01332 PString GetDefaultTransport() const;
01334
01335 protected:
01336 bool InternalCreateGatekeeper(H323Transport * transport);
01337 H323Connection * InternalMakeCall(
01338 OpalCall & call,
01339 const PString & existingToken,
01340 const PString & callIdentity,
01341 unsigned capabilityLevel,
01342 const PString & remoteParty,
01343 void * userData,
01344 unsigned int options = 0,
01345 OpalConnection::StringOptions * stringOptions = NULL
01346 );
01347
01348
01349 PStringList localAliasNames;
01350 PStringList localAliasPatterns;
01351 PBoolean autoCallForward;
01352 PBoolean disableFastStart;
01353 PBoolean disableH245Tunneling;
01354 PBoolean disableH245inSetup;
01355 PBoolean m_bH245Disabled;
01356 PBoolean canDisplayAmountString;
01357 PBoolean canEnforceDurationLimit;
01358 #if OPAL_H450
01359 unsigned callIntrusionProtectionLevel;
01360 #endif
01361
01362 TerminalTypes terminalType;
01363
01364 #if OPAL_H239
01365 bool m_defaultH239Control;
01366 #endif
01367
01368 PBoolean clearCallOnRoundTripFail;
01369
01370
01371 PTimeInterval signallingChannelCallTimeout;
01372 PTimeInterval controlChannelStartTimeout;
01373 PTimeInterval endSessionTimeout;
01374 PTimeInterval masterSlaveDeterminationTimeout;
01375 unsigned masterSlaveDeterminationRetries;
01376 PTimeInterval capabilityExchangeTimeout;
01377 PTimeInterval logicalChannelTimeout;
01378 PTimeInterval requestModeTimeout;
01379 PTimeInterval roundTripDelayTimeout;
01380 PTimeInterval roundTripDelayRate;
01381 PTimeInterval gatekeeperRequestTimeout;
01382 unsigned gatekeeperRequestRetries;
01383 PTimeInterval rasRequestTimeout;
01384 unsigned rasRequestRetries;
01385 PTimeInterval registrationTimeToLive;
01386
01387 PString gkAccessTokenOID;
01388 PBoolean sendGRQ;
01389
01390
01391
01392 PTimeInterval callTransferT1;
01393
01394
01395 PTimeInterval callTransferT2;
01396
01397
01398 PTimeInterval callTransferT3;
01399
01400
01401 PTimeInterval callTransferT4;
01402
01404 PTimeInterval callIntrusionT1;
01405 PTimeInterval callIntrusionT2;
01406 PTimeInterval callIntrusionT3;
01407 PTimeInterval callIntrusionT4;
01408 PTimeInterval callIntrusionT5;
01409 PTimeInterval callIntrusionT6;
01410
01411
01412 mutable H323Capabilities capabilities;
01413 H323Gatekeeper * gatekeeper;
01414 PString gatekeeperUsername;
01415 PString gatekeeperPassword;
01416 H323CallIdentityDict secondaryConnectionsActive;
01417
01418 #if OPAL_H450
01419 mutable PAtomicInteger nextH450CallIdentity;
01421 #endif
01422
01423 #if OPAL_H460
01424 bool disableH460;
01425 H460_FeatureSet features;
01426 #endif
01427
01428 private:
01429 P_REMOVE_VIRTUAL_VOID(OnConnectionCleared(H323Connection &, const PString &));
01430 };
01431
01432 #endif // OPAL_H323
01433
01434 #endif // OPAL_H323_H323EP_H
01435
01436