cpsecplugins/cpadvancedsecplugin/src/advsecsettingscertlistbuilder_symbian.cpp
author hgs
Wed, 20 Oct 2010 14:51:23 +0300
changeset 66 67b3e3c1fc87
parent 63 989397f9511c
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
63
989397f9511c 201039_03
hgs
parents:
diff changeset
     1
/*
989397f9511c 201039_03
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
989397f9511c 201039_03
hgs
parents:
diff changeset
     3
* All rights reserved.
989397f9511c 201039_03
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
989397f9511c 201039_03
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0""
989397f9511c 201039_03
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
989397f9511c 201039_03
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
989397f9511c 201039_03
hgs
parents:
diff changeset
     8
*
989397f9511c 201039_03
hgs
parents:
diff changeset
     9
* Initial Contributors:
989397f9511c 201039_03
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
989397f9511c 201039_03
hgs
parents:
diff changeset
    11
*
989397f9511c 201039_03
hgs
parents:
diff changeset
    12
* Contributors:
989397f9511c 201039_03
hgs
parents:
diff changeset
    13
*
989397f9511c 201039_03
hgs
parents:
diff changeset
    14
* Description:  Helper class to construct certificate list
989397f9511c 201039_03
hgs
parents:
diff changeset
    15
*
989397f9511c 201039_03
hgs
parents:
diff changeset
    16
*/
989397f9511c 201039_03
hgs
parents:
diff changeset
    17
989397f9511c 201039_03
hgs
parents:
diff changeset
    18
#include "advsecsettingscertlistbuilder_symbian.h"
989397f9511c 201039_03
hgs
parents:
diff changeset
    19
#include "advsecsettingslabeledcertinfo_symbian.h"
989397f9511c 201039_03
hgs
parents:
diff changeset
    20
#include "advsecsettingsstoreuids.h"    // KAdvSecSettingsDeviceCertStore
989397f9511c 201039_03
hgs
parents:
diff changeset
    21
#include <x509cert.h>                   // CX509Certificate
989397f9511c 201039_03
hgs
parents:
diff changeset
    22
#include <ccertattributefilter.h>       // CCertAttributeFilter
989397f9511c 201039_03
hgs
parents:
diff changeset
    23
#include <X509CertNameParser.h>         // X509CertNameParser::PrimaryAndSecondaryNameL
989397f9511c 201039_03
hgs
parents:
diff changeset
    24
#include <stl/_auto_ptr.h>              // std::auto_ptr
989397f9511c 201039_03
hgs
parents:
diff changeset
    25
989397f9511c 201039_03
hgs
parents:
diff changeset
    26
_LIT(KNameSeparator, " ");
989397f9511c 201039_03
hgs
parents:
diff changeset
    27
989397f9511c 201039_03
hgs
parents:
diff changeset
    28
// implemented in advsecsettingssecuritymodulemodel_symbian_p.cpp
989397f9511c 201039_03
hgs
parents:
diff changeset
    29
QString CopyStringL(const TDesC16 &aDes16);
989397f9511c 201039_03
hgs
parents:
diff changeset
    30
989397f9511c 201039_03
hgs
parents:
diff changeset
    31
989397f9511c 201039_03
hgs
parents:
diff changeset
    32
// ======== MEMBER FUNCTIONS ========
989397f9511c 201039_03
hgs
parents:
diff changeset
    33
989397f9511c 201039_03
hgs
parents:
diff changeset
    34
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    35
// CAdvSecSettingsCertListBuilder::NewL()
989397f9511c 201039_03
hgs
parents:
diff changeset
    36
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    37
//
989397f9511c 201039_03
hgs
parents:
diff changeset
    38
CAdvSecSettingsCertListBuilder *CAdvSecSettingsCertListBuilder::NewL(
989397f9511c 201039_03
hgs
parents:
diff changeset
    39
    RFs &aFs, CUnifiedCertStore &aCertStore)
