natfw/natfwsettings/src/cnatfwsettingsimpl.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwsettings/src/cnatfwsettingsimpl.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,383 @@
+/*
+* 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 <e32def.h>
+#include <badesca.h>
+#include <unsafprotocolscrkeys.h>
+#include "cnatfwsettingsimpl.h"
+#include "natsettingslogs.h"
+#include "natfwdefaultsettingsvalues.h"
+#include "cnatfwcenrephandler.h"
+#include "tnatfwsettingsparser.h"
+#include "cnatfwicesettings.h"
+#include "cnatfwstunsettings.h"
+#include "cnatfwturnsettings.h"
+
+const TUint KDefaultGranularity = 1;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::CNATFWNatSettingsImpl
+// ---------------------------------------------------------------------------
+//
+CNATFWNatSettingsImpl::CNATFWNatSettingsImpl()
+    {
+    iRefreshIntervalUdp = KNATFWDefaultRefreshIntervalUdp;
+    iRefreshIntervalTcp = KNATFWDefaultRefreshIntervalTcp;
+    iUseSharedSecret = KNATFWDefaultUseSharedSecret;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CNATFWNatSettingsImpl::ConstructL( const TDesC8& aDomain )
+    {
+    __NATSETTINGS( "CNATFWNatSettingsImpl::ConstructL - start" )
+    
+    __ASSERT_ALWAYS( TUint( &aDomain ), User::Leave( KErrArgument ) );
+    __ASSERT_ALWAYS( aDomain.Length(), User::Leave( KErrArgument ) );
+    
+    iRepHandler = CNATFWCenRepHandler::NewL( KCRUidUNSAFProtocols );
+   
+    iEcomPlugInPriorityOrderArray =
+        new ( ELeave ) CDesC8ArrayFlat( KDefaultGranularity );
+    
+    iIceSettings = CNATFWIceSettings::NewL();
+    iStunSettings = CNATFWStunSettings::NewL();
+    iTurnSettings = CNATFWTurnSettings::NewL();
+    
+    TInt err = iRepHandler->ReadDomainSettingsKey( aDomain, iDomainKey );
+    
+    if ( KErrNotFound == err  )
+        {
+        __NATSETTINGS( "specific domain not found in the CR" )
+        iDomainKey = iRepHandler->CreateNewKeyL( KUNSAFProtocolsDomainMask,
+            KUNSAFProtocolsFieldTypeMask );
+        }
+
+    if ( KErrNone != err && KErrNotFound != err )
+        {
+        User::Leave( err );
+        }
+        
+    ReadGeneralSettingsL(); 
+    iDomain = aDomain.AllocL();
+    
+    __NATSETTINGS( "CNATFWNatSettingsImpl::ConstructL - end" )
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::NewL
+// ---------------------------------------------------------------------------
+//
+CNATFWNatSettingsImpl* CNATFWNatSettingsImpl::NewL(
+    const TDesC8& aDomain )
+    {
+    __NATSETTINGS( "CNATFWNatSettingsImpl::NewL" )
+    
+    CNATFWNatSettingsImpl* self = CNATFWNatSettingsImpl::NewLC(
+        aDomain );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::NewLC
+// ---------------------------------------------------------------------------
+//
+CNATFWNatSettingsImpl* CNATFWNatSettingsImpl::NewLC(
+    const TDesC8& aDomain )
+    {
+    __NATSETTINGS( "CNATFWNatSettingsImpl::NewLC" )
+    
+    CNATFWNatSettingsImpl* self =
+        new( ELeave ) CNATFWNatSettingsImpl();
+    CleanupStack::PushL( self );
+    self->ConstructL( aDomain );
+    return self;    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::~CNATFWNatSettingsImpl
+//----------------------------------------------------------------------------
+//
+CNATFWNatSettingsImpl::~CNATFWNatSettingsImpl()
+    {
+    __NATSETTINGS( "CNATFWNatSettingsImpl::~CNATFWNatSettingsImpl" )    
+    
+    delete iDomain;
+    delete iEcomPlugInPriorityOrderArray;
+    delete iRepHandler;
+    delete iIceSettings;
+    delete iStunSettings;
+    delete iTurnSettings;
+    }
+
+
+// --------------------------------------------------------------------------- 
+// CNATFWNatSettingsImpl::RetrieveIapSettings
+// ---------------------------------------------------------------------------
+//
+void CNATFWNatSettingsImpl::RetrieveIapSettingsL( const TUint aIapId )
+    {
+    __NATSETTINGS( "CNATFWNatSettingsImpl::RetrieveIapSettingsL" )
+    
+    ReadIapSettingsL( aIapId );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::Domain
+// ---------------------------------------------------------------------------
+//    
+const TDesC8& CNATFWNatSettingsImpl::Domain() const
+    {
+    return *iDomain;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::RefreshIntervalUdp
+// ---------------------------------------------------------------------------
+//    
+TInt CNATFWNatSettingsImpl::RefreshIntervalUdp() const
+    {
+    return iRefreshIntervalUdp;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::RefreshIntervalTcp
+// ---------------------------------------------------------------------------
+//    
+TInt CNATFWNatSettingsImpl::RefreshIntervalTcp() const
+    {
+    return iRefreshIntervalTcp;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::CrlfRefreshEnabled
+// ---------------------------------------------------------------------------
+//
+TBool CNATFWNatSettingsImpl::CrlfRefreshEnabled() const
+    {
+    return iCrlfRefreshEnabled;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::SharedSecret
+// ---------------------------------------------------------------------------
+//
+TBool CNATFWNatSettingsImpl::UseSharedSecret() const
+    {
+    return iUseSharedSecret;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::IceSettingsL
+// ---------------------------------------------------------------------------
+// 
+MNATFWIceSettings& CNATFWNatSettingsImpl::IceSettingsL()
+    {
+    iIceSettings->ReadSettingsL( iDomainKey, *iRepHandler );
+    return *iIceSettings;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::StunSettingsL
+// ---------------------------------------------------------------------------
+// 
+MNATFWStunSettings& CNATFWNatSettingsImpl::StunSettingsL()
+    {
+    iStunSettings->ReadSettingsL( iDomainKey, *iRepHandler );
+    return *iStunSettings;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::TurnSettingsL
+// ---------------------------------------------------------------------------
+// 
+MNATFWTurnSettings& CNATFWNatSettingsImpl::TurnSettingsL()
+    {
+    iTurnSettings->ReadSettingsL( iDomainKey, *iRepHandler );
+    return *iTurnSettings;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::AvailableNatProtocols
+// ---------------------------------------------------------------------------
+//
+const CDesC8Array& CNATFWNatSettingsImpl::AvailableNatProtocols() const
+    {
+    return *iEcomPlugInPriorityOrderArray;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::GetPortAreaL
+// ---------------------------------------------------------------------------
+//
+void CNATFWNatSettingsImpl::GetPortArea( TUint& aStartPort,
+    TUint& aEndPort ) const
+    {
+    aStartPort = iPortPoolStartPort;
+    aEndPort = iPortPoolEndPort;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::ReadGeneralSettingsL
+// ---------------------------------------------------------------------------
+//
+void CNATFWNatSettingsImpl::ReadGeneralSettingsL( )
+    {
+    __NATSETTINGS( "CNATFWNatSettingsImpl::ReadGeneralSettingsL - start" )
+    
+    //Protocol priority order
+    delete iEcomPlugInPriorityOrderArray;
+    iEcomPlugInPriorityOrderArray = NULL;
+    HBufC8* tempBuffer = iRepHandler->ReadL(
+        KUNSAFProtocolsUsedNATProtocolMask | iDomainKey );
+    if ( tempBuffer )
+        {
+        CleanupStack::PushL( tempBuffer );
+        iEcomPlugInPriorityOrderArray =
+            TNATFWSettingsParser::ParseDataToArrayL( *tempBuffer );
+        CleanupStack::PopAndDestroy( tempBuffer );
+        }
+    else
+        {
+        iEcomPlugInPriorityOrderArray =
+            TNATFWSettingsParser::ParseDataToArrayL( KNATFWDefaultPriorityOrder );
+        }
+    
+    // Use Shared secret
+    if ( KErrNone != iRepHandler->ReadBoolValue(
+        KUNSAFProtocolsDomainSharedSecretNotSupported | iDomainKey,
+        iUseSharedSecret ) )
+        {
+        iUseSharedSecret = KNATFWDefaultUseSharedSecret;
+        }
+    else
+        {
+        if ( iUseSharedSecret )
+            {
+            iUseSharedSecret = EFalse;
+            }
+        else
+            {
+            iUseSharedSecret = ETrue;
+            }
+        }
+    
+    // Read refresh interval UDP
+    if ( KErrNone != iRepHandler->Read( KUNSAFProtocolsDomainIntervalUDPMask |
+        iDomainKey, iRefreshIntervalUdp ) )
+        {
+        iRefreshIntervalUdp = KNATFWDefaultRefreshIntervalUdp;
+        }
+    
+    // Read refresh interval TCP
+    if ( KErrNone != iRepHandler->Read( KUNSAFProtocolsDomainIntervalTCPMask |
+        iDomainKey, iRefreshIntervalTcp ) )
+        {
+        iRefreshIntervalTcp = KNATFWDefaultRefreshIntervalTcp;
+        }
+    
+    // Start port of the port range
+    if ( KErrNone != iRepHandler->Read ( KUNSAFProtocolsPortPoolStartPortMask |
+        iDomainKey, iPortPoolStartPort ) )
+        {
+        iPortPoolStartPort = KNATFWDefaultPortPoolStartPort;
+        }
+    
+    // Start port of the port range
+    if ( KErrNone != iRepHandler->Read( KUNSAFProtocolsPortPoolEndPortMask |
+        iDomainKey, iPortPoolEndPort ) )
+        {
+        iPortPoolEndPort = KNATFWDefaultPortPoolEndPort;
+        }
+    
+    // Enable CRLF- based Refresh
+    if ( KErrNone != iRepHandler->Read( KUNSAFProtocolsDomainEnableCRLFRefresh |
+            iDomainKey, iCrlfRefreshEnabled ) )
+        {
+        iCrlfRefreshEnabled = KNATFWDefaultCRLFRefreshEnabled;
+        }
+    
+    __NATSETTINGS( "CNATFWNatSettingsImpl::ReadGeneralSettingsL - end" )
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWNatSettingsImpl::ReadIapSettingsL
+// ---------------------------------------------------------------------------
+//    
+void CNATFWNatSettingsImpl::ReadIapSettingsL( TUint32 aIapId )
+    {
+    __NATSETTINGS_INT1(
+        "CNATFWNatSettingsImpl::ReadIapSettingsL IAPId: - start", aIapId )
+    
+    TUint32 iapKey;
+    TInt err = iRepHandler->ReadIapSettingsKey( aIapId, iapKey );
+    
+    if ( KErrNone == err )
+        {
+        TUint stunRetransmitTimer( 0 );
+        // read UDP refresh interval
+        iRepHandler->Read( KUNSAFProtocolsIntervalUDPMask | iapKey,
+            iRefreshIntervalUdp );
+        // read TCP refresh interval
+        iRepHandler->Read( KUNSAFProtocolsIntervalTCPMask | iapKey,
+            iRefreshIntervalTcp );
+        // read Retransmit interval
+        if ( KErrNone == iRepHandler->Read( KUNSAFProtocolsSTUNRetransmitTimerMask | iapKey,
+            stunRetransmitTimer ) )
+            {
+            iStunSettings->SetRetransmissionTimeout( stunRetransmitTimer );
+            iTurnSettings->SetRetransmissionTimeout( stunRetransmitTimer );
+            }
+        }
+    else if ( KErrNotFound == err )
+        {
+        __NATSETTINGS(
+            "Specific IAP settings not found, Use default or current values" );
+        }
+    else
+        {
+        User::Leave( err );
+        }
+    __NATSETTINGS( "CNATFWNatSettingsImpl::ReadIapSettingsL - end" )
+    }
+
+//End of file