diff -r 000000000000 -r 1bce908db942 natplugins/natpcliprovisioningnatfwadapter/src/natfwdomainspecificitem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/natplugins/natpcliprovisioningnatfwadapter/src/natfwdomainspecificitem.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,871 @@ +/* +* Copyright (c) 2006 - 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: NAT-FW Traversal domain specific settings +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include "natfwdomainspecificitem.h" +#include "wpnatfwdebug.h" +#include "natfwdefaults.h" +#include +#include "stunserveritem.h" +#include "turnserveritem.h" + +// ============================ MEMBER FUNCTIONS ============================= + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::NewL +// +// --------------------------------------------------------------------------- +// +CNATFWDomainSpecificItem* CNATFWDomainSpecificItem::NewL() + { + CNATFWDomainSpecificItem* self = NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::NewLC +// +// --------------------------------------------------------------------------- +// +CNATFWDomainSpecificItem* CNATFWDomainSpecificItem::NewLC() + { + CNATFWDomainSpecificItem* self = new (ELeave) CNATFWDomainSpecificItem(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::ConstructL +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::ConstructL() + { + DBG_PRINT( "CNATFWDomainSpecificItem::ConstructL - begin" ); + iDomain = HBufC8::NewL( 0 ); + iSTUNServerAddr = HBufC8::NewL( 0 ); + iSTUNUsername = HBufC8::NewL( 0 ); + iSTUNPassword = HBufC8::NewL( 0 ); + iUsedNatProtocol = HBufC8::NewL( 0 ); + DBG_PRINT( "CNATFWDomainSpecificItem::ConstructL - end" ); + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::~CNATFWDomainSpecificItem +// +// --------------------------------------------------------------------------- +// +CNATFWDomainSpecificItem::~CNATFWDomainSpecificItem() + { + DBG_PRINT( "CNATFWDomainSpecificItem::~CNATFWDomainSpecificItem - begin" ); + delete iDomain; + delete iSTUNServerAddr; + delete iSTUNUsername; + delete iSTUNPassword; + delete iUsedNatProtocol; + delete iNatUtilities; + iStunServers.ResetAndDestroy(); + iStunServers.Close(); + iTurnServers.ResetAndDestroy(); + iTurnServers.Close(); + DBG_PRINT( "CNATFWDomainSpecificItem::~CNATFWDomainSpecificItem - end" ); + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetDomainKey +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetDomainKey( TUint32 aDomainKey ) + { + iDomainKey = aDomainKey; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetDomainL +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetDomainL( const TDesC8& aDomain ) + { + delete iDomain; + iDomain = NULL; + iDomain = aDomain.AllocL(); + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetSTUNServerAddrL +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetSTUNServerAddrL( + const TDesC8& aSTUNServerAddr ) + { + delete iSTUNServerAddr; + iSTUNServerAddr = NULL; + iSTUNServerAddr = aSTUNServerAddr.AllocL(); + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetSTUNServerPort +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetSTUNServerPort( + TUint aSTUNServerPort ) + { + iSTUNServerPort = aSTUNServerPort; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetNATRefreshTCP +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetNATRefreshTCP( + TInt aNATRefreshTCP ) + { + iNATRefreshTCP = aNATRefreshTCP; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetNATRefreshUDP +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetNATRefreshUDP( + TInt aNATRefreshUDP ) + { + iNATRefreshUDP = aNATRefreshUDP; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetEnableCRLFRefresh +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetEnableCRLFRefresh( + TInt aEnableCRLFRefresh ) + { + iEnableCRLFRefresh = aEnableCRLFRefresh; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetSTUNUsernameL +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetSTUNUsernameL( + const TDesC8& aSTUNUsername ) + { + delete iSTUNUsername; + iSTUNUsername = NULL; + iSTUNUsername = aSTUNUsername.AllocL(); + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetSTUNPasswordL +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetSTUNPasswordL( + const TDesC8& aSTUNPassword ) + { + delete iSTUNPassword; + iSTUNPassword = NULL; + iSTUNPassword = aSTUNPassword.AllocL(); + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetDefaultValues +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetDefaultValuesL() + { + // Default values for STUN server keys are set when saving settings if + // no STUN servers are provisioned. + delete iUsedNatProtocol; + iUsedNatProtocol = NULL; + iUsedNatProtocol = KDefaultNatProtocol().AllocL(); + iDisableStunSharedSecret = KDefaultDisableStunSharedSecret; + iStartPortRange = KDefaultStartPort; + iEndPortRange = KDefaultEndPort; + // ICE settings. + delete iNatUtilities; + iNatUtilities = NULL; + iNatUtilities = KDefaultNatUtilities().AllocL(); + iHostPref = KDefaultHostPref; + iServerRefPref = KDefaultServerReflexivePref; + iRelayPref = KDefaultRelayPref; + iPeerRefPref = KDefaultPeerReflexivePref; + iIPv4Pref = KDefaultIPv4Pref; + iIPv6Pref = KDefaultIPv6Pref; + iVPNPref = KDefaultVPNPref; + iUDPPref = KDefaultUDPPref; + iTCPPref = KDefaultTCPPref; + iTCPActivePref = KDefaultTCPActivePref; + iTCPPassivePref = KDefaultTCPPassivePref; + iTCPSimultPref = KDefaultTCPSimultaneousPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetDisableStunSharedSecret +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetDisableStunSharedSecret( + TBool aDisableStunSharedSecret ) + { + iDisableStunSharedSecret = aDisableStunSharedSecret; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetStartPortRange +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetStartPortRange( TInt aStartPortRange ) + { + iStartPortRange = aStartPortRange; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetEndPortRange +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetEndPortRange( TInt aEndPortRange ) + { + iEndPortRange = aEndPortRange; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetNatProtocolL +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetNatProtocolL( const TDesC8& aNatProtocol ) + { + delete iUsedNatProtocol; + iUsedNatProtocol = NULL; + iUsedNatProtocol = aNatProtocol.AllocL(); + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetNatUtilitiesL +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetNatUtilitiesL( const TDesC8& aNatUtilities ) + { + delete iNatUtilities; + iNatUtilities = NULL; + iNatUtilities = aNatUtilities.AllocL(); + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetHostPref +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetHostPref( TInt aHostPref ) + { + iHostPref = aHostPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetServerRefPref +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetServerRefPref( TInt aServerRefPref ) + { + iServerRefPref = aServerRefPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetRelayPref +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetRelayPref( TInt aRelayPref ) + { + iRelayPref = aRelayPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetPeerRefPref +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetPeerRefPref( TInt aPeerRefPref ) + { + iPeerRefPref = aPeerRefPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetIPv4Pref +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetIPv4Pref( TInt aIPv4Pref ) + { + iIPv4Pref = aIPv4Pref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetIPv6Pref +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetIPv6Pref( TInt aIPv6Pref ) + { + iIPv6Pref = aIPv6Pref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetVpnPref +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetVpnPref( TInt aVPNPref ) + { + iVPNPref = aVPNPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetUdpPref +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetUdpPref( TInt aUDPPref ) + { + iUDPPref = aUDPPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetTcpPref +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetTcpPref( TInt aTCPPref ) + { + iTCPPref = aTCPPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetTcpActivePref +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetTcpActivePref( TInt aTCPActivePref ) + { + iTCPActivePref = aTCPActivePref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetTcpPassivePref +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetTcpPassivePref( TInt aTCPPassivePref ) + { + iTCPPassivePref = aTCPPassivePref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::SetTcpSimultPref +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::SetTcpSimultPref( TInt aTCPSimultPref ) + { + iTCPSimultPref = aTCPSimultPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::AddStunServerItemL +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::AddStunServerItemL( + CWPStunServerItem* aStunServerItem ) + { + __ASSERT_ALWAYS( aStunServerItem != NULL, User::Leave( KErrBadHandle ) ); + iStunServers.AppendL( aStunServerItem ); + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::AddTurnServerItemL +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::AddTurnServerItemL( + CWPTurnServerItem* aTurnServerItem ) + { + __ASSERT_ALWAYS( aTurnServerItem != NULL, User::Leave( KErrBadHandle ) ); + iTurnServers.AppendL( aTurnServerItem ); + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::GetDomain +// +// --------------------------------------------------------------------------- +// +const TDesC8& CNATFWDomainSpecificItem::GetDomain() const + { + return *iDomain; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::GetDomainKey +// +// --------------------------------------------------------------------------- +// +TUint32 CNATFWDomainSpecificItem::GetDomainKey() const + { + return iDomainKey; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::GetSTUNAddr +// +// --------------------------------------------------------------------------- +// +const TDesC8& CNATFWDomainSpecificItem::GetSTUNAddr() const + { + return *iSTUNServerAddr; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::GetSTUNPort +// +// --------------------------------------------------------------------------- +// +TUint CNATFWDomainSpecificItem::GetSTUNPort() const + { + return iSTUNServerPort; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::GetNATRefreshTCP +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::GetNATRefreshTCP() const + { + return iNATRefreshTCP; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::GetNATRefreshUDP +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::GetNATRefreshUDP() const + { + return iNATRefreshUDP; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::GetEnableCRLFRefresh +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::GetEnableCRLFRefresh() const + { + return iEnableCRLFRefresh; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::GetSTUNUsername +// +// --------------------------------------------------------------------------- +// +const TDesC8& CNATFWDomainSpecificItem::GetSTUNUsername() const + { + return *iSTUNUsername; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::GetSTUNPassword +// +// --------------------------------------------------------------------------- +// +const TDesC8& CNATFWDomainSpecificItem::GetSTUNPassword() const + { + return *iSTUNPassword; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::DisableStunSharedSecret +// +// --------------------------------------------------------------------------- +// +TBool CNATFWDomainSpecificItem::DisableStunSharedSecret() const + { + return iDisableStunSharedSecret; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::StartPortRange +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::StartPortRange() const + { + return iStartPortRange; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::EndPortRange +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::EndPortRange() const + { + return iEndPortRange; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::UsedNatProtocol +// +// --------------------------------------------------------------------------- +// +const TDesC8& CNATFWDomainSpecificItem::UsedNatProtocol() const + { + return *iUsedNatProtocol; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::NatUtilities +// +// --------------------------------------------------------------------------- +// +const TDesC8& CNATFWDomainSpecificItem::NatUtilities() const + { + return *iNatUtilities; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::HostPref +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::HostPref() const + { + return iHostPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::ServerRefPref +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::ServerRefPref() const + { + return iServerRefPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::RelayPref +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::RelayPref() const + { + return iRelayPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::PeerRefPref +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::PeerRefPref() const + { + return iPeerRefPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::IPv4Pref +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::IPv4Pref() const + { + return iIPv4Pref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::IPv6Pref +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::IPv6Pref() const + { + return iIPv6Pref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::VpnPref +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::VpnPref() const + { + return iVPNPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::UdpPref +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::UdpPref() const + { + return iUDPPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::TcpPref +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::TcpPref() const + { + return iTCPPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::TcpActivePref +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::TcpActivePref() const + { + return iTCPActivePref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::TcpPassivePref +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::TcpPassivePref() const + { + return iTCPPassivePref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::TcpSimultPref +// +// --------------------------------------------------------------------------- +// +TInt CNATFWDomainSpecificItem::TcpSimultPref() const + { + return iTCPSimultPref; + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::StoreStunServerItemsL() +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::StoreStunServerItemsL( + CRepository* aRepository, TUint32 aKey, TUint32 aDomainKey ) + { + DBG_PRINT( "CNATFWDomainSpecificItem::StoreStunServerItemsL - begin" ); + __ASSERT_ALWAYS( aRepository != NULL, User::Leave( KErrBadHandle ) ); + + RArray stunKeys; + CleanupClosePushL( stunKeys ); // CS:1 + + TInt err = aRepository->FindL( + aDomainKey|KUNSAFProtocolsSTUNAddressMask, + KUNSAFProtocolsSubTableFieldTypeMask, stunKeys ); + + if ( KErrNotFound != err ) + { + User::LeaveIfError( err ); + } + + TInt stunKeyCount = stunKeys.Count(); + for ( TInt counter = 0 ; counter < stunKeyCount; counter++ ) + { + TUint32 key = KUNSAFProtocolsSTUNAddressMask^ + stunKeys[counter]; + aRepository->Delete( key|KUNSAFProtocolsSTUNAddressMask ); + aRepository->Delete( key|KUNSAFProtocolsSTUNPortMask ); + aRepository->Delete( key|KUNSAFProtocolsSTUNUsernameMask ); + aRepository->Delete( key|KUNSAFProtocolsSTUNPasswordMask ); + } + stunKeys.Close(); + CleanupStack::PopAndDestroy( &stunKeys ); // CS:0 + + TInt stunCount = iStunServers.Count(); + TUint32 stunKey = aKey; + for ( TInt counter = 0; counter < stunCount; counter++ ) + { + stunKey |= KUNSAFProtocolsSubTableFieldTypeMask; + stunKey++; + stunKey |= KUNSAFProtocolsSubTableFieldTypeMask; + stunKey ^= KUNSAFProtocolsSubTableFieldTypeMask; + stunKey |= aDomainKey; + + DBG_PRINT_2( "CNATFWDomainSpecificItem::StoreStunServerItemsL - \ +Create 'additional STUN server' keys (base key %d )", + stunKey ); + + // ============================== + // STUNServerAddress + // ============================== + // + User::LeaveIfError( aRepository->Create( + KUNSAFProtocolsSTUNAddressMask|stunKey, + iStunServers[counter]->StunSrvAddr() ) ); + + // ============================== + // STUNServerPort + // ============================== + // + User::LeaveIfError( aRepository->Create( + KUNSAFProtocolsSTUNPortMask|stunKey, + iStunServers[counter]->StunSrvPort() ) ); + + // ============================== + // STUNServerUsername + // ============================== + // + User::LeaveIfError( aRepository->Create( + KUNSAFProtocolsSTUNUsernameMask|stunKey, + iStunServers[counter]->StunUsername() ) ); + + // ============================== + // STUNServerPassword + // ============================== + // + User::LeaveIfError( aRepository->Create( + KUNSAFProtocolsSTUNPasswordMask|stunKey, + iStunServers[counter]->StunPassword() ) ); + + DBG_PRINT( "CNATFWDomainSpecificItem::StoreStunServerItemsL - \ +'additional STUN server' keys created." ); + } // for + DBG_PRINT( "CNATFWDomainSpecificItem::StoreStunServerItemsL - end" ); + } + +// --------------------------------------------------------------------------- +// CNATFWDomainSpecificItem::StoreTurnServerItemsL() +// +// --------------------------------------------------------------------------- +// +void CNATFWDomainSpecificItem::StoreTurnServerItemsL( + CRepository* aRepository, TUint32 aKey ) + { + DBG_PRINT( "CNATFWDomainSpecificItem::StoreTurnServerItemsL - begin" ); + __ASSERT_ALWAYS( aRepository != NULL, User::Leave( KErrBadHandle ) ); + + RArray turnKeys; + CleanupClosePushL( turnKeys ); // CS:1 + + TInt err = aRepository->FindL( + aKey|KUNSAFProtocolsTURNAddressMask, + KUNSAFProtocolsSubTableFieldTypeMask, turnKeys ); + + if ( KErrNotFound != err ) + { + User::LeaveIfError( err ); + } + + TInt turnCount( turnKeys.Count() ); + + for ( TInt counter = 0; counter < turnCount; counter++ ) + { + TUint32 key = KUNSAFProtocolsTURNAddressMask^ + turnKeys[counter]; + aRepository->Delete( key|KUNSAFProtocolsTURNAddressMask ); + aRepository->Delete( key|KUNSAFProtocolsTURNPortMask ); + aRepository->Delete( key|KUNSAFProtocolsTURNUsernameMask ); + aRepository->Delete( key|KUNSAFProtocolsTURNPasswordMask ); + } + + turnKeys.Close(); + CleanupStack::PopAndDestroy( &turnKeys ); + + turnCount = iTurnServers.Count(); + + // Store TURN settings to Central Repository. + TUint32 turnKey = aKey; + for ( TInt counter = 0; counter < turnCount; counter++ ) + { + turnKey |= KUNSAFProtocolsSubTableFieldTypeMask; + turnKey++; + turnKey |= KUNSAFProtocolsSubTableFieldTypeMask; + turnKey ^= KUNSAFProtocolsSubTableFieldTypeMask; + turnKey |= aKey; + + DBG_PRINT_2( "CNATFWDomainSpecificItem::StoreTurnServerItemsL - \ +Create TURN server keys (base key %d)", turnKey ); + + // ============================== + // TURNServerAddress + // ============================== + // + User::LeaveIfError( aRepository->Create( + KUNSAFProtocolsTURNAddressMask|turnKey, + iTurnServers[counter]->TurnSrvAddr() ) ); + + // ============================== + // TURNServerPort + // ============================== + // + User::LeaveIfError( aRepository->Create( + KUNSAFProtocolsTURNPortMask|turnKey, + iTurnServers[counter]->TurnSrvPort() ) ); + + // ============================== + // TURNServerUsername + // ============================== + // + User::LeaveIfError( aRepository->Create( + KUNSAFProtocolsTURNUsernameMask|turnKey, + iTurnServers[counter]->TurnUsername() ) ); + + // ============================== + // TURNServerPassword + // ============================== + // + User::LeaveIfError( aRepository->Create( + KUNSAFProtocolsTURNPasswordMask|turnKey, + iTurnServers[counter]->TurnPassword() ) ); + + DBG_PRINT( "CNATFWDomainSpecificItem::StoreTurnServerItemsL - \ +TURN server keys created" ); + } + DBG_PRINT( "CNATFWDomainSpecificItem::StoreTurnServerItemsL - end" ); + } + +// End of File +