989397f9511c 201039_03
hgs
parents:
diff changeset
    40
{
989397f9511c 201039_03
hgs
parents:
diff changeset
    41
    CAdvSecSettingsCertListBuilder *self = new(ELeave) CAdvSecSettingsCertListBuilder(
989397f9511c 201039_03
hgs
parents:
diff changeset
    42
        aFs, aCertStore);
989397f9511c 201039_03
hgs
parents:
diff changeset
    43
    CleanupStack::PushL(self);
989397f9511c 201039_03
hgs
parents:
diff changeset
    44
    self->ConstructL();
989397f9511c 201039_03
hgs
parents:
diff changeset
    45
    CleanupStack::Pop(self);
989397f9511c 201039_03
hgs
parents:
diff changeset
    46
    return self;
989397f9511c 201039_03
hgs
parents:
diff changeset
    47
}
989397f9511c 201039_03
hgs
parents:
diff changeset
    48
989397f9511c 201039_03
hgs
parents:
diff changeset
    49
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    50
// CAdvSecSettingsCertListBuilder::~CAdvSecSettingsCertListBuilder()
989397f9511c 201039_03
hgs
parents:
diff changeset
    51
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    52
//
989397f9511c 201039_03
hgs
parents:
diff changeset
    53
CAdvSecSettingsCertListBuilder::~CAdvSecSettingsCertListBuilder()
989397f9511c 201039_03
hgs
parents:
diff changeset
    54
{
989397f9511c 201039_03
hgs
parents:
diff changeset
    55
    Cancel();
989397f9511c 201039_03
hgs
parents:
diff changeset
    56
    iLabeledCertInfos.ResetAndDestroy();
989397f9511c 201039_03
hgs
parents:
diff changeset
    57
    delete iCertificate;
989397f9511c 201039_03
hgs
parents:
diff changeset
    58
    delete iCertAttributeFilter;
989397f9511c 201039_03
hgs
parents:
diff changeset
    59
    iCertInfoArray.Close();
989397f9511c 201039_03
hgs
parents:
diff changeset
    60
    iCertList = NULL;
989397f9511c 201039_03
hgs
parents:
diff changeset
    61
    iClientInfoArray = NULL;
989397f9511c 201039_03
hgs
parents:
diff changeset
    62
    iClientStatus = NULL;
989397f9511c 201039_03
hgs
parents:
diff changeset
    63
}
989397f9511c 201039_03
hgs
parents:
diff changeset
    64
989397f9511c 201039_03
hgs
parents:
diff changeset
    65
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    66
// CAdvSecSettingsCertListBuilder::GetCertificateList()
989397f9511c 201039_03
hgs
parents:
diff changeset
    67
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    68
//
989397f9511c 201039_03
hgs
parents:
diff changeset
    69
void CAdvSecSettingsCertListBuilder::GetCertificateList(
989397f9511c 201039_03
hgs
parents:
diff changeset
    70
    QList<AdvSecSettingsCertificate*> &certList,
989397f9511c 201039_03
hgs
parents:
diff changeset
    71
    RMPointerArray<CCTCertInfo> &aCertInfoArray,
989397f9511c 201039_03
hgs
parents:
diff changeset
    72
    TRequestStatus &aStatus)
