natfw/natfwsettings/tsrc/ut_cnatfwnatsettings/src/settingstore.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwsettings/tsrc/ut_cnatfwnatsettings/src/settingstore.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,413 @@
+/*
+* Copyright (c) 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:    
+*
+*/
+
+
+
+#include "settingstore.h"
+
+#include <unsafprotocolscrkeys.h>
+
+#include "datadepository.h"
+#include "cnatfwstunsettings.h"
+#include "cnatfwturnsettings.h"
+#include <mnatfwserversettings.h>
+#include "natfwdefaultsettingsvalues.h"
+
+const TUint KDefaultGranularity = 1;
+
+// ---------------------------------------------------------------------------
+// CSettingStore::CSettingStore
+// ---------------------------------------------------------------------------
+// 
+CSettingStore::CSettingStore( TUint aIapId ) :
+    iIapId( aIapId )
+    {
+    //domain
+    iRefreshIntervalUdp = KNATFWDefaultRefreshIntervalUdp;
+    iRefreshIntervalTcp = KNATFWDefaultRefreshIntervalTcp;
+    iCrlfRefresEnabled = KNATFWDefaultCRLFRefreshEnabled;
+    iUseSharedSecret = KNATFWDefaultUseSharedSecret;
+    iStartPort = KNATFWDefaultPortPoolStartPort;
+    iEndPort = KNATFWDefaultPortPoolEndPort;
+    //ICE
+    iHostPref = KNATFWDefaultlHostPref;
+    iServerReflexivePref = KNATFWDefaultServerRefPref;
+    iRelayPref = KNATFWDefaultRelayPref;
+    iPeerReflexivePref = KNATFWDefaultPeerRefPref;
+    iIpv4AddrFamilyPref = KNATFWDefaultIPV4Pref;
+    iIpv6AddrFamilyPref = KNATFWDefaultIPV6Pref;
+    iVpnInterfacePref = KNATFWDefaultVPNPref;
+    iUdpTransportPref = KNATFWDefaultUDPPref;
+    iTcpTransportPref = KNATFWDefaultTCPPref;
+    iTcpDirActivePref = KNATFWDefaultTCPActivePref;
+    iTcpDirPassivePref = KNATFWDefaultTCPPassivePref;
+    iTcpDirSimultaneousOpenPref = KNATFWDefaultTCPSimultPref;
+    // Iap
+    iIapRefreshIntervalUdp = KNATFWDefaultIapRefreshIntervalUdp;
+    iIapRefreshIntervalTcp = KNATFWDefaultIapRefreshIntervalTcp;
+    iIapStunRetransmitTimer = KNATFWDefaultStunRetransmitTimer;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSettingStore::ConstructL
+// ---------------------------------------------------------------------------
+//  
+void CSettingStore::ConstructL( const TDesC8& aDomain )
+    {
+    iDomain = aDomain.AllocL();
+    iRepository = CRepository::NewL( KCRUidUNSAFProtocols );
+    iDepository = CDataDepository::NewL( iRepository );
+    iUtilityPlugins = KNATFWDefaultIceUsedPlugins().AllocL();
+    iAvailableNatProtocols = KNATFWDefaultPriorityOrder().AllocL();
+    iStunSettings = CNATFWStunSettings::NewL();
+    iTurnSettings = CNATFWTurnSettings::NewL();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSettingStore::NewL
+// ---------------------------------------------------------------------------
+// 
+CSettingStore* CSettingStore::NewL( const TDesC8& aDomain, TUint aIapId )
+    {
+    CSettingStore* self = CSettingStore::NewLC( aDomain, aIapId );
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSettingStore::NewL
+// ---------------------------------------------------------------------------
+//     
+CSettingStore* CSettingStore::NewLC( const TDesC8& aDomain, TUint aIapId )
+    {
+    CSettingStore* self = new( ELeave ) CSettingStore( aIapId );
+    CleanupStack::PushL( self );
+    self->ConstructL( aDomain );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSettingStore::~CSettingStore
+// ---------------------------------------------------------------------------
+//
+CSettingStore::~CSettingStore( )
+    {
+    delete iDepository;
+    delete iRepository;
+    delete iDomain;
+    delete iAvailableNatProtocols;
+    delete iUtilityPlugins;
+    delete iStunSettings;
+    delete iTurnSettings;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSettingStore::ReadDomainSettingsKeyL
+// ---------------------------------------------------------------------------
+//
+TInt CSettingStore::ReadDomainSettingsKeyL( const TDesC8& aDomain, 
+    TUint32& aDomainKey ) const
+    {
+    RArray<TUint32> keys;
+    CleanupClosePushL( keys );
+    
+    TInt err = iRepository->FindEqL( KUNSAFProtocolsDomainMask,
+        KUNSAFProtocolsFieldTypeMask, aDomain, keys );
+    TInt count = keys.Count();
+    
+    if ( KErrNone == err && 1 == count )
+        {
+        aDomainKey = KUNSAFProtocolsDomainMask ^ keys[0];
+        }
+    if ( count > 1 )
+        {
+        err = KErrCorrupt;
+        }
+    CleanupStack::PopAndDestroy( &keys );
+    return err;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSettingStore::EraseL
+// ---------------------------------------------------------------------------
+//
+TInt CSettingStore::EraseL( TUint32 aTableMask, TUint32 aFieldTypeMask )
+    {
+    return iDepository->EraseL( aTableMask, aFieldTypeMask );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSettingStore::GetDomainKey
+// ---------------------------------------------------------------------------
+//
+TUint32 CSettingStore::GetDomainKeyL()
+    {
+    TUint32 domainKey; 
+    TInt error = ReadDomainSettingsKeyL( *iDomain, domainKey );
+    
+    if( KErrNotFound == error )
+        {
+        domainKey = CreateNewDomainL( *iDomain );
+        }
+    else
+        {
+        User::LeaveIfError( error );
+        }
+    return domainKey;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSettingStore::CreateNewDomainL
+// ---------------------------------------------------------------------------
+//
+TUint32 CSettingStore::CreateNewDomainL( const TDesC8& aDomain )
+    {
+    TUint32 domainKey = iDepository->CreateNewTableKeyL(
+        KUNSAFProtocolsDomainMask, KUNSAFProtocolsFieldTypeMask );
+    
+    iDepository->StoreL( KUNSAFProtocolsDomainMask | domainKey, aDomain );
+    return domainKey;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSettingStore::CreateNewIapL
+// ---------------------------------------------------------------------------
+//
+TUint32 CSettingStore::CreateNewIapL( const TInt aIapId )
+    {
+    TUint32 iapKey = iDepository->CreateNewTableKeyL(
+        KUNSAFProtocolsIAPIdMask, KUNSAFProtocolsFieldTypeMask );
+        
+    iDepository->StoreL( KUNSAFProtocolsIAPIdMask | iapKey, aIapId );
+    return iapKey;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSettingStore::CreateServerKeyL
+// ---------------------------------------------------------------------------
+//
+TUint32 CSettingStore::CreateServerKeyL( TUint32 aDomainKey,
+    TUint32 aServerMask )
+    {
+    const TUint32 KMaskForAllServerSettingsIds = 0xff000fff;
+    
+    return iDepository->CreateNewServerKeyL( aServerMask |
+        aDomainKey, KMaskForAllServerSettingsIds );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSettingStore::StoreSettingsL
+// ---------------------------------------------------------------------------
+//
+void CSettingStore::StoreSettingsL()
+    {
+    TUint32 domainKey;
+
+    domainKey = GetDomainKeyL();
+    
+    RPointerArray<MNATFWServerSettings> stunServers;
+    CleanupClosePushL( stunServers );
+    
+    iStunSettings->GetStunServerArrayL( stunServers );
+
+    RPointerArray<MNATFWServerSettings> turnServers;
+    CleanupClosePushL( turnServers ); 
+       
+    iTurnSettings->GetTurnServerArrayL( turnServers );
+
+    TUint32 IapKey = CreateNewIapL( iIapId );
+    
+    //Settings
+    /************************************************************************/
+    //Domain spesific settings
+    
+    iDepository->StoreL( KUNSAFProtocolsDomainSharedSecretNotSupported |
+        domainKey, !iUseSharedSecret ); 
+           
+    iDepository->StoreL( KUNSAFProtocolsPortPoolStartPortMask | domainKey,
+        iStartPort );
+        
+    iDepository->StoreL( KUNSAFProtocolsPortPoolEndPortMask | domainKey, 
+        iEndPort );
+        
+    iDepository->StoreL( KUNSAFProtocolsUsedNATProtocolMask | domainKey, 
+        *iAvailableNatProtocols );
+        
+    iDepository->StoreL( KUNSAFProtocolsDomainEnableCRLFRefresh | domainKey, 
+        iCrlfRefresEnabled );
+        
+    iDepository->StoreL( KUNSAFProtocolsDomainIntervalUDPMask | domainKey,
+        iRefreshIntervalUdp );
+        
+    iDepository->StoreL( KUNSAFProtocolsDomainIntervalTCPMask | domainKey, 
+        iRefreshIntervalTcp );
+       
+    /************************************************************************/
+    //STUN settings in the domain
+    
+    //STUN Servers
+    for ( TInt i( 0 ); i < stunServers.Count(); i++ )
+        {
+        TUint32 stunServerkey = CreateServerKeyL(
+            domainKey, KUNSAFProtocolsSTUNServerTableMask );
+        
+        if ( stunServers[i]->Address().Compare( KNullDesC8 ) )
+            {
+            iDepository->StoreL( KUNSAFProtocolsSTUNAddressMask | domainKey |
+                stunServerkey, stunServers[i]->Address() );
+            }
+        if ( stunServers[i]->Port() != 0 )
+            {
+            iDepository->StoreL( KUNSAFProtocolsSTUNPortMask | domainKey |
+                stunServerkey, stunServers[i]->Port() );
+            }
+        if ( stunServers[i]->Username().Compare( KNullDesC8 ) )
+            {    
+            iDepository->StoreL( KUNSAFProtocolsSTUNUsernameMask | domainKey |
+                stunServerkey, stunServers[i]->Username() );
+            }
+        if ( stunServers[i]->Password().Compare( KNullDesC8 ) )
+            {
+            iDepository->StoreL( KUNSAFProtocolsSTUNPasswordMask | domainKey |
+                stunServerkey, stunServers[i]->Password() );
+            }
+        /*    
+        iDepository->StoreL( KUNSAFProtocolsSTUNConnectivityCheckTimeoutMask |
+            domainKey | stunServerkey, iStunSettings->RetransmissionTimeout() );
+        */
+        }
+
+    iDepository->StoreL( KUNSAFProtocolsLatestConnectedSTUNServerAddressMask |
+        domainKey, iStunSettings->LatestConnectedServerAddr() );
+    
+    iDepository->StoreL( KUNSAFProtocolsLatestConnectedSTUNServerPortMask |
+        domainKey, iStunSettings->LatestConnectedServerPort() );
+        
+    iDepository->StoreL( KUNSAFProtocolsStunRetransmissionTimeoutMask |
+        domainKey, iStunSettings->RetransmissionTimeout() );
+
+    /************************************************************************/
+    //TURN settings in the domain
+   
+    iDepository->StoreL( KUNSAFProtocolsLatestConnectedTURNServerAddressMask |
+        domainKey, iTurnSettings->LatestConnectedServerAddr() );
+    
+    iDepository->StoreL( KUNSAFProtocolsLatestConnectedTURNServerPortMask |
+        domainKey, iTurnSettings->LatestConnectedServerPort() );
+    
+    iDepository->StoreL( KUNSAFProtocolsTurnRetransmissionTimeoutMask |
+        domainKey, iTurnSettings->RetransmissionTimeout() );
+      
+    //TURN Servers
+    for ( TInt i( 0 ); i < turnServers.Count(); i++ )
+        {
+        TUint32 turnServerkey = CreateServerKeyL(
+            domainKey, KUNSAFProtocolsTURNServerTableMask );
+        if ( turnServers[i]->Address().Compare( KNullDesC8 ) )
+            {    
+            iDepository->StoreL( KUNSAFProtocolsTURNAddressMask | domainKey |
+                turnServerkey, turnServers[i]->Address() );
+            }
+        if ( turnServers[i]->Port() != 0 )
+            {
+            iDepository->StoreL( KUNSAFProtocolsTURNPortMask | domainKey |
+                turnServerkey, turnServers[i]->Port() );
+            }
+        if ( turnServers[i]->Username().Compare( KNullDesC8 ) )
+            {    
+            iDepository->StoreL( KUNSAFProtocolsTURNUsernameMask | domainKey |
+                turnServerkey, turnServers[i]->Username() );
+            }
+        if ( turnServers[i]->Password().Compare( KNullDesC8 ) )
+            {
+            iDepository->StoreL( KUNSAFProtocolsTURNPasswordMask | domainKey |
+                turnServerkey, turnServers[i]->Password() );
+            }
+        /* 
+        iDepository->StoreL( KUNSAFProtocolsTURNConnectivityCheckTimeoutMask |
+            domainKey | turnServerkey, iTurnSettings->RetransmissionTimeout() );
+        */
+        }
+        
+    /************************************************************************/
+    //ICE spesific in the Domain settings
+    
+    iDepository->StoreL( KUNSAFProtocolsNATUtilities | domainKey,
+        *iUtilityPlugins );
+    
+    iDepository->StoreL( KUNSAFProtocolsHostPref | domainKey,
+       iHostPref );
+
+    iDepository->StoreL( KUNSAFProtocolsServerRefPref | domainKey,
+        iServerReflexivePref );    
+ 
+    iDepository->StoreL( KUNSAFProtocolsRelayPref | domainKey,
+        iRelayPref );
+
+    iDepository->StoreL( KUNSAFProtocolsPeerRefPref | domainKey,
+        iPeerReflexivePref );
+
+    iDepository->StoreL( KUNSAFProtocolsIPV4Pref | domainKey,
+        iIpv4AddrFamilyPref );
+
+    iDepository->StoreL( KUNSAFProtocolsIPV6Pref | domainKey,
+        iIpv6AddrFamilyPref );
+
+    iDepository->StoreL( KUNSAFProtocolsVPNPref | domainKey,
+        iVpnInterfacePref );
+    
+    iDepository->StoreL( KUNSAFProtocolsUDPPref | domainKey,
+        iUdpTransportPref );
+    
+    iDepository->StoreL( KUNSAFProtocolsTCPPref | domainKey,
+        iTcpTransportPref );
+
+    iDepository->StoreL( KUNSAFProtocolsTCPActivePref | domainKey,
+        iTcpDirActivePref );
+
+    iDepository->StoreL( KUNSAFProtocolsTCPPassivePref | domainKey,
+        iTcpDirPassivePref );
+
+    iDepository->StoreL( KUNSAFProtocolsTCPSimultPref | domainKey,
+        iTcpDirSimultaneousOpenPref );
+
+    /************************************************************************/
+    //IAP Spesific settings
+
+    iDepository->StoreL( KUNSAFProtocolsIntervalTCPMask | IapKey, 
+        iIapRefreshIntervalTcp );
+        
+    iDepository->StoreL( KUNSAFProtocolsIntervalUDPMask | IapKey, 
+        iIapRefreshIntervalUdp );
+        
+    iDepository->StoreL( KUNSAFProtocolsSTUNRetransmitTimerMask | IapKey, 
+        iIapStunRetransmitTimer );
+    
+    CleanupStack::PopAndDestroy( &turnServers );
+    CleanupStack::PopAndDestroy( &stunServers );
+    }