diff -r 000000000000 -r 164170e6151a wim/WimServer/inc/WimTrustSettingsStore.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wim/WimServer/inc/WimTrustSettingsStore.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,425 @@ +/* +* Copyright (c) 2003 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: Implements WIM TrustSettingsStore for WIM certificates +* +*/ + + + +#ifndef CWIMTRUSTSETTINGSSTORE_H +#define CWIMTRUSTSETTINGSSTORE_H + +// INCLUDES +#include +#include +#include +#include +#include "WimDefs.h" // TTSSCertLocation +#include + +// CONSTANTS + +// The location of wim trust setting storage +// The path is taken from data_caging_path_literals +_LIT( KWimTrustSettingsDBFile, "WimTrustSettingsStore.dat" ); + +// Object identifier (OID) for server authentication +_LIT( KIpKpServerAuth, "2.5.29.37.1" ); +// Object identifier (OID) for JavaMidlet certificates +_LIT( KIpKpJavaMidlet, "1.3.6.1.4.1.42.2.110.2.2.2.1" ); +// Object identifier (OID) for code signer certificates +_LIT( KWimCodeSigningOID, "1.3.6.1.5.5.7.3.3" ); + +// Default value for trusted flag +const TBool KDefaultTrustFlag = ETrue; +// Maximum length of SQL query clause +const TInt KMaxSQLLength = 100; +// Trusting applications +const TInt KTrustUidWapBearer = 268479059; +const TInt KTrustUidAppController = 268452523; +const TInt KTrustUidInternet = 268441661; +const TInt KTrustUidJavaMidlet = 270506792; + +// FORWARD DECLARATION + +class CWimCertUtil; +class CWimCertInfo; + +// CLASS DECLARATION + +/** +* This class implements services for trust settings. +* Class includes functions for creating DB, fetching, updating and +* deleting trust settings. +* +* @lib WimPlugin.lib +* @since Series60 2.1 +*/ +class CWimTrustSettingsStore : public CActive + { + public: // Constructor and destructor + + /** + * Two-phased constructor. + */ + static CWimTrustSettingsStore* NewL(); + + /** + * Destructor. + */ + virtual ~CWimTrustSettingsStore(); + + public: // New functions + + /** + * Fetches trust settings for given certificate. + * Acts like an asynchronous for caller but not activates itself. + * @param aCert (IN) Certificate + * @param aTrusted (OUT) Is certificate trusted + * @param aApplications (OUT) Array of applications supported + * by certificate + * @param aStatus (IN/OUT) Request Status of asynchronous call + * @return void + */ + void GetTrustSettings( const CWimCertInfo& aCert, + TBool& aTrusted, + RArray& aApplications, + TRequestStatus& aStatus ); + + /** + * Set applicability for given certificate. Calls DoSetApplicabilityL, + * which handles actual operation. New certificate entry is set if + * one not found from database (trust flag is set to EFalse). + * Acts like an asynchronous for caller but not activates itself. + * @param aCert (IN) Certificate + * @param aApplications (IN) Array of applications supported by + * certificate + * @param aStatus Request (IN/OUT) Status of asynchronous call. + * @return void + */ + void SetApplicability( const CWimCertInfo& aCert, + const RArray& aApplications, + TRequestStatus& aStatus ); + + /** + * Set trust flag for given certificate. Calls DoSetTrustL, + * which handles actual operation. New certificate entry is set if + * one not found from database. + * Acts like an asynchronous for caller but not activates itself. + * @param aCert (IN) Certificate + * @param aTrusted (IN) Is certificate trusted + * @param aStatus (IN/OUT) Request Status of asynchronous call. + * @return void + */ + void SetTrust( const CWimCertInfo& aCert, + TBool aTrusted, + TRequestStatus& aStatus ); + + /** + * Set default trust settings for given certificate. If certificate not + * found from database new entry is inserted. + * Acts like an asynchronous for caller but not activate itself. + * @param aCert (IN) Certificate + * @param aAddApps (IN) Are default applications inserted + * (ETrue means yes) + * @param aStatus (IN/OUT) Request Status of asynchronous call + * @return void + */ + void SetDefaultTrustSettings( const CWimCertInfo& aCert, + TBool aAddApps, + TRequestStatus& aStatus ); + + /** + * Remove trust settings of given certificate. If certificate + * is not found, return with status.Int() = KErrNotFound + * Acts like an asynchronous for caller but not activates itself. + * @param aCert (IN) Certificate + * @param aStatus (IN/OUT) Request Status of asynchronous call + * @return void + */ + void RemoveTrustSettings( const CWimCertInfo& aCert, + TRequestStatus& aStatus ); + + /** + * Delete TrustSettingsStore instance and release all resources + * @return void + */ + void CloseD(); + + /** + * Cancel any issued asynchronous call + * @return void + */ + void CancelDoing(); + + private: + + /** + * Default constructor. + */ + CWimTrustSettingsStore(); + + /** + * 2nd phase constructor + */ + void ConstructL(); + + /** + * Fetches trust settings for given certificate + * @param aCert (IN) Certificate + * @param aTrusted (OUT) Is certificate trusted + * @param aApplications (OUT) Array of applications supported + * by certificate + * @return void + */ + void DoGetTrustSettingsL( const CWimCertInfo& aCert, + TBool& aTrusted, + RArray& aApplications ); + + /** + * Set applicability for given certificate. If certificate is not + * allready in database insert new entry. + * @param aCert (IN) Certificate + * @param aTrusted (IN) Is certificate trusted + * @param aApplications (IN) Array of applications supported + * by certificate + * @return void + */ + void DoSetApplicabilityL( const CWimCertInfo& aCert, + const RArray& aApplications ); + + /** + * Set trust flag for given certificate. If certificate is not + * allready in database insert new entry. + * @param aCert (IN) Certificate + * @param aTrusted (IN) Is certificate trusted + * @return void + */ + void DoSetTrustL( const CWimCertInfo& aCert, + TBool aTrusted ); + + /** + * Set default trust settings for given certificate + * @param aCert (IN) Certificate + * @param aAddApps (IN) Are default applications inserted + * (ETrue means yes) + * @return void + */ + void DoSetDefaultTrustSettingsL( const CWimCertInfo& aCert, + TBool aAddApps ); + + /** + * Remove trust settings of given certificate. If certificate not + * found, leave with error code KErrNotFound + * @param aCert (IN) Certificate + * @return void + */ + void DoRemoveTrustSettingsL( const CWimCertInfo& aCert ); + + /** + * Get database ID for given certificate. + * Returns certificate ID = KErrNotFound if matching ID not found. + * @param aCert (IN) Certificate + * @param aCertID (OUT) Certificate's database ID + * @return void + */ + void GetCertificateIDL( const CWimCertInfo& aCert, + TInt& aCertificateID ); + + /** + * Insert certificate to Certificates table + * @param aCert (IN) Certificate + * @param aTrusted (IN) Is certificate trusted or not + * @return void + */ + void InsertCertificateL( const CWimCertInfo& aCert, + TBool aTrusted ); + + + /** + * Fetch certificates trusted flag + * @param aCertificateID (IN) Certificate's database ID + * @param aTrusted (OUT) Is certificate trusted or not + * @return void + */ + void GetTrustedL( TInt aCertificateID, + TBool& aTrusted ); + + /** + * Set trusted flag for certificate + * @param aCertificateID (IN) Certificate's database ID + * @param aTrusted (IN) Is certificate trusted or not + * @return void + */ + void SetTrustedL( TInt aCertificateID, + TBool aTrusted ); + /** + * Remove certificate from Certificates table + * @param aCertificateID (IN) Certificate's database ID + * @return void + */ + void RemoveCertificateL( TInt aCertificateID ); + + /** + * Remove all applications of given certificate + * @param aCertificateID (IN) Certificate + * @return void + */ + void RemoveApplicationsL( TInt aCertificateID ); + + /** + * Get all applications of given certificate + * @param aCertificateID (IN) Certificate's database ID + * @param aApplications (OUT) Array of applications supported + * by certificate + * @return void + */ + void GetApplicationsL( TInt aCertificateID, + RArray& aApplications ); + + /** + * Set applications for given certificate + * @param aCertificateID (IN) Certificate database ID + * @param aApplications (IN) Array of applications supported + * by certificate + * @return void + */ + void InsertApplicationsL( TInt aCertificateID, + const RArray& aApplications ); + + /** + * Decide default applications for given certificate. + * Default applications are decided regarding the certificate's: + * - format + * - extented usage data + * - trusted usage data + * @param aCert (IN) Certificate + * @param aApplications (OUT) List of applications returned + * @return void + */ + void DefaultApplicationsL( const CWimCertInfo& aCert, + RArray& aApplications ); + + /** + * Decide default applications by OID's. + * @param aCert (IN) Certificate + * @param aApplications (OUT) List of applications returned + * @return void + */ + void DefaultAppsByOIDsL( const CWimCertInfo& aCert, + RArray& aApplications ); + + /** + * Create database. Leaves if error occurs. + * @return void + */ + void CreateDBL() const; + + /** + * Insert default appUid selection rules. Leaves if error occurs. + * @return void + */ + void InsertDefaultAppRulesL() const; + + /** + * Extracts certificate extensions. Leaves if error occurs. + * @return void + */ + void ExtractExtensionL(); + + /** + * Makes a SHA-1 hash of certificate label + * @param aString (IN) String to be hashed + * @return 8 bit string of label hash + */ + HBufC8* GetHashL( TDesC8& aString ); + + private: // From base class CActive + + /** + * Handle asyncronous response + * @return void + */ + void RunL(); + + /** + * Handle asyncronous call cancel + * @return void + */ + void DoCancel(); + + /** + * Handles RunL function leaves + * @param aError Leaving code. + * @return TInt + */ + TInt RunError( TInt aError ); + + private: // Data + + enum TPhase + { + EIdle, + ERetrieve, + ECheckRestore, + ECheckInitializeCertStore, + ECheckRetrieve + }; + + // The state of this active object + TPhase iPhase; + + // Used for saving caller status. Not owned + TRequestStatus* iOriginalRequestStatus; + + //Database session for WimTrustSettingsStore + + RFs iDBSession; + + //Database for WimTrustSettingsStore + RDbNamedDatabase iDatabase; + + //Flag to tell if compact operation for dbhas to be done in destructor + TBool iCompact; + + // For file session + RFs iFs; + + // Pointer to CertUtil.Owned + CWimCertUtil* iWimCertUtil; + + // Pointer to current wim specific certificate info + const CWimCertInfo* iWimCert; + + // Pointer to current Symbian specific certificate info + const CCTCertInfo* iCert; + + // Boolean indicating if default applications are added or not + TBool iAddApps; + + // Pointer to whole certificate data buffer + HBufC8* iEncodedCertBuf; + + // Pointer to certificate data buffer + TPtr8* iEncodedCertPtr; + + // Temporal array for certificate infos. + // This array is used to fetch certificate infos from WimClient. + // Owned. + RPointerArray iCertInfos; + }; + +#endif // CWIMTRUSTSETTINGSSTORE_H + +// End of File