989397f9511c 201039_03
hgs
parents:
diff changeset
    73
{
989397f9511c 201039_03
hgs
parents:
diff changeset
    74
    aStatus = KRequestPending;
989397f9511c 201039_03
hgs
parents:
diff changeset
    75
    if (!IsActive() && (iState == EIdle)) {
989397f9511c 201039_03
hgs
parents:
diff changeset
    76
        iClientStatus = &aStatus;
989397f9511c 201039_03
hgs
parents:
diff changeset
    77
        iCertList = &certList;
989397f9511c 201039_03
hgs
parents:
diff changeset
    78
        iClientInfoArray = &aCertInfoArray;
989397f9511c 201039_03
hgs
parents:
diff changeset
    79
989397f9511c 201039_03
hgs
parents:
diff changeset
    80
        iCertInfoArray.Close();
989397f9511c 201039_03
hgs
parents:
diff changeset
    81
        ResetCertAttributeFilter();
989397f9511c 201039_03
hgs
parents:
diff changeset
    82
        iCertStore.List(iCertInfoArray, *iCertAttributeFilter, iStatus);
989397f9511c 201039_03
hgs
parents:
diff changeset
    83
        iState = EListingCerts;
989397f9511c 201039_03
hgs
parents:
diff changeset
    84
        SetActive();
989397f9511c 201039_03
hgs
parents:
diff changeset
    85
   } else {
989397f9511c 201039_03
hgs
parents:
diff changeset
    86
        TRequestStatus *status = &aStatus;
989397f9511c 201039_03
hgs
parents:
diff changeset
    87
        User::RequestComplete(status, KErrInUse);
989397f9511c 201039_03
hgs
parents:
diff changeset
    88
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
    89
}
989397f9511c 201039_03
hgs
parents:
diff changeset
    90
989397f9511c 201039_03
hgs
parents:
diff changeset
    91
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    92
// CAdvSecSettingsCertListBuilder::DoCancel()
989397f9511c 201039_03
hgs
parents:
diff changeset
    93
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    94
//
989397f9511c 201039_03
hgs
parents:
diff changeset
    95
void CAdvSecSettingsCertListBuilder::DoCancel()
989397f9511c 201039_03
hgs
parents:
diff changeset
    96
{
989397f9511c 201039_03
hgs
parents:
diff changeset
    97
    switch (iState) {
989397f9511c 201039_03
hgs
parents:
diff changeset
    98
    case EListingCerts:
989397f9511c 201039_03
hgs
parents:
diff changeset
    99
        iCertStore.CancelList();
989397f9511c 201039_03
hgs
parents:
diff changeset
   100
        break;
989397f9511c 201039_03
hgs
parents:
diff changeset
   101
    case ERetrievingCert:
989397f9511c 201039_03
hgs
parents:
diff changeset
   102
        iCertStore.CancelRetrieve();
989397f9511c 201039_03
hgs
parents:
diff changeset
   103
        break;
989397f9511c 201039_03
hgs
parents:
diff changeset
   104
    case EProcessingCert:
989397f9511c 201039_03
hgs
parents:
diff changeset
   105
        // nothing to do
989397f9511c 201039_03
hgs
parents:
diff changeset
   106
        break;
989397f9511c 201039_03
hgs
parents:
diff changeset
   107
    default:
989397f9511c 201039_03
hgs
parents:
diff changeset
   108
        break;
989397f9511c 201039_03
hgs
parents:
diff changeset
   109
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
   110
    User::RequestComplete(iClientStatus, KErrCancel);
989397f9511c 201039_03
hgs
parents:
diff changeset
   111
    iClientStatus = NULL;
989397f9511c 201039_03
hgs
parents:
diff changeset
   112
    iState = EIdle;
989397f9511c 201039_03
hgs
parents:
diff changeset
   113
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   114
989397f9511c 201039_03
hgs
parents:
diff changeset
   115
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   116
// CAdvSecSettingsCertListBuilder::RunL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   117
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   118
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   119
void CAdvSecSettingsCertListBuilder::RunL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   120
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   121
    User::LeaveIfError(iStatus.Int());
989397f9511c 201039_03
hgs
parents:
diff changeset
   122
    switch (iState) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   123
    case EListingCerts:
989397f9511c 201039_03
hgs
parents:
diff changeset
   124
        ProcessFirstCertificateL();
989397f9511c 201039_03
hgs
parents:
diff changeset
   125
        break;
989397f9511c 201039_03
hgs
parents:
diff changeset
   126
    case ERetrievingCert:
989397f9511c 201039_03
hgs
parents:
diff changeset
   127
        ProcessNextCertificateL();
989397f9511c 201039_03
hgs
parents:
diff changeset
   128
        break;
989397f9511c 201039_03
hgs
parents:
diff changeset
   129
    case EProcessingCert:
989397f9511c 201039_03
hgs
parents:
diff changeset
   130
        ProcessNextCertificateL();
989397f9511c 201039_03
hgs
parents:
diff changeset
   131
        break;
989397f9511c 201039_03
hgs
parents:
diff changeset
   132
    default:
989397f9511c 201039_03
hgs
parents:
diff changeset
   133
        ASSERT(EFalse);
989397f9511c 201039_03
hgs
parents:
diff changeset
   134
        break;
989397f9511c 201039_03
hgs
parents:
diff changeset
   135
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
   136
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   137
989397f9511c 201039_03
hgs
parents:
diff changeset
   138
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   139
// CAdvSecSettingsCertListBuilder::RunError()
989397f9511c 201039_03
hgs
parents:
diff changeset
   140
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   141
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   142
TInt CAdvSecSettingsCertListBuilder::RunError(TInt aError)
989397f9511c 201039_03
hgs
parents:
diff changeset
   143
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   144
    User::RequestComplete(iClientStatus, aError);
989397f9511c 201039_03
hgs
parents:
diff changeset
   145
    iClientStatus = NULL;
989397f9511c 201039_03
hgs
parents:
diff changeset
   146
    iState = EIdle;
989397f9511c 201039_03
hgs
parents:
diff changeset
   147
    return KErrNone;
989397f9511c 201039_03
hgs
parents:
diff changeset
   148
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   149
989397f9511c 201039_03
hgs
parents:
diff changeset
   150
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   151
// CAdvSecSettingsCertListBuilder::CAdvSecSettingsCertListBuilder()
989397f9511c 201039_03
hgs
parents:
diff changeset
   152
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   153
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   154
CAdvSecSettingsCertListBuilder::CAdvSecSettingsCertListBuilder(RFs &aFs,
989397f9511c 201039_03
hgs
parents:
diff changeset
   155
    CUnifiedCertStore &aCertStore) : CActive(CActive::EPriorityLow),
989397f9511c 201039_03
hgs
parents:
diff changeset
   156
    iFs(aFs), iCertStore(aCertStore), iCertPtr(0,0)
989397f9511c 201039_03
hgs
parents:
diff changeset
   157
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   158
    CActiveScheduler::Add(this);
989397f9511c 201039_03
hgs
parents:
diff changeset
   159
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   160
989397f9511c 201039_03
hgs
parents:
diff changeset
   161
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   162
// CAdvSecSettingsCertListBuilder::ConstructL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   163
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   164
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   165
void CAdvSecSettingsCertListBuilder::ConstructL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   166
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   167
    iCertAttributeFilter = CCertAttributeFilter::NewL();
989397f9511c 201039_03
hgs
parents:
diff changeset
   168
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   169
989397f9511c 201039_03
hgs
parents:
diff changeset
   170
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   171
// CAdvSecSettingsCertListBuilder::ResetCertAttributeFilter()
989397f9511c 201039_03
hgs
parents:
diff changeset
   172
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   173
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   174
void CAdvSecSettingsCertListBuilder::ResetCertAttributeFilter()
989397f9511c 201039_03
hgs
parents:
diff changeset
   175
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   176
    ASSERT(iCertAttributeFilter);
989397f9511c 201039_03
hgs
parents:
diff changeset
   177
    iCertAttributeFilter->iLabelIsSet = EFalse;
989397f9511c 201039_03
hgs
parents:
diff changeset
   178
    iCertAttributeFilter->iUidIsSet = EFalse;
989397f9511c 201039_03
hgs
parents:
diff changeset
   179
    iCertAttributeFilter->iFormatIsSet = EFalse;
989397f9511c 201039_03
hgs
parents:
diff changeset
   180
    iCertAttributeFilter->iKeyUsage = EX509UsageAll;
989397f9511c 201039_03
hgs
parents:
diff changeset
   181
    iCertAttributeFilter->iOwnerTypeIsSet = EFalse;
989397f9511c 201039_03
hgs
parents:
diff changeset
   182
    iCertAttributeFilter->iSubjectKeyIdIsSet = EFalse;
989397f9511c 201039_03
hgs
parents:
diff changeset
   183
    iCertAttributeFilter->iIssuerKeyIdIsSet = EFalse;
989397f9511c 201039_03
hgs
parents:
diff changeset
   184
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   185
989397f9511c 201039_03
hgs
parents:
diff changeset
   186
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   187
// CAdvSecSettingsCertListBuilder::ProcessFirstCertificateL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   188
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   189
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   190
void CAdvSecSettingsCertListBuilder::ProcessFirstCertificateL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   191
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   192
    iCertInfoIndex = 0;
989397f9511c 201039_03
hgs
parents:
diff changeset
   193
    StartProcessingCertificateL();
989397f9511c 201039_03
hgs
parents:
diff changeset
   194
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   195
989397f9511c 201039_03
hgs
parents:
diff changeset
   196
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   197
// CAdvSecSettingsCertListBuilder::ProcessNextCertificateL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   198
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   199
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   200
void CAdvSecSettingsCertListBuilder::ProcessNextCertificateL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   201
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   202
    CompleteProcessingCertificateL();
989397f9511c 201039_03
hgs
parents:
diff changeset
   203
    ++iCertInfoIndex;
989397f9511c 201039_03
hgs
parents:
diff changeset
   204
    StartProcessingCertificateL();
989397f9511c 201039_03
hgs
parents:
diff changeset
   205
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   206
989397f9511c 201039_03
hgs
parents:
diff changeset
   207
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   208
// CAdvSecSettingsCertListBuilder::StartProcessingCertificateL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   209
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   210
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   211
void CAdvSecSettingsCertListBuilder::StartProcessingCertificateL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   212
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   213
    if (iCertInfoIndex < iCertInfoArray.Count()) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   214
        CCTCertInfo *certInfo = iCertInfoArray[iCertInfoIndex];
989397f9511c 201039_03
hgs
parents:
diff changeset
   215
989397f9511c 201039_03
hgs
parents:
diff changeset
   216
        if ((certInfo->CertificateOwnerType() == ECACertificate) &&
989397f9511c 201039_03
hgs
parents:
diff changeset
   217
            (certInfo->CertificateFormat() == EX509Certificate)) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   218
            // Have to retrieve the cert to add parts of subject
989397f9511c 201039_03
hgs
parents:
diff changeset
   219
            // to certificate label. For example, all Java certs
989397f9511c 201039_03
hgs
parents:
diff changeset
   220
            // have the same label by default.
989397f9511c 201039_03
hgs
parents:
diff changeset
   221
            if (iCertificate) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   222
                delete iCertificate;
989397f9511c 201039_03
hgs
parents:
diff changeset
   223
                iCertificate = NULL;
989397f9511c 201039_03
hgs
parents:
diff changeset
   224
            }
989397f9511c 201039_03
hgs
parents:
diff changeset
   225
            iCertificate = HBufC8::NewL(certInfo->Size());
989397f9511c 201039_03
hgs
parents:
diff changeset
   226
            iCertPtr.Set(iCertificate->Des());
989397f9511c 201039_03
hgs
parents:
diff changeset
   227
            iCertStore.Retrieve(*certInfo, iCertPtr, iStatus);
989397f9511c 201039_03
hgs
parents:
diff changeset
   228
            iState = ERetrievingCert;
989397f9511c 201039_03
hgs
parents:
diff changeset
   229
            SetActive();
989397f9511c 201039_03
hgs
parents:
diff changeset
   230
        } else {
989397f9511c 201039_03
hgs
parents:
diff changeset
   231
            // Certificate label can be used as such.
989397f9511c 201039_03
hgs
parents:
diff changeset
   232
            TRequestStatus *status = &iStatus;
989397f9511c 201039_03
hgs
parents:
diff changeset
   233
            User::RequestComplete(status, KErrNone);
989397f9511c 201039_03
hgs
parents:
diff changeset
   234
            iState = EProcessingCert;
989397f9511c 201039_03
hgs
parents:
diff changeset
   235
            SetActive();
989397f9511c 201039_03
hgs
parents:
diff changeset
   236
        }
989397f9511c 201039_03
hgs
parents:
diff changeset
   237
989397f9511c 201039_03
hgs
parents:
diff changeset
   238
    } else {
989397f9511c 201039_03
hgs
parents:
diff changeset
   239
        ReturnCertificateListL();
989397f9511c 201039_03
hgs
parents:
diff changeset
   240
989397f9511c 201039_03
hgs
parents:
diff changeset
   241
        User::RequestComplete(iClientStatus, KErrNone);
989397f9511c 201039_03
hgs
parents:
diff changeset
   242
        iClientStatus = NULL;
989397f9511c 201039_03
hgs
parents:
diff changeset
   243
        iState = EIdle;
989397f9511c 201039_03
hgs
parents:
diff changeset
   244
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
   245
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   246
989397f9511c 201039_03
hgs
parents:
diff changeset
   247
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   248
// CAdvSecSettingsCertListBuilder::CompleteProcessingCertificateL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   249
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   250
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   251
void CAdvSecSettingsCertListBuilder::CompleteProcessingCertificateL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   252
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   253
    ASSERT(iCertInfoIndex < iCertInfoArray.Count());
989397f9511c 201039_03
hgs
parents:
diff changeset
   254
    CCTCertInfo *certInfo = iCertInfoArray[iCertInfoIndex];
989397f9511c 201039_03
hgs
parents:
diff changeset
   255
989397f9511c 201039_03
hgs
parents:
diff changeset
   256
    CAdvSecSettingsLabeledCertInfo *labeledCertInfo =
989397f9511c 201039_03
hgs
parents:
diff changeset
   257
        new(ELeave) CAdvSecSettingsLabeledCertInfo(*certInfo);
989397f9511c 201039_03
hgs
parents:
diff changeset
   258
    CleanupStack::PushL(labeledCertInfo);
989397f9511c 201039_03
hgs
parents:
diff changeset
   259
    labeledCertInfo->SetLabelL(certInfo->Label());
989397f9511c 201039_03
hgs
parents:
diff changeset
   260
989397f9511c 201039_03
hgs
parents:
diff changeset
   261
    if (iCertificate) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   262
        CX509Certificate *cert = CX509Certificate::NewL(*iCertificate);
989397f9511c 201039_03
hgs
parents:
diff changeset
   263
        CleanupStack::PushL(cert);
989397f9511c 201039_03
hgs
parents:
diff changeset
   264
989397f9511c 201039_03
hgs
parents:
diff changeset
   265
        HBufC *primaryName = NULL;
989397f9511c 201039_03
hgs
parents:
diff changeset
   266
        HBufC *secondaryName = NULL;
989397f9511c 201039_03
hgs
parents:
diff changeset
   267
        TInt err = X509CertNameParser::PrimaryAndSecondaryNameL(*cert,
989397f9511c 201039_03
hgs
parents:
diff changeset
   268
            primaryName, secondaryName, certInfo->Label());
989397f9511c 201039_03
hgs
parents:
diff changeset
   269
        if (!err) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   270
            if (primaryName && primaryName->Length()) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   271
                labeledCertInfo->AppendLabelL(KNameSeparator, *primaryName);
989397f9511c 201039_03
hgs
parents:
diff changeset
   272
            } else {
989397f9511c 201039_03
hgs
parents:
diff changeset
   273
                if (secondaryName && secondaryName->Length()) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   274
                    labeledCertInfo->AppendLabelL(KNameSeparator, *secondaryName);
989397f9511c 201039_03
hgs
parents:
diff changeset
   275
                }
