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/endpoint.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 H323_H460
00051 #include <h323/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 OpalEndPoint
00082 {
00083 PCLASSINFO(H323EndPoint, OpalEndPoint);
00084
00085 public:
00086 enum {
00087 DefaultTcpSignalPort = 1720
00088 };
00089
00094 H323EndPoint(
00095 OpalManager & manager
00096 );
00097
00100 ~H323EndPoint();
00102
00134 virtual PBoolean MakeConnection(
00135 OpalCall & call,
00136 const PString & party,
00137 void * userData = NULL,
00138 unsigned int options = NULL,
00139 OpalConnection::StringOptions * stringOptions = NULL
00140 );
00141
00151 virtual OpalMediaFormatList GetMediaFormats() const;
00153
00158 virtual void SetEndpointTypeInfo(
00159 H225_EndpointType & info
00160 ) const;
00161
00164 virtual void SetVendorIdentifierInfo(
00165 H225_VendorIdentifier & info
00166 ) const;
00167
00170 virtual void SetH221NonStandardInfo(
00171 H225_H221NonStandard & info
00172 ) const;
00174
00175
00186 void AddCapability(
00187 H323Capability * capability
00188 );
00189
00210 PINDEX SetCapability(
00211 PINDEX descriptorNum,
00212 PINDEX simultaneous,
00213 H323Capability * cap
00214 );
00215
00220 PINDEX AddAllCapabilities(
00221 PINDEX descriptorNum,
00222 PINDEX simultaneous,
00223 const PString & name
00224 );
00225
00228 void AddAllUserInputCapabilities(
00229 PINDEX descriptorNum,
00230 PINDEX simultaneous
00231 );
00232
00235 void RemoveCapabilities(
00236 const PStringArray & codecNames
00237 );
00238
00241 void ReorderCapabilities(
00242 const PStringArray & preferenceOrder
00243 );
00244
00247 H323Capability * FindCapability(
00248 const H245_Capability & cap
00249 ) const;
00250
00253 H323Capability * FindCapability(
00254 const H245_DataType & dataType
00255 ) const;
00256
00259 H323Capability * FindCapability(
00260 H323Capability::MainTypes mainType,
00261 unsigned subType
00262 ) const;
00264
00284 PBoolean UseGatekeeper(
00285 const PString & address = PString::Empty(),
00286 const PString & identifier = PString::Empty(),
00287 const PString & localAddress = PString::Empty()
00288 );
00289
00300 PBoolean SetGatekeeper(
00301 const PString & address,
00302 H323Transport * transport = NULL
00303 );
00304
00319 PBoolean SetGatekeeperZone(
00320 const PString & address,
00321 const PString & identifier,
00322 H323Transport * transport = NULL
00323 );
00324
00334 PBoolean LocateGatekeeper(
00335 const PString & identifier,
00336 H323Transport * transport = NULL
00337 );
00338
00347 PBoolean DiscoverGatekeeper(
00348 H323Transport * transport = NULL
00349 );
00350
00358 virtual H323Gatekeeper * CreateGatekeeper(
00359 H323Transport * transport
00360 );
00361
00364 H323Gatekeeper * GetGatekeeper() const { return gatekeeper; }
00365
00368 PBoolean IsRegisteredWithGatekeeper() const;
00369
00375 PBoolean RemoveGatekeeper(
00376 int reason = -1
00377 );
00378
00381 virtual void SetGatekeeperPassword(
00382 const PString & password,
00383 const PString & username = PString::Empty()
00384 );
00385
00388 virtual const PString & GetGatekeeperUsername() const { return gatekeeperUsername; }
00389
00392 virtual const PString & GetGatekeeperPassword() const { return gatekeeperPassword; }
00393
00396 virtual H235Authenticators CreateAuthenticators();
00397
00400 virtual void OnGatekeeperConfirm();
00401
00404 virtual void OnGatekeeperReject();
00405
00408 virtual void OnRegistrationConfirm();
00409
00412 virtual void OnRegistrationReject();
00414
00419 virtual PBoolean NewIncomingConnection(
00420 OpalTransport * transport
00421 );
00422
00425 virtual H323Connection * CreateConnection(
00426 OpalCall & call,
00427 const PString & token,
00428 void * userData,
00429 OpalTransport & transport,
00430 const PString & alias,
00431 const H323TransportAddress & address,
00432 H323SignalPDU * setupPDU,
00433 unsigned options = 0,
00434 OpalConnection::StringOptions * stringOptions = NULL
00435 );
00436
00452 virtual PBoolean SetupTransfer(
00453 const PString & token,
00454 const PString & callIdentity,
00455 const PString & remoteParty,
00456 void * userData = NULL
00457 );
00458
00464 void TransferCall(
00465 const PString & token,
00466 const PString & remoteParty,
00467 const PString & callIdentity = PString::Empty()
00469 );
00470
00477 void ConsultationTransfer(
00478 const PString & primaryCallToken,
00479 const PString & secondaryCallToken
00480 );
00481
00485 void HoldCall(
00486 const PString & token,
00487 PBoolean localHold
00488 );
00489
00493 PBoolean IntrudeCall(
00494 const PString & remoteParty,
00495 unsigned capabilityLevel,
00496 void * userData = NULL
00497 );
00498
00505 PBoolean ParsePartyName(
00506 const PString & party,
00507 PString & alias,
00508 H323TransportAddress & address
00509 );
00510
00521 PSafePtr<H323Connection> FindConnectionWithLock(
00522 const PString & token,
00523 PSafetyMode mode = PSafeReadWrite
00524 );
00525
00533 virtual PBoolean OnSendSignalSetup(H323Connection & connection,
00534 H323SignalPDU & setupPDU);
00535
00547 virtual PBoolean OnSendCallProceeding(H323Connection & connection,
00548 H323SignalPDU & callProceedingPDU
00549 );
00550
00562 virtual PBoolean OnSendConnect(H323Connection & connection,
00563 H323SignalPDU & connectPDU
00564 );
00565
00577 virtual PBoolean OnIncomingCall(
00578 H323Connection & connection,
00579 const H323SignalPDU & setupPDU,
00580 H323SignalPDU & alertingPDU
00581 );
00582
00589 virtual PBoolean OnOutgoingCall(
00590 H323Connection & conn,
00591 const H323SignalPDU & connectPDU
00592 );
00593
00598 virtual PBoolean OnCallTransferInitiate(
00599 H323Connection & connection,
00600 const PString & remoteParty
00601 );
00602
00607 virtual PBoolean OnCallTransferIdentify(
00608 H323Connection & connection
00609 );
00610
00615 virtual void OnSendARQ(
00616 H323Connection & conn,
00617 H225_AdmissionRequest & arq
00618 );
00619
00626 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00627 H323Connection & connection,
00628 const PString & callerName,
00629 const H323SignalPDU & setupPDU,
00630 H323SignalPDU & connectPDU,
00631 H323SignalPDU & progressPDU
00632 );
00633 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00634 OpalConnection & connection,
00635 const PString & caller
00636 );
00637
00648 virtual PBoolean OnAlerting(
00649 H323Connection & connection,
00650 const H323SignalPDU & alertingPDU,
00651 const PString & user
00652 );
00653
00659 virtual PBoolean OnSendAlerting(H323Connection & connection,
00660 H323SignalPDU & alerting,
00661 const PString & calleeName,
00662 PBoolean withMedia
00663 );
00664
00669 virtual PBoolean OnSentAlerting(H323Connection & connection);
00670
00679 virtual PBoolean OnConnectionForwarded(
00680 H323Connection & connection,
00681 const PString & forwardParty,
00682 const H323SignalPDU & pdu
00683 );
00684
00693 virtual PBoolean ForwardConnection(
00694 H323Connection & connection,
00695 const PString & forwardParty,
00696 const H323SignalPDU & pdu
00697 );
00698
00705 virtual void OnConnectionEstablished(
00706 H323Connection & connection,
00707 const PString & token
00708 );
00709
00712 virtual PBoolean IsConnectionEstablished(
00713 const PString & token
00714 );
00715
00722 virtual void OnConnectionCleared(
00723 H323Connection & connection,
00724 const PString & token
00725 );
00727
00728
00735 virtual PBoolean OnStartLogicalChannel(
00736 H323Connection & connection,
00737 H323Channel & channel
00738 );
00739
00744 virtual void OnClosedLogicalChannel(
00745 H323Connection & connection,
00746 const H323Channel & channel
00747 );
00748
00756 virtual void OnRTPStatistics(
00757 const H323Connection & connection,
00758 const RTP_Session & session
00759 ) const;
00760
00766 virtual void OnGatekeeperNATDetect(
00767 PIPSocket::Address publicAddr,
00768 PString & gkIdentifier,
00769 H323TransportAddress & gkRouteAddress
00770 );
00772
00782 virtual void OnHTTPServiceControl(
00783 unsigned operation,
00784 unsigned sessionId,
00785 const PString & url
00786 );
00787
00797 virtual void OnCallCreditServiceControl(
00798 const PString & amount,
00799 PBoolean mode
00800 );
00801
00805 virtual void OnServiceControlSession(
00806 unsigned type,
00807 unsigned sessionid,
00808 const H323ServiceControlSession & session,
00809 H323Connection * connection
00810 );
00811
00814 virtual H323ServiceControlSession * CreateServiceControlSession(
00815 const H225_ServiceControlDescriptor & contents
00816 );
00818
00826 virtual PBoolean OnConferenceInvite(
00827 const H323SignalPDU & setupPDU
00828 );
00829
00835 virtual PBoolean OnCallIndependentSupplementaryService(
00836 const H323SignalPDU & setupPDU
00837 );
00838
00844 virtual PBoolean OnNegotiateConferenceCapabilities(
00845 const H323SignalPDU & setupPDU
00846 );
00848
00859 virtual void SetLocalUserName(
00860 const PString & name
00861 );
00862
00867 virtual const PString & GetLocalUserName() const { return localAliasNames.front(); }
00868
00875 PBoolean AddAliasName(
00876 const PString & name
00877 );
00878
00882 PBoolean RemoveAliasName(
00883 const PString & name
00884 );
00885
00890 const PStringList & GetAliasNames() const { return localAliasNames; }
00891
00894 const PStringList & GetAliasNamePatterns() const { return localAliasPatterns; }
00895
00899 PBoolean AddAliasNamePattern(
00900 const PString & pattern
00901 );
00902
00905 const PString & GetDefaultILSServer() const { return manager.GetDefaultILSServer(); }
00906
00909 void SetDefaultILSServer(
00910 const PString & server
00911 ) { manager.SetDefaultILSServer(server); }
00912
00915 PBoolean IsFastStartDisabled() const
00916 { return disableFastStart; }
00917
00920 void DisableFastStart(
00921 PBoolean mode
00922 ) { disableFastStart = mode; }
00923
00926 PBoolean IsH245TunnelingDisabled() const
00927 { return disableH245Tunneling; }
00928
00931 void DisableH245Tunneling(
00932 PBoolean mode
00933 ) { disableH245Tunneling = mode; }
00934
00937 PBoolean IsH245inSetupDisabled() const
00938 { return disableH245inSetup; }
00939
00942 void DisableH245inSetup(
00943 PBoolean mode
00944 ) { disableH245inSetup = mode; }
00945
00949 PBoolean IsH245Disabled() const
00950 { return m_bH245Disabled; }
00951
00955 void DisableH245(PBoolean bH245Disabled) { m_bH245Disabled = bH245Disabled; }
00956
00959 PBoolean CanDisplayAmountString() const
00960 { return canDisplayAmountString; }
00961
00964 void SetCanDisplayAmountString(
00965 PBoolean mode
00966 ) { canDisplayAmountString = mode; }
00967
00970 PBoolean CanEnforceDurationLimit() const
00971 { return canEnforceDurationLimit; }
00972
00975 void SetCanEnforceDurationLimit(
00976 PBoolean mode
00977 ) { canEnforceDurationLimit = mode; }
00978
00979 #if OPAL_H450
00980
00982 unsigned GetCallIntrusionProtectionLevel() const { return callIntrusionProtectionLevel; }
00983
00986 void SetCallIntrusionProtectionLevel(
00987 unsigned level
00988 ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; }
00989 #endif
00990
00993 virtual void OnReceivedInitiateReturnError();
00994
00995 #if OPAL_VIDEO
00996
00998 PBoolean CanAutoStartReceiveVideo() const { return manager.CanAutoStartReceiveVideo(); }
00999
01002 PBoolean CanAutoStartTransmitVideo() const { return manager.CanAutoStartTransmitVideo(); }
01003 #endif
01004
01005 #if OPAL_T38FAX
01006
01008 PBoolean CanAutoStartReceiveFax() const { return autoStartReceiveFax; }
01009
01012 PBoolean CanAutoStartTransmitFax() const { return autoStartTransmitFax; }
01013 #endif
01014
01017 PBoolean IsH224Enabled() const { return isH224Enabled; }
01018
01021 void SetIsH224Enabled(PBoolean flag) { isH224Enabled = flag; }
01022
01025 PBoolean CanAutoCallForward() const { return autoCallForward; }
01026
01029 const H323Capabilities & GetCapabilities() const;
01030
01033 enum TerminalTypes {
01034 e_TerminalOnly = 50,
01035 e_TerminalAndMC = 70,
01036 e_GatewayOnly = 60,
01037 e_GatewayAndMC = 80,
01038 e_GatewayAndMCWithDataMP = 90,
01039 e_GatewayAndMCWithAudioMP = 100,
01040 e_GatewayAndMCWithAVMP = 110,
01041 e_GatekeeperOnly = 120,
01042 e_GatekeeperWithDataMP = 130,
01043 e_GatekeeperWithAudioMP = 140,
01044 e_GatekeeperWithAVMP = 150,
01045 e_MCUOnly = 160,
01046 e_MCUWithDataMP = 170,
01047 e_MCUWithAudioMP = 180,
01048 e_MCUWithAVMP = 190
01049 };
01050
01053 TerminalTypes GetTerminalType() const { return terminalType; }
01054
01057 PBoolean IsTerminal() const;
01058
01061 PBoolean IsGateway() const;
01062
01065 PBoolean IsGatekeeper() const;
01066
01069 PBoolean IsMCU() const;
01070
01074 unsigned GetMinAudioJitterDelay() const { return manager.GetMinAudioJitterDelay(); }
01075
01079 unsigned GetMaxAudioJitterDelay() const { return manager.GetMaxAudioJitterDelay(); }
01080
01083 void SetAudioJitterDelay(
01084 unsigned minDelay,
01085 unsigned maxDelay
01086 ) { manager.SetAudioJitterDelay(minDelay, maxDelay); }
01087
01090 unsigned GetInitialBandwidth() const { return initialBandwidth; }
01091
01094 void SetInitialBandwidth(unsigned bandwidth) { initialBandwidth = bandwidth; }
01095
01098 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &);
01099
01102 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &);
01103
01104 #ifdef H323_H460
01105
01107 H460_FeatureSet & GetFeatureSet() { return features; };
01108 #endif
01109
01112 virtual PBoolean IsLocalAddress(
01113 const PIPSocket::Address & remoteAddress
01114 ) const { return manager.IsLocalAddress(remoteAddress); }
01115
01118 virtual void TranslateTCPAddress(
01119 PIPSocket::Address & localAddr,
01120 const PIPSocket::Address & remoteAddr
01121 );
01122
01125 WORD GetTCPPortBase() const { return manager.GetTCPPortBase(); }
01126
01129 WORD GetTCPPortMax() const { return manager.GetTCPPortMax(); }
01130
01133 void SetTCPPorts(unsigned tcpBase, unsigned tcpMax) { manager.SetTCPPorts(tcpBase, tcpMax); }
01134
01137 WORD GetNextTCPPort() { return manager.GetNextTCPPort(); }
01138
01141 WORD GetUDPPortBase() const { return manager.GetUDPPortBase(); }
01142
01145 WORD GetUDPPortMax() const { return manager.GetUDPPortMax(); }
01146
01149 void SetUDPPorts(unsigned udpBase, unsigned udpMax) { manager.SetUDPPorts(udpBase, udpMax); }
01150
01153 WORD GetNextUDPPort() { return manager.GetNextUDPPort(); }
01154
01157 WORD GetRtpIpPortBase() const { return manager.GetRtpIpPortBase(); }
01158
01161 WORD GetRtpIpPortMax() const { return manager.GetRtpIpPortMax(); }
01162
01165 void SetRtpIpPorts(unsigned udpBase, unsigned udpMax) { manager.SetRtpIpPorts(udpBase, udpMax); }
01166
01169 WORD GetRtpIpPortPair() { return manager.GetRtpIpPortPair(); }
01170
01173 BYTE GetRtpIpTypeofService() const { return manager.GetRtpIpTypeofService(); }
01174
01177 void SetRtpIpTypeofService(unsigned tos) { manager.SetRtpIpTypeofService(tos); }
01178
01181 const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; }
01182
01185 const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; }
01186
01189 const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; }
01190
01193 const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; }
01194
01197 unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; }
01198
01201 const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; }
01202
01205 const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; }
01206
01209 const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; }
01210
01213 const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; }
01214
01217 const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; }
01218
01221 PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; }
01222
01225 const PTimeInterval & GetNoMediaTimeout() const { return manager.GetNoMediaTimeout(); }
01226
01229 PBoolean SetNoMediaTimeout(
01230 const PTimeInterval & newInterval
01231 ) { return manager.SetNoMediaTimeout(newInterval); }
01232
01235 const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; }
01236
01239 unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; }
01240
01243 const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; }
01244
01247 unsigned GetRasRequestRetries() const { return rasRequestRetries; }
01248
01252 const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; }
01253
01257 void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; }
01258
01261 const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; }
01262
01265 void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; }
01266
01269 PBoolean GetSendGRQ() const
01270 { return sendGRQ; }
01271
01274 void SetSendGRQ(PBoolean v)
01275 { sendGRQ = v; }
01276
01279 const PTimeInterval & GetCallTransferT1() const { return callTransferT1; }
01280
01283 const PTimeInterval & GetCallTransferT2() const { return callTransferT2; }
01284
01287 const PTimeInterval & GetCallTransferT3() const { return callTransferT3; }
01288
01291 const PTimeInterval & GetCallTransferT4() const { return callTransferT4; }
01292
01294 const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; }
01295 const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; }
01296 const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; }
01297 const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; }
01298 const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; }
01299 const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; }
01300
01303 H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; }
01304
01307 #if OPAL_H450
01308 unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; }
01309 #endif
01310
01311 PString GetDefaultTransport() const;
01313
01314 protected:
01315 H323Gatekeeper * InternalCreateGatekeeper(H323Transport * transport);
01316 PBoolean InternalRegisterGatekeeper(H323Gatekeeper * gk, PBoolean discovered);
01317 PBoolean InternalMakeCall(
01318 OpalCall & call,
01319 const PString & existingToken,
01320 const PString & callIdentity,
01321 unsigned capabilityLevel,
01322 const PString & remoteParty,
01323 void * userData,
01324 unsigned int options = 0,
01325 OpalConnection::StringOptions * stringOptions = NULL
01326 );
01327
01328
01329 PStringList localAliasNames;
01330 PStringList localAliasPatterns;
01331 PBoolean autoStartReceiveFax;
01332 PBoolean autoStartTransmitFax;
01333 PBoolean isH224Enabled;
01334 PBoolean autoCallForward;
01335 PBoolean disableFastStart;
01336 PBoolean disableH245Tunneling;
01337 PBoolean disableH245inSetup;
01338 PBoolean m_bH245Disabled;
01339 PBoolean canDisplayAmountString;
01340 PBoolean canEnforceDurationLimit;
01341 #if OPAL_H450
01342 unsigned callIntrusionProtectionLevel;
01343 #endif
01344
01345 TerminalTypes terminalType;
01346
01347 PBoolean clearCallOnRoundTripFail;
01348
01349
01350 PTimeInterval signallingChannelCallTimeout;
01351 PTimeInterval controlChannelStartTimeout;
01352 PTimeInterval endSessionTimeout;
01353 PTimeInterval masterSlaveDeterminationTimeout;
01354 unsigned masterSlaveDeterminationRetries;
01355 PTimeInterval capabilityExchangeTimeout;
01356 PTimeInterval logicalChannelTimeout;
01357 PTimeInterval requestModeTimeout;
01358 PTimeInterval roundTripDelayTimeout;
01359 PTimeInterval roundTripDelayRate;
01360 PTimeInterval gatekeeperRequestTimeout;
01361 unsigned gatekeeperRequestRetries;
01362 PTimeInterval rasRequestTimeout;
01363 unsigned rasRequestRetries;
01364 PTimeInterval registrationTimeToLive;
01365
01366 PString gkAccessTokenOID;
01367 PBoolean sendGRQ;
01368
01369
01370
01371 PTimeInterval callTransferT1;
01372
01373
01374 PTimeInterval callTransferT2;
01375
01376
01377 PTimeInterval callTransferT3;
01378
01379
01380 PTimeInterval callTransferT4;
01381
01383 PTimeInterval callIntrusionT1;
01384 PTimeInterval callIntrusionT2;
01385 PTimeInterval callIntrusionT3;
01386 PTimeInterval callIntrusionT4;
01387 PTimeInterval callIntrusionT5;
01388 PTimeInterval callIntrusionT6;
01389
01390
01391 mutable H323Capabilities capabilities;
01392 H323Gatekeeper * gatekeeper;
01393 PString gatekeeperUsername;
01394 PString gatekeeperPassword;
01395 H323CallIdentityDict secondaryConnectionsActive;
01396
01397 #if OPAL_H450
01398 mutable PAtomicInteger nextH450CallIdentity;
01400 #endif
01401
01402 #if OPAL_H460
01403 H460_FeatureSet features;
01404 #endif
01405
01406 };
01407
01408 #endif // __OPAL_H323EP_H
01409
01410