diff -r 000000000000 -r ba25891c3a9e secureswitools/swisistools/source/interpretsislib/sisregistry.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secureswitools/swisistools/source/interpretsislib/sisregistry.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,278 @@ +/* +* 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: +* SisRegistry - All operations related to the registry. +* +*/ + + +/** + @file + @released + @internalComponent +*/ + +#ifndef SISREGISTRY_H +#define SISREGISTRY_H + +#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK + +class DbHelper; +#include "../xmlparser/xmlparser.h" + +#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK +#include +#include +#include +#include + +#include "siscontroller.h" +#include "symbiantypes.h" +#include "installablefile.h" +#include "parameterlist.h" +#include "sisregistryobject.h" + + +// Forward Declarations +class SisRegistryPackage; +class HashContainer; +class SisRegistryObject; +class SisFile; +class RomManager; +class ConfigManager; +class CSISController; + +class SisRegistry + { +public: // Constructor & destructor + SisRegistry( CParameterList& aParamList, RomManager& aRomManager, ConfigManager& aConfigManager); + ~SisRegistry(); + +public: // API + TBool IsInstalled(TUint32 aUid) const; + const SisRegistryPackage& SidToPackage(TUint32 aSid); + void SidToFileName(TUint32 aSid, std::wstring& aFileName); + bool SidExists(TUint32 aSid) const; + const SisRegistryObject& GetRegistryObject(TUint32 aUid) const; + SisRegistryObject* GetRegistryObjectPtr(TUint32 aUid); + void RemoveEntry(const TUint32 aUid, const std::wstring& aPackageName, const std::wstring& aVendorName); + void RemovePkg(const TUint32& aUid, bool aDeleteRomStub = false); + void RemovePkgLegacy(const TUint32& aUid, bool aDeleteRomStub = false); + + void AddRegistryEntry(const SisFile& aSis, const InstallableFiles& aFiles, + const InstallSISFile& aInstallSISFile); + void UpdateRegistryEntry(const SisFile& aSis, const InstallableFiles& aFiles, + const InstallSISFile& aInstallSISFile); + const SisRegistryObject* OwningPackage(const std::wstring& aFileName, TUint32& aUid) const; + void RemoveBackupLst(); + bool IsRomStubPackage(const TUint32 aUid); + void GetStubFileEntries(const TUint32 aUid, std::list& aFilesEntries); + void GenerateStubRegistry(); + int GetAugmentationsNumber(TUint32 aUid); + CSISController* GetStubController(const TUint32 aUid); + + static const int KSisRegistryMajorVersion; + static const int KSisRegistryMinorVersion; + static const std::string KRegistryV40string; + static const std::string KRegistryV50string; + static const std::string KRegistryV51string; + static const std::string KRegistryV52string; + static const std::string KRegistryV53string; + static const std::string KRegistryV54string; + +private: // Internal methods + void ReadStubs( const std::wstring& aDirectory ); + void ReadRegistry( const std::wstring& aRegistryBasePath ); + CSISController* GetStubControllerInDir( const std::wstring& aDirectory, const TUint32 aUid); + CSISController* ReadStubController( const wchar_t* aFilename ); + void GenerateRegistryEntry(SisRegistryObject& aObj, const SisFile& aSis); + void ExtractRegistryFiles(const std::wstring& path); + void RemoveInstalledFiles(const FileDescriptions& aFileDes, std::wstring& aLocalPath); + void GenerateStubRegistry(SisRegistryObject* aSisRegistryObject, CSISController* aSisController); + void SetNextIndex(SisRegistryObject& aObj) const; + std::wstring GetRegistryDir( const std::wstring& aDrivePath, TUint32 aUid ) const; + void GenerateRegFile(SisRegistryObject& aObj) const; + void GenerateCtlFile(SisRegistryObject& aObj, const SisFile& aSis) const; + +public: + TUint32 GetUid(TUint32 aSid) const; + TUint32 GetUid(const std::wstring& aSidFile) const; + bool GetInRom(TUint32 aUid) const; +#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK + const DbHelper* GetDbHelper() const; +#endif + +private: // Utility functions + static bool IsPackageDir( const std::wstring& aString ); + void ReadSisRegistryVersion(); + void FindMarkerAndSetVersion(const std::wstring& aPath); + TBool IsSisValid(const std::wstring& aStubPath); + bool IsFileWideCard(const std::wstring& aFileName); + +private: // Friends + friend struct Contains; + +private: // Type definitions + typedef std::multimap EntryMap; + +private: // Constants + static const std::wstring KPathToRegistry; + static const std::wstring KPathToRomStubs; + static const std::wstring KPathToRegistryVersionMarker; + static const std::wstring KSisRegistryVersion; + // SisRegistry versions + static const std::wstring KRegistryFormat; + static const std::wstring KRegistryV40; + static const std::wstring KRegistryV51; + static const std::wstring KRegistryV52; + static const std::wstring KRegistryV53; + static const std::wstring KRegistryV54; + static const std::wstring KRomStubDir; + static const std::wstring KRomRegistryVersionMarker; + +private: // Data members + std::wstring iCDrive; + TInt iSystemDrive; + CParameterList& iParamList; + RomManager& iRomManager; + ConfigManager& iConfigManager; + EntryMap iEntries; + + +#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK +private: + // internal methods for accessing database + void RemovePkgWithScr(TUint32 aUid, bool aSkipRomStub=false); + + +private: + XmlDetails::TScrPreProvisionDetail::TComponent CreateRegistryEntry(const SisRegistryObject& aSisRegistryObject); + + // specific methods for adding SisRegistryObject + void AddLocalizedNames ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const SisRegistryObject& aSisRegistryObject + ); + + + void AddComponentDependencies ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const SisRegistryObject& aSisRegistryObject + ); + + void AddEmbeddedPackages ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const std::vector& aEmbeddedPackages + ); + + void AddProperties ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const std::vector& aProperties + ); + + void AddFileDescription ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const std::vector& aFileDescription + ); + + void AddFileDescriptionAsFileProperty ( XmlDetails::TScrPreProvisionDetail::TComponentFile& aComponentFile, + const FileDescription* aFileDescription + ); + + void AddTrustStatus ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, const TrustStatus& aTrustStatus ); + + void AddInstallChainIndices ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const std::vector& aInstallChainIndices + ); + + // specific methods for adding SisRegistryToken + void AddSisRegistryToken ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const SisRegistryToken& aSisRegistryToken + ); + + void AddControllerInfo ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const std::vector& aControllerInfo + ); + + void AddHashContainer ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const HashContainer& aHashContainer, + int aCount + ); + + void AddVersion ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const Version& aVersion + ); + + // specific methods for adding SisRegistryPackage + void AddSisRegistryPackage ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const SisRegistryPackage& aSisRegistryPackage, + int aLanguage + ); + + + // physical schema methods + XmlDetails::TScrPreProvisionDetail::TComponentProperty CreateComponentProperty ( const std::wstring& aPropName, + const std::wstring& aPropValue, + bool aIsInt, + bool aIsStr8Bit, + int aLocale=CSISLanguage::ELangTest + ); + + void AddComponentProperty ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const std::wstring& aPropName, + int aPropValue, + int aCount + ); + + void AddComponentProperty ( XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, + const std::wstring& aPropName, + const std::wstring& aPropValue, + int aCount, + bool aIsBinary + ); + + void AddFileProperty ( XmlDetails::TScrPreProvisionDetail::TComponentFile& aComponentFile, + const std::wstring& aPropName, + const std::wstring& aPropValue, + bool aIsBinary + ); + + void AddFileProperty ( XmlDetails::TScrPreProvisionDetail::TComponentFile& aComponentFile, + const std::wstring& aPropName, + int aPropValue, + bool aIsBinary + ); + + // other helper methods + + + std::wstring FormatVersionToString( const Version& aVersion ); + + std::string GetEpocRoot(); + + void UpdateInstallationInformation(XmlDetails::TScrPreProvisionDetail aScrPreProvisionDetail); + + void GenerateDbRegistryEntry(const SisRegistryObject& aSisRegistryObject, bool aOriginVerified); + + std::string GetDbPath(); + + std::wstring GetGlobalId( TUint32 aUid , TInt aInstallType, std::wstring aPackageName); + + void SetOriginVerification(XmlDetails::TScrPreProvisionDetail::TComponent& aComponent, bool aOriginVerified); +private: + DbHelper* iDbHelper; + + static const std::wstring NativeSoftwareType; + +#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK + +}; + +#endif /* SISREGISTRY_H */ +