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;
00172
00173
00184 void AddCapability(
00185 H323Capability * capability
00186 );
00187
00208 PINDEX SetCapability(
00209 PINDEX descriptorNum,
00210 PINDEX simultaneous,
00211 H323Capability * cap
00212 );
00213
00218 PINDEX AddAllCapabilities(
00219 PINDEX descriptorNum,
00220 PINDEX simultaneous,
00221 const PString & name
00222 );
00223
00226 void AddAllUserInputCapabilities(
00227 PINDEX descriptorNum,
00228 PINDEX simultaneous
00229 );
00230
00233 void RemoveCapabilities(
00234 const PStringArray & codecNames
00235 );
00236
00239 void ReorderCapabilities(
00240 const PStringArray & preferenceOrder
00241 );
00242
00245 H323Capability * FindCapability(
00246 const H245_Capability & cap
00247 ) const;
00248
00251 H323Capability * FindCapability(
00252 const H245_DataType & dataType
00253 ) const;
00254
00257 H323Capability * FindCapability(
00258 H323Capability::MainTypes mainType,
00259 unsigned subType
00260 ) const;
00262
00282 PBoolean UseGatekeeper(
00283 const PString & address = PString::Empty(),
00284 const PString & identifier = PString::Empty(),
00285 const PString & localAddress = PString::Empty()
00286 );
00287
00298 PBoolean SetGatekeeper(
00299 const PString & address,
00300 H323Transport * transport = NULL
00301 );
00302
00317 PBoolean SetGatekeeperZone(
00318 const PString & address,
00319 const PString & identifier,
00320 H323Transport * transport = NULL
00321 );
00322
00332 PBoolean LocateGatekeeper(
00333 const PString & identifier,
00334 H323Transport * transport = NULL
00335 );
00336
00345 PBoolean DiscoverGatekeeper(
00346 H323Transport * transport = NULL
00347 );
00348
00356 virtual H323Gatekeeper * CreateGatekeeper(
00357 H323Transport * transport
00358 );
00359
00362 H323Gatekeeper * GetGatekeeper() const { return gatekeeper; }
00363
00366 PBoolean IsRegisteredWithGatekeeper() const;
00367
00373 PBoolean RemoveGatekeeper(
00374 int reason = -1
00375 );
00376
00379 virtual void SetGatekeeperPassword(
00380 const PString & password,
00381 const PString & username = PString::Empty()
00382 );
00383
00386 virtual const PString & GetGatekeeperUsername() const { return gatekeeperUsername; }
00387
00390 virtual const PString & GetGatekeeperPassword() const { return gatekeeperPassword; }
00391
00394 virtual H235Authenticators CreateAuthenticators();
00395
00398 virtual void OnGatekeeperConfirm();
00399
00402 virtual void OnGatekeeperReject();
00403
00406 virtual void OnRegistrationConfirm();
00407
00410 virtual void OnRegistrationReject();
00412
00417 virtual PBoolean NewIncomingConnection(
00418 OpalTransport * transport
00419 );
00420
00423 virtual H323Connection * CreateConnection(
00424 OpalCall & call,
00425 const PString & token,
00426 void * userData,
00427 OpalTransport & transport,
00428 const PString & alias,
00429 const H323TransportAddress & address,
00430 H323SignalPDU * setupPDU,
00431 unsigned options = 0,
00432 OpalConnection::StringOptions * stringOptions = NULL
00433 );
00434
00450 virtual PBoolean SetupTransfer(
00451 const PString & token,
00452 const PString & callIdentity,
00453 const PString & remoteParty,
00454 void * userData = NULL
00455 );
00456
00462 void TransferCall(
00463 const PString & token,
00464 const PString & remoteParty,
00465 const PString & callIdentity = PString::Empty()
00467 );
00468
00475 void ConsultationTransfer(
00476 const PString & primaryCallToken,
00477 const PString & secondaryCallToken
00478 );
00479
00483 void HoldCall(
00484 const PString & token,
00485 PBoolean localHold
00486 );
00487
00491 PBoolean IntrudeCall(
00492 const PString & remoteParty,
00493 unsigned capabilityLevel,
00494 void * userData = NULL
00495 );
00496
00503 PBoolean ParsePartyName(
00504 const PString & party,
00505 PString & alias,
00506 H323TransportAddress & address
00507 );
00508
00519 PSafePtr<H323Connection> FindConnectionWithLock(
00520 const PString & token,
00521 PSafetyMode mode = PSafeReadWrite
00522 );
00523
00531 virtual PBoolean OnSendSignalSetup(H323Connection & connection,
00532 H323SignalPDU & setupPDU);
00533
00545 virtual PBoolean OnSendCallProceeding(H323Connection & connection,
00546 H323SignalPDU & callProceedingPDU
00547 );
00548
00560 virtual PBoolean OnSendConnect(H323Connection & connection,
00561 H323SignalPDU & connectPDU
00562 );
00563
00575 virtual PBoolean OnIncomingCall(
00576 H323Connection & connection,
00577 const H323SignalPDU & setupPDU,
00578 H323SignalPDU & alertingPDU
00579 );
00580
00587 virtual PBoolean OnOutgoingCall(
00588 H323Connection & conn,
00589 const H323SignalPDU & connectPDU
00590 );
00591
00596 virtual PBoolean OnCallTransferInitiate(
00597 H323Connection & connection,
00598 const PString & remoteParty
00599 );
00600
00605 virtual PBoolean OnCallTransferIdentify(
00606 H323Connection & connection
00607 );
00608
00613 virtual void OnSendARQ(
00614 H323Connection & conn,
00615 H225_AdmissionRequest & arq
00616 );
00617
00624 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00625 H323Connection & connection,
00626 const PString & callerName,
00627 const H323SignalPDU & setupPDU,
00628 H323SignalPDU & connectPDU,
00629 H323SignalPDU & progressPDU
00630 );
00631 virtual OpalConnection::AnswerCallResponse OnAnswerCall(
00632 OpalConnection & connection,
00633 const PString & caller
00634 );
00635
00646 virtual PBoolean OnAlerting(
00647 H323Connection & connection,
00648 const H323SignalPDU & alertingPDU,
00649 const PString & user
00650 );
00651
00657 virtual PBoolean OnSendAlerting(H323Connection & connection,
00658 H323SignalPDU & alerting,
00659 const PString & calleeName,
00660 PBoolean withMedia
00661 );
00662
00667 virtual PBoolean OnSentAlerting(H323Connection & connection);
00668
00677 virtual PBoolean OnConnectionForwarded(
00678 H323Connection & connection,
00679 const PString & forwardParty,
00680 const H323SignalPDU & pdu
00681 );
00682
00691 virtual PBoolean ForwardConnection(
00692 H323Connection & connection,
00693 const PString & forwardParty,
00694 const H323SignalPDU & pdu
00695 );
00696
00703 virtual void OnConnectionEstablished(
00704 H323Connection & connection,
00705 const PString & token
00706 );
00707
00710 virtual PBoolean IsConnectionEstablished(
00711 const PString & token
00712 );
00713
00720 virtual void OnConnectionCleared(
00721 H323Connection & connection,
00722 const PString & token
00723 );
00725
00726
00733 virtual PBoolean OnStartLogicalChannel(
00734 H323Connection & connection,
00735 H323Channel & channel
00736 );
00737
00742 virtual void OnClosedLogicalChannel(
00743 H323Connection & connection,
00744 const H323Channel & channel
00745 );
00746
00754 virtual void OnRTPStatistics(
00755 const H323Connection & connection,
00756 const RTP_Session & session
00757 ) const;
00758
00764 virtual void OnGatekeeperNATDetect(
00765 PIPSocket::Address publicAddr,
00766 PString & gkIdentifier,
00767 H323TransportAddress & gkRouteAddress
00768 );
00770
00780 virtual void OnHTTPServiceControl(
00781 unsigned operation,
00782 unsigned sessionId,
00783 const PString & url
00784 );
00785
00795 virtual void OnCallCreditServiceControl(
00796 const PString & amount,
00797 PBoolean mode
00798 );
00799
00803 virtual void OnServiceControlSession(
00804 unsigned type,
00805 unsigned sessionid,
00806 const H323ServiceControlSession & session,
00807 H323Connection * connection
00808 );
00809
00812 virtual H323ServiceControlSession * CreateServiceControlSession(
00813 const H225_ServiceControlDescriptor & contents
00814 );
00816
00824 virtual PBoolean OnConferenceInvite(
00825 const H323SignalPDU & setupPDU
00826 );
00827
00833 virtual PBoolean OnCallIndependentSupplementaryService(
00834 const H323SignalPDU & setupPDU
00835 );
00836
00842 virtual PBoolean OnNegotiateConferenceCapabilities(
00843 const H323SignalPDU & setupPDU
00844 );
00846
00851 virtual void SetDefaultLocalPartyName(
00852 const PString & name
00853 );
00854
00863 virtual void SetLocalUserName(
00864 const PString & name
00865 );
00866
00871 virtual const PString & GetLocalUserName() const { return localAliasNames.front(); }
00872
00879 PBoolean AddAliasName(
00880 const PString & name
00881 );
00882
00886 PBoolean RemoveAliasName(
00887 const PString & name
00888 );
00889
00894 const PStringList & GetAliasNames() const { return localAliasNames; }
00895
00898 const PStringList & GetAliasNamePatterns() const { return localAliasPatterns; }
00899
00903 PBoolean AddAliasNamePattern(
00904 const PString & pattern
00905 );
00906
00909 const PString & GetDefaultILSServer() const { return manager.GetDefaultILSServer(); }
00910
00913 void SetDefaultILSServer(
00914 const PString & server
00915 ) { manager.SetDefaultILSServer(server); }
00916
00919 PBoolean IsFastStartDisabled() const
00920 { return disableFastStart; }
00921
00924 void DisableFastStart(
00925 PBoolean mode
00926 ) { disableFastStart = mode; }
00927
00930 PBoolean IsH245TunnelingDisabled() const
00931 { return disableH245Tunneling; }
00932
00935 void DisableH245Tunneling(
00936 PBoolean mode
00937 ) { disableH245Tunneling = mode; }
00938
00941 PBoolean IsH245inSetupDisabled() const
00942 { return disableH245inSetup; }
00943
00946 void DisableH245inSetup(
00947 PBoolean mode
00948 ) { disableH245inSetup = mode; }
00949
00953 PBoolean IsH245Disabled() const
00954 { return m_bH245Disabled; }
00955
00959 void DisableH245(PBoolean bH245Disabled) { m_bH245Disabled = bH245Disabled; }
00960
00963 PBoolean CanDisplayAmountString() const
00964 { return canDisplayAmountString; }
00965
00968 void SetCanDisplayAmountString(
00969 PBoolean mode
00970 ) { canDisplayAmountString = mode; }
00971
00974 PBoolean CanEnforceDurationLimit() const
00975 { return canEnforceDurationLimit; }
00976
00979 void SetCanEnforceDurationLimit(
00980 PBoolean mode
00981 ) { canEnforceDurationLimit = mode; }
00982
00983 #if OPAL_H450
00984
00986 unsigned GetCallIntrusionProtectionLevel() const { return callIntrusionProtectionLevel; }
00987
00990 void SetCallIntrusionProtectionLevel(
00991 unsigned level
00992 ) { PAssert(level<=3, PInvalidParameter); callIntrusionProtectionLevel = level; }
00993 #endif
00994
00997 virtual void OnReceivedInitiateReturnError();
00998
00999 #if OPAL_VIDEO
01000
01002 PBoolean CanAutoStartReceiveVideo() const { return manager.CanAutoStartReceiveVideo(); }
01003
01006 PBoolean CanAutoStartTransmitVideo() const { return manager.CanAutoStartTransmitVideo(); }
01007 #endif
01008
01009 #if OPAL_T38_CAPABILITY
01010
01012 PBoolean CanAutoStartReceiveFax() const { return autoStartReceiveFax; }
01013
01016 PBoolean CanAutoStartTransmitFax() const { return autoStartTransmitFax; }
01017 #endif
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
01094 virtual PBoolean OnSendFeatureSet(unsigned, H225_FeatureSet &);
01095
01098 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &);
01099
01103 virtual void LoadBaseFeatureSet();
01104
01109 virtual bool OnFeatureInstance(
01110 int instType,
01111 const PString & identifer
01112 );
01113
01114 #if OPAL_H460
01115
01117 bool FeatureSetDisabled() const { return disableH460; }
01118
01121 void FeatureSetDisable() { disableH460 = true; }
01122
01126 H460_FeatureSet * GetFeatureSet() { return features.DeriveNewFeatureSet(); };
01127 #endif
01128
01131 virtual PBoolean IsLocalAddress(
01132 const PIPSocket::Address & remoteAddress
01133 ) const { return manager.IsLocalAddress(remoteAddress); }
01134
01137 virtual void TranslateTCPAddress(
01138 PIPSocket::Address & localAddr,
01139 const PIPSocket::Address & remoteAddr
01140 );
01141
01144 WORD GetTCPPortBase() const { return manager.GetTCPPortBase(); }
01145
01148 WORD GetTCPPortMax() const { return manager.GetTCPPortMax(); }
01149
01152 void SetTCPPorts(unsigned tcpBase, unsigned tcpMax) { manager.SetTCPPorts(tcpBase, tcpMax); }
01153
01156 WORD GetNextTCPPort() { return manager.GetNextTCPPort(); }
01157
01160 WORD GetUDPPortBase() const { return manager.GetUDPPortBase(); }
01161
01164 WORD GetUDPPortMax() const { return manager.GetUDPPortMax(); }
01165
01168 void SetUDPPorts(unsigned udpBase, unsigned udpMax) { manager.SetUDPPorts(udpBase, udpMax); }
01169
01172 WORD GetNextUDPPort() { return manager.GetNextUDPPort(); }
01173
01176 WORD GetRtpIpPortBase() const { return manager.GetRtpIpPortBase(); }
01177
01180 WORD GetRtpIpPortMax() const { return manager.GetRtpIpPortMax(); }
01181
01184 void SetRtpIpPorts(unsigned udpBase, unsigned udpMax) { manager.SetRtpIpPorts(udpBase, udpMax); }
01185
01188 WORD GetRtpIpPortPair() { return manager.GetRtpIpPortPair(); }
01189
01192 BYTE GetRtpIpTypeofService() const { return manager.GetRtpIpTypeofService(); }
01193
01196 void SetRtpIpTypeofService(unsigned tos) { manager.SetRtpIpTypeofService(tos); }
01197
01200 const PTimeInterval & GetSignallingChannelCallTimeout() const { return signallingChannelCallTimeout; }
01201
01204 const PTimeInterval & GetControlChannelStartTimeout() const { return controlChannelStartTimeout; }
01205
01208 const PTimeInterval & GetEndSessionTimeout() const { return endSessionTimeout; }
01209
01212 const PTimeInterval & GetMasterSlaveDeterminationTimeout() const { return masterSlaveDeterminationTimeout; }
01213
01216 unsigned GetMasterSlaveDeterminationRetries() const { return masterSlaveDeterminationRetries; }
01217
01220 const PTimeInterval & GetCapabilityExchangeTimeout() const { return capabilityExchangeTimeout; }
01221
01224 const PTimeInterval & GetLogicalChannelTimeout() const { return logicalChannelTimeout; }
01225
01228 const PTimeInterval & GetRequestModeTimeout() const { return logicalChannelTimeout; }
01229
01232 const PTimeInterval & GetRoundTripDelayTimeout() const { return roundTripDelayTimeout; }
01233
01236 const PTimeInterval & GetRoundTripDelayRate() const { return roundTripDelayRate; }
01237
01240 PBoolean ShouldClearCallOnRoundTripFail() const { return clearCallOnRoundTripFail; }
01241
01244 const PTimeInterval & GetNoMediaTimeout() const { return manager.GetNoMediaTimeout(); }
01245
01248 PBoolean SetNoMediaTimeout(
01249 const PTimeInterval & newInterval
01250 ) { return manager.SetNoMediaTimeout(newInterval); }
01251
01254 const PTimeInterval & GetGatekeeperRequestTimeout() const { return gatekeeperRequestTimeout; }
01255
01258 unsigned GetGatekeeperRequestRetries() const { return gatekeeperRequestRetries; }
01259
01262 const PTimeInterval & GetRasRequestTimeout() const { return rasRequestTimeout; }
01263
01266 unsigned GetRasRequestRetries() const { return rasRequestRetries; }
01267
01271 const PTimeInterval & GetGatekeeperTimeToLive() const { return registrationTimeToLive; }
01272
01276 void SetGatekeeperTimeToLive(const PTimeInterval & ttl) { registrationTimeToLive = ttl; }
01277
01280 const PString & GetGkAccessTokenOID() const { return gkAccessTokenOID; }
01281
01284 void SetGkAccessTokenOID(const PString & token) { gkAccessTokenOID = token; }
01285
01288 PBoolean GetSendGRQ() const
01289 { return sendGRQ; }
01290
01293 void SetSendGRQ(PBoolean v)
01294 { sendGRQ = v; }
01295
01298 const PTimeInterval & GetCallTransferT1() const { return callTransferT1; }
01299
01302 const PTimeInterval & GetCallTransferT2() const { return callTransferT2; }
01303
01306 const PTimeInterval & GetCallTransferT3() const { return callTransferT3; }
01307
01310 const PTimeInterval & GetCallTransferT4() const { return callTransferT4; }
01311
01313 const PTimeInterval & GetCallIntrusionT1() const { return callIntrusionT1; }
01314 const PTimeInterval & GetCallIntrusionT2() const { return callIntrusionT2; }
01315 const PTimeInterval & GetCallIntrusionT3() const { return callIntrusionT3; }
01316 const PTimeInterval & GetCallIntrusionT4() const { return callIntrusionT4; }
01317 const PTimeInterval & GetCallIntrusionT5() const { return callIntrusionT5; }
01318 const PTimeInterval & GetCallIntrusionT6() const { return callIntrusionT6; }
01319
01322 H323CallIdentityDict& GetCallIdentityDictionary() { return secondaryConnectionsActive; }
01323
01326 #if OPAL_H450
01327 unsigned GetNextH450CallIdentityValue() const { return ++nextH450CallIdentity; }
01328 #endif
01329
01330 PString GetDefaultTransport() const;
01332
01333 protected:
01334 bool InternalCreateGatekeeper(H323Transport * transport);
01335 PBoolean InternalMakeCall(
01336 OpalCall & call,
01337 const PString & existingToken,
01338 const PString & callIdentity,
01339 unsigned capabilityLevel,
01340 const PString & remoteParty,
01341 void * userData,
01342 unsigned int options = 0,
01343 OpalConnection::StringOptions * stringOptions = NULL
01344 );
01345
01346
01347 PStringList localAliasNames;
01348 PStringList localAliasPatterns;
01349 PBoolean autoStartReceiveFax;
01350 PBoolean autoStartTransmitFax;
01351 PBoolean isH224Enabled;
01352 PBoolean autoCallForward;
01353 PBoolean disableFastStart;
01354 PBoolean disableH245Tunneling;
01355 PBoolean disableH245inSetup;
01356 PBoolean m_bH245Disabled;
01357 PBoolean canDisplayAmountString;
01358 PBoolean canEnforceDurationLimit;
01359 #if OPAL_H450
01360 unsigned callIntrusionProtectionLevel;
01361 #endif
01362
01363 TerminalTypes terminalType;
01364
01365 PBoolean clearCallOnRoundTripFail;
01366
01367
01368 PTimeInterval signallingChannelCallTimeout;
01369 PTimeInterval controlChannelStartTimeout;
01370 PTimeInterval endSessionTimeout;
01371 PTimeInterval masterSlaveDeterminationTimeout;
01372 unsigned masterSlaveDeterminationRetries;
01373 PTimeInterval capabilityExchangeTimeout;
01374 PTimeInterval logicalChannelTimeout;
01375 PTimeInterval requestModeTimeout;
01376 PTimeInterval roundTripDelayTimeout;
01377 PTimeInterval roundTripDelayRate;
01378 PTimeInterval gatekeeperRequestTimeout;
01379 unsigned gatekeeperRequestRetries;
01380 PTimeInterval rasRequestTimeout;
01381 unsigned rasRequestRetries;
01382 PTimeInterval registrationTimeToLive;
01383
01384 PString gkAccessTokenOID;
01385 PBoolean sendGRQ;
01386
01387
01388
01389 PTimeInterval callTransferT1;
01390
01391
01392 PTimeInterval callTransferT2;
01393
01394
01395 PTimeInterval callTransferT3;
01396
01397
01398 PTimeInterval callTransferT4;
01399
01401 PTimeInterval callIntrusionT1;
01402 PTimeInterval callIntrusionT2;
01403 PTimeInterval callIntrusionT3;
01404 PTimeInterval callIntrusionT4;
01405 PTimeInterval callIntrusionT5;
01406 PTimeInterval callIntrusionT6;
01407
01408
01409 mutable H323Capabilities capabilities;
01410 H323Gatekeeper * gatekeeper;
01411 PString gatekeeperUsername;
01412 PString gatekeeperPassword;
01413 H323CallIdentityDict secondaryConnectionsActive;
01414
01415 #if OPAL_H450
01416 mutable PAtomicInteger nextH450CallIdentity;
01418 #endif
01419
01420 #if OPAL_H460
01421 bool disableH460;
01422 H460_FeatureSet features;
01423 #endif
01424
01425 };
01426
01427 #endif // OPAL_H323
01428
01429 #endif // OPAL_H323_H323EP_H
01430
01431