--- /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)
+ {
+ }