vpnengine/pkiservice/src/certificaterequeststore.cpp
changeset 0 33413c0669b9
equal deleted inserted replaced
-1:000000000000 0:33413c0669b9
       
     1 /*
       
     2 * Copyright (c) 2007 - 2008 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "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".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:   Class, which handles storing and accessing certificate requests.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #include <bautils.h>
       
    21 
       
    22 #include "certificaterequeststore.h"
       
    23 
       
    24 
       
    25 _LIT(KCertReqPat, "*.req");
       
    26 _LIT(KCertReqFileNameFormat, "certreq(%d).req");
       
    27 
       
    28 
       
    29 CCertificateRequestStore* CCertificateRequestStore::NewL()
       
    30     {
       
    31     CCertificateRequestStore* self = new (ELeave) CCertificateRequestStore;
       
    32     CleanupStack::PushL(self);
       
    33     self->ConstructL();
       
    34     CleanupStack::Pop(self);
       
    35     
       
    36     return self;
       
    37     }
       
    38 
       
    39 
       
    40 void CCertificateRequestStore::ConstructL()
       
    41     {
       
    42     User::LeaveIfError(iFileSession.Connect());
       
    43     User::LeaveIfError(iFileSession.PrivatePath(iPrivatePath));
       
    44     User::LeaveIfError(iFileSession.SetSessionPath(iPrivatePath));
       
    45     }
       
    46 
       
    47 
       
    48 CCertificateRequestStore::~CCertificateRequestStore()
       
    49     {
       
    50     iFileSession.Close();
       
    51     }
       
    52 
       
    53 
       
    54 TInt CCertificateRequestStore::CertReqCountL()
       
    55     {
       
    56     TInt count(0);
       
    57 
       
    58     TFindFile* fileFinder = new (ELeave) TFindFile(iFileSession);
       
    59     CleanupDeletePushL(fileFinder);
       
    60     
       
    61     CDir* fileList = NULL;
       
    62     TInt err = fileFinder->FindWildByDir(KCertReqPat, iPrivatePath, fileList);
       
    63     
       
    64     switch(err)
       
    65         {
       
    66         case KErrNone:
       
    67             count = fileList->Count();
       
    68             delete fileList;
       
    69             fileList = NULL;
       
    70             break;
       
    71         case KErrNotFound:
       
    72             //No saved requests.
       
    73             //Returns zero.
       
    74             break;
       
    75         default:
       
    76             User::Leave(err);
       
    77             break;                
       
    78         }
       
    79       
       
    80     CleanupStack::PopAndDestroy(fileFinder);
       
    81     return count;
       
    82     
       
    83     }
       
    84 
       
    85    
       
    86 
       
    87 CArrayFixFlat<TCertificateRequestListEntry>* CCertificateRequestStore::GetCertReqListLC()
       
    88     {
       
    89     CArrayFixFlat<TCertificateRequestListEntry>* list = 
       
    90                 new (ELeave) CArrayFixFlat<TCertificateRequestListEntry>(3);
       
    91     CleanupStack::PushL(list);
       
    92         
       
    93     TCertificateRequestListEntry certReqInfo;
       
    94     
       
    95     TFindFile* fileFinder = new (ELeave)TFindFile(iFileSession);
       
    96     CleanupDeletePushL(fileFinder);
       
    97     
       
    98     CDir* fileList;
       
    99     TInt err = fileFinder->FindWildByDir(KCertReqPat, iPrivatePath, fileList);
       
   100 
       
   101     switch(err)
       
   102         {        
       
   103         case KErrNone:        
       
   104             CleanupStack::PushL(fileList);            
       
   105             for (TInt i = 0; i < fileList->Count(); i++)
       
   106                 {
       
   107                 certReqInfo.iObjectName = (*fileList)[i].iName;                
       
   108                 list->AppendL(certReqInfo);                
       
   109                 }            
       
   110             CleanupStack::PopAndDestroy(); // fileList
       
   111             break;
       
   112         case KErrNotFound:
       
   113             //No saved requests.
       
   114             //Returns zero length array.
       
   115             break;
       
   116         default:
       
   117             User::Leave(err);
       
   118             break;
       
   119         }
       
   120     
       
   121     CleanupStack::PopAndDestroy(fileFinder);
       
   122     return list;
       
   123     }
       
   124 
       
   125 
       
   126 HBufC* CCertificateRequestStore::SaveCertRequestLC(const TDesC8& aCertReqData)
       
   127     {
       
   128     
       
   129     TFileName* certReqFileName = GetNewCertReqFileNameLC();
       
   130     
       
   131     RFile certReqFile;    
       
   132     User::LeaveIfError(certReqFile.Create(iFileSession, *certReqFileName, EFileWrite));
       
   133     CleanupClosePushL(certReqFile);    
       
   134     
       
   135     TInt err = certReqFile.Write(aCertReqData);    
       
   136     
       
   137     CleanupStack::PopAndDestroy(); //certReqFile
       
   138     
       
   139     if (err != KErrNone)
       
   140         {
       
   141         //Just in case
       
   142         iFileSession.Delete(*certReqFileName);
       
   143         User::Leave(err);
       
   144         }
       
   145     
       
   146 
       
   147     HBufC* certReqObjectName = certReqFileName->AllocL();    
       
   148     CleanupStack::PopAndDestroy(certReqFileName);
       
   149     CleanupStack::PushL(certReqObjectName);    
       
   150     
       
   151     return certReqObjectName;
       
   152     }
       
   153 
       
   154 
       
   155 HBufC8* CCertificateRequestStore::ReadCertRequestLC(const TDesC& aCertReqObjectName)
       
   156     {
       
   157     RFile file;
       
   158     User::LeaveIfError(file.Open(iFileSession, aCertReqObjectName, EFileRead));
       
   159     CleanupClosePushL(file);
       
   160 
       
   161     TInt requestSize(0);
       
   162     User::LeaveIfError(file.Size(requestSize));
       
   163     
       
   164     HBufC8* requestData = HBufC8::NewLC(requestSize);
       
   165     TPtr8 requestDataPtr(requestData->Des());
       
   166     
       
   167     User::LeaveIfError(file.Read(requestDataPtr));
       
   168 
       
   169     CleanupStack::Pop(requestData);
       
   170     CleanupStack::PopAndDestroy(); //file
       
   171     
       
   172     CleanupStack::PushL(requestData);
       
   173     
       
   174     return requestData;
       
   175     }
       
   176 
       
   177 
       
   178 void CCertificateRequestStore::DeleteCertRequestL(const TDesC& aCertReqObjectName)
       
   179     {
       
   180     User::LeaveIfError(iFileSession.Delete(aCertReqObjectName));
       
   181     }
       
   182 
       
   183 
       
   184 TFileName* CCertificateRequestStore::GetNewCertReqFileNameLC()
       
   185     {
       
   186     TFileName* fileName = new (ELeave) TFileName;
       
   187     CleanupDeletePushL(fileName);
       
   188              
       
   189     TInt i = 0;    
       
   190     do
       
   191         {
       
   192         fileName->Format(KCertReqFileNameFormat, i);
       
   193         if (!BaflUtils::FileExists(iFileSession, *fileName))
       
   194             {
       
   195             break;
       
   196             }
       
   197         ++i;
       
   198         }while(i > 0); //loop infinite.
       
   199             
       
   200     return fileName;
       
   201     }