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 #include <opal/buildopts.h>
00042
00043 #include <opal/rtpep.h>
00044 #include <opal/manager.h>
00045 #include <opal/call.h>
00046 #include <opal/transports.h>
00047 #include <h323/h323con.h>
00048 #include <h323/h323caps.h>
00049 #include <h323/h235auth.h>
00050
00051 #if OPAL_H460
00052 #include <h460/h4601.h>
00053 #endif
00054
00055
00056 class H225_EndpointType;
00057 class H225_VendorIdentifier;
00058 class H225_H221NonStandard;
00059 class H225_ServiceControlDescriptor;
00060 class H225_FeatureSet;
00061
00062 class H235SecurityInfo;
00063
00064 class H323Gatekeeper;
00065 class H323SignalPDU;
00066 class H323ServiceControlSession;
00067
00069
00082 class H323EndPoint : public OpalRTPEndPoint
00083 {
00084 PCLASSINFO(H323EndPoint, OpalRTPEndPoint);
00085
00086 public:
00087 enum {
00088 DefaultTcpSignalPort = 1720
00089 };
00090
00095 H323EndPoint(
00096 OpalManager & manager
00097 );
00098
00101 ~H323EndPoint();
00103
00110 virtual void ShutDown();
00111
00141 virtual PBoolean MakeConnection(
00142 OpalCall & call,
00143 const PString & party,
00144 void * userData = NULL,
00145 unsigned int options = NULL,
00146 OpalConnection::StringOptions * stringOptions = NULL
00147 );
00149
00154 virtual void SetEndpointTypeInfo(
00155 H225_EndpointType & info
00156 ) const;
00157
00160 virtual void SetVendorIdentifierInfo(
00161 H225_VendorIdentifier & info
00162 ) const;
00163
00166 virtual void SetH221NonStandardInfo(
00167 H225_H221NonStandard & info
00168 ) const;
00170
00171
00182 void AddCapability(
00183 H323Capability * capability
00184 );
00185
00206 PINDEX SetCapability(
00207 PINDEX descriptorNum,
00208 PINDEX simultaneous,
00209 H323Capability * cap
00210 );
00211
00216 PINDEX AddAllCapabilities(
00217 PINDEX descriptorNum,
00218 PINDEX simultaneous,
00219 const PString & name
00220 );
00221
00224 void AddAllUserInputCapabilities(
00225 PINDEX descriptorNum,
00226 PINDEX simultaneous
00227 );
00228
00231 void RemoveCapabilities(
00232 const PStringArray & codecNames
00233 );
00234
00237 void ReorderCapabilities(
00238 const PStringArray & preferenceOrder
00239 );
00240
00243 H323Capability * FindCapability(
00244 const H245_Capability & cap
00245 ) const;
00246
00249 H323Capability * FindCapability(
00250 const H245_DataType & dataType
00251 ) const;
00252
00255 H323Capability * FindCapability(
00256 H323Capability::MainTypes mainType,
00257 unsigned subType
00258 ) const;
00260
00280 PBoolean UseGatekeeper(
00281 const PString & address = PString::Empty(),
00282 const PString & identifier = PString::Empty(),
00283 const PString & localAddress = PString::Empty()
00284 );
00285
00296 PBoolean SetGatekeeper(
00297 const PString & address,
00298 H323Transport * transport = NULL
00299 );
00300
00315 PBoolean SetGatekeeperZone(
00316 const PString & address,
00317 const PString & identifier,
00318 H323Transport * transport = NULL
00319 );
00320
00330 PBoolean LocateGatekeeper(
00331 const PString & identifier,
00332 H323Transport * transport = NULL
00333 );
00334
00343 PBoolean DiscoverGatekeeper(
00344 H323Transport * transport = NULL
00345 );
00346
00354 virtual H323Gatekeeper * CreateGatekeeper(
00355 H323Transport * transport
00356 );
00357
00360 H323Gatekeeper * GetGatekeeper() const { return gatekeeper; }
00361
00364 PBoolean IsRegisteredWithGatekeeper() const;
00365
00371 PBoolean RemoveGatekeeper(
00372 int reason = -1
00373 );
00374
00377 virtual void SetGatekeeperPassword(
00378 const PString & password,
00379 const PString & username = PString::Empty()
00380 );
00381
00384 virtual const PString & GetGatekeeperUsername() const { return gatekeeperUsername; }
00385
00388 virtual const PString & GetGatekeeperPassword() const { return gatekeeperPassword; }
00389
00392 virtual H235Authenticators CreateAuthenticators();
00393
00396 virtual void OnGatekeeperConfirm();
00397
00400 virtual void OnGatekeeperReject();
00401
00404 virtual void OnRegistrationConfirm();
00405
00408 virtual void OnRegistrationReject();
00410
00415 virtual PBoolean NewIncomingConnection(
00416 OpalTransport * transport
00417 );
00418
00421 virtual H323Connection * CreateConnection(
00422 OpalCall & call,
00423 const PString & token,
00424 void * userData,
00425 OpalTransport & transport,
00426 const PString & alias,
00427 const H323TransportAddress & address,
00428 H323SignalPDU * setupPDU,
00429 unsigned options = 0,
00430 OpalConnection::StringOptions * stringOptions = NULL
00431 );
00432
00448 virtual PBoolean SetupTransfer(
00449 const PString & token,
00450 const PString & callIdentity,
00451 const PString & remoteParty,
00452 void * userData = NULL
00453 );
00454
00460 void TransferCall(
00461 const PString & token,
00462 const PString & remoteParty,
00463 const PString & callIdentity = PString::Empty()
00465 );
00466
00473 void ConsultationTransfer(
00474 const PString & primaryCallToken,
00475 const PString & secondaryCallToken
00476 );
00477
00481 void HoldCall(
00482 const PString & token,
00483 PBoolean localHold
00484 );
00485
00489 PBoolean IntrudeCall(
00490 const PString & remoteParty,
00491 unsigned capabilityLevel,
00492 void * userData = NULL
00493 );
00494
00501 PBoolean ParsePartyName(
00502 const PString & party,
00503 PString & alias,
00504 H323TransportAddress & address
00505 );
00506
00517 PSafePtr<H323Connection> FindConnectionWithLock(
00518 const PString & token,
00519 PSafetyMode mode = PSafeReadWrite
00520 );
00521
00529 virtual PBoolean OnSendSignalSetup(H323Connection & connection,
00530 H323SignalPDU & setupPDU);
00531
00543 virtual PBoolean OnSendCallProceeding(H323Connection & connection,
00544 H323SignalPDU & callProceedingPDU
00545 );
00546
00558 virtual PBoolean OnSendConnect(H323Connection & connection,
00559 H323SignalPDU & connectPDU
00560 );
00561
00573 virtual PBoolean OnIncomingCall(
00574 H323Connection & connection,
00575 const H323SignalPDU & setupPDU,
00576 H323SignalPDU & alertingPDU
00577 );
00578
00585 virtual PBoolean OnOutgoingCall(
00586 H323Connection & conn,
00587 const H323SignalPDU & connectPDU
00588 );
00589
00594 virtual PBoolean OnCallTransferInitiate(
00595 H323Connection & connection,
00596 const PString & remoteParty
00597 );
00598
00603 virtual PBoolean OnCallTransferIdentify(
00604 H323Connection & connection
00605 );
00606
00611 virtual void OnSendARQ(
00612 H323Connection & conn,
00613 H225_AdmissionRequest & arq
00614 );
00615
00622 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00623 H323Connection & connection,
00624 const PString & callerName,
00625 const H323SignalPDU & setupPDU,
00626 H323SignalPDU & connectPDU,
00627 H323SignalPDU & progressPDU
00628 );
00629 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00630 OpalConnection & connection,
00631 const PString & caller
00632 );
00633
00644 virtual PBoolean OnAlerting(
00645 H323Connection & connection,
00646 const H323SignalPDU & alertingPDU,
00647 const PString & user
00648 );
00649
00655 virtual PBoolean OnSendAlerting(H323Connection & connection,
00656 H323SignalPDU & alerting,
00657 const PString & calleeName,
00658 PBoolean withMedia
00659 );
00660
00665 virtual PBoolean OnSentAlerting(H323Connection & connection);
00666
00675 virtual PBoolean OnConnectionForwarded(
00676 H323Connection & connection,
00677 const PString & forwardParty,
00678 const H323SignalPDU & pdu
00679 );
00680
00689 virtual PBoolean ForwardConnection(
00690 H323Connection & connection,
00691 const PString & forwardParty,
00692 const H323SignalPDU & pdu
00693 );
00694
00701 virtual void OnConnectionEstablished(
00702 H323Connection & connection,
00703 const PString & token
00704 );
00705
00708 virtual PBoolean IsConnectionEstablished(
00709 const PString & token
00710 );
00711
00718 virtual void OnConnectionCleared(
00719 H323Connection & connection,
00720 const PString & token
00721 );
00723
00724
00731 virtual PBoolean OnStartLogicalChannel(
00732 H323Connection & connection,
00733 H323Channel & channel
00734 );
00735
00740 virtual void OnClosedLogicalChannel(
00741 H323Connection & connection,
00742 const H323Channel & channel
00743 );
00744
00752 virtual void OnRTPStatistics(
00753 const H323Connection & connection,
00754 const RTP_Session & session
00755 ) const;
00756
00762 virtual void OnGatekeeperNATDetect(
00763 PIPSocket::Address publicAddr,
00764 PString & gkIdentifier,
00765 H323TransportAddress & gkRouteAddress
00766 );
00768
00778 virtual void OnHTTPServiceControl(
00779 unsigned operation,
00780 unsigned sessionId,
00781 const PString & url
00782 );
00783
00793 virtual void OnCallCreditServiceControl(
00794 const PString & amount,
00795 PBoolean mode
00796 );
00797
00801 virtual void OnServiceControlSession(
00802 unsigned type,
00803 unsigned sessionid,
00804 const H323ServiceControlSession & session,
00805 H323Connection * connection
00806 );
00807
00810 virtual H323ServiceControlSession * CreateServiceControlSession(
00811 const H225_ServiceControlDescriptor & contents
00812 );
00814
00822 virtual PBoolean OnConferenceInvite(
00823 const H323SignalPDU & setupPDU
00824 );
00825
00831 virtual PBoolean OnCallIndependentSupplementaryService(
00832 const H323SignalPDU & setupPDU
00833 );
00834
00840 virtual PBoolean OnNegotiateConferenceCapabilities(
00841 const H323SignalPDU & setupPDU
00842 );
00844
00855 virtual void SetLocalUserName(
00856 const PString & name
00857 );
00858
00863 virtual const PString & GetLocalUserName() const { return localAliasNames.front(); }
00864
00871 PBoolean AddAliasName(
00872 const PString & name
00873 );
00874
00878 PBoolean RemoveAliasName(
00879 const PString & name
00880 );
00881
00886 const PStringList & GetAliasNames() const { return localAliasNames; }
00887
00890 const PStringList & GetAliasNamePatterns() const { return localAliasPatterns; }
00891
00895 PBoolean AddAliasNamePattern(
00896 const PString & pattern
00897 );
00898
00901 const PString & GetDefaultILSServer() const { return manager.GetDefaultILSServer(); }
00902
00905 void SetDefaultILSServer(
00906 const PString & server
00907 ) { manager.SetDefaultILSServer(server); }
00908
00911 PBoolean IsFastStartDisabled() const
00912 { return disableFastStart; }
00913
00916 void DisableFastStart(
00917 PBoolean mode
00918 ) { disableFastStart = mode; }
00919
00922 PBoolean IsH245TunnelingDisabled() const
00923 { return disableH245Tunneling; }
00924
00927 void DisableH245Tunneling(
00928 PBoolean mode
00929 ) { disableH245Tunneling = mode; }
00930
00933 PBoolean IsH245inSetupDisabled() const
00934 { return disableH245inSetup; }
00935
00938 void DisableH245inSetup(
00939 PBoolean mode
00940 ) { disableH245inSetup = mode; }
00941
00945 PBoolean IsH245Disabled() const
00946 { return m_bH245Disabled; }
00947
00951 void DisableH245(PBoolean bH245Disabled) { m_bH245Disabled = bH245Disabled; }
00952
00955 PBoolean CanDisplayAmountString() const
00956 { return canDisplayAmountString; }
00957
00960 void SetCanDisplayAmountString(
00961 PBoolean mode
00962 ) { canDisplayAmountString = mode; }
00963
00966 PBoolean CanEnforceDurationLimit() const
00967 { return canEnforceDurationLimit; }
00968
00971 void SetCanEnforceDurationLimit(
00972 PBoolean mode
00973 ) { canEnforceDurationLimit = mode; }
00974
00975 #if OPAL_H450
00976
00978 unsigned GetCallIntrusionProtectionLevel() const { return callIntrusionProtectionLevel; }
00979
00982 void SetCallIntrusionProtectionLevel(
00983 unsigned level
00984 ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; }
00985 #endif
00986
00989 virtual void OnReceivedInitiateReturnError();
00990
00991 #if OPAL_VIDEO
00992
00994 PBoolean CanAutoStartReceiveVideo() const { return manager.CanAutoStartReceiveVideo(); }
00995
00998 PBoolean CanAutoStartTransmitVideo() const { return manager.CanAutoStartTransmitVideo(); }
00999 #endif
01000
01001 #if OPAL_T38_CAPABILITY
01002
01004 PBoolean CanAutoStartReceiveFax() const { return autoStartReceiveFax; }
01005
01008 PBoolean CanAutoStartTransmitFax() const { return autoStartTransmitFax; }
01009 #endif
01010
01013 PBoolean CanAutoCallForward() const { return autoCallForward; }
01014
01017 const H323Capabilities & GetCapabilities() const;
01018
01021 enum TerminalTypes {
01022 e_TerminalOnly = 50,
01023 e_TerminalAndMC = 70,
01024 e_GatewayOnly = 60,
01025 e_GatewayAndMC = 80,
01026 e_GatewayAndMCWithDataMP = 90,
01027 e_GatewayAndMCWithAudioMP = 100,
01028 e_GatewayAndMCWithAVMP = 110,
01029 e_GatekeeperOnly = 120,
01030 e_GatekeeperWithDataMP = 130,
01031 e_GatekeeperWithAudioMP = 140,
01032 e_GatekeeperWithAVMP = 150,
01033 e_MCUOnly = 160,
01034 e_MCUWithDataMP = 170,
01035 e_MCUWithAudioMP = 180,
01036 e_MCUWithAVMP = 190
01037 };
01038
01041 TerminalTypes GetTerminalType() const { return terminalType; }
01042
01045 PBoolean IsTerminal() const;
01046
01049 PBoolean IsGateway() const;
01050
01053 PBoolean IsGatekeeper() const;
01054
01057 PBoolean IsMCU() const;
01058
01062 unsigned GetMinAudioJitterDelay() const { return manager.GetMinAudioJitterDelay(); }
01063
01067 unsigned GetMaxAudioJitterDelay() const { return manager.GetMaxAudioJitterDelay(); }
01068
01071 void SetAudioJitterDelay(
01072 unsigned minDelay,
01073 unsigned maxDelay
01074 ) { manager.SetAudioJitterDelay(minDelay, maxDelay); }
01075
01078 unsigned GetInitialBandwidth() const { return initialBandwidth; }
01079
01082 void SetInitialBandwidth(unsigned bandwidth) { initialBandwidth = bandwidth; }
01083
01086 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &);
01087
01090 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &);
01091
01095 virtual void LoadBaseFeatureSet();
01096
01101 virtual bool OnFeatureInstance(
01102 int instType,
01103 const PString & identifer
01104 );
01105
01106 #if OPAL_H460
01107
01109 bool FeatureSetDisabled() const { return disableH460; }
01110
01113 void FeatureSetDisable() { disableH460 = true; }
01114
01118 H460_FeatureSet * GetFeatureSet() { return features.DeriveNewFeatureSet(); };
01119 #endif
01120
01123 virtual PBoolean IsLocalAddress(
01124 const PIPSocket::Address & remoteAddress
01125 ) const { return manager.IsLocalAddress(remoteAddress); }
01126
01129 virtual void TranslateTCPAddress(
01130 PIPSocket::Address & localAddr,
01131 const PIPSocket::Address & remoteAddr
01132 );
01133
01136 WORD GetTCPPortBase() const { return manager.GetTCPPortBase(); }
01137
01140 WORD GetTCPPortMax() const { return manager.GetTCPPortMax(); }
01141
01144 void SetTCPPorts(unsigned tcpBase, unsigned tcpMax) { manager.SetTCPPorts(tcpBase, tcpMax); }
01145
01148 WORD GetNextTCPPort() { return manager.GetNextTCPPort(); }
01149
01152 WORD GetUDPPortBase() const { return manager.GetUDPPortBase(); }
01153
01156 WORD GetUDPPortMax() const { return manager.GetUDPPortMax(); }
01157
01160 void SetUDPPorts(unsigned udpBase, unsigned udpMax) { manager.SetUDPPorts(udpBase, udpMax); }
01161
01164 WORD GetNextUDPPort() { return manager.GetNextUDPPort(); }
01165
01168 WORD GetRtpIpPortBase() const { return manager.GetRtpIpPortBase(); }
01169
01172 WORD GetRtpIpPortMax() const { return manager.GetRtpIpPortMax(); }
01173
01176 void SetRtpIpPorts(unsigned udpBase, unsigned udpMax) { manager.SetRtpIpPorts(udpBase, udpMax); }
01177
01180 WORD GetRtpIpPortPair() { return manager.GetRtpIpPortPair(); }
01181
01184 BYTE GetRtpIpTypeofService() const { return manager.GetRtpIpTypeofService(); }
01185
01188 void SetRtpIpTypeofService(unsigned tos) { manager.SetRtpIpTypeofService(tos); }
01189
01192 const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; }
01193
01196 const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; }
01197
01200 const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; }
01201
01204 const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; }
01205
01208 unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; }
01209
01212 const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; }
01213
01216 const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; }
01217
01220 const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; }
01221
01224 const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; }
01225
01228 const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; }
01229
01232 PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; }
01233
01236 const PTimeInterval & GetNoMediaTimeout() const { return manager.GetNoMediaTimeout(); }
01237
01240 PBoolean SetNoMediaTimeout(
01241 const PTimeInterval & newInterval
01242 ) { return manager.SetNoMediaTimeout(newInterval); }
01243
01246 const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; }
01247
01250 unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; }
01251
01254 const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; }
01255
01258 unsigned GetRasRequestRetries() const { return rasRequestRetries; }
01259
01263 const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; }
01264
01268 void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; }
01269
01272 const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; }
01273
01276 void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; }
01277
01280 PBoolean GetSendGRQ() const
01281 { return sendGRQ; }
01282
01285 void SetSendGRQ(PBoolean v)
01286 { sendGRQ = v; }
01287
01290 const PTimeInterval & GetCallTransferT1() const { return callTransferT1; }
01291
01294 const PTimeInterval & GetCallTransferT2() const { return callTransferT2; }
01295
01298 const PTimeInterval & GetCallTransferT3() const { return callTransferT3; }
01299
01302 const PTimeInterval & GetCallTransferT4() const { return callTransferT4; }
01303
01305 const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; }
01306 const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; }
01307 const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; }
01308 const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; }
01309 const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; }
01310 const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; }
01311
01314 H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; }
01315
01318 #if OPAL_H450
01319 unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; }
01320 #endif
01321
01322 PString GetDefaultTransport() const;
01324
01325 protected:
01326 bool InternalCreateGatekeeper(H323Transport * transport);
01327 PBoolean InternalMakeCall(
01328 OpalCall & call,
01329 const PString & existingToken,
01330 const PString & callIdentity,
01331 unsigned capabilityLevel,
01332 const PString & remoteParty,
01333 void * userData,
01334 unsigned int options = 0,
01335 OpalConnection::StringOptions * stringOptions = NULL
01336 );
01337
01338
01339 PStringList localAliasNames;
01340 PStringList localAliasPatterns;
01341 PBoolean autoStartReceiveFax;
01342 PBoolean autoStartTransmitFax;
01343 PBoolean isH224Enabled;
01344 PBoolean autoCallForward;
01345 PBoolean disableFastStart;
01346 PBoolean disableH245Tunneling;
01347 PBoolean disableH245inSetup;
01348 PBoolean m_bH245Disabled;
01349 PBoolean canDisplayAmountString;
01350 PBoolean canEnforceDurationLimit;
01351 #if OPAL_H450
01352 unsigned callIntrusionProtectionLevel;
01353 #endif
01354
01355 TerminalTypes terminalType;
01356
01357 PBoolean clearCallOnRoundTripFail;
01358
01359
01360 PTimeInterval signallingChannelCallTimeout;
01361 PTimeInterval controlChannelStartTimeout;
01362 PTimeInterval endSessionTimeout;
01363 PTimeInterval masterSlaveDeterminationTimeout;
01364 unsigned masterSlaveDeterminationRetries;
01365 PTimeInterval capabilityExchangeTimeout;
01366 PTimeInterval logicalChannelTimeout;
01367 PTimeInterval requestModeTimeout;
01368 PTimeInterval roundTripDelayTimeout;
01369 PTimeInterval roundTripDelayRate;
01370 PTimeInterval gatekeeperRequestTimeout;
01371 unsigned gatekeeperRequestRetries;
01372 PTimeInterval rasRequestTimeout;
01373 unsigned rasRequestRetries;
01374 PTimeInterval registrationTimeToLive;
01375
01376 PString gkAccessTokenOID;
01377 PBoolean sendGRQ;
01378
01379
01380
01381 PTimeInterval callTransferT1;
01382
01383
01384 PTimeInterval callTransferT2;
01385
01386
01387 PTimeInterval callTransferT3;
01388
01389
01390 PTimeInterval callTransferT4;
01391
01393 PTimeInterval callIntrusionT1;
01394 PTimeInterval callIntrusionT2;
01395 PTimeInterval callIntrusionT3;
01396 PTimeInterval callIntrusionT4;
01397 PTimeInterval callIntrusionT5;
01398 PTimeInterval callIntrusionT6;
01399
01400
01401 mutable H323Capabilities capabilities;
01402 H323Gatekeeper * gatekeeper;
01403 PString gatekeeperUsername;
01404 PString gatekeeperPassword;
01405 H323CallIdentityDict secondaryConnectionsActive;
01406
01407 #if OPAL_H450
01408 mutable PAtomicInteger nextH450CallIdentity;
01410 #endif
01411
01412 #if OPAL_H460
01413 bool disableH460;
01414 H460_FeatureSet features;
01415 #endif
01416
01417 };
01418
01419 #endif // __OPAL_H323EP_H
01420
01421