diff -r 000000000000 -r ba25891c3a9e secureswitools/swisistools/source/interpretsislib/parameterlist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secureswitools/swisistools/source/interpretsislib/parameterlist.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,266 @@ +/* +* Copyright (c) 2008-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: +* +*/ + + +#include + +#include "parameterlist.h" +#include "stringutils.h" +#include "sisregistry.h" + +#include "is_utils.h" + +CParameterList::CParameterList(): + iSystemDriveLetter(L'c'), + iLanguage( CSISLanguage::ELangEnglish ), + iFlags( EFlagsNull ), + iRegistryMajorVersion(0), + iRegistryMinorVersion(0) + #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK + ,iOriginVerified(true) + #endif + { + } + +CParameterList::~CParameterList() + { + } + + +void CParameterList::SetSystemDrive(const std::string& aFilePath) + { + iSystemDrivePath = StringUtils::FixPathDelimiters(aFilePath); + if (!IsDirectory(iSystemDrivePath)) + { + throw EParamInvalidDir; + } + iFlags |= EFlagsCDriveSet; + } + +void CParameterList::SetSystemDriveLetter(int aDriveLetter) + { + iSystemDriveLetter = aDriveLetter; + + if (iSystemDriveLetter < 'a' || iSystemDriveLetter > 'y') + { + throw EParamInvalidSystemDrive; + } + + iFlags |= EFlagsSysDriveSet; + } + +void CParameterList::SetZDrive(const std::string& aFilePath) + { + iZDrive = StringUtils::FixPathDelimiters(aFilePath); + + if (!IsDirectory(iZDrive)) + throw EParamInvalidDir; + + iFlags |= EFlagsZDriveSet; + } + +void CParameterList::SetFlag(TFlags aFlag) + { + iFlags |= aFlag; + } + +void CParameterList::SetConfigFile(const std::string& aFilePath) + { + iConfigFile = StringUtils::FixPathDelimiters(aFilePath); + + if ( !FileExists( iConfigFile ) ) + { + throw EParamMissingConfigurationFile; + } + + iFlags |= EFlagsConfigIniSet; + } + +void CParameterList::SetStubDir(const std::string& aFilePath) + { + iSisStubPath = StringUtils::FixPathDelimiters(aFilePath); + + if (!IsDirectory(iSisStubPath)) + throw EParamInvalidDir; + + iFlags |= EFlagsStubDirectorySet; + } + +void CParameterList::SetLanguage(CSISLanguage::TLanguage aLanguage) + { + iLanguage = aLanguage; + iFlags |= EFlagsLanguageWasSet; + } + +void CParameterList::AddSISFile(InstallSISFile& aSISFile) + { + iFileNames.push_back(aSISFile); + } + +void CParameterList::EmptyRomLogFiles() + { + iRomLogFiles.clear(); + iFlags &= ~EFlagsRomRofsLogFilesSet; + } + +void CParameterList::AddRomLogFile(std::wstring& aRomLogFile) + { + iRomLogFiles.push_back(aRomLogFile); + iFlags |= EFlagsRomRofsLogFilesSet; + } + +void CParameterList::EmptyPkgUids() + { + iPkgUIDs.clear(); + } + +void CParameterList::AddPkgUid(std::wstring& aPkgUid) + { + iPkgUIDs.push_back(aPkgUid); + } + +void CParameterList::SetSisRegistryVersion(const std::string& aVerString) + { + if (aVerString == SisRegistry::KRegistryV40string) + { + iRegistryMajorVersion = 4; + iRegistryMinorVersion = 0; + } + else if (aVerString == SisRegistry::KRegistryV50string) // fixed DEF096906 - Added iRemoveWithLastDependant + { + iRegistryMajorVersion = 5; + iRegistryMinorVersion = 0; + } + else if (aVerString == SisRegistry::KRegistryV51string) // introduced isRemovable flag + { + iRegistryMajorVersion = 5; + iRegistryMinorVersion = 1; + } + else if (aVerString == SisRegistry::KRegistryV52string) // fixed DEF114705 - SIS controller incorrect + { + iRegistryMajorVersion = 5; + iRegistryMinorVersion = 2; + } + else if (aVerString == SisRegistry::KRegistryV53string) // introduced SU cert flag + { + iRegistryMajorVersion = 5; + iRegistryMinorVersion = 3; + } + else if (aVerString == SisRegistry::KRegistryV54string) // introduced Device Supported Languages ( Exact Match and Equivalent match ) + { + iRegistryMajorVersion = 5; + iRegistryMinorVersion = 4; + } + else + { + throw EParamInvalidRegistryVersion; + } + } + +void CParameterList::ValidateParam() + { + if (!iFileNames.empty()) + { + SISFileList::iterator curr = iFileNames.begin(); + + // Touching up the InstallSISFile's iTargetDrive to the right System drive letter + for (; curr != iFileNames.end(); ++curr) + { + if (curr->iTargetDrive == '$') + { + curr->iTargetDrive = iSystemDriveLetter; + } + } + } + + if ( (iFlags & EFlagsDisableZDriveChecksSet) != 0) + { + return; + } + // Some options are mutually inclusive. + // + // When using -r, then -t must also be specified. + // When using -z, -r cannot be specified. + // + const bool romLogs = ( iFlags & EFlagsRomRofsLogFilesSet ) != 0; + const bool zDrive = ( iFlags & EFlagsZDriveSet ) != 0; + const bool sisStubs = ( iFlags & EFlagsStubDirectorySet ) != 0; + + if ( romLogs && zDrive ) + { + // Both are not allowed + throw EParamUseEitherRomRofsLogsOrZDrive; + } + else if ( romLogs && !sisStubs ) + { + // SIS stubs are mandatory when using -R + throw EParamMissingSisStubFilePath; + } + else if (!iFileNames.empty() && !iPkgUIDs.empty()) + { + // -x and -s option are mutually exclusive + throw EParamInstallRemoveExclusive; + } + } + +void CParameterList::DisplayError(TParamException aError) + { + wchar_t* msg = NULL; + // + switch(aError) + { + case EParamInvalidDir: + msg = L"Invalid directory(s) specified"; + break; + case EParamInvalidSystemDrive: + msg = L"Invalid system drive specified"; + break; + case EParamMissingConfigurationFile: + msg = L"Configuration file not found"; + break; + case EParamUseEitherRomRofsLogsOrZDrive: + msg = L"Cannot specify both -r and -z. Use one or the other"; + break; + case EParamMissingSisStubFilePath: + msg = L"Must specify -t when using -r"; + break; + case EParamInvalidRegistryVersion: + msg = L"Invalid SIS Registry version"; + break; + case EParamInstallRemoveExclusive: + msg = L"Cannot have both -s and -x options at the sametime"; + break; + #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK + case EParamRegVersionOriginVerificationExclusive: + msg = L"Cannot have both reg file version (via -k or file) and -f options at the sametime"; + break; + #endif + case EParamUnknownOption: + default: + msg = L"Unknown error"; + break; + } + LERROR(msg << std::endl); + } + +#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK +void CParameterList::SetOriginVerificationStatus(bool aOriginVerified) + { + iOriginVerified = aOriginVerified; + } +#endif +// End of File