cryptoservices/certificateandkeymgmt/tadditionalstores/tadditionalstoreentries.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptoservices/certificateandkeymgmt/tadditionalstores/tadditionalstoreentries.cpp Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,316 @@
+/*
+* 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:
+*
+*/
+
+
+
+
+/**
+ @file
+*/
+
+#include "tadditionalstoremapping.h"
+
+////////////////////////////////////////////////////////////////////////////////
+//CFileCertStoreMapping
+/////////////////////////////////////////////////////////////////////////////////
+
+CFileCertStoreMapping* CFileCertStoreMapping::NewL()
+ {
+ CFileCertStoreMapping* self = CFileCertStoreMapping::NewLC();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CFileCertStoreMapping* CFileCertStoreMapping::NewLC()
+ {
+ CFileCertStoreMapping* self = new(ELeave) CFileCertStoreMapping();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+void CFileCertStoreMapping::ConstructL()
+ {
+ iCertificateApps = new(ELeave) RArray<TUid>();
+ }
+
+CFileCertStoreMapping::CFileCertStoreMapping()
+ {
+ }
+
+CFileCertStoreMapping::~CFileCertStoreMapping()
+ {
+ if (iEntry)
+ {
+ iEntry->Release();
+ }
+ if (iCertificateApps)
+ {
+ iCertificateApps->Close();
+ delete iCertificateApps;
+ }
+ }
+
+void CFileCertStoreMapping::SetEntry(CCTCertInfo* aCertInfo)
+ {
+ if (iEntry)
+ {
+ iEntry->Release();
+ }
+ iEntry = aCertInfo;
+ }
+
+void CFileCertStoreMapping::SetCertificateApps(RArray<TUid>* aCertificateApps)
+ {
+ iCertificateApps->Close();
+ delete iCertificateApps;
+ iCertificateApps = aCertificateApps;
+ }
+
+void CFileCertStoreMapping::SetId(TStreamId aId)
+ {
+ iId = aId;
+ }
+
+CCTCertInfo* CFileCertStoreMapping::Entry() const
+ {
+ return iEntry;
+ }
+
+const RArray<TUid>& CFileCertStoreMapping::CertificateApps() const
+ {
+ return *iCertificateApps;
+ }
+
+TBool CFileCertStoreMapping::IsApplicable(const TUid& aApplication) const
+ {
+ TInt count = iCertificateApps->Count();
+ for (TInt i = 0; i < count; i++)
+ {
+ TUid app = (*iCertificateApps)[i];
+ if (app == aApplication)
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+TBool CFileCertStoreMapping::Trusted() const
+ {
+ return iTrusted;
+ }
+
+void CFileCertStoreMapping::SetTrusted(TBool aTrusted)
+ {
+ iTrusted = aTrusted;
+ }
+
+TStreamId CFileCertStoreMapping::Id() const
+ {
+ return iId;
+ }
+
+void CFileCertStoreMapping::ExternalizeL(RWriteStream& aStream) const
+ {
+ if (!iTempRemoved)
+ {
+ aStream << *iEntry;
+ TInt count = iCertificateApps->Count();
+ aStream.WriteInt32L(count);
+ for (TInt i = 0; i < count; i++)
+ {
+ aStream << (*iCertificateApps)[i];
+ }
+ aStream.WriteUint8L(iTrusted);
+ aStream << iId;
+ }
+ }
+
+void CFileCertStoreMapping::SetTempRemoved(TBool aFlag)
+ {
+ iTempRemoved=aFlag;
+ }
+
+TBool CFileCertStoreMapping::IsTempRemoved()
+ {
+ return iTempRemoved;
+ }
+
+#include "tadditionalstoremappings.h"
+
+/////////////////////////////////////////////////////////////////////////////////
+//CFileCertStoreMappings
+/////////////////////////////////////////////////////////////////////////////////
+CFileCertStoreMappings::~CFileCertStoreMappings()
+ {
+ if (iMappings)
+ {
+ iMappings->ResetAndDestroy();
+ delete iMappings;
+ }
+ }
+
+TInt CFileCertStoreMappings::Count()
+ {
+ return iMappings->Count();
+ }
+
+void CFileCertStoreMappings::AddL(CFileCertStoreMapping* aEntry)
+ {
+ User::LeaveIfError(iMappings->Append(aEntry));
+ }
+
+TInt CFileCertStoreMappings::Remove(const CCTCertInfo& aCertInfo)
+ {
+ TInt index = Index(aCertInfo);
+ if (index == KErrNotFound)
+ {
+ return KErrNotFound;
+ }
+ CFileCertStoreMapping* mapping = (*iMappings)[index];
+ iMappings->Remove(index);
+ delete mapping;
+ return KErrNone;
+ }
+
+TInt CFileCertStoreMappings::SetTempRemove(const CCTCertInfo& aCertInfo, TBool aFlag)
+ {
+ TInt index = Index(aCertInfo);
+ if (index == KErrNotFound)
+ {
+ return KErrNotFound;
+ }
+ (*iMappings)[index]->SetTempRemoved(aFlag);
+ return KErrNone;
+ }
+
+
+void CFileCertStoreMappings::ExternalizeL(RWriteStream& aStream) const
+ {
+ TInt count = iMappings->Count();
+ TInt realCount=count;
+ TInt i=0;
+ for (i = 0; i < count; i++)
+ {
+ if ((*iMappings)[i]->IsTempRemoved())
+ {
+ realCount--;
+ }
+ }
+ aStream.WriteInt32L(realCount);
+ for (i = 0; i < count; i++)
+ {
+ aStream << *(*iMappings)[i];
+ }
+ }
+
+void CFileCertStoreMappings::ReplaceL()
+ {
+ RStoreWriteStream stream;
+ stream.ReplaceLC(iStore, iStreamId);
+ ExternalizeL(stream);
+ stream.CommitL();
+ CleanupStack::PopAndDestroy();
+ }
+
+TInt CFileCertStoreMappings::Index(const CCTCertInfo& aCertInfo)
+ {
+ TInt count = iMappings->Count();
+ TInt ix = KErrNotFound;
+ for (TInt i = 0; i < count; i++)
+ {
+ CFileCertStoreMapping* mapping = (*iMappings)[i];
+ if (aCertInfo==*(mapping->Entry()))
+ {
+ ix = i;
+ break;
+ }
+ }
+ return ix;
+ }
+
+CFileCertStoreMapping* CFileCertStoreMappings::Mapping(TInt aIndex)
+ {
+ return (*iMappings)[aIndex];
+ }
+
+TStreamId CFileCertStoreMappings::StreamId() const
+ {
+ return iStreamId;
+ }
+
+CFileCertStoreMappings::CFileCertStoreMappings(TStreamId aStreamId,
+ CPermanentFileStore& aStore)
+ :iStreamId(aStreamId), iStore(aStore)
+ {
+ }
+
+/////////////////////////////////////////////////////////////////////////////////
+//CFileCertStoreMappings
+/////////////////////////////////////////////////////////////////////////////////
+CFileCertStoreMappings* CFileCertStoreMappings::NewL(TStreamId aStreamId,
+ CPermanentFileStore& aStore)
+ {
+ CFileCertStoreMappings* self = new(ELeave) CFileCertStoreMappings(aStreamId, aStore);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+const CCTCertInfo& CFileCertStoreMappings::Entry(TInt aIndex)
+ {
+ CFileCertStoreMapping* mapping = (*iMappings)[aIndex];
+ return *mapping->Entry();
+ }
+
+const CCTCertInfo& CFileCertStoreMappings::EntryByHandleL(TInt aHandle) const
+ {
+ TInt count = iMappings->Count();
+ for (TInt i = 0; i < count; i++)
+ {
+ CFileCertStoreMapping* mapping = (*iMappings)[i];
+ if (aHandle==mapping->Entry()->Handle().iObjectId)
+ {
+ return *mapping->Entry();
+ }
+ }
+ User::Leave(KErrNotFound);
+ CCTCertInfo* info = NULL; // This is to shut up a compiler warning
+ return *info;
+ }
+
+TInt CFileCertStoreMappings::NextHandle() const
+ {
+ TInt count = iMappings->Count();
+ TInt maxHandle = -1;
+ for (TInt i = 0; i < count; i++)
+ {
+ CFileCertStoreMapping* mapping = (*iMappings)[i];
+ if (mapping->Entry()->Handle().iObjectId > maxHandle)
+ {
+ maxHandle = mapping->Entry()->Handle().iObjectId;
+ }
+ }
+ return ++maxHandle;
+ }
+
+void CFileCertStoreMappings::ConstructL()
+ {
+ iMappings = new(ELeave) RPointerArray<CFileCertStoreMapping>;
+ }