cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_list.cpp
changeset 0 2c201484c85f
child 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_list.cpp	Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,257 @@
+/*
+* 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: 
+*
+*/
+
+
+#include "certtool_commands.h"
+#include "certtool_controller.h"
+#include "keytool_utils.h"
+#include <ccertattributefilter.h>
+#include <mctcertstore.h>
+
+
+_LIT(KCaType, "ca");
+_LIT(KUserType, "user");
+_LIT(KPeerType, "peer");
+
+/*static*/ CCertToolList* CCertToolList::NewLC(CCertToolController* aController)
+	{
+	CCertToolList* self = new (ELeave) CCertToolList(aController);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;	
+	}
+	
+/*static*/ CCertToolList* CCertToolList::NewL(CCertToolController* aController)
+	{
+	CCertToolList* self = CCertToolList::NewLC(aController);
+	CleanupStack::Pop(self);
+	return self;	
+	}
+	
+CCertToolList::CCertToolList(CCertToolController* aController) : CCertToolCommand(aController)
+	{
+	
+	}
+	
+CCertToolList::~CCertToolList()
+	{
+	Cancel();
+	delete iFilter;
+
+	if (iCertApps.Find(iApps) == KErrNotFound)
+		{
+		iApps.Close();		
+		}
+	
+	for (TInt k = 0; k < iCertApps.Count(); k++)
+		{
+		iCertApps[k].Close();											
+		}
+	
+	iCertApps.Close();
+	iCertInfos.Close();
+	iParsedCerts.ResetAndDestroy();
+	iParsedCerts.Close();
+	}
+	
+void CCertToolList::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	
+	// This filter will accept any certificates
+	iFilter = CCertAttributeFilter::NewL();
+	}
+
+/**
+ * Lists the content of the unifiedcertstore. 
+ * If a specific certstore implementation is specified using
+ * the -store command line parameter, it will only list
+ * the content of that particular store!
+ */
+void CCertToolList::DoCommandL(CUnifiedCertStore& aCertStore, CKeyToolParameters* aParam)
+	{
+	Cancel();
+	iParams = aParam;	
+	iState = EListCerts;
+	iCertStore = &aCertStore;
+	if (aParam->iCertstoreIndex != -1)
+		{
+		if (aCertStore.CertStoreCount() <= aParam->iCertstoreIndex)
+			{
+			iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_NOTEXIST);			
+			User::Leave(KErrArgument);
+			}
+		MCTCertStore& chosen = aCertStore.CertStore(aParam->iCertstoreIndex);
+		iCertStoreImp = &chosen;
+		chosen.List(iCertInfos, *iFilter, iStatus);
+		}
+	else 
+		{
+		aParam->iCertstoreIndex = 0;
+		iCertStore->List(iCertInfos, *iFilter, iStatus);		
+		}
+	SetActive();	
+	}
+	
+void CCertToolList::RunL()
+	{
+	if (iStatus.Int() != KErrNone)
+		{
+		if (iState != EGetApps && iStatus.Int() != KErrNotSupported)
+			{
+			// A problem occured. Handle gracefully.
+			User::Leave(iStatus.Int());	
+			}
+		}
+		
+	switch (iState)
+		{
+		case EListCerts :
+			{
+			// Now retrieve the actual certs!
+
+			if (iCertInfos.Count()==0)
+				{
+				iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_EMPTY);
+				CActiveScheduler::Stop();				
+				}
+			else
+				{ 
+				if (iParams->iDefault)    
+					{
+					KeyToolUtils::FilterCertsL(iCertInfos, *iParams->iDefault);					
+					}
+				else if (iParams->iOwnerType)
+					{
+					TDesC& ownerTypeDesc = *iParams->iOwnerType;
+					TCertificateOwnerType ownerType;
+					if (ownerTypeDesc.CompareF(KCaType) == KErrNone)
+						{
+						ownerType = ECACertificate;
+						}
+					else if (ownerTypeDesc.CompareF(KUserType) == KErrNone)
+						{
+						ownerType = EUserCertificate;
+						}
+					else if (ownerTypeDesc.CompareF(KPeerType) == KErrNone)
+						{
+						ownerType = EPeerCertificate;
+						}
+					else
+						{
+						iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_EMPTY);
+						CActiveScheduler::Stop();
+						break;
+						}						
+					KeyToolUtils::FilterCertsL(iCertInfos, ownerType);
+					}
+  				iState = ERetrieve;
+  				iIndex = 0;
+				if (iIndex <= (iCertInfos.Count()-1 ))
+					{
+					iCertStore->Retrieve(*iCertInfos[iIndex], iCertificate, iStatus);
+  					SetActive();
+					}
+				else
+					{
+					iState = EFinished;	
+  					CActiveScheduler::Stop();					
+					}
+				}
+			}
+			break;
+		case ERetrieve :
+			{
+			iParsedCerts.Append(iCertificate);
+			iIndex++;
+			if (iIndex <= (iCertInfos.Count()-1 ))
+				{
+				iCertStore->Retrieve(*iCertInfos[iIndex], iCertificate, iStatus);
+				SetActive();
+				}
+			else
+				{
+				iState = EGetApps;
+				iIndex = 0;
+				iCertStore->Applications(*iCertInfos[iIndex], iApps, iStatus);
+				SetActive();
+				}
+			}
+			break;
+		case EGetApps :
+			{	
+			iCertApps.Append(iApps);
+
+			iIndex++;
+			if (iIndex <= (iCertInfos.Count()-1 ))
+				{
+				RUidArray t;
+				iApps = t;				
+				iCertStore->Applications(*iCertInfos[iIndex], iApps, iStatus);
+				SetActive();
+				}
+			else
+				{
+				iState = EFinished;
+				TInt certCount = iCertInfos.Count();
+				for (TInt i = 0; i < certCount; i++)
+ 					{
+ 					iController->DisplayCertL(*iCertInfos[i], *iParsedCerts[i], iCertApps[i], iParams->iIsDetailed, iParams->iPageWise);
+ 					}
+				CActiveScheduler::Stop();
+				}			
+			}
+			break;
+		case EFinished :
+			{
+			}
+			break;
+		default:
+			{
+			User::Panic(_L("LIST action: Illegal state."), 1);			
+			}
+			break;
+		}
+	}
+	
+void CCertToolList::DoCancel()
+	{
+	
+	}
+	
+TInt CCertToolList::RunError(TInt aError)
+	{
+	CActiveScheduler::Stop();
+
+	switch (aError)
+		{
+		case KErrNotFound :
+			{
+			TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_NOTFOUND));
+			TRAP_IGNORE(iController->DisplayErrorL(_L("\n"), iParams->iPageWise));			
+			}
+			break;
+		default:
+			{
+			TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_LISTFAIL, aError));		
+			TRAP_IGNORE(iController->DisplayErrorL(_L("\n"), iParams->iPageWise));			
+			}
+		}	
+
+	return KErrNone;	
+	}
+