989397f9511c 201039_03
hgs
parents:
diff changeset
   276
            }
989397f9511c 201039_03
hgs
parents:
diff changeset
   277
        }
989397f9511c 201039_03
hgs
parents:
diff changeset
   278
989397f9511c 201039_03
hgs
parents:
diff changeset
   279
        CleanupStack::PopAndDestroy(cert);
989397f9511c 201039_03
hgs
parents:
diff changeset
   280
        delete iCertificate;
989397f9511c 201039_03
hgs
parents:
diff changeset
   281
        iCertificate = NULL;
989397f9511c 201039_03
hgs
parents:
diff changeset
   282
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
   283
989397f9511c 201039_03
hgs
parents:
diff changeset
   284
    iLabeledCertInfos.AppendL(labeledCertInfo);
989397f9511c 201039_03
hgs
parents:
diff changeset
   285
    CleanupStack::Pop(labeledCertInfo);
989397f9511c 201039_03
hgs
parents:
diff changeset
   286
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   287
989397f9511c 201039_03
hgs
parents:
diff changeset
   288
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   289
// CAdvSecSettingsCertListBuilder::ReturnCertificateListL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   290
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   291
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   292
void CAdvSecSettingsCertListBuilder::ReturnCertificateListL()
989397f9511c 201039_03
hgs
parents:
diff changeset
   293
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   294
    TLinearOrder<CAdvSecSettingsLabeledCertInfo> order( CAdvSecSettingsLabeledCertInfo::Compare );
