secureswitools/swisistools/source/sisxlibrary/siscontroller.h
changeset 0 ba25891c3a9e
child 26 04d4a7bbc3e0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/sisxlibrary/siscontroller.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,672 @@
+/*
+* Copyright (c) 2005-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: 
+* As specified in SGL.GT0188.251
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @released
+*/
+
+#ifndef __SISCONTROLLER_H__
+#define __SISCONTROLLER_H__
+
+
+#include "sisinfo.h"
+#include "sissupportedoptions.h"
+#include "sissupportedlanguages.h"
+#include "sisprerequisites.h"
+#include "sisproperties.h"
+#include "sislogo.h"
+#include "sisinstallblock.h"
+#include "signaturecertchaindata.h"
+#include "sisdataindex.h"
+#include "sequence.h"
+#include "version.h"
+
+
+class CSISController : public CStructure <CSISFieldRoot::ESISController>
+	{
+public:
+	typedef CSequence <CSignatureCertChainData, CSISFieldRoot::ESISSignatureCertificateChain> SignatureCertChainList;
+
+public:
+	/**
+	 * Default controller
+	 */
+	CSISController ();
+	/**
+	 * Copy constructor
+	 */
+	CSISController (const CSISController& aInitialiser);
+	
+public:
+	/**
+	 * This function verifies the structure
+	 * @param aLanguage - language
+	 */ 
+	virtual void Verify (const TUint32 aLanguages) const;
+	/**
+	 * Reads the file and internalize the content
+	 * @param aFile Stream which contains the controller.
+	 * @param aContainerSize controller size.
+	 * @param aArrayType type of array. ESISUndefined if it is not an array.
+	 */ 
+	virtual void Read (TSISStream& aFile, const CSISFieldRoot::TFieldSize& aContainerSize, const CSISFieldRoot::TFieldType aArrayType = CSISFieldRoot::ESISUndefined);
+	/**
+	 * Write the content of the controller into the file.
+	 * @param aFile Stream where the content needs to be written.
+	 * @param aIsArrayElement bool which checks if the controller is part of an array.
+	 */
+	virtual void Write (TSISStream& aFile, const bool aIsArrayElement) const;
+	/**
+	 * @return name of the class.
+	 */
+	virtual std::string Name () const;
+	/**
+	Loads the Stub SIS Controller file. This function also checks if the file is a valid 
+	Stub SIS Controller. 
+	To ensure that the file reading should start from the length field of controller block 
+	in the  read default type parameter is passed as CSISFieldRoot::ESISController
+
+	@param aFileName	Stub SIS Controller file name
+	*/
+	void Load (const std::wstring& aFileName);
+	/**
+	 * Add a new language to the controller.
+	 * @param aLan - language to be added.
+	 */ 
+	void AddLanguage (const CSISLanguage::TDialect aLan);
+	/**
+	 * @return total number of languages present in the controller.
+	 */
+	TUint32 LanguageCount () const;
+	/**
+	 * Checks whether there are any langauge specified for the controller.
+	 * @return true if language is specified else false.
+	 */ 
+	bool AreLanguagesSpecified () const;
+	/**
+	 * Adds a new property into the controller.
+	 * @param aKey - key of the property
+	 * @param aValue - Value for the corresponding key
+	 */
+	void AddProperty (const CSISProperty::TKey aKey, const CSISProperty::TValue aValue);
+	/**
+	 * @return UID of the SIS file.
+	 */
+	CSISUid::TUid UID1 () const;
+	/**
+	 * Set the UID for the controller.
+	 * @param aUID new UID for the SIS.
+	 */
+	void SetUID (const CSISUid::TUid aUID);
+	/**
+	 * Add package name to the existing list of package names for the controller.
+	 * @param aPackageName - package name
+	 */ 
+	void AddName (const std::wstring& aLan)	;
+	/**
+	 * Add vendor name to the existing list of vendor names for the controller.
+	 * @param aVendorName vendor name.
+	 */
+	void AddVendorName (const std::wstring& aLan);
+	/**
+	 * Set the unique vendor name for the controller.
+	 * @param VendorUniqueName unique vendor name.
+	 */
+	void SetVendorUniqueName (const std::wstring& aVendorUniqueName);
+	/**
+	 * Set SIS version
+	 * @param aVersion new version to be set.
+	 */
+	void SetVersion (const TVersion& aVersion);
+	/**
+	 * Each SIS has n number of package dependencies and each package dependency 
+	 * has m number of dependency names, where n & m >= 0. 
+	 * This function will add the dependency name to the existing list of 
+	 * names of the last package dependency.
+	 * @param aName new dependency name
+	 */
+	void AddDependencyName (const std::wstring& aName);
+	/**
+	 * Add a new package dependency into the list of existing package dependencies.
+	 * @param aUID - UID of the package
+	 * @param aFrom - From version 
+	 * @param aTo - To version
+	 */ 
+	void AddDependency (const CSISUid::TUid aUID, const TVersion& aFrom, const TVersion& aTo);
+	/**
+	 * Each SIS has n number of target dependencies and each target dependency 
+	 * has m number of target dependency names, where n & m >= 0. 
+	 * This function will add the target dependency name to the existing list of 
+	 * names of the last target dependency.
+	 * @param aName new target dependency name
+	 */
+	void AddTargetName (const std::wstring& aName);
+	/**
+	 * Add a new target dependency into the list of existing tergate dependencies.
+	 * @param aUID - UID of the target
+	 * @param aFrom - From version 
+	 * @param aTo - To version
+	 */ 
+	void AddTarget (const CSISUid::TUid aUID, const TVersion& aFrom, const TVersion& aTo);
+	/**
+	 * Add new option name to the last supported option.
+	 * @param aName option name
+	 */
+	void AddOptionName (const std::wstring& aName);
+	/**
+	 * Creates a new object of supported options and pushes it into the existing list.
+	 */
+	void AddOption ();
+	/**
+	 * Adds a new install
+	 * @param new installation flag.
+	 */
+	void AddInstallFlag(const TUint8 aFlag);
+	/**
+	 * Converts the string into installation option (only if its valid) and sets the
+	 * option to last file of controller's installblock.
+	 * @param aOption installation option string.
+	 * @return returns the installation option
+	 */
+	CSISFileDescription::TSISInstOption InterpretOption (const std::wstring& aOption);
+	/**
+	 * Converts the string into installation type (only if its valid) and sets the
+	 * type to controller.
+	 * @param aOption installation type string.
+	 * @return returns the installation type.
+	 */
+	CSISInfo::TSISInstallationType InterpretType (const std::wstring& aOption);
+	/**
+	 * Only preinstalled apps must be compressed. 
+	 * @return false if the sis is preinstalled app or preinstalled patch, else true
+	 */
+	bool MustRejectCompression () const;
+	/**
+	 * Set MIME type of the last file of the base controller's install block.
+	 * @param aMimeType MIME type
+	 */
+	void SetMimeType (const std::wstring& aMimeType);
+	/**
+	 * Add a new CSISIf object to the existing list in the controller's installblock.
+	 */
+	void AddIf ();
+	/**
+	 * @return returns the last CSISIf block present in the controller's installblock.
+	 */
+	const CSISIf& If () const;
+	/**
+	 * @return returns the last CSISIf block present in the controller's installblock.
+	 */
+	CSISIf& If ();
+	/**
+	 * @return install block of the controller.
+	 */
+	const CSISInstallBlock& InstallBlock () const;
+	/**
+	 * @return install block of the controller.
+	 */
+	CSISInstallBlock& InstallBlock ();
+	/**
+	 * Sets the controller's data index.
+	 * @param aIndex new index of the controller
+	 */
+	void SetDataIndex (const TUint32 aIndex);
+	/**
+	 * @return data unit index of the controller
+	 */
+	TUint32 DataIndex () const;
+	/**
+	 * Sets the logo into the base controller
+	 * @param aMime MIME type of the logo file.
+	 * @param aTarget destination for the logo file.
+	 * @param aFileName file name of the logo file.
+	 * @param aDataUnit data unit where the logo file will be added
+	 */
+	void SetLogo (const std::wstring& aMime, const std::wstring& aTarget, const TUint32 aFileIndex, const CSISDataUnit& aDataUnit);
+	/**
+	 * Retrieves the instance of logo class
+	 */
+	inline const CSISLogo& Logo() const;
+	/**
+	 * Embeds the SIS file into the controller.
+	 * @param aEmbed Controller to be embedded
+	 * @param aIndex reserved for future use
+	 */
+	void Embed (class CSISController& aEmbed, const TUint32 aIndex);
+	/**
+	 * Set the compressed and uncompressed sizes of the logo file.
+	 * @param aCompressedSize compressed size.
+	 * @param aUncompressedSize uncompressed size.
+	 */
+	void SetLogoSizes (const TUint64 aCompressedSize, const TUint64 aUncompressedSize);
+   	/**
+   	 * Retrieves the Language of the controller pointed by language index.
+   	 * @param aIndex language index
+   	 * @return language
+   	 */
+	CSISLanguage::TLanguage Language (const TUint32 aIndex) const;
+	/**
+	 * Set the current time as the sis creation time.
+	 */
+	void SetNow ();
+	/**
+	 * Removes the most recent signature from the controller.
+	 */
+	void RemoveSignature ();
+	/**
+	 * Gets the signature count from the controller.
+	 * @return signature count.
+	 */
+	inline int	SignatureCount() const;
+	/**
+	 * Returns the buffer containing controller data.
+	 * @return raw controller buffer.
+	 */
+	const TUint8* RawBuffer () const;
+	/**
+	 * Buffer size which is actually read. Doesn't include data whose reading is skipped.
+	 * @return buffer size.
+	 */
+	TUint64 BufferSize () const;
+	/**
+	 * Raw buffer size. The entire controller size.
+	 * @return buffer size.
+	 */
+	TUint64 RawBufferSize () const;
+	/**
+	 * For calculating controller hash signature and data unit index is skipped.
+	 * This function returns the length of the controller minus signature and data
+	 * unit length.
+	 * @return buffer size.
+	 */
+	TUint64 ControllerSizeForHash() const;
+	/**
+	 * Add a new signature chain into the controller.
+	 * @param aSISSigCertChain signature chain.
+	 */
+	void AddSignatureChain(CSignatureCertChainData& aSISSigCertChain);
+	/**
+	 * Adds package entry related to this controller.
+	 * @param aStream stream into which the package details need to be written.
+	 * @param aVerbose If this option is set then detail description of pkg
+	 * 			will be written into the stream.
+	 */
+	void AddPackageEntry(std::wostream& aStream, bool aVerbose) const;
+	/**
+	 * Retrieves the CSignatureCertChainData pointed by chain index.
+	 * @param aIndex index of the chain in the controller.
+	 * @return CSignatureCertChainData object (signature and cert chain container)
+	 */
+	inline const CSignatureCertChainData& SignatureCertChain(TUint32 aIndex) const;
+	/**
+	 * Prerequisites for this controller
+	 * @return CSISPrerequisites
+	 */
+	inline const CSISPrerequisites& Prerequisites() const;
+	/**
+	 * Properties of the controller class.
+	 * @return CSISProperties
+	 */
+	inline const CSISProperties& Properties() const;
+	/**
+	 * Retrieves the CSISInfo class which holds the basic information of the sis file.
+	 * @return CSISInfo
+	 */
+	inline const CSISInfo& SISInfo() const;
+	/**
+	 * Retrieves the CSISLogo class which holds the log information.
+	 * @return CSISLogo
+	 */
+	inline const CSISLogo& SISLogo() const;
+	/**
+	 * Supported option count.
+	 * @return option count.
+	 */
+	inline TUint32 SupportedOptionCount() const;
+	/**
+	 * Retrieve controller ID
+	 */
+	inline int GetControllerID() const;
+
+	/**
+	 * If this function is called then it will skip reading of some class members
+	 */
+	static void SetSkip ();
+	
+
+private:
+	void InsertMembers ();
+	int DeleteDirectory (std::string& aDirectory);
+
+private:
+	// change these ? change Read and Write (for SignSIS) :
+	CSISInfo				iInfo;
+	CSISSupportedOptions	iSupportedOptions;
+	CSISSupportedLanguages	iSupportedLanguages;
+	CSISPrerequisites		iPrerequisites;
+	CSISProperties			iProperties;
+	CSISLogo				iLogo;
+	CSISInstallBlock		iInstallBlock;
+	SignatureCertChainList	iSignatures;
+	CSISDataIndex			iDataIndex;
+	TUint8*					iRawBuffer;
+	TUint64					iRawBufferSize;
+	TUint64					iBufferSize;
+	/**
+	 * Used distinguish between other embeded controllers.
+	 * Base controllers ID will be -1 and embedded controllers
+	 * ID starts with 0
+	 */
+	int						iControllerID; 
+	static int				iLastCtlID; // Last allocated controller's ID.
+	static bool				iSkip;
+	};
+
+
+
+inline CSISController::CSISController () :
+		iRawBuffer (NULL),
+		iRawBufferSize(0),
+		iBufferSize (0),
+		iLogo (false)
+	{
+	InsertMembers ();
+	}
+
+
+inline void CSISController::AddLanguage (const CSISLanguage::TDialect aLan)	
+	{ 
+	iSupportedLanguages.AddLanguage (aLan); 
+	}
+
+
+inline TUint32 CSISController::LanguageCount () const						
+	{ 
+	return iSupportedLanguages.LanguageCount (); 
+	}
+
+
+inline bool CSISController::AreLanguagesSpecified () const					
+	{ 
+	return iSupportedLanguages.AreLanguagesSpecified (); 
+	}
+
+
+inline void CSISController::AddProperty (const CSISProperty::TKey aKey, const CSISProperty::TValue aValue)
+	{ 
+	iProperties.AddProperty (aKey, aValue); 
+	}
+
+
+inline CSISUid::TUid CSISController::UID1 () const								
+	{ 
+	return iInfo.UID1 (); 
+	}
+
+
+inline void CSISController::SetUID (const CSISUid::TUid aUID)					
+	{ 
+	iInfo.SetUID (aUID); 
+	}
+
+
+inline void CSISController::AddName (const std::wstring& aLan)					
+	{ 
+	iInfo.AddName (aLan); 
+	}
+
+
+inline void CSISController::AddVendorName (const std::wstring& aLan)				
+	{ 
+	iInfo.AddVendorName (aLan); 
+	}
+
+
+inline void CSISController::SetVersion (const TVersion& aVersion)
+	{ 
+	iInfo.SetVersion (aVersion); 
+	}
+
+
+inline void CSISController::AddDependencyName (const std::wstring& aName)			
+	{ 
+	iPrerequisites.AddDependencyName (aName); 
+	}
+
+
+inline void CSISController::AddTargetName (const std::wstring& aName)				
+	{ 
+	iPrerequisites.AddTargetName (aName); 
+	}
+
+
+inline void CSISController::AddOptionName (const std::wstring& aName)				
+	{ 
+	iSupportedOptions.AddOptionName (aName); 
+	}
+
+
+inline void CSISController::AddOption ()										
+	{ 
+	iSupportedOptions.AddOption (); 
+	}
+
+
+inline CSISFileDescription::TSISInstOption CSISController::InterpretOption (const std::wstring& aOption)
+	{ 
+	return iInstallBlock.InterpretOption (aOption); 
+	}
+
+
+inline CSISInfo::TSISInstallationType CSISController::InterpretType (const std::wstring& aOption)
+	{
+	return iInfo.InterpretType (aOption); 
+	}
+
+
+inline bool CSISController::MustRejectCompression () const
+	{
+	return iInfo.MustRejectCompression (); 
+	}
+
+
+inline void CSISController::SetMimeType (const std::wstring& aMimeType)			
+	{ 
+	iInstallBlock.SetMimeType (aMimeType); 
+	}
+
+
+inline void CSISController::AddIf ()												
+	{ 
+	iInstallBlock.AddIf (); 
+	}
+
+
+inline const CSISIf& CSISController::If () const									
+	{ 
+	return iInstallBlock.If (); 
+	}
+
+inline CSISIf& CSISController::If ()												
+	{ 
+	return iInstallBlock.If (); 
+	}
+
+
+inline const CSISInstallBlock& CSISController::InstallBlock () const				
+	{ 
+	return iInstallBlock; 
+	}
+
+
+inline CSISInstallBlock& CSISController::InstallBlock ()							
+	{ 
+	return iInstallBlock; 
+	}
+
+
+inline void CSISController::SetDataIndex (const TUint32 aIndex)					
+	{ 
+	iDataIndex.SetIndex (aIndex);
+	}
+
+
+inline TUint32 CSISController::DataIndex () const									
+	{ 
+	return iDataIndex.Index ();
+	}
+
+
+inline void CSISController::SetLogo (const std::wstring& aMime, const std::wstring& aTarget, const TUint32 aFileIndex, const CSISDataUnit& aDataUnit)
+	{
+	iLogo.Set (aMime, aTarget, aFileIndex, aDataUnit); 
+	}
+
+inline const CSISLogo& CSISController::Logo() const
+	{
+	return iLogo;
+	}
+
+
+inline void CSISController::AddDependency (const CSISUid::TUid aUID, const TVersion& aFrom, const TVersion& aTo)
+	{
+	iPrerequisites.AddDependency (aUID, aFrom, aTo);
+	}
+
+inline void CSISController::AddTarget (const CSISUid::TUid aUID, const TVersion& aFrom, const TVersion& aTo)
+	{
+	iPrerequisites.AddTarget (aUID, aFrom, aTo);
+	}
+
+inline void CSISController::Embed (class CSISController& aEmbed, const TUint32 aOffset)
+	{
+	iInstallBlock.Embed (aEmbed, aOffset);
+	}
+
+inline void CSISController::SetLogoSizes (const TUint64 aCompressedSize, const TUint64 aUncompressedSize)
+	{
+	iLogo.SetSizes (aCompressedSize, aUncompressedSize);
+	}
+
+inline void CSISController::Verify (const TUint32 aLanguages) const
+	{
+	CStructure <CSISFieldRoot::ESISController>::Verify (LanguageCount ());
+#if defined (SIGNSIS)
+	for (int index = 0; index < iSignatures.size (); index++)
+		{
+		
+		iSignatures [index].VerifySignature (this, PostHeaderPos ());
+			
+		}
+#endif // SIGNSIS
+	}
+
+inline void CSISController::SetVendorUniqueName (const std::wstring& aVendorUniqueName)
+	{
+	iInfo.SetVendorUniqueName (aVendorUniqueName);
+	}
+
+inline CSISLanguage::TLanguage CSISController::Language (const TUint32 aIndex) const
+	{
+	return iSupportedLanguages.Language (aIndex);
+	}
+
+inline std::string CSISController::Name () const
+	{
+	return "Controller";
+	}
+
+inline void CSISController::SetSkip ()
+	{
+	iSkip = true;
+	}
+
+inline const TUint8* CSISController::RawBuffer () const
+	{
+	assert (iRawBuffer);
+	return iRawBuffer;
+	}
+
+inline TUint64 CSISController::BufferSize () const
+	{
+	assert (iBufferSize);
+	return iBufferSize;
+	}
+
+inline TUint64 CSISController::RawBufferSize () const
+	{
+	assert (iRawBufferSize);
+	return iRawBufferSize;
+	}
+
+inline void CSISController::AddInstallFlag(const TUint8 aFlag)
+	{
+	iInfo.AddFlag(aFlag);
+	}
+
+inline void CSISController::SetNow ()
+	{
+	iInfo.SetNow();
+	}
+
+inline int CSISController::SignatureCount () const
+	{
+	return iSignatures.size();
+	}
+
+inline const CSignatureCertChainData& CSISController::SignatureCertChain(TUint32 aIndex) const
+	{
+	assert(aIndex < iSignatures.size());
+	return iSignatures[aIndex];
+	}
+
+inline const CSISPrerequisites& CSISController::Prerequisites() const
+	{
+	return iPrerequisites;
+	}
+
+inline const CSISProperties& CSISController::Properties() const
+	{
+	return iProperties;
+	}
+
+inline const CSISInfo& CSISController::SISInfo() const
+	{
+	return iInfo;
+	}
+
+inline const CSISLogo& CSISController::SISLogo() const
+	{
+	return iLogo;
+	}
+
+inline TUint32 CSISController::SupportedOptionCount() const
+	{
+	return iSupportedOptions.SupportedOptionCount();
+	}
+
+inline int CSISController::GetControllerID() const
+	{
+	return iControllerID;
+	}
+
+#endif // __SISCONTROLLER_H__
+