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 );
00734
00741 virtual void OnConnectionCleared(
00742 H323Connection & connection,
00743 const PString & token
00744 );
00746
00747
00754 virtual PBoolean OnStartLogicalChannel(
00755 H323Connection & connection,
00756 H323Channel & channel
00757 );
00758
00763 virtual void OnClosedLogicalChannel(
00764 H323Connection & connection,
00765 const H323Channel & channel
00766 );
00767
00775 virtual void OnRTPStatistics(
00776 const H323Connection & connection,
00777 const RTP_Session & session
00778 ) const;
00779
00785 virtual void OnGatekeeperNATDetect(
00786 PIPSocket::Address publicAddr,
00787 PString & gkIdentifier,
00788 H323TransportAddress & gkRouteAddress
00789 );
00791
00801 virtual void OnHTTPServiceControl(
00802 unsigned operation,
00803 unsigned sessionId,
00804 const PString & url
00805 );
00806
00816 virtual void OnCallCreditServiceControl(
00817 const PString & amount,
00818 PBoolean mode
00819 );
00820
00824 virtual void OnServiceControlSession(
00825 unsigned type,
00826 unsigned sessionid,
00827 const H323ServiceControlSession & session,
00828 H323Connection * connection
00829 );
00830
00833 virtual H323ServiceControlSession * CreateServiceControlSession(
00834 const H225_ServiceControlDescriptor & contents
00835 );
00837
00845 virtual PBoolean OnConferenceInvite(
00846 const H323SignalPDU & setupPDU
00847 );
00848
00854 virtual PBoolean OnCallIndependentSupplementaryService(
00855 const H323SignalPDU & setupPDU
00856 );
00857
00863 virtual PBoolean OnNegotiateConferenceCapabilities(
00864 const H323SignalPDU & setupPDU
00865 );
00867
00872 virtual void SetDefaultLocalPartyName(
00873 const PString & name
00874 );
00875
00884 virtual void SetLocalUserName(
00885 const PString & name
00886 );
00887
00892 virtual const PString & GetLocalUserName() const { return localAliasNames.front(); }
00893
00900 PBoolean AddAliasName(
00901 const PString & name
00902 );
00903
00907 PBoolean RemoveAliasName(
00908 const PString & name
00909 );
00910
00915 const PStringList & GetAliasNames() const { return localAliasNames; }
00916
00919 const PStringList & GetAliasNamePatterns() const { return localAliasPatterns; }
00920
00924 PBoolean AddAliasNamePattern(
00925 const PString & pattern
00926 );
00927
00930 const PString & GetDefaultILSServer() const { return manager.GetDefaultILSServer(); }
00931
00934 void SetDefaultILSServer(
00935 const PString & server
00936 ) { manager.SetDefaultILSServer(server); }
00937
00940 PBoolean IsFastStartDisabled() const
00941 { return disableFastStart; }
00942
00945 void DisableFastStart(
00946 PBoolean mode
00947 ) { disableFastStart = mode; }
00948
00951 PBoolean IsH245TunnelingDisabled() const
00952 { return disableH245Tunneling; }
00953
00956 void DisableH245Tunneling(
00957 PBoolean mode
00958 ) { disableH245Tunneling = mode; }
00959
00962 PBoolean IsH245inSetupDisabled() const
00963 { return disableH245inSetup; }
00964
00967 void DisableH245inSetup(
00968 PBoolean mode
00969 ) { disableH245inSetup = mode; }
00970
00974 PBoolean IsH245Disabled() const
00975 { return m_bH245Disabled; }
00976
00980 void DisableH245(PBoolean bH245Disabled) { m_bH245Disabled = bH245Disabled; }
00981
00984 PBoolean CanDisplayAmountString() const
00985 { return canDisplayAmountString; }
00986
00989 void SetCanDisplayAmountString(
00990 PBoolean mode
00991 ) { canDisplayAmountString = mode; }
00992
00995 PBoolean CanEnforceDurationLimit() const
00996 { return canEnforceDurationLimit; }
00997
01000 void SetCanEnforceDurationLimit(
01001 PBoolean mode
01002 ) { canEnforceDurationLimit = mode; }
01003
01004 #if OPAL_H450
01005
01007 unsigned GetCallIntrusionProtectionLevel() const { return callIntrusionProtectionLevel; }
01008
01011 void SetCallIntrusionProtectionLevel(
01012 unsigned level
01013 ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; }
01014 #endif
01015
01018 virtual void OnReceivedInitiateReturnError();
01019
01022 PBoolean CanAutoCallForward() const { return autoCallForward; }
01023
01026 const H323Capabilities & GetCapabilities() const;
01027
01030 enum TerminalTypes {
01031 e_TerminalOnly = 50,
01032 e_TerminalAndMC = 70,
01033 e_GatewayOnly = 60,
01034 e_GatewayAndMC = 80,
01035 e_GatewayAndMCWithDataMP = 90,
01036 e_GatewayAndMCWithAudioMP = 100,
01037 e_GatewayAndMCWithAVMP = 110,
01038 e_GatekeeperOnly = 120,
01039 e_GatekeeperWithDataMP = 130,
01040 e_GatekeeperWithAudioMP = 140,
01041 e_GatekeeperWithAVMP = 150,
01042 e_MCUOnly = 160,
01043 e_MCUWithDataMP = 170,
01044 e_MCUWithAudioMP = 180,
01045 e_MCUWithAVMP = 190
01046 };
01047
01050 TerminalTypes GetTerminalType() const { return terminalType; }
01051
01054 PBoolean IsTerminal() const;
01055
01058 PBoolean IsGateway() const;
01059
01062 PBoolean IsGatekeeper() const;
01063
01066 PBoolean IsMCU() const;
01067
01071 unsigned GetMinAudioJitterDelay() const { return manager.GetMinAudioJitterDelay(); }
01072
01076 unsigned GetMaxAudioJitterDelay() const { return manager.GetMaxAudioJitterDelay(); }
01077
01080 void SetAudioJitterDelay(
01081 unsigned minDelay,
01082 unsigned maxDelay
01083 ) { manager.SetAudioJitterDelay(minDelay, maxDelay); }
01084
01087 unsigned GetInitialBandwidth() const { return initialBandwidth; }
01088
01091 void SetInitialBandwidth(unsigned bandwidth) { initialBandwidth = bandwidth; }
01092
01093 #if OPAL_H239
01094
01096 bool GetDefaultH239Control() const { return m_defaultH239Control; }
01097
01100 void SetDefaultH239Control(
01101 bool on
01102 ) { m_defaultH239Control = on; }
01103 #endif
01104
01107 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &);
01108
01111 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &);
01112
01116 virtual void LoadBaseFeatureSet();
01117
01122 virtual bool OnFeatureInstance(
01123 int instType,
01124 const PString & identifer
01125 );
01126
01127 #if OPAL_H460
01128
01130 bool FeatureSetDisabled() const { return disableH460; }
01131
01134 void FeatureSetDisable() { disableH460 = true; }
01135
01139 H460_FeatureSet * GetFeatureSet() { return features.DeriveNewFeatureSet(); };
01140 #endif
01141
01144 virtual PBoolean IsLocalAddress(
01145 const PIPSocket::Address & remoteAddress
01146 ) const { return manager.IsLocalAddress(remoteAddress); }
01147
01150 virtual void TranslateTCPAddress(
01151 PIPSocket::Address & localAddr,
01152 const PIPSocket::Address & remoteAddr
01153 );
01154
01157 WORD GetTCPPortBase() const { return manager.GetTCPPortBase(); }
01158
01161 WORD GetTCPPortMax() const { return manager.GetTCPPortMax(); }
01162
01165 void SetTCPPorts(unsigned tcpBase, unsigned tcpMax) { manager.SetTCPPorts(tcpBase, tcpMax); }
01166
01169 WORD GetNextTCPPort() { return manager.GetNextTCPPort(); }
01170
01173 WORD GetUDPPortBase() const { return manager.GetUDPPortBase(); }
01174
01177 WORD GetUDPPortMax() const { return manager.GetUDPPortMax(); }
01178
01181 void SetUDPPorts(unsigned udpBase, unsigned udpMax) { manager.SetUDPPorts(udpBase, udpMax); }
01182
01185 WORD GetNextUDPPort() { return manager.GetNextUDPPort(); }
01186
01189 WORD GetRtpIpPortBase() const { return manager.GetRtpIpPortBase(); }
01190
01193 WORD GetRtpIpPortMax() const { return manager.GetRtpIpPortMax(); }
01194
01197 void SetRtpIpPorts(unsigned udpBase, unsigned udpMax) { manager.SetRtpIpPorts(udpBase, udpMax); }
01198
01201 WORD GetRtpIpPortPair() { return manager.GetRtpIpPortPair(); }
01202
01205 BYTE GetRtpIpTypeofService() const { return manager.GetRtpIpTypeofService(); }
01206
01209 void SetRtpIpTypeofService(unsigned tos) { manager.SetRtpIpTypeofService(tos); }
01210
01213 const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; }
01214
01217 const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; }
01218
01221 const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; }
01222
01225 const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; }
01226
01229 unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; }
01230
01233 const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; }
01234
01237 const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; }
01238
01241 const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; }
01242
01245 const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; }
01246
01249 const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; }
01250
01253 PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; }
01254
01257 const PTimeInterval & GetNoMediaTimeout() const { return manager.GetNoMediaTimeout(); }
01258
01261 PBoolean SetNoMediaTimeout(
01262 const PTimeInterval & newInterval
01263 ) { return manager.SetNoMediaTimeout(newInterval); }
01264
01267 const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; }
01268
01271 unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; }
01272
01275 const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; }
01276
01279 unsigned GetRasRequestRetries() const { return rasRequestRetries; }
01280
01284 const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; }
01285
01289 void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; }
01290
01293 const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; }
01294
01297 void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; }
01298
01301 PBoolean GetSendGRQ() const
01302 { return sendGRQ; }
01303
01306 void SetSendGRQ(PBoolean v)
01307 { sendGRQ = v; }
01308
01311 const PTimeInterval & GetCallTransferT1() const { return callTransferT1; }
01312
01315 const PTimeInterval & GetCallTransferT2() const { return callTransferT2; }
01316
01319 const PTimeInterval & GetCallTransferT3() const { return callTransferT3; }
01320
01323 const PTimeInterval & GetCallTransferT4() const { return callTransferT4; }
01324
01326 const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; }
01327 const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; }
01328 const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; }
01329 const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; }
01330 const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; }
01331 const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; }
01332
01335 H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; }
01336
01339 #if OPAL_H450
01340 unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; }
01341 #endif
01342
01343 PString GetDefaultTransport() const;
01345
01346 protected:
01347 bool InternalCreateGatekeeper(H323Transport * transport);
01348 H323Connection * InternalMakeCall(
01349 OpalCall & call,
01350 const PString & existingToken,
01351 const PString & callIdentity,
01352 unsigned capabilityLevel,
01353 const PString & remoteParty,
01354 void * userData,
01355 unsigned int options = 0,
01356 OpalConnection::StringOptions * stringOptions = NULL
01357 );
01358
01359
01360 PStringList localAliasNames;
01361 PStringList localAliasPatterns;
01362 PBoolean autoCallForward;
01363 PBoolean disableFastStart;
01364 PBoolean disableH245Tunneling;
01365 PBoolean disableH245inSetup;
01366 PBoolean m_bH245Disabled;
01367 PBoolean canDisplayAmountString;
01368 PBoolean canEnforceDurationLimit;
01369 #if OPAL_H450
01370 unsigned callIntrusionProtectionLevel;
01371 #endif
01372
01373 TerminalTypes terminalType;
01374
01375 #if OPAL_H239
01376 bool m_defaultH239Control;
01377 #endif
01378
01379 PBoolean clearCallOnRoundTripFail;
01380
01381
01382 PTimeInterval signallingChannelCallTimeout;
01383 PTimeInterval controlChannelStartTimeout;
01384 PTimeInterval endSessionTimeout;
01385 PTimeInterval masterSlaveDeterminationTimeout;
01386 unsigned masterSlaveDeterminationRetries;
01387 PTimeInterval capabilityExchangeTimeout;
01388 PTimeInterval logicalChannelTimeout;
01389 PTimeInterval requestModeTimeout;
01390 PTimeInterval roundTripDelayTimeout;
01391 PTimeInterval roundTripDelayRate;
01392 PTimeInterval gatekeeperRequestTimeout;
01393 unsigned gatekeeperRequestRetries;
01394 PTimeInterval rasRequestTimeout;
01395 unsigned rasRequestRetries;
01396 PTimeInterval registrationTimeToLive;
01397
01398 PString gkAccessTokenOID;
01399 PBoolean sendGRQ;
01400
01401
01402
01403 PTimeInterval callTransferT1;
01404
01405
01406 PTimeInterval callTransferT2;
01407
01408
01409 PTimeInterval callTransferT3;
01410
01411
01412 PTimeInterval callTransferT4;
01413
01415 PTimeInterval callIntrusionT1;
01416 PTimeInterval callIntrusionT2;
01417 PTimeInterval callIntrusionT3;
01418 PTimeInterval callIntrusionT4;
01419 PTimeInterval callIntrusionT5;
01420 PTimeInterval callIntrusionT6;
01421
01422
01423 mutable H323Capabilities capabilities;
01424 H323Gatekeeper * gatekeeper;
01425 PString gatekeeperUsername;
01426 PString gatekeeperPassword;
01427 H323CallIdentityDict secondaryConnectionsActive;
01428
01429 #if OPAL_H450
01430 mutable PAtomicInteger nextH450CallIdentity;
01432 #endif
01433
01434 #if OPAL_H460
01435 bool disableH460;
01436 H460_FeatureSet features;
01437 #endif
01438
01439 };
01440
01441 #endif // OPAL_H323
01442
01443 #endif // OPAL_H323_H323EP_H
01444
01445