diff -r 000000000000 -r ba25891c3a9e secureswitools/swisistools/source/interpretsislib/rommanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secureswitools/swisistools/source/interpretsislib/rommanager.h Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,208 @@ +/* +* Copyright (c) 2007-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: +* +*/ + + +/** + @file ROMMANAGER.H + @internalComponent + @released +*/ +#ifndef ROMMANAGER_H +#define ROMMANAGER_H + +// System includes +#include +#include +#include +#include + +// User includes +#include "symbiantypes.h" +#include "parameterlist.h" + +// Classes referenced +class Options2; +struct SBinarySecurityInfo; + +/** + * @publishedPartner + * @released + */ +class RomManagerException + { +public: // Enumerations + enum TType + { + ETypeUnableToOpenCorrespondingOBY = 0, + ETypeUnableToFindCorrespondingOBY, + ETypeUnableToOpenLogFile + }; + +public: + inline RomManagerException( TType aType, const std::string& aFileName ) + : iType( aType ), iFileName( aFileName ) + { + } + +public: + void Display() const; + +private: + TType iType; + const std::string iFileName; + }; + + +/** + * Abstract class to access ROM file details (file presence and security info). + * + * @internalComponent + * @released + */ +class RomManager + { +public: + // factory method to create derived class objects based on the user options + static RomManager* New(const CParameterList& aParamList); + +protected: + RomManager(); + +public: + // checks the specified file presense in the ROM + virtual bool RomFileExists( const std::wstring& aFileName ) = 0; + + // returns security info of the file, if it is executable (zero returns) + virtual TInt ReadSecurityInfo( SBinarySecurityInfo& aInfo, const std::wstring aFileName ) = 0; + + // searches for all variants of an adorned file name + virtual void FindAllAdornedVariants(const std::wstring& aSearchNameWild, std::list& aAdornedFileNamesFound) = 0; + + // checks to see if the SID passed is owned by a binary in ROM + virtual bool SidExistsInRom(std::wstring& aFile, TUint32 aSid) = 0; + }; + +/** + * @internalComponent + * @released + */ +class RomEntry + { +public: // Enumerations + enum TType + { + ETypeUndefined = 0, + ETypeBinary, + ETypeData + }; + +public: // Constructors & destructor + RomEntry( const std::string& aSourceLogFile ); + ~RomEntry(); + +public: // Access + inline TType Type() const { return iType; } + inline void SetType( TType aType ) { iType = aType; } + + inline std::string EnvFileName() const { return iEnvFileName; } + inline void SetEnvFileName( std::string aFileName ) { iEnvFileName = aFileName; } + + inline std::string RomFileName() const { return iRomFileName; } + inline void SetRomFileName( std::string aFileName ) { iRomFileName = aFileName; } + + inline TUint32 Uid1() const { return iUid1; } + inline void SetUid1( TUint32 aUid ) { iUid1 = aUid; } + + inline TUint32 Uid2() const { return iUid2; } + inline void SetUid2( TUint32 aUid ) { iUid2 = aUid; } + + inline TUint32 Uid3() const { return iUid3; } + inline void SetUid3( TUint32 aUid ) { iUid3 = aUid; } + + inline SBinarySecurityInfo& SecurityInfo() { return *iSecInfo; } + inline const SBinarySecurityInfo& SecurityInfo() const { return *iSecInfo; } + +private: // Data members + const std::string& iSourceLogFile; + TType iType; + std::string iEnvFileName; + std::string iRomFileName; + TUint32 iUid1; + TUint32 iUid2; + TUint32 iUid3; + SBinarySecurityInfo* iSecInfo; + }; + + +// This class reads ROM drive details from the file system path provided. +class RomManagerFileSystem : public RomManager + { +public: + RomManagerFileSystem( const std::wstring& aPath ); + +public: // From RomManager + bool RomFileExists( const std::wstring& aFileName ); + TInt ReadSecurityInfo( SBinarySecurityInfo& aInfo, const std::wstring aFileName ); + void FindAllAdornedVariants(const std::wstring& aSearchNameWild, std::list& aAdornedFileNamesFound); + bool SidExistsInRom(std::wstring& aFile, TUint32 aSid); + +private: + std::wstring iRomPath; + }; + +// This class reads ROM drive details from the .log & .oby files generated by rombuild tools. +class RomManagerLogFiles : public RomManager + { +public: + RomManagerLogFiles( const std::list& aLogFileNames ); + ~RomManagerLogFiles(); + +public: // From RomManager + bool RomFileExists( const std::wstring& aFileName ); + TInt ReadSecurityInfo( SBinarySecurityInfo& aInfo, const std::wstring aFileName ); + void FindAllAdornedVariants(const std::wstring& aSearchNameWild, std::list& aAdornedFileNamesFound); + bool SidExistsInRom(std::wstring& aFile, TUint32 aSid); + +private: // Internal methods + void ReadObyFile( const std::string& aFileName ); + void ProcessObyFileLine( const std::string& aFileName, std::string& aLine ); + // + bool ReadLogFile( const std::string& aFileName ); + void ProcessLogFileLine( std::string& aLine, RomEntry*& aCurrentEntry, const std::string& aFileName, bool& aObyParsingRequired ); + +private: // Type definitions + typedef std::map< std::string /* file name */, RomEntry* /* associated data */ > RomEntryMap; + +private: // Data members + RomEntryMap iEntriesIndexedByEnvFileName; + RomEntryMap iEntriesIndexedByRomFileName; + std::list iLogFileNames; + }; + +// This class is empty holder, used when user selects Z drive eclipsing checks disable option +class RomManagerEmpty : public RomManager + { + +public: // From RomManager + bool RomFileExists( const std::wstring& aFileName ); + TInt ReadSecurityInfo( SBinarySecurityInfo& aInfo, const std::wstring aFileName ); + void FindAllAdornedVariants(const std::wstring& aSearchNameWild, std::list& aAdornedFileNamesFound); + bool SidExistsInRom(std::wstring& aFile,TUint32 aSid); + + }; + +#endif