secureswitools/swisistools/source/interpretsislib/installer.h
changeset 0 ba25891c3a9e
child 19 7ca52d38f8c3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/interpretsislib/installer.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,141 @@
+/*
+* Copyright (c) 2006-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: 
+*
+*/
+
+
+#ifndef	INSTALLER_H
+#define	INSTALLER_H
+
+#include <vector>
+#include <map>
+#include "symbiantypes.h"
+#include "installablefile.h"
+#include "parameterlist.h"
+#include "sisregistrydependency.h"
+#include "expressionevaluator.h"
+
+class SisRegistry;
+class SisRegistryObject;
+class CSISContents;
+class SisFile;
+class CSISFileDescription;
+class CSISFileData;
+class RomManager;
+class ConfigManager;
+
+
+/**
+* @file INSTALLER.H
+*
+* @internalComponent
+* @released
+*/
+class Installer
+	{
+public:
+	typedef std::map<std::wstring, std::vector<SisRegistryDependency> > MissingDeps;
+
+	Installer( SisRegistry& aReg, const CParameterList& aParamList, RomManager& aRomManager, ConfigManager& aConfigManager );
+
+	TInt Install(const CParameterList::SISFileList& aList);
+
+	TInt Install(const InstallSISFile& aFile);
+
+	const MissingDeps& GetMissing() const
+	{ return iMissing; }
+
+	const SisRegistry& GetSisRegistry() const
+	{ return iRegistry; }
+
+private:
+
+	typedef std::vector<std::wstring> Filenames;
+
+	void SanitiseSISFileAttributes(const InstallSISFile& aInstallSISFile);
+
+	void UninstallPkg(const SisFile& aSis); // Uninstall the same package (if found)
+											// prior to installation
+
+	bool DependenciesOk(const SisFile& aFile);			// Check to see if the sis file
+														// meets it's dependencies
+
+	bool IsValidUpgrade(const SisFile& aFile, bool aSUFlag);	// Check to see if this is a valid upgrade
+																	// to the existing packages
+	void ValidateRegistry(const SisFile& aFile, TUint32 aPckgUid, TUint32 aInstallFlags, bool aRUFlag);
+	void InitializeRegistryDetails	( const TUint32 aPckgUid, bool& aIsBaseRemovable, bool& aInRom, bool& aIsPreInstalled, TUint32& aUid, std::wstring& aPackageName );
+
+
+	bool GetInstallableFiles(
+		const SisFile& aFile, InstallableFiles& aList, ExpressionEvaluator& aEvaluator, int aInstallingDrive);
+
+	void InstallFiles(const InstallableFiles& aList, const int aInstallDrive);	// Retrieves the list of files
+														// to install from the sis file
+
+	static void Install(const InstallableFile& aFile);
+
+	void UpdateRegistry(const SisFile& aFile, const InstallableFiles& aInstalled, // Update the registry entries for
+		const InstallSISFile& aInstallSISFile, const bool aSUFlag);	// PU sis files
+
+	const SisRegistryObject& AddRegistry(const SisFile& aFile,	// Create the registry entries for
+		const InstallableFiles& aInstalled, const bool aSUFlag);	// the installed sis file
+
+	void RemoveHashForFile(const std::wstring& aFile);
+
+	bool CheckDependency(const CSISDependency* aDep);	
+
+	void CheckDestinations(const SisFile& aFile, InstallableFiles& aFiles,
+							const InstallSISFile& aInstallSISFile);	// Ensure installable files do not
+																	// break platsec rules
+	void CheckEmbedded(const SisFile& aFile);
+	void SetupExpressionEnvironment( const SisFile& aFile,
+                                     const SisRegistry& aSisRegistry,
+                                     RomManager& aRomManager );
+
+	void CreateStubSisFile(const InstallSISFile& aInstallSISFile, SisFile& aSis);
+	
+	// Eclipsing check methods
+	void PrepareEclipsableFilesList(const SisFile& aSis);
+	bool IsValidEclipsingUpgrade(const SisFile& aSis, const SisRegistryObject& registryEntry);
+	bool ValidEclipse(const SisFile& aFile, const std::wstring& target, const InstallableFile& aInstallableFile, bool aSUFlag);
+	void HandleFileOverwriting(const SisFile& aFile, const std::wstring& target, bool aSUFlag);
+	bool IsEclipsable(std::wstring& aRomFile, bool aSUFlag);
+	void FilterNonBlockingFilesOfFilename(const SisFile& aFile, const std::wstring& target);
+	void WarnEclipseOverWrite(const SisFile& aFile);
+
+	// Adorned methods
+	void AdornedProcessingOfFile(const std::wstring& aTarget, std::wstring& aUnadornedName, 
+										std::list<std::wstring>& aAdornedFileNamesFound);
+
+	friend struct CheckDependencyMet;
+	friend struct InstallFile;
+
+private:
+	SisRegistry& iRegistry;		// The current sis registry
+	const CParameterList& iParamList;	// options or parameters
+	MissingDeps iMissing;		// List of missing dependencies
+	ExpressionEnvironment* iExpressionEnvironment;	// Expresssion Environment for conditional statement
+	ExpressionEvaluator* iExpressionEvaluator;		// Expression Evaluator
+    RomManager& iRomManager;
+    ConfigManager& iConfigManager;
+	// list of potential blocking files which will prevent the SIS file from installing
+	std::list<std::wstring> iEclipsableOverwriteFiles;
+	// list of ROM files which are allowed to be eclipsed by the installing SIS file upgrade
+	std::list<std::wstring> iEclipsableRomFiles;
+	std::wstring iProblemFiles;
+	ErrorCodes iError;
+	};
+
+#endif	/* INSTALLER_H */