installationservices/swi/source/securitymanager/certificateretriever.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/source/securitymanager/certificateretriever.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+*
+*/
+
+
+/**
+ @file 
+ @released
+ @internalTechnology
+*/
+
+#include "certificateretriever.h"
+
+#include <securitydefs.h>
+#include <ccertattributefilter.h>
+#include <swicertstore.h>
+
+#include "log.h"
+
+_LIT(KCertificateRetriever, "_CCertificateRetriever_");
+
+using namespace Swi;
+
+/*static*/ CCertificateRetriever* CCertificateRetriever::NewL(CSWICertStore& aCerstore)
+	{
+	CCertificateRetriever* self = CCertificateRetriever::NewLC(aCerstore);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+/*static*/ CCertificateRetriever* CCertificateRetriever::NewLC(CSWICertStore& aCerstore)
+	{
+	CCertificateRetriever* self = new(ELeave) CCertificateRetriever(aCerstore);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CCertificateRetriever::CCertificateRetriever(CSWICertStore& aCerstore) : CActive(EPriorityNormal), iCertStore(aCerstore)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CCertificateRetriever::~CCertificateRetriever()
+	{
+	Deque();
+	
+	delete iFilter;
+	}
+
+void CCertificateRetriever::ConstructL()
+	{
+	iFilter = CCertAttributeFilter::NewL();
+	iFilter->SetOwnerType(ECACertificate); // We only want root certs!	
+	}
+
+//
+// From CActive
+//
+
+void CCertificateRetriever::RunL()
+	{
+	DEBUG_PRINTF3(_L8("Security Manager - CCertificateRetriever::RunL(). State: %d, Status: %d."),
+		iState, iStatus.Int());
+	
+	if (iStatus.Int() != KErrNone)
+		{
+		User::Leave(iStatus.Int());     // Hop into RunError()
+		}
+		
+	switch (iState)
+		{ 	
+		case EBuildCAList:
+			{
+			// Nothing else to do
+			User::RequestComplete(iClientStatus, KErrNone);
+			break;
+			}
+		default:
+			{
+			User::Panic(KCertificateRetriever, 1); 
+			}
+		}
+	}
+
+void CCertificateRetriever::DoCancel()
+	{
+	DEBUG_PRINTF2(_L8("Security Manager - Cancelling certificate retriever in state %d."), iState);
+	
+	switch (iState)
+		{
+		case EBuildCAList:
+			{
+			iCertStore.CancelList();
+			break;
+			}
+		default:
+			{
+			// mandatory call is syncronoue so no need for cancel
+			// Do Nothing
+			}
+		}	
+	}
+
+TInt CCertificateRetriever::RunError(TInt aError)
+	{
+	DEBUG_PRINTF2(_L8("Security Manager - CCertificateRetriever::RunError(). Error code: %d."), aError);
+	
+	User::RequestComplete(iClientStatus, aError);	
+	return KErrNone;
+	}	
+
+
+//
+// Business methods
+//
+void CCertificateRetriever::RetrieveCACertificates(RMPointerArray<CCTCertInfo>& aCertificateListOut, TRequestStatus& aClientStatus)
+	{	
+	iState = EBuildCAList;
+	DoInitialize(aCertificateListOut, aClientStatus);
+	}
+
+void CCertificateRetriever::DoInitialize(RMPointerArray<CCTCertInfo>& aCertificateListOut, TRequestStatus& aClientStatus)
+	{
+	iClientStatus = &aClientStatus;
+	*iClientStatus = KRequestPending;
+
+	iCertificateList = &aCertificateListOut;
+	SetActive();
+	iCertStore.List(*iCertificateList, *iFilter, iStatus); // Get all the root certs		
+	}
+
+