989397f9511c 201039_03
hgs
parents:
diff changeset
   295
    iLabeledCertInfos.Sort( order );
989397f9511c 201039_03
hgs
parents:
diff changeset
   296
989397f9511c 201039_03
hgs
parents:
diff changeset
   297
    iCertList->clear();
989397f9511c 201039_03
hgs
parents:
diff changeset
   298
    iClientInfoArray->Reset();
989397f9511c 201039_03
hgs
parents:
diff changeset
   299
    TInt count = iLabeledCertInfos.Count();
989397f9511c 201039_03
hgs
parents:
diff changeset
   300
    for (TInt index = 0; index < count; index++) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   301
        const CCTCertInfo &certInfo = iLabeledCertInfos[index]->CertInfo();
989397f9511c 201039_03
hgs
parents:
diff changeset
   302
        iClientInfoArray->AppendL(&certInfo);
989397f9511c 201039_03
hgs
parents:
diff changeset
   303
989397f9511c 201039_03
hgs
parents:
diff changeset
   304
        std::auto_ptr<AdvSecSettingsCertificate> cert(new(ELeave) AdvSecSettingsCertificate);
989397f9511c 201039_03
hgs
parents:
diff changeset
   305
        cert->setModelIndex(index);
989397f9511c 201039_03
hgs
parents:
diff changeset
   306
        cert->setCertType(CertType(certInfo));
