diff -r 000000000000 -r 2f259fa3e83a lafagnosticuifoundation/cone/src/COEFEP.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lafagnosticuifoundation/cone/src/COEFEP.CPP Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,175 @@ +// Copyright (c) 1997-2009 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 "COEFEP.H" +#include // enum ERepositoryKeyMask_FepId etc +#include +#include +#include +#include "coedatastorage.h" +#include "coepanic.h" +#include +#include "coedefkeys.h" + +// +// class CCoeFepLoader +// + +CCoeFepLoader* CCoeFepLoader::NewL(CCoeEnv& aCoeEnv, CCoeFepLoader*& aOwner) + { + return new(ELeave) CCoeFepLoader(aCoeEnv, aOwner); + } + +CCoeFepLoader::~CCoeFepLoader() + { + Cancel(); + iOwner=NULL; + } + +CCoeFepLoader::CCoeFepLoader(CCoeEnv& aCoeEnv, CCoeFepLoader*& aOwner) + :CActive(EActivePriorityFepLoader), + iCoeEnv(aCoeEnv), + iOwner(aOwner), + iFirstRunL(ETrue) + { + CActiveScheduler::Add(this); + TRequestStatus* status=&iStatus; + User::RequestComplete(status, KErrNone); + SetActive(); + } + +void CCoeFepLoader::DoCancel() + { + } + +void CCoeFepLoader::RunL() + { + iCoeEnv.EnsureCorrectFepIsLoadedL(); + + if (iFirstRunL) + { + iFirstRunL=EFalse; +#if defined(USE_IH_RAISE_EVENT) + const TInt appStartupInstrumentationEventIdBase=iCoeEnv.AppStartupInstrumentationEventIdBase(); + if (appStartupInstrumentationEventIdBase!=0) + { + IH_DECLARE( lInstrumentationHandler ); + IH_CREATE( lInstrumentationHandler ); + IH_RAISE_EVENT( lInstrumentationHandler, appStartupInstrumentationEventIdBase+MTestInstrumentation::TIDOffsetEndApplicationReadyForInput ); + IH_DELETE( lInstrumentationHandler ); + } +#endif + } + delete this; + } + +TInt CCoeFepLoader::RunError(TInt aError) + { + delete this; + return aError; + } + + +// +// class CCoeFepTracker +// + +CCoeFepTracker* CCoeFepTracker::NewL(CCoeEnv& aCoeEnv) + { // static + CRepository& repository(CCoeDataStorage::GetL(aCoeEnv).FepFrameworkRepositoryL()); + CCoeFepTracker* fepTracker = new(ELeave) CCoeFepTracker(aCoeEnv,repository); + CleanupStack::PushL(fepTracker); + fepTracker->ConstructL(); + CleanupStack::Pop(fepTracker); + return fepTracker; + } + +CCoeFepTracker::~CCoeFepTracker() + { + Cancel(); + } + +CCoeFepTracker::CCoeFepTracker(CCoeEnv& aCoeEnv, CRepository& aRepository) +: CActive(EActivePriorityWsEvents), iCoeEnv(aCoeEnv), iRepository(aRepository) + { + CActiveScheduler::Add(this); + } + +void CCoeFepTracker::ConstructL() + { + Queue(); + } + +void CCoeFepTracker::Queue() + { +#if defined(_DEBUG) + const TInt error= +#endif + iRepository.NotifyRequest(ERepositoryKeyMask_FepId, ERepositoryKeyMask_FepId, iStatus); + __ASSERT_DEBUG(error==KErrNone, Panic(ECoePanicUnexpectedError)); + SetActive(); + } + +void CCoeFepTracker::DoCancel() + { + iRepository.NotifyCancel(ERepositoryKeyMask_FepId, ERepositoryKeyMask_FepId); + } + +void CCoeFepTracker::RunL() + { + const TInt error = iStatus.Int(); + Queue(); + User::LeaveIfError(error); + iCoeEnv.EnsureCorrectFepIsLoadedL(); + } + +// +// class FepName +// + +TUid FepName::UidFromNameL(const TDesC& aName) + { + _LIT(KLitSecureFepNameMatch,"::*"); + const TInt pos = aName.Match(KLitSecureFepNameMatch); + if(pos != 0) + { + return TUid::Null(); + } + // The specified FEP uses ECom, and aName is actually the UID in hex prefixed with "::". + TPtrC uidVal(aName.Mid(KLitSecureFepNameMatch().Length() - 1)); + if((uidVal.Length() > 2) && (uidVal[1] == 'x')) + { + // Has "0x" prefix. + uidVal.Set(uidVal.Mid(2)); + } + TUint32 uid = 0; + TLex lexer(uidVal); + User::LeaveIfError(lexer.Val(uid, EHex)); + return TUid::Uid(TInt(uid)); + } + +void FepName::NameFromUid(TDes& aName, const TUid& aUid) +/** +Generates a common FEP name representation for a secure FEP. + +@param aName On return, the common name representation. +@param aUid The UID of the secure FEP implementation. +*/ + { + _LIT(KLitSecureFepNameFormat,"::%08X"); + aName.Format(KLitSecureFepNameFormat, aUid.iUid); + } + +