cryptoservices/certificateandkeymgmt/tadditionalstores/Test1certstoretoken.cpp
changeset 0 2c201484c85f
child 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/certificateandkeymgmt/tadditionalstores/Test1certstoretoken.cpp	Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,200 @@
+/*
+* Copyright (c) 2005-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 "test1certstoretoken.h"
+#include "test1certstore.h"
+
+_LIT(KName1, "Test store 1");
+_LIT(KName2, "Test store 2");
+#ifdef CERTSTORE_HARDWARE_SIM
+	_LIT(KTest1CertStoreFullPath, "\\system\\data\\test1simcertstore.dat");
+	_LIT(KTest2CertStoreFullPath, "\\system\\data\\test2simcertstore.dat");
+#else
+	#ifdef CERTSTORE_HARDWARE_WIM
+		_LIT(KTest1CertStoreFullPath, "\\system\\data\\test1wimcertstore.dat");
+		_LIT(KTest2CertStoreFullPath, "\\system\\data\\test2wimcertstore.dat");
+	#else
+		#ifdef CERTSTORE_HARDWARE_UICC
+			_LIT(KTest1CertStoreFullPath, "\\system\\data\\test1uicccertstore.dat");
+			_LIT(KTest2CertStoreFullPath, "\\system\\data\\test2uicccertstore.dat");
+ 		#else
+			#ifdef CERTSTORE_DEVICE_IMMUTABLE
+				_LIT(KTest1CertStoreFullPath, "\\system\\data\\test1deviceimmutablecertstore.dat");
+				_LIT(KTest2CertStoreFullPath, "\\system\\data\\test2deviceimmutablecertstore.dat");
+			#else
+				_LIT(KTest1CertStoreFullPath, "\\system\\data\\test1certstore.dat");
+				_LIT(KTest2CertStoreFullPath, "\\system\\data\\test2certstore.dat");
+			#endif
+ 		#endif
+	#endif
+#endif
+
+
+CTest1CertStoreToken* CTest1CertStoreToken::New(CTest1CertStoreTokenType::TTokenId aTokenId,
+												CTest1CertStoreTokenType& aFileCertStoreTokenType)
+	{
+	return new CTest1CertStoreToken(aTokenId, aFileCertStoreTokenType);
+	}
+
+CTest1CertStoreToken::~CTest1CertStoreToken()
+	{
+	}
+
+MCTTokenType& CTest1CertStoreToken::TokenType()
+	{
+	return iTokenType;
+	}
+
+const TDesC& CTest1CertStoreToken::Label()
+	{
+	switch (iTokenId)
+		{
+	case CTest1CertStoreTokenType::ETest1CertStore:
+		return KName1;
+
+	case CTest1CertStoreTokenType::ETest2CertStore:
+		return KName2;
+
+	default:
+		return KNullDesC;
+		}
+	}
+
+const TDesC& CTest1CertStoreToken::Information(TTokenInformation)
+	{
+	_LIT(KAnswer, "I Know Nothing");
+	return KAnswer;
+	}
+
+TCTTokenHandle CTest1CertStoreToken::Handle()
+	{
+	return TCTTokenHandle(iTokenType.Type(), iTokenId);
+	}
+
+void CTest1CertStoreToken::DoRelease()
+	{
+	delete this;
+	}
+
+TInt& CTest1CertStoreToken::ReferenceCount()
+	{
+	return iRefCount;
+	}
+
+void CTest1CertStoreToken::DoGetInterface(TUid aRequiredInterface,
+										  MCTTokenInterface*& aReturnedInterface,
+										  TRequestStatus& aStatus)
+	{
+	RFs& fs = static_cast<CCTTokenType&>(TokenType()).Fs();
+	MCTTokenInterface* result = 0;
+	TInt error = KErrNone;
+
+	//gets the system drive
+	TDriveUnit sysDrive (RFs::GetSystemDrive());
+	TDriveName driveName(sysDrive.Name());	
+	TBuf<128> fullPath (driveName);
+	TInt* refCountInterface = &iRefCountInterface;
+	
+	if (iTokenId == CTest1CertStoreTokenType::ETest1CertStore)
+		{
+		fullPath.Append(KTest1CertStoreFullPath);
+		refCountInterface = &iRefCountInterface;
+		}
+		
+	// This is mainly used for testing and also as an example on how to manage
+	// multiple tokens within one TokenType.
+	else if (iTokenId == CTest1CertStoreTokenType::ETest2CertStore)
+		{
+		fullPath.Append(KTest2CertStoreFullPath);
+		refCountInterface = &iRefCountInterface2;
+		}
+	else
+		{
+		// If not certstore 1 or 2, then we complete with bad name.
+		TRequestStatus* r = &aStatus;
+		User::RequestComplete(r, KErrBadName);
+		return;
+		}
+
+	switch (aRequiredInterface.iUid)
+		{
+	case KInterfaceCertStore:
+		{
+		if (!iFileCertStore)
+			{
+			TRAP(error, iFileCertStore = CTest1CertStore::NewL(fs, *this, fullPath, 
+				EFileShareReadersOnly));
+			iFileMode = EFileRead;
+			}
+		MCTCertStore* temp = iFileCertStore;
+		result = temp;
+		}
+		break;
+
+	case KInterfaceWritableCertStore:
+		{
+		if (!iFileCertStore)
+			{
+			TRAP(error, iFileCertStore = CTest1CertStore::NewL(fs, *this, fullPath, EFileWrite));
+			iFileMode = EFileWrite;
+			}
+		if (iFileMode == EFileRead)
+			{
+			error = KErrInUse;
+			}
+		else
+			{
+			MCTWritableCertStore* temp = iFileCertStore;
+			result = temp;
+			}
+		}
+		break;
+
+	default:
+		error = KErrNotSupported;
+		break;
+		}
+
+	if (error == KErrNotSupported)
+		{
+		Release();
+		}
+	else if ((error != KErrNone) || !result)
+		{
+		Release();
+		}
+	else
+		{
+		(*refCountInterface)++;
+		aReturnedInterface = result;
+		}
+
+	TRequestStatus* r = &aStatus;
+	User::RequestComplete(r, error);
+	}
+
+TBool CTest1CertStoreToken::DoCancelGetInterface()
+	{
+	return EFalse;
+	}
+
+CTest1CertStoreToken::CTest1CertStoreToken(CTest1CertStoreTokenType::TTokenId aTokenId,
+										   CTest1CertStoreTokenType& aFileCertStoreTokenType)
+	:  iTokenType(aFileCertStoreTokenType), iTokenId(aTokenId)
+	{
+	}