989397f9511c 201039_03
hgs
parents:
diff changeset
   307
        cert->setLabel(CopyStringL(iLabeledCertInfos[index]->Label()));
989397f9511c 201039_03
hgs
parents:
diff changeset
   308
        iCertList->append(cert.release());
989397f9511c 201039_03
hgs
parents:
diff changeset
   309
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
   310
    iLabeledCertInfos.ResetAndDestroy();
989397f9511c 201039_03
hgs
parents:
diff changeset
   311
    iCertInfoArray.Reset();
989397f9511c 201039_03
hgs
parents:
diff changeset
   312
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   313
989397f9511c 201039_03
hgs
parents:
diff changeset
   314
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   315
// CAdvSecSettingsCertListBuilder::CertType()
989397f9511c 201039_03
hgs
parents:
diff changeset
   316
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   317
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   318
AdvSecSettingsCertificate::CertificateType CAdvSecSettingsCertListBuilder::CertType(
989397f9511c 201039_03
hgs
parents:
diff changeset
   319
    const CCTCertInfo &aCertInfo)
989397f9511c 201039_03
hgs
parents:
diff changeset
   320
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   321
    AdvSecSettingsCertificate::CertificateType type =
989397f9511c 201039_03
hgs
parents:
diff changeset
   322
        AdvSecSettingsCertificate::NotDefined;
