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_H323EP_H
00035 #define __OPAL_H323EP_H
00036
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040
00041
00042 #include <opal/rtpep.h>
00043 #include <opal/manager.h>
00044 #include <opal/call.h>
00045 #include <opal/transports.h>
00046 #include <h323/h323con.h>
00047 #include <h323/h323caps.h>
00048 #include <h323/h235auth.h>
00049
00050 #ifdef OPAL_H460
00051 #include <h460/h4601.h>
00052 #endif
00053
00054
00055 class H225_EndpointType;
00056 class H225_VendorIdentifier;
00057 class H225_H221NonStandard;
00058 class H225_ServiceControlDescriptor;
00059 class H225_FeatureSet;
00060
00061 class H235SecurityInfo;
00062
00063 class H323Gatekeeper;
00064 class H323SignalPDU;
00065 class H323ServiceControlSession;
00066
00068
00081 class H323EndPoint : public OpalRTPEndPoint
00082 {
00083 PCLASSINFO(H323EndPoint, OpalRTPEndPoint);
00084
00085 public:
00086 enum {
00087 DefaultTcpSignalPort = 1720
00088 };
00089
00094 H323EndPoint(
00095 OpalManager & manager
00096 );
00097
00100 ~H323EndPoint();
00102
00109 virtual void ShutDown();
00110
00140 virtual PBoolean MakeConnection(
00141 OpalCall & call,
00142 const PString & party,
00143 void * userData = NULL,
00144 unsigned int options = NULL,
00145 OpalConnection::StringOptions * stringOptions = NULL
00146 );
00148
00153 virtual void SetEndpointTypeInfo(
00154 H225_EndpointType & info
00155 ) const;
00156
00159 virtual void SetVendorIdentifierInfo(
00160 H225_VendorIdentifier & info
00161 ) const;
00162
00165 virtual void SetH221NonStandardInfo(
00166 H225_H221NonStandard & info
00167 ) const;
00169
00170
00181 void AddCapability(
00182 H323Capability * capability
00183 );
00184
00205 PINDEX SetCapability(
00206 PINDEX descriptorNum,
00207 PINDEX simultaneous,
00208 H323Capability * cap
00209 );
00210
00215 PINDEX AddAllCapabilities(
00216 PINDEX descriptorNum,
00217 PINDEX simultaneous,
00218 const PString & name
00219 );
00220
00223 void AddAllUserInputCapabilities(
00224 PINDEX descriptorNum,
00225 PINDEX simultaneous
00226 );
00227
00230 void RemoveCapabilities(
00231 const PStringArray & codecNames
00232 );
00233
00236 void ReorderCapabilities(
00237 const PStringArray & preferenceOrder
00238 );
00239
00242 H323Capability * FindCapability(
00243 const H245_Capability & cap
00244 ) const;
00245
00248 H323Capability * FindCapability(
00249 const H245_DataType & dataType
00250 ) const;
00251
00254 H323Capability * FindCapability(
00255 H323Capability::MainTypes mainType,
00256 unsigned subType
00257 ) const;
00259
00279 PBoolean UseGatekeeper(
00280 const PString & address = PString::Empty(),
00281 const PString & identifier = PString::Empty(),
00282 const PString & localAddress = PString::Empty()
00283 );
00284
00295 PBoolean SetGatekeeper(
00296 const PString & address,
00297 H323Transport * transport = NULL
00298 );
00299
00314 PBoolean SetGatekeeperZone(
00315 const PString & address,
00316 const PString & identifier,
00317 H323Transport * transport = NULL
00318 );
00319
00329 PBoolean LocateGatekeeper(
00330 const PString & identifier,
00331 H323Transport * transport = NULL
00332 );
00333
00342 PBoolean DiscoverGatekeeper(
00343 H323Transport * transport = NULL
00344 );
00345
00353 virtual H323Gatekeeper * CreateGatekeeper(
00354 H323Transport * transport
00355 );
00356
00359 H323Gatekeeper * GetGatekeeper() const { return gatekeeper; }
00360
00363 PBoolean IsRegisteredWithGatekeeper() const;
00364
00370 PBoolean RemoveGatekeeper(
00371 int reason = -1
00372 );
00373
00376 virtual void SetGatekeeperPassword(
00377 const PString & password,
00378 const PString & username = PString::Empty()
00379 );
00380
00383 virtual const PString & GetGatekeeperUsername() const { return gatekeeperUsername; }
00384
00387 virtual const PString & GetGatekeeperPassword() const { return gatekeeperPassword; }
00388
00391 virtual H235Authenticators CreateAuthenticators();
00392
00395 virtual void OnGatekeeperConfirm();
00396
00399 virtual void OnGatekeeperReject();
00400
00403 virtual void OnRegistrationConfirm();
00404
00407 virtual void OnRegistrationReject();
00409
00414 virtual PBoolean NewIncomingConnection(
00415 OpalTransport * transport
00416 );
00417
00420 virtual H323Connection * CreateConnection(
00421 OpalCall & call,
00422 const PString & token,
00423 void * userData,
00424 OpalTransport & transport,
00425 const PString & alias,
00426 const H323TransportAddress & address,
00427 H323SignalPDU * setupPDU,
00428 unsigned options = 0,
00429 OpalConnection::StringOptions * stringOptions = NULL
00430 );
00431
00447 virtual PBoolean SetupTransfer(
00448 const PString & token,
00449 const PString & callIdentity,
00450 const PString & remoteParty,
00451 void * userData = NULL
00452 );
00453
00459 void TransferCall(
00460 const PString & token,
00461 const PString & remoteParty,
00462 const PString & callIdentity = PString::Empty()
00464 );
00465
00472 void ConsultationTransfer(
00473 const PString & primaryCallToken,
00474 const PString & secondaryCallToken
00475 );
00476
00480 void HoldCall(
00481 const PString & token,
00482 PBoolean localHold
00483 );
00484
00488 PBoolean IntrudeCall(
00489 const PString & remoteParty,
00490 unsigned capabilityLevel,
00491 void * userData = NULL
00492 );
00493
00500 PBoolean ParsePartyName(
00501 const PString & party,
00502 PString & alias,
00503 H323TransportAddress & address
00504 );
00505
00516 PSafePtr<H323Connection> FindConnectionWithLock(
00517 const PString & token,
00518 PSafetyMode mode = PSafeReadWrite
00519 );
00520
00528 virtual PBoolean OnSendSignalSetup(H323Connection & connection,
00529 H323SignalPDU & setupPDU);
00530
00542 virtual PBoolean OnSendCallProceeding(H323Connection & connection,
00543 H323SignalPDU & callProceedingPDU
00544 );
00545
00557 virtual PBoolean OnSendConnect(H323Connection & connection,
00558 H323SignalPDU & connectPDU
00559 );
00560
00572 virtual PBoolean OnIncomingCall(
00573 H323Connection & connection,
00574 const H323SignalPDU & setupPDU,
00575 H323SignalPDU & alertingPDU
00576 );
00577
00584 virtual PBoolean OnOutgoingCall(
00585 H323Connection & conn,
00586 const H323SignalPDU & connectPDU
00587 );
00588
00593 virtual PBoolean OnCallTransferInitiate(
00594 H323Connection & connection,
00595 const PString & remoteParty
00596 );
00597
00602 virtual PBoolean OnCallTransferIdentify(
00603 H323Connection & connection
00604 );
00605
00610 virtual void OnSendARQ(
00611 H323Connection & conn,
00612 H225_AdmissionRequest & arq
00613 );
00614
00621 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00622 H323Connection & connection,
00623 const PString & callerName,
00624 const H323SignalPDU & setupPDU,
00625 H323SignalPDU & connectPDU,
00626 H323SignalPDU & progressPDU
00627 );
00628 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00629 OpalConnection & connection,
00630 const PString & caller
00631 );
00632
00643 virtual PBoolean OnAlerting(
00644 H323Connection & connection,
00645 const H323SignalPDU & alertingPDU,
00646 const PString & user
00647 );
00648
00654 virtual PBoolean OnSendAlerting(H323Connection & connection,
00655 H323SignalPDU & alerting,
00656 const PString & calleeName,
00657 PBoolean withMedia
00658 );
00659
00664 virtual PBoolean OnSentAlerting(H323Connection & connection);
00665
00674 virtual PBoolean OnConnectionForwarded(
00675 H323Connection & connection,
00676 const PString & forwardParty,
00677 const H323SignalPDU & pdu
00678 );
00679
00688 virtual PBoolean ForwardConnection(
00689 H323Connection & connection,
00690 const PString & forwardParty,
00691 const H323SignalPDU & pdu
00692 );
00693
00700 virtual void OnConnectionEstablished(
00701 H323Connection & connection,
00702 const PString & token
00703 );
00704
00707 virtual PBoolean IsConnectionEstablished(
00708 const PString & token
00709 );
00710
00717 virtual void OnConnectionCleared(
00718 H323Connection & connection,
00719 const PString & token
00720 );
00722
00723
00730 virtual PBoolean OnStartLogicalChannel(
00731 H323Connection & connection,
00732 H323Channel & channel
00733 );
00734
00739 virtual void OnClosedLogicalChannel(
00740 H323Connection & connection,
00741 const H323Channel & channel
00742 );
00743
00751 virtual void OnRTPStatistics(
00752 const H323Connection & connection,
00753 const RTP_Session & session
00754 ) const;
00755
00761 virtual void OnGatekeeperNATDetect(
00762 PIPSocket::Address publicAddr,
00763 PString & gkIdentifier,
00764 H323TransportAddress & gkRouteAddress
00765 );
00767
00777 virtual void OnHTTPServiceControl(
00778 unsigned operation,
00779 unsigned sessionId,
00780 const PString & url
00781 );
00782
00792 virtual void OnCallCreditServiceControl(
00793 const PString & amount,
00794 PBoolean mode
00795 );
00796
00800 virtual void OnServiceControlSession(
00801 unsigned type,
00802 unsigned sessionid,
00803 const H323ServiceControlSession & session,
00804 H323Connection * connection
00805 );
00806
00809 virtual H323ServiceControlSession * CreateServiceControlSession(
00810 const H225_ServiceControlDescriptor & contents
00811 );
00813
00821 virtual PBoolean OnConferenceInvite(
00822 const H323SignalPDU & setupPDU
00823 );
00824
00830 virtual PBoolean OnCallIndependentSupplementaryService(
00831 const H323SignalPDU & setupPDU
00832 );
00833
00839 virtual PBoolean OnNegotiateConferenceCapabilities(
00840 const H323SignalPDU & setupPDU
00841 );
00843
00854 virtual void SetLocalUserName(
00855 const PString & name
00856 );
00857
00862 virtual const PString & GetLocalUserName() const { return localAliasNames.front(); }
00863
00870 PBoolean AddAliasName(
00871 const PString & name
00872 );
00873
00877 PBoolean RemoveAliasName(
00878 const PString & name
00879 );
00880
00885 const PStringList & GetAliasNames() const { return localAliasNames; }
00886
00889 const PStringList & GetAliasNamePatterns() const { return localAliasPatterns; }
00890
00894 PBoolean AddAliasNamePattern(
00895 const PString & pattern
00896 );
00897
00900 const PString & GetDefaultILSServer() const { return manager.GetDefaultILSServer(); }
00901
00904 void SetDefaultILSServer(
00905 const PString & server
00906 ) { manager.SetDefaultILSServer(server); }
00907
00910 PBoolean IsFastStartDisabled() const
00911 { return disableFastStart; }
00912
00915 void DisableFastStart(
00916 PBoolean mode
00917 ) { disableFastStart = mode; }
00918
00921 PBoolean IsH245TunnelingDisabled() const
00922 { return disableH245Tunneling; }
00923
00926 void DisableH245Tunneling(
00927 PBoolean mode
00928 ) { disableH245Tunneling = mode; }
00929
00932 PBoolean IsH245inSetupDisabled() const
00933 { return disableH245inSetup; }
00934
00937 void DisableH245inSetup(
00938 PBoolean mode
00939 ) { disableH245inSetup = mode; }
00940
00944 PBoolean IsH245Disabled() const
00945 { return m_bH245Disabled; }
00946
00950 void DisableH245(PBoolean bH245Disabled) { m_bH245Disabled = bH245Disabled; }
00951
00954 PBoolean CanDisplayAmountString() const
00955 { return canDisplayAmountString; }
00956
00959 void SetCanDisplayAmountString(
00960 PBoolean mode
00961 ) { canDisplayAmountString = mode; }
00962
00965 PBoolean CanEnforceDurationLimit() const
00966 { return canEnforceDurationLimit; }
00967
00970 void SetCanEnforceDurationLimit(
00971 PBoolean mode
00972 ) { canEnforceDurationLimit = mode; }
00973
00974 #if OPAL_H450
00975
00977 unsigned GetCallIntrusionProtectionLevel() const { return callIntrusionProtectionLevel; }
00978
00981 void SetCallIntrusionProtectionLevel(
00982 unsigned level
00983 ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; }
00984 #endif
00985
00988 virtual void OnReceivedInitiateReturnError();
00989
00990 #if OPAL_VIDEO
00991
00993 PBoolean CanAutoStartReceiveVideo() const { return manager.CanAutoStartReceiveVideo(); }
00994
00997 PBoolean CanAutoStartTransmitVideo() const { return manager.CanAutoStartTransmitVideo(); }
00998 #endif
00999
01000 #if OPAL_T38_CAPABILITY
01001
01003 PBoolean CanAutoStartReceiveFax() const { return autoStartReceiveFax; }
01004
01007 PBoolean CanAutoStartTransmitFax() const { return autoStartTransmitFax; }
01008 #endif
01009
01012 PBoolean CanAutoCallForward() const { return autoCallForward; }
01013
01016 const H323Capabilities & GetCapabilities() const;
01017
01020 enum TerminalTypes {
01021 e_TerminalOnly = 50,
01022 e_TerminalAndMC = 70,
01023 e_GatewayOnly = 60,
01024 e_GatewayAndMC = 80,
01025 e_GatewayAndMCWithDataMP = 90,
01026 e_GatewayAndMCWithAudioMP = 100,
01027 e_GatewayAndMCWithAVMP = 110,
01028 e_GatekeeperOnly = 120,
01029 e_GatekeeperWithDataMP = 130,
01030 e_GatekeeperWithAudioMP = 140,
01031 e_GatekeeperWithAVMP = 150,
01032 e_MCUOnly = 160,
01033 e_MCUWithDataMP = 170,
01034 e_MCUWithAudioMP = 180,
01035 e_MCUWithAVMP = 190
01036 };
01037
01040 TerminalTypes GetTerminalType() const { return terminalType; }
01041
01044 PBoolean IsTerminal() const;
01045
01048 PBoolean IsGateway() const;
01049
01052 PBoolean IsGatekeeper() const;
01053
01056 PBoolean IsMCU() const;
01057
01061 unsigned GetMinAudioJitterDelay() const { return manager.GetMinAudioJitterDelay(); }
01062
01066 unsigned GetMaxAudioJitterDelay() const { return manager.GetMaxAudioJitterDelay(); }
01067
01070 void SetAudioJitterDelay(
01071 unsigned minDelay,
01072 unsigned maxDelay
01073 ) { manager.SetAudioJitterDelay(minDelay, maxDelay); }
01074
01077 unsigned GetInitialBandwidth() const { return initialBandwidth; }
01078
01081 void SetInitialBandwidth(unsigned bandwidth) { initialBandwidth = bandwidth; }
01082
01085 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &);
01086
01089 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &);
01090
01094 virtual void LoadBaseFeatureSet();
01095
01100 virtual bool OnFeatureInstance(
01101 int instType,
01102 const PString & identifer
01103 );
01104
01105 #if OPAL_H460
01106
01108 bool FeatureSetDisabled() const { return disableH460; }
01109
01112 void FeatureSetDisable() { disableH460 = true; }
01113
01117 H460_FeatureSet * GetFeatureSet() { return features.DeriveNewFeatureSet(); };
01118 #endif
01119
01122 virtual PBoolean IsLocalAddress(
01123 const PIPSocket::Address & remoteAddress
01124 ) const { return manager.IsLocalAddress(remoteAddress); }
01125
01128 virtual void TranslateTCPAddress(
01129 PIPSocket::Address & localAddr,
01130 const PIPSocket::Address & remoteAddr
01131 );
01132
01135 WORD GetTCPPortBase() const { return manager.GetTCPPortBase(); }
01136
01139 WORD GetTCPPortMax() const { return manager.GetTCPPortMax(); }
01140
01143 void SetTCPPorts(unsigned tcpBase, unsigned tcpMax) { manager.SetTCPPorts(tcpBase, tcpMax); }
01144
01147 WORD GetNextTCPPort() { return manager.GetNextTCPPort(); }
01148
01151 WORD GetUDPPortBase() const { return manager.GetUDPPortBase(); }
01152
01155 WORD GetUDPPortMax() const { return manager.GetUDPPortMax(); }
01156
01159 void SetUDPPorts(unsigned udpBase, unsigned udpMax) { manager.SetUDPPorts(udpBase, udpMax); }
01160
01163 WORD GetNextUDPPort() { return manager.GetNextUDPPort(); }
01164
01167 WORD GetRtpIpPortBase() const { return manager.GetRtpIpPortBase(); }
01168
01171 WORD GetRtpIpPortMax() const { return manager.GetRtpIpPortMax(); }
01172
01175 void SetRtpIpPorts(unsigned udpBase, unsigned udpMax) { manager.SetRtpIpPorts(udpBase, udpMax); }
01176
01179 WORD GetRtpIpPortPair() { return manager.GetRtpIpPortPair(); }
01180
01183 BYTE GetRtpIpTypeofService() const { return manager.GetRtpIpTypeofService(); }
01184
01187 void SetRtpIpTypeofService(unsigned tos) { manager.SetRtpIpTypeofService(tos); }
01188
01191 const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; }
01192
01195 const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; }
01196
01199 const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; }
01200
01203 const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; }
01204
01207 unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; }
01208
01211 const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; }
01212
01215 const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; }
01216
01219 const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; }
01220
01223 const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; }
01224
01227 const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; }
01228
01231 PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; }
01232
01235 const PTimeInterval & GetNoMediaTimeout() const { return manager.GetNoMediaTimeout(); }
01236
01239 PBoolean SetNoMediaTimeout(
01240 const PTimeInterval & newInterval
01241 ) { return manager.SetNoMediaTimeout(newInterval); }
01242
01245 const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; }
01246
01249 unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; }
01250
01253 const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; }
01254
01257 unsigned GetRasRequestRetries() const { return rasRequestRetries; }
01258
01262 const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; }
01263
01267 void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; }
01268
01271 const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; }
01272
01275 void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; }
01276
01279 PBoolean GetSendGRQ() const
01280 { return sendGRQ; }
01281
01284 void SetSendGRQ(PBoolean v)
01285 { sendGRQ = v; }
01286
01289 const PTimeInterval & GetCallTransferT1() const { return callTransferT1; }
01290
01293 const PTimeInterval & GetCallTransferT2() const { return callTransferT2; }
01294
01297 const PTimeInterval & GetCallTransferT3() const { return callTransferT3; }
01298
01301 const PTimeInterval & GetCallTransferT4() const { return callTransferT4; }
01302
01304 const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; }
01305 const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; }
01306 const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; }
01307 const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; }
01308 const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; }
01309 const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; }
01310
01313 H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; }
01314
01317 #if OPAL_H450
01318 unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; }
01319 #endif
01320
01321 PString GetDefaultTransport() const;
01323
01324 protected:
01325 bool InternalCreateGatekeeper(H323Transport * transport);
01326 PBoolean InternalMakeCall(
01327 OpalCall & call,
01328 const PString & existingToken,
01329 const PString & callIdentity,
01330 unsigned capabilityLevel,
01331 const PString & remoteParty,
01332 void * userData,
01333 unsigned int options = 0,
01334 OpalConnection::StringOptions * stringOptions = NULL
01335 );
01336
01337
01338 PStringList localAliasNames;
01339 PStringList localAliasPatterns;
01340 PBoolean autoStartReceiveFax;
01341 PBoolean autoStartTransmitFax;
01342 PBoolean isH224Enabled;
01343 PBoolean autoCallForward;
01344 PBoolean disableFastStart;
01345 PBoolean disableH245Tunneling;
01346 PBoolean disableH245inSetup;
01347 PBoolean m_bH245Disabled;
01348 PBoolean canDisplayAmountString;
01349 PBoolean canEnforceDurationLimit;
01350 #if OPAL_H450
01351 unsigned callIntrusionProtectionLevel;
01352 #endif
01353
01354 TerminalTypes terminalType;
01355
01356 PBoolean clearCallOnRoundTripFail;
01357
01358
01359 PTimeInterval signallingChannelCallTimeout;
01360 PTimeInterval controlChannelStartTimeout;
01361 PTimeInterval endSessionTimeout;
01362 PTimeInterval masterSlaveDeterminationTimeout;
01363 unsigned masterSlaveDeterminationRetries;
01364 PTimeInterval capabilityExchangeTimeout;
01365 PTimeInterval logicalChannelTimeout;
01366 PTimeInterval requestModeTimeout;
01367 PTimeInterval roundTripDelayTimeout;
01368 PTimeInterval roundTripDelayRate;
01369 PTimeInterval gatekeeperRequestTimeout;
01370 unsigned gatekeeperRequestRetries;
01371 PTimeInterval rasRequestTimeout;
01372 unsigned rasRequestRetries;
01373 PTimeInterval registrationTimeToLive;
01374
01375 PString gkAccessTokenOID;
01376 PBoolean sendGRQ;
01377
01378
01379
01380 PTimeInterval callTransferT1;
01381
01382
01383 PTimeInterval callTransferT2;
01384
01385
01386 PTimeInterval callTransferT3;
01387
01388
01389 PTimeInterval callTransferT4;
01390
01392 PTimeInterval callIntrusionT1;
01393 PTimeInterval callIntrusionT2;
01394 PTimeInterval callIntrusionT3;
01395 PTimeInterval callIntrusionT4;
01396 PTimeInterval callIntrusionT5;
01397 PTimeInterval callIntrusionT6;
01398
01399
01400 mutable H323Capabilities capabilities;
01401 H323Gatekeeper * gatekeeper;
01402 PString gatekeeperUsername;
01403 PString gatekeeperPassword;
01404 H323CallIdentityDict secondaryConnectionsActive;
01405
01406 #if OPAL_H450
01407 mutable PAtomicInteger nextH450CallIdentity;
01409 #endif
01410
01411 #if OPAL_H460
01412 bool disableH460;
01413 H460_FeatureSet features;
01414 #endif
01415
01416 };
01417
01418 #endif // __OPAL_H323EP_H
01419
01420