--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwsettings/src/cnatfwcenrephandler.cpp Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,322 @@
+/*
+* 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 <centralrepository.h>
+#include <unsafprotocolscrkeys.h>
+#include "cnatfwcenrephandler.h"
+#include "natsettingslogs.h"
+
+const TInt KAllowedDomainAndIapKeyCount = 1;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CNATFWCenRepHandler::CNATFWCenRepHandler
+// ---------------------------------------------------------------------------
+//
+CNATFWCenRepHandler::CNATFWCenRepHandler()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCenRepHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CNATFWCenRepHandler::ConstructL( const TUid& aRepositoryUid )
+ {
+ iCenRep = CRepository::NewL( aRepositoryUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCenRepHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CNATFWCenRepHandler* CNATFWCenRepHandler::NewL( const TUid& aRepositoryUid )
+ {
+ __NATSETTINGS( "CNATFWCenRepHandler::NewL" )
+
+ CNATFWCenRepHandler* self =
+ new( ELeave ) CNATFWCenRepHandler();
+ CleanupStack::PushL( self );
+ self->ConstructL( aRepositoryUid );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCenRepHandler::~CNATFWCenRepHandler
+//----------------------------------------------------------------------------
+//
+CNATFWCenRepHandler::~CNATFWCenRepHandler()
+ {
+ __NATSETTINGS( "CNATFWCenRepHandler::~CNATFWNatSettingsImpl" )
+
+ delete iCenRep;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCenRepHandler::ReadDomainSettingsKey
+// ---------------------------------------------------------------------------
+//
+TInt CNATFWCenRepHandler::ReadDomainSettingsKey(
+ const TDesC8& aDomain, TUint32& aDomainKey ) const
+ {
+ __NATSETTINGS( "CNATFWCenRepHandler::ReadDomainSettingsKeyL" )
+
+ TInt err( 0 );
+ RArray<TUint32> keys;
+
+ TRAPD( systemErr, err = iCenRep->FindEqL( KUNSAFProtocolsDomainMask,
+ KUNSAFProtocolsFieldTypeMask, aDomain, keys ) );
+
+ if ( KErrNone != systemErr )
+ {
+ keys.Close();
+ return systemErr;
+ }
+
+ TInt count = keys.Count();
+
+ if ( KErrNone == err && KAllowedDomainAndIapKeyCount == count )
+ {
+ aDomainKey = KUNSAFProtocolsDomainMask ^ keys[0];
+ }
+ if ( count > KAllowedDomainAndIapKeyCount )
+ {
+ err = KErrCorrupt;
+ }
+ keys.Close();
+ return err;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCenRepHandler::ReadIapSettingsKey
+// ---------------------------------------------------------------------------
+//
+TInt CNATFWCenRepHandler::ReadIapSettingsKey(
+ TInt aIapId, TUint32& aIapKey ) const
+ {
+ __NATSETTINGS( "CNATFWCenRepHandler::ReadIapSettingsKeyL" )
+
+ TInt err( 0 );
+ RArray<TUint32> keys;
+
+ TRAPD( systemErr, err = iCenRep->FindEqL( KUNSAFProtocolsIAPIdMask,
+ KUNSAFProtocolsFieldTypeMask, aIapId, keys ) );
+
+ if ( KErrNone != systemErr )
+ {
+ keys.Close();
+ return systemErr;
+ }
+
+ TInt count = keys.Count();
+
+ if ( KErrNone == err && KAllowedDomainAndIapKeyCount == count )
+ {
+ aIapKey = KUNSAFProtocolsIAPIdMask ^ keys[0];
+ }
+ if ( count > KAllowedDomainAndIapKeyCount )
+ {
+ err = KErrCorrupt;
+ }
+ keys.Close();
+ return err;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCenRepHandler::FindServerKeys
+// ---------------------------------------------------------------------------
+//
+TInt CNATFWCenRepHandler::FindServerKeys( TUint32 aPartialId,
+ RArray<TUint32>& aFoundKeys ) const
+ {
+ const TUint32 KMaskForAllServerSettingsIds = 0xff000fff;
+
+ TInt error( 0 );
+ RArray<TUint32> serverKeys;
+
+ TRAPD( systemErr, error = iCenRep->FindL( aPartialId,
+ KMaskForAllServerSettingsIds, serverKeys ) );
+
+ if ( KErrNone != systemErr )
+ {
+ serverKeys.Close();
+ return systemErr;
+ }
+
+ if ( KErrNone == error )
+ {
+ TInt count = serverKeys.Count();
+
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ error = aFoundKeys.Append( serverKeys[i] & KUNSAFProtocolsSubKeyMask );
+ }
+
+ for ( TInt j( 0 ); j < aFoundKeys.Count(); j++ )
+ {
+ for ( TInt i( j + 1 ); i < aFoundKeys.Count(); )
+ {
+ if ( aFoundKeys[ i ] == aFoundKeys[ j ] )
+ {
+ aFoundKeys.Remove( i );
+ }
+ else
+ {
+ i++;
+ }
+ }
+ }
+ }
+ serverKeys.Close();
+ return error;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCenRepHandler::CreateNewKeyL
+// ---------------------------------------------------------------------------
+//
+TUint32 CNATFWCenRepHandler::CreateNewKeyL(
+ const TUint32 aSettingKeyMask, const TUint32 aField ) const
+ {
+ TUint32 newKey( 0 );
+ RArray<TUint32> keys;
+ CleanupClosePushL( keys );
+ TInt err( iCenRep->FindL( aSettingKeyMask, aField, keys ) );
+ TInt keyCount( keys.Count() );
+
+ if ( KErrNotFound == err )
+ {
+ newKey = aField + 1;
+ }
+ else
+ {
+ User::LeaveIfError( err );
+ if ( !keyCount )
+ {
+ newKey = aField + 1;
+ }
+ else
+ {
+ // Find the biggest key and increment it by one
+ keys.SortUnsigned();
+ TUint32 maxKey = aSettingKeyMask ^ keys[keyCount - 1];
+ newKey = aField + 1 + maxKey;
+ }
+ }
+ newKey |= aField;
+ newKey ^= aField;
+ CleanupStack::PopAndDestroy( &keys );
+ return newKey;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCenRepHandler::ReadL
+// ---------------------------------------------------------------------------
+//
+HBufC8* CNATFWCenRepHandler::ReadL( const TUint32& aKey ) const
+ {
+ HBufC8* buffer = NULL;
+ TBuf8<1> tmp;
+ TInt actualLength( 0 );
+ TInt status = iCenRep->Get( aKey, tmp, actualLength );
+
+ if ( ( KErrNone == status || KErrOverflow == status ) )
+ {
+ if( actualLength )
+ {
+ buffer = HBufC8::NewLC( actualLength );
+ TPtr8 ptr( buffer->Des() );
+ User::LeaveIfError( iCenRep->Get( aKey, ptr ) );
+ CleanupStack::Pop( buffer );
+ }
+ else
+ {
+ buffer = KNullDesC8().AllocL();
+ }
+ }
+ return buffer;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCenRepHandler::ReadBoolValue
+// ---------------------------------------------------------------------------
+//
+TInt CNATFWCenRepHandler::ReadBoolValue(
+ const TUint32& aKey, TBool& aKeyValue ) const
+ {
+ TInt err = KErrNotFound;
+ TInt tmp( 0 );
+ if ( KErrNone == iCenRep->Get( aKey, tmp ) )
+ {
+ aKeyValue = ( tmp != 0 );
+ err = KErrNone;
+ }
+ return err;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCenRepHandler::Read
+// ---------------------------------------------------------------------------
+//
+TInt CNATFWCenRepHandler::Read(
+ const TUint32& aKey, TUint& aKeyValue ) const
+ {
+ TInt err = KErrNotFound;
+ TInt tmp;
+ if ( KErrNone == iCenRep->Get( aKey, tmp ) )
+ {
+ aKeyValue = static_cast<TUint>( tmp );
+ err = KErrNone;
+ }
+ return err;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWCenRepHandler::Read
+// ---------------------------------------------------------------------------
+//
+TInt CNATFWCenRepHandler::Read(
+ const TUint32& aKey, TInt& aKeyValue ) const
+ {
+ TInt readKeyValue( 0 );
+ if ( KErrNone == iCenRep->Get( aKey, readKeyValue ) )
+ {
+ aKeyValue = readKeyValue;
+ }
+ else
+ {
+ return KErrNotFound;
+ }
+ return KErrNone;
+ }