os/security/cryptoservices/certificateandkeymgmt/pkixcertbase/pkixvalidationresult.cpp
First public contribution.
2 * Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of the License "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
19 #include "pkixvalidationresult.h"
22 EXPORT_C CPKIXValidationResultBase* CPKIXValidationResultBase::NewL()
24 CPKIXValidationResultBase* s = CPKIXValidationResultBase::NewLC();
25 CleanupStack::Pop();//s
29 EXPORT_C CPKIXValidationResultBase* CPKIXValidationResultBase::NewLC()
31 CPKIXValidationResultBase* s = new(ELeave) CPKIXValidationResultBase;
32 CleanupStack::PushL(s);
37 EXPORT_C CPKIXValidationResultBase::~CPKIXValidationResultBase()
40 if (iPolicies != NULL)
42 iPolicies->ResetAndDestroy();
45 iCertWarnings.ResetAndDestroy();
48 EXPORT_C CPKIXValidationResultBase::CPKIXValidationResultBase()
49 :iError(EChainHasNoRoot, 0)
53 EXPORT_C void CPKIXValidationResultBase::ConstructL()
56 // In OOM we don't want the size of the arrays to change because this will
57 // cause a change in the numbers of allocated cells
58 iWarnings = new(ELeave) CArrayFixFlat<TValidationStatus> (100);
59 iPolicies = new(ELeave) CArrayPtrFlat<CX509CertPolicyInfo> (100);
60 iPolicies->AppendL(0);
61 iPolicies->ResetAndDestroy();
63 iWarnings = new(ELeave) CArrayFixFlat<TValidationStatus> (1);
64 iPolicies = new(ELeave) CArrayPtrFlat<CX509CertPolicyInfo> (1);
68 EXPORT_C const TValidationStatus CPKIXValidationResultBase::Error() const
73 EXPORT_C const CArrayFixFlat<TValidationStatus>& CPKIXValidationResultBase::Warnings() const
78 EXPORT_C const CArrayPtrFlat<CX509CertPolicyInfo>& CPKIXValidationResultBase::Policies() const
83 void CPKIXValidationResultBase::Reset()
85 iError = TValidationStatus(EChainHasNoRoot, 0);
90 void CPKIXValidationResultBase::SetErrorAndLeaveL(const TValidationError aError, const TInt aCert)
92 SetError(aError, aCert);
93 User::Leave(KErrGeneral);
96 void CPKIXValidationResultBase::SetError(const TValidationError aError, const TInt aCert)
98 iError.iReason = aError;
102 void CPKIXValidationResultBase::AppendWarningL(TValidationStatus aWarning)
104 iWarnings->AppendL(aWarning);
106 if (aWarning.iReason != ECriticalExtendedKeyUsage && aWarning.iReason != ECriticalPolicyMapping &&
107 aWarning.iReason != ECriticalDeviceId && aWarning.iReason != ECriticalSid &&
108 aWarning.iReason != ECriticalVid && aWarning.iReason != ECriticalCapabilities)
110 (*iCertWarnings[iCertWarnings.Count()-1]).AppendWarningL(aWarning);
114 void CPKIXValidationResultBase::AppendPolicyL(CX509CertPolicyInfo& aPolicy)
116 iPolicies->AppendL(&aPolicy);
119 void CPKIXValidationResultBase::RemovePolicies()
121 iPolicies->ResetAndDestroy();
124 EXPORT_C void CPKIXValidationResultBase::ExternalizeL(RWriteStream& aStream) const
127 aStream.WriteL(TPckgC<TValidationStatus>(iError));
130 aStream.WriteInt32L(iWarnings->Count());
132 for (i = 0;i < iWarnings->Count(); ++i)
134 aStream.WriteL(TPckgC<TValidationStatus>((*iWarnings)[i]));
138 aStream.WriteInt32L(iPolicies->Count());
139 for (i = 0;i < iPolicies->Count(); ++i)
141 (*iPolicies)[i]->ExternalizeL(aStream);
145 aStream.WriteInt32L(iCertWarnings.Count());
146 for (i = 0;i< iCertWarnings.Count(); ++i)
148 (*iCertWarnings[i]).ExternalizeL(aStream);
152 EXPORT_C void CPKIXValidationResultBase::InternalizeL(RReadStream& aStream)
155 TPckg<TValidationStatus> pckg(iError);
161 TInt32 count=aStream.ReadInt32L();
163 for (i = 0;i < count; ++i)
165 TValidationStatus warning(EValidatedOK,0);
166 TPckg<TValidationStatus> pckg(warning);
168 iWarnings->AppendL(warning);
172 iPolicies->ResetAndDestroy();
174 count=aStream.ReadInt32L();
175 for (i = 0;i < count; ++i)
177 CX509CertPolicyInfo* certPolicyInfo=CX509CertPolicyInfo::NewLC(aStream);
178 iPolicies->AppendL(certPolicyInfo);
179 CleanupStack::Pop(certPolicyInfo);
183 iCertWarnings.Reset();
185 count=aStream.ReadInt32L();
186 for (i = 0;i < count; ++i)
188 CCertificateValidationWarnings* certWarning=CCertificateValidationWarnings::InternalizeL(aStream);
189 CleanupStack::PushL(certWarning);
190 iCertWarnings.AppendL(certWarning);
191 CleanupStack::Pop(certWarning);
195 EXPORT_C const RPointerArray<CCertificateValidationWarnings>& CPKIXValidationResultBase::ValidationWarnings() const
197 return iCertWarnings;
200 EXPORT_C void CPKIXValidationResultBase::AppendCertificateValidationObjectL(const CCertificateValidationWarnings& aCertWarning)
202 iCertWarnings.AppendL(&aCertWarning);
205 EXPORT_C void CPKIXValidationResultBase::AppendCriticalExtensionWarningL(TDesC& aCriticalExt)
207 (*iCertWarnings[iCertWarnings.Count()-1]).AppendCriticalExtensionWarningL(aCriticalExt);