989397f9511c 201039_03
hgs
parents:
diff changeset
   323
    TUid storeType;
989397f9511c 201039_03
hgs
parents:
diff changeset
   324
    switch (aCertInfo.CertificateOwnerType()) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   325
    case ECACertificate:
989397f9511c 201039_03
hgs
parents:
diff changeset
   326
        type = AdvSecSettingsCertificate::AuthorityCertificate;
989397f9511c 201039_03
hgs
parents:
diff changeset
   327
        break;
989397f9511c 201039_03
hgs
parents:
diff changeset
   328
    case EUserCertificate:
989397f9511c 201039_03
hgs
parents:
diff changeset
   329
        storeType = aCertInfo.Handle().iTokenHandle.iTokenTypeUid;
989397f9511c 201039_03
hgs
parents:
diff changeset
   330
        if (storeType.iUid == KAdvSecSettingsDeviceCertStore) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   331
            type = AdvSecSettingsCertificate::DeviceCertificate;
989397f9511c 201039_03
hgs
parents:
diff changeset
   332
        } else {
989397f9511c 201039_03
hgs
parents:
diff changeset
   333
            type = AdvSecSettingsCertificate::PersonalCertificate;
989397f9511c 201039_03
hgs
parents:
diff changeset
   334
        }
989397f9511c 201039_03
hgs
parents:
diff changeset
   335
        break;
989397f9511c 201039_03
hgs
parents:
diff changeset
   336
    case EPeerCertificate:
989397f9511c 201039_03
hgs
parents:
diff changeset
   337
        type = AdvSecSettingsCertificate::TrustedSiteCertificate;
989397f9511c 201039_03
hgs
parents:
diff changeset
   338
        break;
989397f9511c 201039_03
hgs
parents:
diff changeset
   339
    default:
989397f9511c 201039_03
hgs
parents:
diff changeset
   340
        break;
989397f9511c 201039_03
hgs
parents:
diff changeset
   341
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
   342
    return type;
989397f9511c 201039_03
hgs
parents:
diff changeset
   343
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   344