diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfwplugins/cenrepsourceplugin/src/cenrepattributes.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextframework/cfwplugins/cenrepsourceplugin/src/cenrepattributes.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,180 @@ +/* +* Copyright (c) 2007-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: CCenRepAttributes class implementation. +* +*/ + + +#include +#include +#include + +#include "cenrepattributes.h" +#include "cenreptrace.h" + +// Capabilities +_LIT_SECURITY_POLICY_PASS( KCenRepSourceInteractionSec ); + +// ======== LOCAL FUNCTIONS ========= + +// ======== MEMBER FUNCTIONS ======== + +CCenRepAttributes::~CCenRepAttributes() + { + FUNC_LOG; + // Delete context + delete iContext; + } + +CCenRepAttributes::CCenRepAttributes( + MCFContextInterface& aCF, + CCFContextSourceSettingArray& aSettings ) : + iSettings( aSettings ), + iCF( aCF ) + { + FUNC_LOG; + } + +//---------------------------------------------------------------------------- +// CCenRepAttributes::ConvertToHex +//---------------------------------------------------------------------------- +// +TInt CCenRepAttributes::ConvertToHex( const TDesC& aString, TUint32& aValue ) + { + FUNC_LOG; + + const TUint KLimit = 0xffffffff; + _LIT( KHexPattern, "0x*" ); + TInt err = KErrNotFound; + + if ( err != aString.Match( KHexPattern ) ) + { + TLex lex( aString ); + + // Get rid of '0x' + const TInt incAmount( 2 ); + lex.Inc( incAmount ); + err = lex.BoundedVal( aValue, EHex, KLimit ); + } + + return err; + } + +//---------------------------------------------------------------------------- +// CCenRepAttributes::ConvertToInt +//---------------------------------------------------------------------------- +// +TInt CCenRepAttributes::ConvertToInt( const TDesC& aString, TInt& aValue ) const + { + FUNC_LOG; + + TInt err = KErrNone; + + TLex lex( aString ); + + if( lex.Val( aValue ) != KErrNone ) + { + err = KErrNotFound; + } + + return err; + } + +// --------------------------------------------------------------------------- +// CCenRepAttributes::InitCenRepKeyL +// --------------------------------------------------------------------------- +// +TUint32 CCenRepAttributes::InitCenRepKeyL( TInt aIndex ) + { + FUNC_LOG; + + TUint32 cenRepKey = 0; + + iParamArray = iSettings.Item( aIndex ).Parameters(); + const RKeyValueArray& attrArray = iSettings.Item( aIndex ).Attributes(); + + iParamCount = iParamArray.Count(); + + // Check attributes + TInt attrCount = attrArray.Count(); + + DefineContext(); + + // Find given key + for( TInt i = 0; i < attrCount; i++ ) + { + // Currently only interested given parameter key + if ( attrArray[i]->Key().CompareF( KKey ) == KErrNone ) + { + TInt err = ConvertToHex( attrArray[i]->Value(), cenRepKey ); + User::LeaveIfError( err ); + } + } + return cenRepKey; + } + +// --------------------------------------------------------------------------- +// CCenRepAttributes::DefineContext +// --------------------------------------------------------------------------- +// +void CCenRepAttributes::DefineContext() + { + FUNC_LOG; + + TPtrC value( KNullDesC ); + TPtrC key( KNullDesC ); + + TPtrC conTypePtr ( KNullDesC ); + TPtrC conSourcePtr ( KNullDesC ); + + + for( TInt i = 0; i < iParamCount; i++ ) + { + const RKeyValueArray& paramAttr = iParamArray[i]->Attributes(); + TInt paramAttrCount = paramAttr.Count(); + for( TInt j = 0; j < paramAttrCount; j++ ) + { + key.Set( paramAttr[j]->Key() ); + value.Set( paramAttr[j]->Value() ); + + // Check ContextSource + if ( key.CompareF( KContextSource ) == KErrNone ) + { + conSourcePtr.Set( value ); + } + + // Check ContextType + else if ( key.CompareF( KContextType ) == KErrNone ) + { + conTypePtr.Set( value); + } + } + iCF.DefineContext( conSourcePtr, + conTypePtr, + KCenRepSourceInteractionSec ); + } + } + +// --------------------------------------------------------------------------- +// CCenRepAttributes::PublishContext +// --------------------------------------------------------------------------- +// +void CCenRepAttributes::PublishContext() + { + FUNC_LOG; + + RThread thread; + iCF.PublishContext( *iContext, thread ); + thread.Close(); + }