--- /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 <coedef.h> // enum ERepositoryKeyMask_FepId etc
+#include <e32std.h>
+#include <e32base.h>
+#include <coemain.h>
+#include "coedatastorage.h"
+#include "coepanic.h"
+#include <centralrepository.h>
+#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);
+ }
+
+