diff -r 000000000000 -r 1bce908db942 natfw/natfwsettings/src/cnatfwcenrephandler.cpp --- /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 +#include +#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 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 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& aFoundKeys ) const + { + const TUint32 KMaskForAllServerSettingsIds = 0xff000fff; + + TInt error( 0 ); + RArray 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 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( 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; + }