natfw/natfwsettings/src/cnatfwstunsettings.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwsettings/src/cnatfwstunsettings.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,272 @@
+/*
+* 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 <unsafprotocolscrkeys.h>
+#include "natsettingslogs.h"
+#include "cnatfwstunsettings.h"
+#include "cnatfwserversettings.h" 
+#include "cnatfwcenrephandler.h"
+#include "tnatfwsettingsparser.h"
+#include "natfwdefaultsettingsvalues.h"
+
+const TUint KDefaultGranularity = 2;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+CNATFWStunSettings::CNATFWStunSettings()
+    {
+
+    }
+
+
+void CNATFWStunSettings::ConstructL( )
+    {
+    iServerArray = new ( ELeave ) CArrayPtrFlat<CNATFWServerSettings>(
+        KDefaultGranularity );
+    iLatestConnectedServerAddr = KNullDesC8().AllocL();
+    }
+
+
+CNATFWStunSettings* CNATFWStunSettings::NewL()
+    {
+    CNATFWStunSettings* self = CNATFWStunSettings::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+CNATFWStunSettings* CNATFWStunSettings::NewLC()
+    {
+    CNATFWStunSettings* self = new( ELeave ) CNATFWStunSettings;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+CNATFWStunSettings::~CNATFWStunSettings()
+    {
+    if ( iServerArray )
+        {
+        iServerArray->ResetAndDestroy();
+        }
+    delete iServerArray;
+    delete iLatestConnectedServerAddr;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStunSettings::SetStunServersL
+// ---------------------------------------------------------------------------
+//
+void CNATFWStunSettings::SetStunServersL(
+    CArrayPtr<CNATFWServerSettings>* aServers )
+    {
+    __ASSERT_ALWAYS( NULL != aServers, User::Leave( KErrArgument ) );
+    
+    iServerArray->ResetAndDestroy();
+    delete iServerArray;
+    iServerArray = NULL;
+    iServerArray = aServers;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStunSettings::SetLatestConnectedServerAddrL
+// ---------------------------------------------------------------------------
+//
+void CNATFWStunSettings::SetLatestConnectedServerAddrL(
+    const TDesC8& aServerAddr )
+    {
+    delete iLatestConnectedServerAddr;
+    iLatestConnectedServerAddr = NULL;
+    iLatestConnectedServerAddr = aServerAddr.AllocL();
+    }
+    
+
+// ---------------------------------------------------------------------------
+// CNATFWStunSettings::SetLatestConnectedServerPort
+// ---------------------------------------------------------------------------
+//
+void CNATFWStunSettings::SetLatestConnectedServerPort( TInt aServerPort )
+    {
+    iLatestConnectedServerPort = aServerPort;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStunSettings::SetRetransmissionTimeout
+// ---------------------------------------------------------------------------
+//
+void CNATFWStunSettings::SetRetransmissionTimeout( TUint aRto )
+    {
+    iRto = aRto;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStunSettings::ReadSettingsL
+// ---------------------------------------------------------------------------
+//  
+void CNATFWStunSettings::ReadSettingsL( TUint32 aDomainKey,
+    const CNATFWCenRepHandler& aRepHandler )
+    {
+    __NATSETTINGS( "CNATFWStunSettings::ReadSettingsL" )
+     
+    RArray<TUint32> serverKeys;
+    CleanupClosePushL( serverKeys );
+    
+    TBool sharedSecretNotEnabled;
+    TBool sharedSecretEnabled;
+    
+    // read sharedsecret enabled
+    if ( KErrNone != aRepHandler.Read( KUNSAFProtocolsDomainSharedSecretNotSupported |
+        aDomainKey, sharedSecretNotEnabled ) )
+        {
+        sharedSecretEnabled = KNATFWDefaultUseSharedSecret;
+        }
+    else
+        {
+        sharedSecretEnabled = !sharedSecretNotEnabled;
+        }
+        
+    // read server settings
+    TInt err = aRepHandler.FindServerKeys(
+        KUNSAFProtocolsSTUNServerTableMask | aDomainKey, serverKeys );
+        
+    TInt serverCount = serverKeys.Count();
+    
+    if ( KErrNone == err && serverCount > 0 )
+        {
+        for( TInt i( 0 ); i < serverCount; i++ )
+            {
+            CNATFWServerSettings* serverSettings = CNATFWServerSettings::NewLC(
+                KNullDesC8,
+                KNATFWDefaultSTUNServerPort,
+                KNullDesC8,
+                KNullDesC8,
+                sharedSecretEnabled );
+
+            TUint32 key = serverKeys[i] | aDomainKey;
+            serverSettings->ReadSettingsL( key, aRepHandler );
+            iServerArray->AppendL( serverSettings );
+            CleanupStack::Pop( serverSettings );
+            }
+        }
+    else
+        {
+        if ( KErrNotFound == err )
+            {
+             __NATSETTINGS( "Server settings not found" )
+            }
+        else
+            {
+            User::Leave( err );
+            }
+        }
+    CleanupStack::PopAndDestroy( &serverKeys );
+    
+    // read LatestConnectedStunServerAddress and possible port
+    TInt port = 0;
+    HBufC8* tempBufPointer = NULL;
+    
+    tempBufPointer = aRepHandler.ReadL(
+        KUNSAFProtocolsLatestConnectedSTUNServerAddressMask | aDomainKey );
+    if ( tempBufPointer ) 
+        {
+        CleanupStack::PushL( tempBufPointer );
+        HBufC8* addr = TNATFWSettingsParser::ParseAddressLC(
+            *tempBufPointer, port );
+        SetLatestConnectedServerAddrL( *addr );
+        SetLatestConnectedServerPort( port );
+        CleanupStack::PopAndDestroy( addr );
+        CleanupStack::PopAndDestroy( tempBufPointer );
+        }
+    else
+        {
+        SetLatestConnectedServerAddrL( KNullDesC8 );
+        SetLatestConnectedServerPort( port );
+        }
+    
+    // Read LatestConnectedStunServerPort, replaces previous data if found
+    if ( KErrNone == aRepHandler.Read( KUNSAFProtocolsLatestConnectedSTUNServerPortMask |
+        aDomainKey, port ) )
+        {
+        SetLatestConnectedServerPort( port );
+        }
+    
+    // read retransmission timeout
+    if ( KErrNone != aRepHandler.Read( KUNSAFProtocolsStunRetransmissionTimeoutMask |
+        aDomainKey, iRto ) )
+        {
+        iRto = KNATFWDefaultRtoValue;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class MNATFWStunSettings.
+// CNATFWStunSettings::GetStunServerArrayL
+// ---------------------------------------------------------------------------
+//
+void CNATFWStunSettings::GetStunServerArrayL(
+    RPointerArray<MNATFWServerSettings>& aServers ) const
+    {
+    TInt count = iServerArray->Count();
+    
+    for ( TInt i( 0 ); i < count; i++ )
+        {
+        aServers.AppendL( iServerArray->At( i ) );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class MNATFWStunSettings.
+// CNATFWStunSettings::RetransmissionTimeout
+// ---------------------------------------------------------------------------
+//
+TUint CNATFWStunSettings::RetransmissionTimeout() const
+    {
+    return iRto;
+    }
+ 
+    
+// ---------------------------------------------------------------------------
+// From class MNATFWStunSettings.
+// CNATFWStunSettings::LatestConnectedServerAddr
+// ---------------------------------------------------------------------------
+//
+ const TDesC8& CNATFWStunSettings::LatestConnectedServerAddr() const
+    {
+    return *iLatestConnectedServerAddr;
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class MNATFWStunSettings.
+// CNATFWStunSettings::LatestConnectedServerPort
+// ---------------------------------------------------------------------------
+//
+TInt CNATFWStunSettings::LatestConnectedServerPort() const
+    {
+    return iLatestConnectedServerPort;
+    }