lafagnosticuifoundation/cone/src/COEFEP.CPP
changeset 0 2f259fa3e83a
child 30 56e9a0aaad89
--- /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);
+	}
+	
+