installationservices/swi/inc/swi/siscontroller.h
changeset 0 ba25891c3a9e
child 25 7333d7932ef7
--- /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