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 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
01353 PStringList localAliasNames;
01354 PStringList localAliasPatterns;
01355 PBoolean autoCallForward;
01356 PBoolean disableFastStart;
01357 PBoolean disableH245Tunneling;
01358 PBoolean disableH245inSetup;
01359 PBoolean m_bH245Disabled;
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
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
01395
01396 PTimeInterval callTransferT1;
01397
01398
01399 PTimeInterval callTransferT2;
01400
01401
01402 PTimeInterval callTransferT3;
01403
01404
01405 PTimeInterval callTransferT4;
01406
01408 PTimeInterval callIntrusionT1;
01409 PTimeInterval callIntrusionT2;
01410 PTimeInterval callIntrusionT3;
01411 PTimeInterval callIntrusionT4;
01412 PTimeInterval callIntrusionT5;
01413 PTimeInterval callIntrusionT6;
01414
01415
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