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
00053 #if OPAL_H460
00054 #include <h460/h4601.h>
00055 #endif
00056
00057
00058 class H225_EndpointType;
00059 class H225_VendorIdentifier;
00060 class H225_H221NonStandard;
00061 class H225_ServiceControlDescriptor;
00062 class H225_FeatureSet;
00063
00064 class H235SecurityInfo;
00065
00066 class H323Gatekeeper;
00067 class H323SignalPDU;
00068 class H323ServiceControlSession;
00069
00071
00084 class H323EndPoint : public OpalRTPEndPoint
00085 {
00086 PCLASSINFO(H323EndPoint, OpalRTPEndPoint);
00087
00088 public:
00089 enum {
00090 DefaultTcpSignalPort = 1720
00091 };
00092
00097 H323EndPoint(
00098 OpalManager & manager
00099 );
00100
00103 ~H323EndPoint();
00105
00112 virtual void ShutDown();
00113
00143 virtual PBoolean MakeConnection(
00144 OpalCall & call,
00145 const PString & party,
00146 void * userData = NULL,
00147 unsigned int options = NULL,
00148 OpalConnection::StringOptions * stringOptions = NULL
00149 );
00151
00156 virtual void SetEndpointTypeInfo(
00157 H225_EndpointType & info
00158 ) const;
00159
00162 virtual void SetVendorIdentifierInfo(
00163 H225_VendorIdentifier & info
00164 ) const;
00165
00168 virtual void SetH221NonStandardInfo(
00169 H225_H221NonStandard & info
00170 ) const;
00171
00174 virtual bool SetGatewaySupportedProtocol(
00175 H225_ArrayOf_SupportedProtocols & protocols
00176 ) const;
00177
00181 virtual bool OnSetGatewayPrefixes(
00182 PStringList & prefixes
00183 ) const;
00185
00186
00197 void AddCapability(
00198 H323Capability * capability
00199 );
00200
00221 PINDEX SetCapability(
00222 PINDEX descriptorNum,
00223 PINDEX simultaneous,
00224 H323Capability * cap
00225 );
00226
00231 PINDEX AddAllCapabilities(
00232 PINDEX descriptorNum,
00233 PINDEX simultaneous,
00234 const PString & name
00235 );
00236
00239 void AddAllUserInputCapabilities(
00240 PINDEX descriptorNum,
00241 PINDEX simultaneous
00242 );
00243
00246 void RemoveCapabilities(
00247 const PStringArray & codecNames
00248 );
00249
00252 void ReorderCapabilities(
00253 const PStringArray & preferenceOrder
00254 );
00255
00258 H323Capability * FindCapability(
00259 const H245_Capability & cap
00260 ) const;
00261
00264 H323Capability * FindCapability(
00265 const H245_DataType & dataType
00266 ) const;
00267
00270 H323Capability * FindCapability(
00271 H323Capability::MainTypes mainType,
00272 unsigned subType
00273 ) const;
00275
00298 PBoolean UseGatekeeper(
00299 const PString & address = PString::Empty(),
00300 const PString & identifier = PString::Empty(),
00301 const PString & localAddress = PString::Empty()
00302 );
00303
00314 PBoolean SetGatekeeper(
00315 const PString & address,
00316 H323Transport * transport = NULL
00317 );
00318
00333 PBoolean SetGatekeeperZone(
00334 const PString & address,
00335 const PString & identifier,
00336 H323Transport * transport = NULL
00337 );
00338
00348 PBoolean LocateGatekeeper(
00349 const PString & identifier,
00350 H323Transport * transport = NULL
00351 );
00352
00361 PBoolean DiscoverGatekeeper(
00362 H323Transport * transport = NULL
00363 );
00364
00372 virtual H323Gatekeeper * CreateGatekeeper(
00373 H323Transport * transport
00374 );
00375
00378 H323Gatekeeper * GetGatekeeper() const { return gatekeeper; }
00379
00382 PBoolean IsRegisteredWithGatekeeper() const;
00383
00389 PBoolean RemoveGatekeeper(
00390 int reason = -1
00391 );
00392
00395 virtual void SetGatekeeperPassword(
00396 const PString & password,
00397 const PString & username = PString::Empty()
00398 );
00399
00402 virtual const PString & GetGatekeeperUsername() const { return gatekeeperUsername; }
00403
00406 virtual const PString & GetGatekeeperPassword() const { return gatekeeperPassword; }
00407
00410 virtual H235Authenticators CreateAuthenticators();
00411
00414 virtual void OnGatekeeperConfirm();
00415
00418 virtual void OnGatekeeperReject();
00419
00422 virtual void OnRegistrationConfirm();
00423
00426 virtual void OnRegistrationReject();
00428
00433 virtual PBoolean NewIncomingConnection(
00434 OpalTransport * transport
00435 );
00436
00439 virtual H323Connection * CreateConnection(
00440 OpalCall & call,
00441 const PString & token,
00442 void * userData,
00443 OpalTransport & transport,
00444 const PString & alias,
00445 const H323TransportAddress & address,
00446 H323SignalPDU * setupPDU,
00447 unsigned options = 0,
00448 OpalConnection::StringOptions * stringOptions = NULL
00449 );
00450
00466 virtual PBoolean SetupTransfer(
00467 const PString & token,
00468 const PString & callIdentity,
00469 const PString & remoteParty,
00470 void * userData = NULL
00471 );
00472
00478 void TransferCall(
00479 const PString & token,
00480 const PString & remoteParty,
00481 const PString & callIdentity = PString::Empty()
00483 );
00484
00491 void ConsultationTransfer(
00492 const PString & primaryCallToken,
00493 const PString & secondaryCallToken
00494 );
00495
00499 void HoldCall(
00500 const PString & token,
00501 PBoolean localHold
00502 );
00503
00507 PBoolean IntrudeCall(
00508 const PString & remoteParty,
00509 unsigned capabilityLevel,
00510 void * userData = NULL
00511 );
00512
00519 PBoolean ParsePartyName(
00520 const PString & party,
00521 PString & alias,
00522 H323TransportAddress & address
00523 );
00524
00535 PSafePtr<H323Connection> FindConnectionWithLock(
00536 const PString & token,
00537 PSafetyMode mode = PSafeReadWrite
00538 );
00539
00547 virtual PBoolean OnSendSignalSetup(H323Connection & connection,
00548 H323SignalPDU & setupPDU);
00549
00561 virtual PBoolean OnSendCallProceeding(H323Connection & connection,
00562 H323SignalPDU & callProceedingPDU
00563 );
00564
00576 virtual PBoolean OnSendConnect(H323Connection & connection,
00577 H323SignalPDU & connectPDU
00578 );
00579
00591 virtual PBoolean OnIncomingCall(
00592 H323Connection & connection,
00593 const H323SignalPDU & setupPDU,
00594 H323SignalPDU & alertingPDU
00595 );
00596
00603 virtual PBoolean OnOutgoingCall(
00604 H323Connection & conn,
00605 const H323SignalPDU & connectPDU
00606 );
00607
00612 virtual PBoolean OnCallTransferInitiate(
00613 H323Connection & connection,
00614 const PString & remoteParty
00615 );
00616
00621 virtual PBoolean OnCallTransferIdentify(
00622 H323Connection & connection
00623 );
00624
00629 virtual void OnSendARQ(
00630 H323Connection & conn,
00631 H225_AdmissionRequest & arq
00632 );
00633
00640 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00641 H323Connection & connection,
00642 const PString & callerName,
00643 const H323SignalPDU & setupPDU,
00644 H323SignalPDU & connectPDU,
00645 H323SignalPDU & progressPDU
00646 );
00647 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00648 OpalConnection & connection,
00649 const PString & caller
00650 );
00651
00662 virtual PBoolean OnAlerting(
00663 H323Connection & connection,
00664 const H323SignalPDU & alertingPDU,
00665 const PString & user
00666 );
00667
00673 virtual PBoolean OnSendAlerting(H323Connection & connection,
00674 H323SignalPDU & alerting,
00675 const PString & calleeName,
00676 PBoolean withMedia
00677 );
00678
00683 virtual PBoolean OnSentAlerting(H323Connection & connection);
00684
00693 virtual PBoolean OnConnectionForwarded(
00694 H323Connection & connection,
00695 const PString & forwardParty,
00696 const H323SignalPDU & pdu
00697 );
00698
00707 virtual PBoolean ForwardConnection(
00708 H323Connection & connection,
00709 const PString & forwardParty,
00710 const H323SignalPDU & pdu
00711 );
00712
00719 virtual void OnConnectionEstablished(
00720 H323Connection & connection,
00721 const PString & token
00722 );
00723
00726 virtual PBoolean IsConnectionEstablished(
00727 const PString & token
00728 );
00729
00736 virtual void OnConnectionCleared(
00737 H323Connection & connection,
00738 const PString & token
00739 );
00741
00742
00749 virtual PBoolean OnStartLogicalChannel(
00750 H323Connection & connection,
00751 H323Channel & channel
00752 );
00753
00758 virtual void OnClosedLogicalChannel(
00759 H323Connection & connection,
00760 const H323Channel & channel
00761 );
00762
00770 virtual void OnRTPStatistics(
00771 const H323Connection & connection,
00772 const RTP_Session & session
00773 ) const;
00774
00780 virtual void OnGatekeeperNATDetect(
00781 PIPSocket::Address publicAddr,
00782 PString & gkIdentifier,
00783 H323TransportAddress & gkRouteAddress
00784 );
00786
00796 virtual void OnHTTPServiceControl(
00797 unsigned operation,
00798 unsigned sessionId,
00799 const PString & url
00800 );
00801
00811 virtual void OnCallCreditServiceControl(
00812 const PString & amount,
00813 PBoolean mode
00814 );
00815
00819 virtual void OnServiceControlSession(
00820 unsigned type,
00821 unsigned sessionid,
00822 const H323ServiceControlSession & session,
00823 H323Connection * connection
00824 );
00825
00828 virtual H323ServiceControlSession * CreateServiceControlSession(
00829 const H225_ServiceControlDescriptor & contents
00830 );
00832
00840 virtual PBoolean OnConferenceInvite(
00841 const H323SignalPDU & setupPDU
00842 );
00843
00849 virtual PBoolean OnCallIndependentSupplementaryService(
00850 const H323SignalPDU & setupPDU
00851 );
00852
00858 virtual PBoolean OnNegotiateConferenceCapabilities(
00859 const H323SignalPDU & setupPDU
00860 );
00862
00867 virtual void SetDefaultLocalPartyName(
00868 const PString & name
00869 );
00870
00879 virtual void SetLocalUserName(
00880 const PString & name
00881 );
00882
00887 virtual const PString & GetLocalUserName() const { return localAliasNames.front(); }
00888
00895 PBoolean AddAliasName(
00896 const PString & name
00897 );
00898
00902 PBoolean RemoveAliasName(
00903 const PString & name
00904 );
00905
00910 const PStringList & GetAliasNames() const { return localAliasNames; }
00911
00914 const PStringList & GetAliasNamePatterns() const { return localAliasPatterns; }
00915
00919 PBoolean AddAliasNamePattern(
00920 const PString & pattern
00921 );
00922
00925 const PString & GetDefaultILSServer() const { return manager.GetDefaultILSServer(); }
00926
00929 void SetDefaultILSServer(
00930 const PString & server
00931 ) { manager.SetDefaultILSServer(server); }
00932
00935 PBoolean IsFastStartDisabled() const
00936 { return disableFastStart; }
00937
00940 void DisableFastStart(
00941 PBoolean mode
00942 ) { disableFastStart = mode; }
00943
00946 PBoolean IsH245TunnelingDisabled() const
00947 { return disableH245Tunneling; }
00948
00951 void DisableH245Tunneling(
00952 PBoolean mode
00953 ) { disableH245Tunneling = mode; }
00954
00957 PBoolean IsH245inSetupDisabled() const
00958 { return disableH245inSetup; }
00959
00962 void DisableH245inSetup(
00963 PBoolean mode
00964 ) { disableH245inSetup = mode; }
00965
00969 PBoolean IsH245Disabled() const
00970 { return m_bH245Disabled; }
00971
00975 void DisableH245(PBoolean bH245Disabled) { m_bH245Disabled = bH245Disabled; }
00976
00979 PBoolean CanDisplayAmountString() const
00980 { return canDisplayAmountString; }
00981
00984 void SetCanDisplayAmountString(
00985 PBoolean mode
00986 ) { canDisplayAmountString = mode; }
00987
00990 PBoolean CanEnforceDurationLimit() const
00991 { return canEnforceDurationLimit; }
00992
00995 void SetCanEnforceDurationLimit(
00996 PBoolean mode
00997 ) { canEnforceDurationLimit = mode; }
00998
00999 #if OPAL_H450
01000
01002 unsigned GetCallIntrusionProtectionLevel() const { return callIntrusionProtectionLevel; }
01003
01006 void SetCallIntrusionProtectionLevel(
01007 unsigned level
01008 ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; }
01009 #endif
01010
01013 virtual void OnReceivedInitiateReturnError();
01014
01017 PBoolean CanAutoCallForward() const { return autoCallForward; }
01018
01021 const H323Capabilities & GetCapabilities() const;
01022
01025 enum TerminalTypes {
01026 e_TerminalOnly = 50,
01027 e_TerminalAndMC = 70,
01028 e_GatewayOnly = 60,
01029 e_GatewayAndMC = 80,
01030 e_GatewayAndMCWithDataMP = 90,
01031 e_GatewayAndMCWithAudioMP = 100,
01032 e_GatewayAndMCWithAVMP = 110,
01033 e_GatekeeperOnly = 120,
01034 e_GatekeeperWithDataMP = 130,
01035 e_GatekeeperWithAudioMP = 140,
01036 e_GatekeeperWithAVMP = 150,
01037 e_MCUOnly = 160,
01038 e_MCUWithDataMP = 170,
01039 e_MCUWithAudioMP = 180,
01040 e_MCUWithAVMP = 190
01041 };
01042
01045 TerminalTypes GetTerminalType() const { return terminalType; }
01046
01049 PBoolean IsTerminal() const;
01050
01053 PBoolean IsGateway() const;
01054
01057 PBoolean IsGatekeeper() const;
01058
01061 PBoolean IsMCU() const;
01062
01066 unsigned GetMinAudioJitterDelay() const { return manager.GetMinAudioJitterDelay(); }
01067
01071 unsigned GetMaxAudioJitterDelay() const { return manager.GetMaxAudioJitterDelay(); }
01072
01075 void SetAudioJitterDelay(
01076 unsigned minDelay,
01077 unsigned maxDelay
01078 ) { manager.SetAudioJitterDelay(minDelay, maxDelay); }
01079
01082 unsigned GetInitialBandwidth() const { return initialBandwidth; }
01083
01086 void SetInitialBandwidth(unsigned bandwidth) { initialBandwidth = bandwidth; }
01087
01090 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &);
01091
01094 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &);
01095
01099 virtual void LoadBaseFeatureSet();
01100
01105 virtual bool OnFeatureInstance(
01106 int instType,
01107 const PString & identifer
01108 );
01109
01110 #if OPAL_H460
01111
01113 bool FeatureSetDisabled() const { return disableH460; }
01114
01117 void FeatureSetDisable() { disableH460 = true; }
01118
01122 H460_FeatureSet * GetFeatureSet() { return features.DeriveNewFeatureSet(); };
01123 #endif
01124
01127 virtual PBoolean IsLocalAddress(
01128 const PIPSocket::Address & remoteAddress
01129 ) const { return manager.IsLocalAddress(remoteAddress); }
01130
01133 virtual void TranslateTCPAddress(
01134 PIPSocket::Address & localAddr,
01135 const PIPSocket::Address & remoteAddr
01136 );
01137
01140 WORD GetTCPPortBase() const { return manager.GetTCPPortBase(); }
01141
01144 WORD GetTCPPortMax() const { return manager.GetTCPPortMax(); }
01145
01148 void SetTCPPorts(unsigned tcpBase, unsigned tcpMax) { manager.SetTCPPorts(tcpBase, tcpMax); }
01149
01152 WORD GetNextTCPPort() { return manager.GetNextTCPPort(); }
01153
01156 WORD GetUDPPortBase() const { return manager.GetUDPPortBase(); }
01157
01160 WORD GetUDPPortMax() const { return manager.GetUDPPortMax(); }
01161
01164 void SetUDPPorts(unsigned udpBase, unsigned udpMax) { manager.SetUDPPorts(udpBase, udpMax); }
01165
01168 WORD GetNextUDPPort() { return manager.GetNextUDPPort(); }
01169
01172 WORD GetRtpIpPortBase() const { return manager.GetRtpIpPortBase(); }
01173
01176 WORD GetRtpIpPortMax() const { return manager.GetRtpIpPortMax(); }
01177
01180 void SetRtpIpPorts(unsigned udpBase, unsigned udpMax) { manager.SetRtpIpPorts(udpBase, udpMax); }
01181
01184 WORD GetRtpIpPortPair() { return manager.GetRtpIpPortPair(); }
01185
01188 BYTE GetRtpIpTypeofService() const { return manager.GetRtpIpTypeofService(); }
01189
01192 void SetRtpIpTypeofService(unsigned tos) { manager.SetRtpIpTypeofService(tos); }
01193
01196 const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; }
01197
01200 const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; }
01201
01204 const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; }
01205
01208 const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; }
01209
01212 unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; }
01213
01216 const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; }
01217
01220 const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; }
01221
01224 const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; }
01225
01228 const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; }
01229
01232 const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; }
01233
01236 PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; }
01237
01240 const PTimeInterval & GetNoMediaTimeout() const { return manager.GetNoMediaTimeout(); }
01241
01244 PBoolean SetNoMediaTimeout(
01245 const PTimeInterval & newInterval
01246 ) { return manager.SetNoMediaTimeout(newInterval); }
01247
01250 const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; }
01251
01254 unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; }
01255
01258 const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; }
01259
01262 unsigned GetRasRequestRetries() const { return rasRequestRetries; }
01263
01267 const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; }
01268
01272 void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; }
01273
01276 const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; }
01277
01280 void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; }
01281
01284 PBoolean GetSendGRQ() const
01285 { return sendGRQ; }
01286
01289 void SetSendGRQ(PBoolean v)
01290 { sendGRQ = v; }
01291
01294 const PTimeInterval & GetCallTransferT1() const { return callTransferT1; }
01295
01298 const PTimeInterval & GetCallTransferT2() const { return callTransferT2; }
01299
01302 const PTimeInterval & GetCallTransferT3() const { return callTransferT3; }
01303
01306 const PTimeInterval & GetCallTransferT4() const { return callTransferT4; }
01307
01309 const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; }
01310 const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; }
01311 const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; }
01312 const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; }
01313 const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; }
01314 const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; }
01315
01318 H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; }
01319
01322 #if OPAL_H450
01323 unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; }
01324 #endif
01325
01326 PString GetDefaultTransport() const;
01328
01329 protected:
01330 bool InternalCreateGatekeeper(H323Transport * transport);
01331 PBoolean InternalMakeCall(
01332 OpalCall & call,
01333 const PString & existingToken,
01334 const PString & callIdentity,
01335 unsigned capabilityLevel,
01336 const PString & remoteParty,
01337 void * userData,
01338 unsigned int options = 0,
01339 OpalConnection::StringOptions * stringOptions = NULL
01340 );
01341
01342
01343 PStringList localAliasNames;
01344 PStringList localAliasPatterns;
01345 PBoolean autoCallForward;
01346 PBoolean disableFastStart;
01347 PBoolean disableH245Tunneling;
01348 PBoolean disableH245inSetup;
01349 PBoolean m_bH245Disabled;
01350 PBoolean canDisplayAmountString;
01351 PBoolean canEnforceDurationLimit;
01352 #if OPAL_H450
01353 unsigned callIntrusionProtectionLevel;
01354 #endif
01355
01356 TerminalTypes terminalType;
01357
01358 PBoolean clearCallOnRoundTripFail;
01359
01360
01361 PTimeInterval signallingChannelCallTimeout;
01362 PTimeInterval controlChannelStartTimeout;
01363 PTimeInterval endSessionTimeout;
01364 PTimeInterval masterSlaveDeterminationTimeout;
01365 unsigned masterSlaveDeterminationRetries;
01366 PTimeInterval capabilityExchangeTimeout;
01367 PTimeInterval logicalChannelTimeout;
01368 PTimeInterval requestModeTimeout;
01369 PTimeInterval roundTripDelayTimeout;
01370 PTimeInterval roundTripDelayRate;
01371 PTimeInterval gatekeeperRequestTimeout;
01372 unsigned gatekeeperRequestRetries;
01373 PTimeInterval rasRequestTimeout;
01374 unsigned rasRequestRetries;
01375 PTimeInterval registrationTimeToLive;
01376
01377 PString gkAccessTokenOID;
01378 PBoolean sendGRQ;
01379
01380
01381
01382 PTimeInterval callTransferT1;
01383
01384
01385 PTimeInterval callTransferT2;
01386
01387
01388 PTimeInterval callTransferT3;
01389
01390
01391 PTimeInterval callTransferT4;
01392
01394 PTimeInterval callIntrusionT1;
01395 PTimeInterval callIntrusionT2;
01396 PTimeInterval callIntrusionT3;
01397 PTimeInterval callIntrusionT4;
01398 PTimeInterval callIntrusionT5;
01399 PTimeInterval callIntrusionT6;
01400
01401
01402 mutable H323Capabilities capabilities;
01403 H323Gatekeeper * gatekeeper;
01404 PString gatekeeperUsername;
01405 PString gatekeeperPassword;
01406 H323CallIdentityDict secondaryConnectionsActive;
01407
01408 #if OPAL_H450
01409 mutable PAtomicInteger nextH450CallIdentity;
01411 #endif
01412
01413 #if OPAL_H460
01414 bool disableH460;
01415 H460_FeatureSet features;
01416 #endif
01417
01418 };
01419
01420 #endif // OPAL_H323
01421
01422 #endif // OPAL_H323_H323EP_H
01423
01424