--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/inc/swi/siscontroller.h Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,490 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* Definition of the CSISController
+*
+*/
+
+
+/**
+ @file
+ @released
+ @internalTechnology
+*/
+
+#ifndef __SISCONTROLLER_H__
+#define __SISCONTROLLER_H__
+
+#include <e32base.h>
+
+#include "sisfield.h"
+#include "sisdataindex.h"
+#include "sissignaturecertificatechain.h"
+#include "sispackagetrust.h"
+#include <hash.h>
+
+namespace Swi
+{
+
+class TSisTrustStatus;
+class CCertChainConstraints;
+
+namespace Sis
+ {
+
+class CInfo;
+class CPrerequisites;
+class CSupportedLanguages;
+class CSupportedOptions;
+class CProperties;
+class CLogo;
+class CSignatures;
+class CInstallBlock;
+class TPtrProvider;
+
+
+/**
+ * This class represents a Controller. This is a structure found in files.
+ * It is described in SGL.GT0188.251.
+ *
+ * @released
+ * @internalTechnology
+ */
+class CController : public CField
+ {
+public:
+
+ /**
+ * This creates a new CController object and places it on the cleanup stack.
+ *
+ * @param aDataProvider An instance of a MSisDataProvider to read the entity from.
+ * @param aTypeReadBehaviour Whether we need to check the sis type or not.
+ *
+ * @return An instance of CController representing the data read.
+ */
+ IMPORT_C static CController* NewLC(MSisDataProvider& aDataProvider, TInt64& aBytesRead, TReadTypeBehaviour aTypeReadBehaviour = EReadType);
+
+ /**
+ * This creates a new CController object.
+ *
+ * @param aDataProvider An instance of a MSisDataProvider to read the entity from.
+ * @param aTypeReadBehaviour Whether we need to check the sis type or not.
+ *
+ * @return An instance of CController representing the data read.
+ */
+ IMPORT_C static CController* NewL(MSisDataProvider& aDataProvider, TReadTypeBehaviour aTypeReadBehaviour = EReadType);
+
+ /**
+ * This creates a new CController object and places it on the cleanup stack.
+ *
+ * @param aDataProvider An instance of a MSisDataProvider to read the entity from.
+ * @param aTypeReadBehaviour Whether we need to check the sis type or not.
+ *
+ * @return An instance of CController representing the data read.
+ */
+ IMPORT_C static CController* NewLC(MSisDataProvider& aDataProvider, TReadTypeBehaviour aTypeReadBehaviour = EReadType);
+
+ /**
+ * This creates a new CController object.
+ *
+ * @param aDataProvider An instance of a MSisDataProvider to read the entity from.
+ * @param aTypeReadBehaviour Whether we need to check the sis type or not.
+ *
+ * @return An instance of CController representing the data read.
+ */
+ IMPORT_C static CController* NewL(MSisDataProvider& aDataProvider, TInt64& aBytesRead, TReadTypeBehaviour aTypeReadBehaviour = EReadType);
+
+ /**
+ * This creates a new CController object and places it on the cleanup stack.
+ *
+ * @param aDataProvider An instance of TPtrProvider to read the controller from.
+ * @param aTypeReadBehaviour Whether we need to check the sis type or not.
+ *
+ * @return An instance of CController representing the data read.
+ */
+ IMPORT_C static CController* NewLC(TPtrProvider& aDataProvider, TReadTypeBehaviour aTypeReadBehaviour = EReadType);
+
+ /**
+ * This creates a new CController object.
+ *
+ * @param aDataProvider An instance of TPtrProvider to read the controller from.
+ * @param aTypeReadBehaviour Whether we need to check the sis type or not.
+ *
+ * @return An instance of CController representing the data read.
+ */
+ IMPORT_C static CController* NewL(TPtrProvider& aDataProvider, TReadTypeBehaviour aTypeReadBehaviour = EReadType);
+
+ /**
+ * This creates a new CController object in place.
+ *
+ * @param aDataProvider An instance of TPtrProvider to read the controller from.
+ * @param aTypeReadBehaviour Whether we need to check the sis type or not.
+ *
+ * @return An instance of CController representing the data read.
+ */
+
+ IMPORT_C static CController* NewL(TPtrProvider& aDataProvider, TInt64& aBytesRead, TReadTypeBehaviour aTypeReadBehaviour = EReadType);
+
+ /**
+ * This creates a new CController object in place and places it on the cleanup stack.
+ *
+ * @param aDataProvider An instance of TPtrProvider to read the controller from.
+ * @param aTypeReadBehaviour Whether we need to check the sis type or not.
+ *
+ * @return An instance of CController representing the data read.
+ */
+
+ IMPORT_C static CController* NewLC(TPtrProvider& aDataProvider, TInt64& aBytesRead, TReadTypeBehaviour aTypeReadBehaviour = EReadType);
+
+ IMPORT_C virtual ~CController();
+
+ /// adds the index to the list of chains checked at install time
+ IMPORT_C void AddChainIndex(TInt aIndex) const;
+
+ /// clears the list of chains checked at install time
+ IMPORT_C void ClearCertChainIndices() const;
+
+ /**
+ * This sets the instance of the CCertChainConstraint.
+ @param the CCertChainConstraints instance.
+ */
+ IMPORT_C void SetCertChainConstraints(CCertChainConstraints* aConstraints);
+
+ /**
+ * Provide whether the package will be uninstalled after uninstalling last dependent
+ * @return the current remove with last dependent value for this controller
+ **/
+ IMPORT_C TInt RemoveWithLastDependent() const;
+
+ /**
+ * Set the status which determines whether the package will be uninstalled
+ * after uninstalling last dependent.
+ * @return the current remove with last dependent value for this controller
+ **/
+ IMPORT_C void SetRemoveWithLastDependent();
+
+ /**
+ * Generate a hash for the controller from SISInfo (without the length) to SISInstallBlock
+ * (i.e. except the SISSignatueCertificateChain and SISDataIndex)
+ * @param aController SISController raw data
+ * @return Pionter to the new generated CMessageDigest object
+ **/
+ IMPORT_C CMessageDigest* GenerateControllerHashLC(const TDesC8& aController);
+
+public: // Accessors
+
+ /**
+ * Every SISController includes a SISInfo structure which can be
+ * accessed using this function.
+ *
+ * @return The Sis::CInfo object included in this controller.
+ */
+ const CInfo& Info() const;
+
+ /**
+ * Every SISController includes a SISInstallBlock structure which can be
+ * accessed using this function.
+ *
+ * @return The Sis::CInstallBlock object included in this controller.
+ */
+ const CInstallBlock& InstallBlock() const;
+
+ /**
+ * Every SISController includes a list of supported language encoded in
+ * a SISSupportedLanguages structure which can be
+ * accessed using this function. In a well formed SIS file this structure
+ * <b>cannot be</b> empty as there must always be a supported language.
+ *
+ * @return The Sis::CSupportedLanguages object included in this controller.
+ */
+ const CSupportedLanguages& SupportedLanguages() const;
+
+ /**
+ * Every SISController includes a list of supported options encoded in
+ * a SISSupportedOptions structure which can be
+ * accessed using this function. Note that, although a CSupportedOptions
+ * object is always constructed, this might be empty, e.g. no options
+ * are present.
+ *
+ * @return The Sis::CSupportedOptions object included in this controller.
+ */
+ const CSupportedOptions& SupportedOptions() const;
+
+ /**
+ * Every SISController includes a list of supported properties encoded in
+ * a SISSupportedProperties structure which can be
+ * accessed using this function. Note that, although a CProperties
+ * object is always constructed, this might be empty, e.g. no properties
+ * are present.
+ *
+ * @return The Sis::CProperties object included in this controller.
+ */
+ const CProperties& Properties() const;
+
+ /**
+ * Every SISController includes a list of prerequisites which must be met
+ * for the installation to proceed. Note that, although a CPrerequisites
+ * object is always constructed, this might be empty, e.g. no prerequisites
+ * are present.
+ *
+ * @return The Sis::CPrerequisites object included in this controller.
+ */
+ const CPrerequisites& Prerequisites() const;
+
+ /**
+ * A SISController may contain a SISLogo structure, it can be
+ * accessed using this function.
+ *
+ * @return A pointer to the Sis::CLogo object included in this controller,
+ * NULL if no Logo was found in the SIS file.
+ */
+ const CLogo* Logo() const;
+
+ TUint32 DataIndex() const;
+
+ TInt64 DataOffset() const;
+
+ /**
+ * A controller can be <i>signed</i> multiple times. A signature/certificate
+ * for a given controller is encoded in a SISSignatureCertificateChain structure.
+ * This function returns a list of such structure as an array. Note that if
+ * the controller is not signed the returned array will be empty.
+ *
+ * @return An array of Sis::CSignatureCertificateChain objects.
+ */
+ const RPointerArray<CSignatureCertificateChain>& SignatureCertificateChains() const;
+
+ /** Get the trust associated the SIS package handled by this controller
+ @return The TSisPackageTrust associated with the package
+ */
+ TSisPackageTrust Trust() const;
+
+ /** Set the trust associated the SIS package handled by this controller
+ @param aTrust The TSisPackageTrust to be associated with the package
+ */
+ void SetTrust(TSisPackageTrust aTrust);
+
+ /** Get the System upgrade Cert status associated the SIS package handled by this controller
+ @return The TBool associated with the package
+ */
+ TBool IsSignedBySuCert() const;
+
+ /** Set the System upgrade Cert validation status associated the SIS package handled by this controller
+ @param aSignedBySuCert The TBool to be associated with the package
+ */
+ void SetSignedBySuCert(TBool aSignedBySuCert);
+
+ /**
+ * Provide the trust status object describing the controller.
+ *
+ * This member is not part of the SIS file structure but is information
+ * about it that needs to travel through the SWIS. The object is returned
+ * non-const from a const member as it is a mutable member of CController.
+ *
+ * @return the current trust status for this controller.
+ **/
+ TSisTrustStatus& TrustStatus() const
+ { return *iTrustStatus; }
+
+ /// @return the list of indexes of chains checked at install time
+ const RArray<TInt>& CertChainIndices() const
+ { return iCertChainIndices; }
+
+ /** Get the instance of the CCertChainConstraint.
+ @return the CCertChainConstraints instance.
+ */
+ const CCertChainConstraints* CertChainConstraints() const;
+
+ #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+ TCapabilitySet UserGrantableCapabilities();
+ void SetUserGrantableCapabilities(TCapabilitySet aCapabilitySet);
+
+ /** Returns a flag
+ @return iHasExe TBool flag
+ */
+ inline TBool HasExecutable() const;
+
+ /** Sets the status of flag
+ @param aHasExe TBool
+ */
+ inline void SetHasExecutable(TBool aHasExe);
+
+ #endif
+
+private:
+
+ CController();
+
+ /**
+ * The second-phase constructor.
+ *
+ * @param aDataProvider An instance of a MSisDataProvider to read the entity from.
+ * @param aTypeReadBehaviour Whether we need to check the sis type or not.
+ */
+ void ConstructL(MSisDataProvider& aDataProvider, TInt64& aBytesRead, TReadTypeBehaviour aTypeReadBehaviour);
+
+ /**
+ * The second-phase in-place constructor.
+ *
+ * @param aDataProvider An instance of a TPtrProvider to read the entity from.
+ * @param aTypeReadBehaviour Whether we need to check the sis type or not.
+ */
+
+ void ConstructL(TPtrProvider& aDataProvider, TInt64& aBytesRead, TReadTypeBehaviour aTypeReadBehaviour);
+
+private:
+ CInfo* iInfo;
+
+ CSupportedLanguages* iLanguages;
+
+ CSupportedOptions* iSupportedOptions;
+
+ CProperties* iProperties;
+
+ CInstallBlock* iInstallBlock;
+
+ CPrerequisites* iPrerequisites;
+
+ CLogo* iLogo;
+
+ RPointerArray<CSignatureCertificateChain> iSignatureCertificateChains;
+
+ CDataIndex* iDataIndex;
+
+ TInt64 iDataOffset;
+
+ TSisPackageTrust iTrust;
+
+ TBool iSignedBySuCert;
+
+ CCertChainConstraints* iCertChainConstraints;
+
+ TBool iHasExe; ///< Indicates Whether the component has an exe or not
+
+ mutable TSisTrustStatus* iTrustStatus; ///< The install trust status
+
+ mutable RArray<TInt> iCertChainIndices; ///< Contains the indexes of the chains
+ ///< check for revocation at install time
+ mutable TInt iRemoveWithLastDependent; ///< Whether uninstall with last dependent
+
+ #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+ TCapabilitySet iUserGrantableCapabilities;
+ #endif
+
+ };
+
+// inline functions from CController
+
+inline const CInfo& CController::Info() const
+ {
+ return *iInfo;
+ }
+
+inline const CInstallBlock& CController::InstallBlock() const
+ {
+ return *iInstallBlock;
+ }
+
+inline const CSupportedLanguages& CController::SupportedLanguages() const
+ {
+ return *iLanguages;
+ }
+
+inline const CSupportedOptions& CController::SupportedOptions() const
+ {
+ return *iSupportedOptions;
+ }
+
+inline const CProperties& CController::Properties() const
+ {
+ return *iProperties;
+ }
+
+inline const CPrerequisites& CController::Prerequisites() const
+ {
+ return *iPrerequisites;
+ }
+
+inline const CLogo* CController::Logo() const
+ {
+ return iLogo;
+ }
+
+inline TUint32 CController::DataIndex() const
+ {
+ return iDataIndex->Index();
+ }
+
+inline const RPointerArray<CSignatureCertificateChain>& CController::SignatureCertificateChains() const
+ {
+ return iSignatureCertificateChains;
+ }
+
+inline TInt64 CController::DataOffset() const
+ {
+ return iDataOffset;
+ }
+
+inline void CController::SetTrust(TSisPackageTrust aTrust)
+ {
+ iTrust = aTrust;
+ }
+
+inline TSisPackageTrust CController::Trust() const
+ {
+ return iTrust;
+ }
+
+inline void CController::SetSignedBySuCert(TBool aSignedBySuCert)
+ {
+ iSignedBySuCert = aSignedBySuCert;
+ }
+
+inline TBool CController::IsSignedBySuCert() const
+ {
+ return iSignedBySuCert;
+ }
+
+inline const CCertChainConstraints* CController::CertChainConstraints() const
+ {
+ return iCertChainConstraints;
+ }
+
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+inline void CController::SetUserGrantableCapabilities(TCapabilitySet aCapabilitySet)
+ {
+ iUserGrantableCapabilities = aCapabilitySet;
+ }
+
+inline TCapabilitySet CController::UserGrantableCapabilities()
+ {
+ return iUserGrantableCapabilities;
+ }
+
+inline TBool CController::HasExecutable() const
+ {
+ return iHasExe;
+ }
+
+inline void CController::SetHasExecutable(TBool aHasExe)
+ {
+ iHasExe = aHasExe;
+ }
+#endif
+
+ } // namespace Sis
+
+} // namespace Swi
+
+#endif