sl@0: /* sl@0: * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of the License "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include "test1certstoretoken.h" sl@0: #include "test1certstore.h" sl@0: sl@0: _LIT(KName1, "Test store 1"); sl@0: _LIT(KName2, "Test store 2"); sl@0: #ifdef CERTSTORE_HARDWARE_SIM sl@0: _LIT(KTest1CertStoreFullPath, "\\system\\data\\test1simcertstore.dat"); sl@0: _LIT(KTest2CertStoreFullPath, "\\system\\data\\test2simcertstore.dat"); sl@0: #else sl@0: #ifdef CERTSTORE_HARDWARE_WIM sl@0: _LIT(KTest1CertStoreFullPath, "\\system\\data\\test1wimcertstore.dat"); sl@0: _LIT(KTest2CertStoreFullPath, "\\system\\data\\test2wimcertstore.dat"); sl@0: #else sl@0: #ifdef CERTSTORE_HARDWARE_UICC sl@0: _LIT(KTest1CertStoreFullPath, "\\system\\data\\test1uicccertstore.dat"); sl@0: _LIT(KTest2CertStoreFullPath, "\\system\\data\\test2uicccertstore.dat"); sl@0: #else sl@0: #ifdef CERTSTORE_DEVICE_IMMUTABLE sl@0: _LIT(KTest1CertStoreFullPath, "\\system\\data\\test1deviceimmutablecertstore.dat"); sl@0: _LIT(KTest2CertStoreFullPath, "\\system\\data\\test2deviceimmutablecertstore.dat"); sl@0: #else sl@0: _LIT(KTest1CertStoreFullPath, "\\system\\data\\test1certstore.dat"); sl@0: _LIT(KTest2CertStoreFullPath, "\\system\\data\\test2certstore.dat"); sl@0: #endif sl@0: #endif sl@0: #endif sl@0: #endif sl@0: sl@0: sl@0: CTest1CertStoreToken* CTest1CertStoreToken::New(CTest1CertStoreTokenType::TTokenId aTokenId, sl@0: CTest1CertStoreTokenType& aFileCertStoreTokenType) sl@0: { sl@0: return new CTest1CertStoreToken(aTokenId, aFileCertStoreTokenType); sl@0: } sl@0: sl@0: CTest1CertStoreToken::~CTest1CertStoreToken() sl@0: { sl@0: } sl@0: sl@0: MCTTokenType& CTest1CertStoreToken::TokenType() sl@0: { sl@0: return iTokenType; sl@0: } sl@0: sl@0: const TDesC& CTest1CertStoreToken::Label() sl@0: { sl@0: switch (iTokenId) sl@0: { sl@0: case CTest1CertStoreTokenType::ETest1CertStore: sl@0: return KName1; sl@0: sl@0: case CTest1CertStoreTokenType::ETest2CertStore: sl@0: return KName2; sl@0: sl@0: default: sl@0: return KNullDesC; sl@0: } sl@0: } sl@0: sl@0: const TDesC& CTest1CertStoreToken::Information(TTokenInformation) sl@0: { sl@0: _LIT(KAnswer, "I Know Nothing"); sl@0: return KAnswer; sl@0: } sl@0: sl@0: TCTTokenHandle CTest1CertStoreToken::Handle() sl@0: { sl@0: return TCTTokenHandle(iTokenType.Type(), iTokenId); sl@0: } sl@0: sl@0: void CTest1CertStoreToken::DoRelease() sl@0: { sl@0: delete this; sl@0: } sl@0: sl@0: TInt& CTest1CertStoreToken::ReferenceCount() sl@0: { sl@0: return iRefCount; sl@0: } sl@0: sl@0: void CTest1CertStoreToken::DoGetInterface(TUid aRequiredInterface, sl@0: MCTTokenInterface*& aReturnedInterface, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: RFs& fs = static_cast(TokenType()).Fs(); sl@0: MCTTokenInterface* result = 0; sl@0: TInt error = KErrNone; sl@0: sl@0: //gets the system drive sl@0: TDriveUnit sysDrive (RFs::GetSystemDrive()); sl@0: TDriveName driveName(sysDrive.Name()); sl@0: TBuf<128> fullPath (driveName); sl@0: TInt* refCountInterface = &iRefCountInterface; sl@0: sl@0: if (iTokenId == CTest1CertStoreTokenType::ETest1CertStore) sl@0: { sl@0: fullPath.Append(KTest1CertStoreFullPath); sl@0: refCountInterface = &iRefCountInterface; sl@0: } sl@0: sl@0: // This is mainly used for testing and also as an example on how to manage sl@0: // multiple tokens within one TokenType. sl@0: else if (iTokenId == CTest1CertStoreTokenType::ETest2CertStore) sl@0: { sl@0: fullPath.Append(KTest2CertStoreFullPath); sl@0: refCountInterface = &iRefCountInterface2; sl@0: } sl@0: else sl@0: { sl@0: // If not certstore 1 or 2, then we complete with bad name. sl@0: TRequestStatus* r = &aStatus; sl@0: User::RequestComplete(r, KErrBadName); sl@0: return; sl@0: } sl@0: sl@0: switch (aRequiredInterface.iUid) sl@0: { sl@0: case KInterfaceCertStore: sl@0: { sl@0: if (!iFileCertStore) sl@0: { sl@0: TRAP(error, iFileCertStore = CTest1CertStore::NewL(fs, *this, fullPath, sl@0: EFileShareReadersOnly)); sl@0: iFileMode = EFileRead; sl@0: } sl@0: MCTCertStore* temp = iFileCertStore; sl@0: result = temp; sl@0: } sl@0: break; sl@0: sl@0: case KInterfaceWritableCertStore: sl@0: { sl@0: if (!iFileCertStore) sl@0: { sl@0: TRAP(error, iFileCertStore = CTest1CertStore::NewL(fs, *this, fullPath, EFileWrite)); sl@0: iFileMode = EFileWrite; sl@0: } sl@0: if (iFileMode == EFileRead) sl@0: { sl@0: error = KErrInUse; sl@0: } sl@0: else sl@0: { sl@0: MCTWritableCertStore* temp = iFileCertStore; sl@0: result = temp; sl@0: } sl@0: } sl@0: break; sl@0: sl@0: default: sl@0: error = KErrNotSupported; sl@0: break; sl@0: } sl@0: sl@0: if (error == KErrNotSupported) sl@0: { sl@0: Release(); sl@0: } sl@0: else if ((error != KErrNone) || !result) sl@0: { sl@0: Release(); sl@0: } sl@0: else sl@0: { sl@0: (*refCountInterface)++; sl@0: aReturnedInterface = result; sl@0: } sl@0: sl@0: TRequestStatus* r = &aStatus; sl@0: User::RequestComplete(r, error); sl@0: } sl@0: sl@0: TBool CTest1CertStoreToken::DoCancelGetInterface() sl@0: { sl@0: return EFalse; sl@0: } sl@0: sl@0: CTest1CertStoreToken::CTest1CertStoreToken(CTest1CertStoreTokenType::TTokenId aTokenId, sl@0: CTest1CertStoreTokenType& aFileCertStoreTokenType) sl@0: : iTokenType(aFileCertStoreTokenType), iTokenId(aTokenId) sl@0: { sl@0: }