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 PSafePtr<OpalConnection> 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 OpalConnection::StringOptions * stringOptions = NULL
00524 );
00525
00536 PSafePtr<H323Connection> FindConnectionWithLock(
00537 const PString & token,
00538 PSafetyMode mode = PSafeReadWrite
00539 );
00540
00548 virtual PBoolean OnSendSignalSetup(H323Connection & connection,
00549 H323SignalPDU & setupPDU);
00550
00562 virtual PBoolean OnSendCallProceeding(
00563 H323Connection & connection,
00564 H323SignalPDU & callProceedingPDU
00565 );
00566
00578 virtual PBoolean OnSendConnect(
00579 H323Connection & connection,
00580 H323SignalPDU & connectPDU
00581 );
00582
00594 virtual PBoolean OnIncomingCall(
00595 H323Connection & connection,
00596 const H323SignalPDU & setupPDU,
00597 H323SignalPDU & alertingPDU
00598 );
00599
00606 virtual PBoolean OnOutgoingCall(
00607 H323Connection & conn,
00608 const H323SignalPDU & connectPDU
00609 );
00610
00615 virtual PBoolean OnCallTransferInitiate(
00616 H323Connection & connection,
00617 const PString & remoteParty
00618 );
00619
00624 virtual PBoolean OnCallTransferIdentify(
00625 H323Connection & connection
00626 );
00627
00632 virtual void OnSendARQ(
00633 H323Connection & conn,
00634 H225_AdmissionRequest & arq
00635 );
00636
00643 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00644 H323Connection & connection,
00645 const PString & callerName,
00646 const H323SignalPDU & setupPDU,
00647 H323SignalPDU & connectPDU,
00648 H323SignalPDU & progressPDU
00649 );
00650 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00651 OpalConnection & connection,
00652 const PString & caller
00653 );
00654
00665 virtual PBoolean OnAlerting(
00666 H323Connection & connection,
00667 const H323SignalPDU & alertingPDU,
00668 const PString & user
00669 );
00670
00675 virtual PBoolean OnSendAlerting(
00676 H323Connection & connection,
00677 H323SignalPDU & alerting,
00678 const PString & calleeName,
00679 PBoolean withMedia
00680 );
00681
00685 virtual PBoolean OnSentAlerting(
00686 H323Connection & connection
00687 );
00688
00697 virtual PBoolean OnConnectionForwarded(
00698 H323Connection & connection,
00699 const PString & forwardParty,
00700 const H323SignalPDU & pdu
00701 );
00702
00711 virtual PBoolean ForwardConnection(
00712 H323Connection & connection,
00713 const PString & forwardParty,
00714 const H323SignalPDU & pdu
00715 );
00716
00723 virtual void OnConnectionEstablished(
00724 H323Connection & connection,
00725 const PString & token
00726 );
00727
00730 virtual PBoolean IsConnectionEstablished(
00731 const PString & token
00732 );
00733
00740 virtual void OnConnectionCleared(
00741 H323Connection & connection,
00742 const PString & token
00743 );
00745
00746
00753 virtual PBoolean OnStartLogicalChannel(
00754 H323Connection & connection,
00755 H323Channel & channel
00756 );
00757
00762 virtual void OnClosedLogicalChannel(
00763 H323Connection & connection,
00764 const H323Channel & channel
00765 );
00766
00774 virtual void OnRTPStatistics(
00775 const H323Connection & connection,
00776 const RTP_Session & session
00777 ) const;
00778
00784 virtual void OnGatekeeperNATDetect(
00785 PIPSocket::Address publicAddr,
00786 PString & gkIdentifier,
00787 H323TransportAddress & gkRouteAddress
00788 );
00790
00800 virtual void OnHTTPServiceControl(
00801 unsigned operation,
00802 unsigned sessionId,
00803 const PString & url
00804 );
00805
00815 virtual void OnCallCreditServiceControl(
00816 const PString & amount,
00817 PBoolean mode
00818 );
00819
00823 virtual void OnServiceControlSession(
00824 unsigned type,
00825 unsigned sessionid,
00826 const H323ServiceControlSession & session,
00827 H323Connection * connection
00828 );
00829
00832 virtual H323ServiceControlSession * CreateServiceControlSession(
00833 const H225_ServiceControlDescriptor & contents
00834 );
00836
00844 virtual PBoolean OnConferenceInvite(
00845 const H323SignalPDU & setupPDU
00846 );
00847
00853 virtual PBoolean OnCallIndependentSupplementaryService(
00854 const H323SignalPDU & setupPDU
00855 );
00856
00862 virtual PBoolean OnNegotiateConferenceCapabilities(
00863 const H323SignalPDU & setupPDU
00864 );
00866
00871 virtual void SetDefaultLocalPartyName(
00872 const PString & name
00873 );
00874
00883 virtual void SetLocalUserName(
00884 const PString & name
00885 );
00886
00891 virtual const PString & GetLocalUserName() const { return localAliasNames.front(); }
00892
00899 PBoolean AddAliasName(
00900 const PString & name
00901 );
00902
00906 PBoolean RemoveAliasName(
00907 const PString & name
00908 );
00909
00914 const PStringList & GetAliasNames() const { return localAliasNames; }
00915
00918 const PStringList & GetAliasNamePatterns() const { return localAliasPatterns; }
00919
00923 PBoolean AddAliasNamePattern(
00924 const PString & pattern
00925 );
00926
00929 const PString & GetDefaultILSServer() const { return manager.GetDefaultILSServer(); }
00930
00933 void SetDefaultILSServer(
00934 const PString & server
00935 ) { manager.SetDefaultILSServer(server); }
00936
00939 PBoolean IsFastStartDisabled() const
00940 { return disableFastStart; }
00941
00944 void DisableFastStart(
00945 PBoolean mode
00946 ) { disableFastStart = mode; }
00947
00950 PBoolean IsH245TunnelingDisabled() const
00951 { return disableH245Tunneling; }
00952
00955 void DisableH245Tunneling(
00956 PBoolean mode
00957 ) { disableH245Tunneling = mode; }
00958
00961 PBoolean IsH245inSetupDisabled() const
00962 { return disableH245inSetup; }
00963
00966 void DisableH245inSetup(
00967 PBoolean mode
00968 ) { disableH245inSetup = mode; }
00969
00973 PBoolean IsH245Disabled() const
00974 { return m_bH245Disabled; }
00975
00979 void DisableH245(PBoolean bH245Disabled) { m_bH245Disabled = bH245Disabled; }
00980
00983 PBoolean CanDisplayAmountString() const
00984 { return canDisplayAmountString; }
00985
00988 void SetCanDisplayAmountString(
00989 PBoolean mode
00990 ) { canDisplayAmountString = mode; }
00991
00994 PBoolean CanEnforceDurationLimit() const
00995 { return canEnforceDurationLimit; }
00996
00999 void SetCanEnforceDurationLimit(
01000 PBoolean mode
01001 ) { canEnforceDurationLimit = mode; }
01002
01003 #if OPAL_H450
01004
01006 unsigned GetCallIntrusionProtectionLevel() const { return callIntrusionProtectionLevel; }
01007
01010 void SetCallIntrusionProtectionLevel(
01011 unsigned level
01012 ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; }
01013 #endif
01014
01017 virtual void OnReceivedInitiateReturnError();
01018
01021 PBoolean CanAutoCallForward() const { return autoCallForward; }
01022
01025 const H323Capabilities & GetCapabilities() const;
01026
01029 enum TerminalTypes {
01030 e_TerminalOnly = 50,
01031 e_TerminalAndMC = 70,
01032 e_GatewayOnly = 60,
01033 e_GatewayAndMC = 80,
01034 e_GatewayAndMCWithDataMP = 90,
01035 e_GatewayAndMCWithAudioMP = 100,
01036 e_GatewayAndMCWithAVMP = 110,
01037 e_GatekeeperOnly = 120,
01038 e_GatekeeperWithDataMP = 130,
01039 e_GatekeeperWithAudioMP = 140,
01040 e_GatekeeperWithAVMP = 150,
01041 e_MCUOnly = 160,
01042 e_MCUWithDataMP = 170,
01043 e_MCUWithAudioMP = 180,
01044 e_MCUWithAVMP = 190
01045 };
01046
01049 TerminalTypes GetTerminalType() const { return terminalType; }
01050
01053 PBoolean IsTerminal() const;
01054
01057 PBoolean IsGateway() const;
01058
01061 PBoolean IsGatekeeper() const;
01062
01065 PBoolean IsMCU() const;
01066
01070 unsigned GetMinAudioJitterDelay() const { return manager.GetMinAudioJitterDelay(); }
01071
01075 unsigned GetMaxAudioJitterDelay() const { return manager.GetMaxAudioJitterDelay(); }
01076
01079 void SetAudioJitterDelay(
01080 unsigned minDelay,
01081 unsigned maxDelay
01082 ) { manager.SetAudioJitterDelay(minDelay, maxDelay); }
01083
01086 unsigned GetInitialBandwidth() const { return initialBandwidth; }
01087
01090 void SetInitialBandwidth(unsigned bandwidth) { initialBandwidth = bandwidth; }
01091
01092 #if OPAL_H239
01093
01095 bool GetDefaultH239Control() const { return m_defaultH239Control; }
01096
01099 void SetDefaultH239Control(
01100 bool on
01101 ) { m_defaultH239Control = on; }
01102 #endif
01103
01106 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &);
01107
01110 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &);
01111
01115 virtual void LoadBaseFeatureSet();
01116
01121 virtual bool OnFeatureInstance(
01122 int instType,
01123 const PString & identifer
01124 );
01125
01126 #if OPAL_H460
01127
01129 bool FeatureSetDisabled() const { return disableH460; }
01130
01133 void FeatureSetDisable() { disableH460 = true; }
01134
01138 H460_FeatureSet * GetFeatureSet() { return features.DeriveNewFeatureSet(); };
01139 #endif
01140
01143 virtual PBoolean IsLocalAddress(
01144 const PIPSocket::Address & remoteAddress
01145 ) const { return manager.IsLocalAddress(remoteAddress); }
01146
01149 virtual void TranslateTCPAddress(
01150 PIPSocket::Address & localAddr,
01151 const PIPSocket::Address & remoteAddr
01152 );
01153
01156 WORD GetTCPPortBase() const { return manager.GetTCPPortBase(); }
01157
01160 WORD GetTCPPortMax() const { return manager.GetTCPPortMax(); }
01161
01164 void SetTCPPorts(unsigned tcpBase, unsigned tcpMax) { manager.SetTCPPorts(tcpBase, tcpMax); }
01165
01168 WORD GetNextTCPPort() { return manager.GetNextTCPPort(); }
01169
01172 WORD GetUDPPortBase() const { return manager.GetUDPPortBase(); }
01173
01176 WORD GetUDPPortMax() const { return manager.GetUDPPortMax(); }
01177
01180 void SetUDPPorts(unsigned udpBase, unsigned udpMax) { manager.SetUDPPorts(udpBase, udpMax); }
01181
01184 WORD GetNextUDPPort() { return manager.GetNextUDPPort(); }
01185
01188 WORD GetRtpIpPortBase() const { return manager.GetRtpIpPortBase(); }
01189
01192 WORD GetRtpIpPortMax() const { return manager.GetRtpIpPortMax(); }
01193
01196 void SetRtpIpPorts(unsigned udpBase, unsigned udpMax) { manager.SetRtpIpPorts(udpBase, udpMax); }
01197
01200 WORD GetRtpIpPortPair() { return manager.GetRtpIpPortPair(); }
01201
01204 BYTE GetRtpIpTypeofService() const { return manager.GetRtpIpTypeofService(); }
01205
01208 void SetRtpIpTypeofService(unsigned tos) { manager.SetRtpIpTypeofService(tos); }
01209
01212 const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; }
01213
01216 const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; }
01217
01220 const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; }
01221
01224 const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; }
01225
01228 unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; }
01229
01232 const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; }
01233
01236 const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; }
01237
01240 const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; }
01241
01244 const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; }
01245
01248 const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; }
01249
01252 PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; }
01253
01256 const PTimeInterval & GetNoMediaTimeout() const { return manager.GetNoMediaTimeout(); }
01257
01260 PBoolean SetNoMediaTimeout(
01261 const PTimeInterval & newInterval
01262 ) { return manager.SetNoMediaTimeout(newInterval); }
01263
01266 const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; }
01267
01270 unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; }
01271
01274 const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; }
01275
01278 unsigned GetRasRequestRetries() const { return rasRequestRetries; }
01279
01283 const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; }
01284
01288 void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; }
01289
01292 const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; }
01293
01296 void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; }
01297
01300 PBoolean GetSendGRQ() const
01301 { return sendGRQ; }
01302
01305 void SetSendGRQ(PBoolean v)
01306 { sendGRQ = v; }
01307
01310 const PTimeInterval & GetCallTransferT1() const { return callTransferT1; }
01311
01314 const PTimeInterval & GetCallTransferT2() const { return callTransferT2; }
01315
01318 const PTimeInterval & GetCallTransferT3() const { return callTransferT3; }
01319
01322 const PTimeInterval & GetCallTransferT4() const { return callTransferT4; }
01323
01325 const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; }
01326 const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; }
01327 const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; }
01328 const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; }
01329 const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; }
01330 const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; }
01331
01334 H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; }
01335
01338 #if OPAL_H450
01339 unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; }
01340 #endif
01341
01342 PString GetDefaultTransport() const;
01344
01345 protected:
01346 bool InternalCreateGatekeeper(H323Transport * transport);
01347 H323Connection * InternalMakeCall(
01348 OpalCall & call,
01349 const PString & existingToken,
01350 const PString & callIdentity,
01351 unsigned capabilityLevel,
01352 const PString & remoteParty,
01353 void * userData,
01354 unsigned int options = 0,
01355 OpalConnection::StringOptions * stringOptions = NULL
01356 );
01357
01358
01359 PStringList localAliasNames;
01360 PStringList localAliasPatterns;
01361 PBoolean autoCallForward;
01362 PBoolean disableFastStart;
01363 PBoolean disableH245Tunneling;
01364 PBoolean disableH245inSetup;
01365 PBoolean m_bH245Disabled;
01366 PBoolean canDisplayAmountString;
01367 PBoolean canEnforceDurationLimit;
01368 #if OPAL_H450
01369 unsigned callIntrusionProtectionLevel;
01370 #endif
01371
01372 TerminalTypes terminalType;
01373
01374 #if OPAL_H239
01375 bool m_defaultH239Control;
01376 #endif
01377
01378 PBoolean clearCallOnRoundTripFail;
01379
01380
01381 PTimeInterval signallingChannelCallTimeout;
01382 PTimeInterval controlChannelStartTimeout;
01383 PTimeInterval endSessionTimeout;
01384 PTimeInterval masterSlaveDeterminationTimeout;
01385 unsigned masterSlaveDeterminationRetries;
01386 PTimeInterval capabilityExchangeTimeout;
01387 PTimeInterval logicalChannelTimeout;
01388 PTimeInterval requestModeTimeout;
01389 PTimeInterval roundTripDelayTimeout;
01390 PTimeInterval roundTripDelayRate;
01391 PTimeInterval gatekeeperRequestTimeout;
01392 unsigned gatekeeperRequestRetries;
01393 PTimeInterval rasRequestTimeout;
01394 unsigned rasRequestRetries;
01395 PTimeInterval registrationTimeToLive;
01396
01397 PString gkAccessTokenOID;
01398 PBoolean sendGRQ;
01399
01400
01401
01402 PTimeInterval callTransferT1;
01403
01404
01405 PTimeInterval callTransferT2;
01406
01407
01408 PTimeInterval callTransferT3;
01409
01410
01411 PTimeInterval callTransferT4;
01412
01414 PTimeInterval callIntrusionT1;
01415 PTimeInterval callIntrusionT2;
01416 PTimeInterval callIntrusionT3;
01417 PTimeInterval callIntrusionT4;
01418 PTimeInterval callIntrusionT5;
01419 PTimeInterval callIntrusionT6;
01420
01421
01422 mutable H323Capabilities capabilities;
01423 H323Gatekeeper * gatekeeper;
01424 PString gatekeeperUsername;
01425 PString gatekeeperPassword;
01426 H323CallIdentityDict secondaryConnectionsActive;
01427
01428 #if OPAL_H450
01429 mutable PAtomicInteger nextH450CallIdentity;
01431 #endif
01432
01433 #if OPAL_H460
01434 bool disableH460;
01435 H460_FeatureSet features;
01436 #endif
01437
01438 };
01439
01440 #endif // OPAL_H323
01441
01442 #endif // OPAL_H323_H323EP_H
01443
01444