sl@0: /* sl@0: * Copyright (c) 2004-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 sl@0: #include "CSWICertStoreImpl.h" sl@0: #include "CSWICertStoreToken.h" sl@0: #include "CSWICertStoreTokenType.h" sl@0: sl@0: _LIT(KSWICertStorePanic, "CSWICertStore"); sl@0: sl@0: EXPORT_C CCTTokenType* CSWICertStore::CreateTokenTypeL() sl@0: { sl@0: // This method is just here so we don't have to declare sl@0: // CSWICertStoreTokenType in the exported header sl@0: return CSWICertStoreTokenType::NewL(); sl@0: } sl@0: sl@0: EXPORT_C CSWICertStore* CSWICertStore::NewL(RFs& aFs) sl@0: { sl@0: // This method relies on the fact that we know the implementation of the swi sl@0: // cert store token type is synchronous sl@0: sl@0: // Create token type sl@0: MCTTokenType* tokenType = CSWICertStoreTokenType::NewL(aFs); sl@0: CleanupReleasePushL(*tokenType); sl@0: sl@0: // Open token sl@0: TRequestStatus stat; sl@0: MCTToken* token = NULL; sl@0: TUid tokenTypeUid = { KSWICertStoreTokenTypeUid }; sl@0: TCTTokenHandle tokenHandle(tokenTypeUid, CSWICertStoreTokenType::ESWICertStore); sl@0: tokenType->OpenToken(tokenHandle, token, stat); sl@0: User::WaitForRequest(stat); sl@0: User::LeaveIfError(stat.Int()); sl@0: CleanupReleasePushL(*token); sl@0: sl@0: // Get interface sl@0: MCTTokenInterface* tokenIf = NULL; sl@0: token->GetInterface(TUid::Uid(KInterfaceCertStore), tokenIf, stat); sl@0: User::WaitForRequest(stat); sl@0: User::LeaveIfError(stat.Int()); sl@0: sl@0: __ASSERT_ALWAYS(tokenIf, User::Panic(KSWICertStorePanic, 1)); sl@0: sl@0: // Release token and token type sl@0: CleanupStack::PopAndDestroy(2, tokenType); sl@0: sl@0: return static_cast(tokenIf); sl@0: } sl@0: sl@0: CSWICertStore* CSWICertStore::NewL(CSWICertStoreToken& aToken, RFs& aFs) sl@0: { sl@0: CSWICertStore* self = new (ELeave) CSWICertStore(aToken); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aFs); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: CSWICertStore::CSWICertStore(CSWICertStoreToken& aToken) : sl@0: iToken(aToken) sl@0: { sl@0: } sl@0: sl@0: void CSWICertStore::ConstructL(RFs& aFs) sl@0: { sl@0: iImpl = CSWICertStoreImpl::NewL(iToken, aFs); sl@0: } sl@0: sl@0: void CSWICertStore::DoRelease() sl@0: { sl@0: if (iToken.ReleaseInterface()) sl@0: { sl@0: delete this; sl@0: } sl@0: } sl@0: sl@0: CSWICertStore::~CSWICertStore() sl@0: { sl@0: delete iImpl; sl@0: } sl@0: sl@0: MCTToken& CSWICertStore::Token() sl@0: { sl@0: return iToken; sl@0: } sl@0: sl@0: void CSWICertStore::List(RMPointerArray& aCerts, sl@0: const CCertAttributeFilter& aFilter, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: TRAPD(err, iImpl->ListL(aCerts, aFilter)); sl@0: TRequestStatus* status = &aStatus; sl@0: User::RequestComplete(status, err); sl@0: } sl@0: sl@0: void CSWICertStore::CancelList() sl@0: { sl@0: } sl@0: sl@0: void CSWICertStore::GetCert(CCTCertInfo*& aCertInfo, sl@0: const TCTTokenObjectHandle& aHandle, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: TRAPD(err, aCertInfo = iImpl->GetCertL(aHandle)); sl@0: TRequestStatus* status = &aStatus; sl@0: User::RequestComplete(status, err); sl@0: } sl@0: sl@0: void CSWICertStore::CancelGetCert() sl@0: { sl@0: } sl@0: sl@0: void CSWICertStore::Applications(const CCTCertInfo& aCertInfo, sl@0: RArray& aApplications, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: TRAPD(err, iImpl->ApplicationsL(aCertInfo.Handle(), aApplications)); sl@0: TRequestStatus* status = &aStatus; sl@0: User::RequestComplete(status, err); sl@0: } sl@0: sl@0: void CSWICertStore::CancelApplications() sl@0: { sl@0: } sl@0: sl@0: void CSWICertStore::IsApplicable(const CCTCertInfo& aCertInfo, sl@0: TUid aApplication, sl@0: TBool& aIsApplicable, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: TRAPD(err, aIsApplicable = iImpl->IsApplicableL(aCertInfo.Handle(), aApplication)); sl@0: TRequestStatus* status = &aStatus; sl@0: User::RequestComplete(status, err); sl@0: } sl@0: sl@0: void CSWICertStore::CancelIsApplicable() sl@0: { sl@0: } sl@0: sl@0: void CSWICertStore::Trusted(const CCTCertInfo& aCertInfo, sl@0: TBool& aTrusted, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: TRAPD(err, aTrusted = iImpl->TrustedL(aCertInfo.Handle())); sl@0: TRequestStatus* status = &aStatus; sl@0: User::RequestComplete(status, err); sl@0: } sl@0: sl@0: void CSWICertStore::CancelTrusted() sl@0: { sl@0: } sl@0: sl@0: void CSWICertStore::Retrieve(const CCTCertInfo& aCertInfo, sl@0: TDes8& aEncodedCert, sl@0: TRequestStatus& aStatus) sl@0: { sl@0: TRAPD(err, iImpl->RetrieveL(aCertInfo.Handle(), aEncodedCert)); sl@0: TRequestStatus* status = &aStatus; sl@0: User::RequestComplete(status, err); sl@0: } sl@0: sl@0: void CSWICertStore::CancelRetrieve() sl@0: { sl@0: } sl@0: sl@0: EXPORT_C const TCertMetaInfo& CSWICertStore::CertMetaInfoL(const CCTCertInfo& aCertInfo) sl@0: { sl@0: return iImpl->CertMetaInfoL(aCertInfo.Handle()); sl@0: } sl@0: sl@0: