pkiutilities/DeviceToken/Inc/DevandTruSrvCertStoreServer.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:20:08 +0200
changeset 0 164170e6151a
permissions -rw-r--r--
Revision: 201004

/*
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "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:   The header file of DevandTruSrvCertStoreServer
*
*/



#ifndef __DEVANDTRUSRVCERTSTORESERVER_H__
#define __DEVANDTRUSRVCERTSTORESERVER_H__

#include <s32file.h>
#include <e32std.h>
#include <securitydefs.h>

class CDevTokenCertInfo;
class CDevandTruSrvCertStoreSession;
class CDevandTruSrvCertStoreConduit;
class CDevandTruSrvCertStoreEntry;
class CDevandTruSrvCertStoreEntryList;
class CCertAttributeFilter;
class CTrustedSitesServer;

struct TDevTokenAddCertDataStruct;

/**
 *  class CDevandTruSrvCertStoreServer
 *
 * This class implements a certificate store which is stored on a file on the
 * device.  NewL calls the constructor and ConstructL. The constructor does
 * nothing except initializing to 0. ConstructL calls OpenStoreL, then RestoreL
 * and then sets the values of iStoreInfo.  OpenStoreL opens the store and
 * copies it from the ROM if necessary.  RestoreL()
 *
 *  @lib 
 *  @since S60 3.2
 */
class CDevandTruSrvCertStoreServer : public CBase
    {
    public:
        
        static CDevandTruSrvCertStoreServer* NewL( CTrustedSitesServer* aTrustedSitesServer);
        
        virtual ~CDevandTruSrvCertStoreServer();
        
        CDevandTruSrvCertStoreSession* CreateSessionL();

    public:
        
        // List certs, returned pointers are owned by this class
        void ListL(const CCertAttributeFilter& aFilter, RPointerArray<CDevTokenCertInfo>& aCertsOut, const RMessage2& aMessage, TBool aFromTruSiteSrv ) const;
        
        // Get cert info, returned pointer owned by this class, leaves if not found
        const CDevTokenCertInfo& GetCertL(TInt aHandle) const;
        
        const RArray<TUid>& ApplicationsL(TInt aHandle) const;  
        
        TBool IsApplicableL(TInt aHandle, TUid aApplication) const;
        
        TBool TrustedL(TInt aHandle) const;
        
        HBufC8* RetrieveLC(TInt aHandle, const RMessage2& aMessage, TBool aFromTruSiteSrv ) const;
        
        void AddL(const TDevTokenAddCertDataStruct& aInfo,
                  const TDesC8& aCert,
                  const RMessage2& aMessage, TBool aFromTruSiteSrv );
        
        void RemoveL(TInt aHandle, const RMessage2& aMessage, TBool aFromTruSiteSrv );
        
        void SetApplicabilityL(TInt aHandle,
                               const RArray<TUid>& aApplications,
                               const RMessage2& aMessage);
        
        void SetTrustL(TInt aHandle,
                       TBool aTrusted,
                       const RMessage2& aMessage);

    private:
        
        CDevandTruSrvCertStoreServer( CTrustedSitesServer* aTrustedSitesServer );
        
        void ConstructL();
        
        // Security policy
        const TSecurityPolicy& AddRemovePolicy(TCertificateOwnerType aOwnerType) const;
        
        const TSecurityPolicy& RetrievePolicy(TCertificateOwnerType aOwnerType) const;
        
        const TSecurityPolicy& ListPolicy(TCertificateOwnerType aOwnerType) const;
        
        const TSecurityPolicy& WriteTrustSettingsPolicy() const;
        
        TBool CertEntryMatchesFilter(const CCertAttributeFilter& aFilter,
        
        const CDevandTruSrvCertStoreEntry& aEntry) const;
        
        void DoAddL(const CDevTokenCertInfo& aCertInfo, const TDesC8& aCertData);
        
        TStreamId WriteCertDataStreamL(const TDesC8& aData);
        
        // Write the cert entry list to the store
        void UpdateStoreL();
        
        void CompactStoreL();
        
        // Open the store and load the index from a file
        void RestoreL(const TDesC& aFilename);
        
        // Open the store file, copying from ROM or creating it first if necessary
        void OpenStoreL();
        
        // Create an empty store file, and leave it closed
        void CreateStoreFileL(const TDesC& aFile);
        
        void DoCreateStoreFileL(const TDesC& aFile);

    private:
        
        // Conduit for marshalling/unmarshalling client communications
        
        CDevandTruSrvCertStoreConduit* iConduit;
        
        RFs iFs;
        
        CPermanentFileStore* iStore;
        
        // The list of certificates contained in the store.
        
        CDevandTruSrvCertStoreEntryList* iEntryList;
        
        // The store stream containing the list of certs
        TStreamId iStreamId;
        
        CTrustedSitesServer* iTrustedSitesServer; //Not owned;
    };

#endif  //__DEVANDTRUSRVCERTSTORESERVER_H__

//EOF