secureswitools/swisistools/source/sisxlibrary/sisinfo.cpp
changeset 0 ba25891c3a9e
child 24 5cc91383ab1e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/sisxlibrary/sisinfo.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,227 @@
+/*
+* 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 
+ @internalComponent
+ @released
+*/
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4786)
+#endif // _MSC_VER
+
+#include "sisinfo.h"
+#include "utility.h"
+#include "siscontents.h"
+
+static const SIdentifierTable KInstallType [] = 
+	{
+		{	L"PA",				CSISInfo::EInstPreInstalledApp,			0,	false	},
+		{	L"PARTIALUPGRADE",	CSISInfo::EInstPartialUpgrade,			0,	false	},
+		{	L"PIAPP",			CSISInfo::EInstPreInstalledApp,			0,	false	},
+		{	L"PIPATCH",			CSISInfo::EInstPreInstalledPatch,		0,	false	},
+		{	L"PP",				CSISInfo::EInstPreInstalledPatch,		0,	false	},
+		{	L"PU",				CSISInfo::EInstPartialUpgrade,			0,	false	},
+		{	L"SA",				CSISInfo::EInstInstallation,			0,	false	},
+		{	L"SC",				CSISInfo::EInstInstallation,			0,	true	},
+		{	L"SISAPP",			CSISInfo::EInstInstallation,			0,	false	},
+		{	L"SISCONFIG",		CSISInfo::EInstInstallation,			0,	true	},
+		{	L"SISOPTION",		CSISInfo::EInstInstallation,			0,	true	},
+		{	L"SISPATCH",		CSISInfo::EInstAugmentation,			0,	false	},
+		{	L"SISSYSTEM",		CSISInfo::EInstInstallation,			0,	true	},
+		{	L"SISUPGRADE",		CSISInfo::EInstInstallation,			0,	true	},
+		{	L"SO",				CSISInfo::EInstInstallation,			0,	true	},
+		{	L"SP",				CSISInfo::EInstAugmentation,			0,	false	},
+		{	L"SU",				CSISInfo::EInstInstallation,			0,	true	},
+		{	L"SY",				CSISInfo::EInstInstallation,			0,	true	},
+		{	NULL,				0	}
+	};
+
+
+void CSISInfo::InsertMembers ()
+	{
+	InsertMember (iUid);
+	InsertMember (iVendorUniqueName);
+	InsertMember (iNames);
+	InsertMember (iVendorNames);
+	InsertMember (iVersion);
+	InsertMember (iCreationTime);
+	InsertMember (iInstallType);
+	InsertMember (iInstallFlags);
+	}
+
+
+CSISInfo::CSISInfo (const CSISInfo& aInitialiser) :
+		CStructure <CSISFieldRoot::ESISInfo> (aInitialiser),
+		iUid (aInitialiser.iUid),
+		iVendorUniqueName (aInitialiser.iVendorUniqueName),
+		iNames (aInitialiser.iNames),
+		iVendorNames (aInitialiser.iVendorNames),
+		iVersion (aInitialiser.iVersion),
+		iCreationTime (aInitialiser.iCreationTime),
+		iInstallType (aInitialiser.iInstallType),
+		iInstallFlags (aInitialiser.iInstallFlags)
+	{
+	InsertMembers (); 
+	}
+
+
+void CSISInfo::Verify (const TUint32 aLanguages) const
+	{
+	CStructure <CSISFieldRoot::ESISInfo>::Verify (aLanguages);
+	int n = iNames.size ();
+	CSISException::ThrowIf (iNames.size () != aLanguages,
+							CSISException::ELanguage,
+							"language and name counts differ");
+
+	CSISException::ThrowIf (iVendorNames.size () != aLanguages,
+								CSISException::ELanguage,
+								"language and vendor name counts differ");
+	
+	}
+
+
+
+std::string CSISInfo::Name () const
+	{
+	return "Info";
+	}
+
+
+
+CSISInfo::TSISInstallationType CSISInfo::InterpretType (const std::wstring& aOption)
+	{
+	int index = SearchSortedUCTable (KInstallType, aOption);
+	CSISException::ThrowIf (index < 0, CSISException::ESyntax, L"unknown install type: " + aOption);
+	if (KInstallType [index].iDeprecated)
+		{
+		SISLogger::Log(L"Installation type ");
+		SISLogger::Log(aOption);
+		SISLogger::Log(L" ignored, application assumed.\n");
+		}
+	iInstallType = KInstallType [index].iValue;
+	CSISInfo::TSISInstallationType reply = static_cast <CSISInfo::TSISInstallationType> (KInstallType [index].iValue);
+	if ((reply == EInstPreInstalledApp) || (reply == EInstPreInstalledPatch))
+		{
+		CSISContents::SetStub (CSISContents::EStubPreInstalled);
+		}
+	return reply;
+	}
+
+void CSISInfo::AddPackageEntry(std::wostream& aStream, bool aVerbose) const
+	{
+	if (aVerbose)
+		{
+		aStream << L"; Package header" << std::endl;
+		}
+	aStream << L"#{";
+	for (int i=0; i < iNames.size(); ++i)
+		{
+		aStream << L"\"";
+		iNames[i].AddPackageEntry(aStream, aVerbose);
+		aStream << L"\"";
+		if ((i+1)<iNames.size())
+			{
+			aStream << L",";
+			}
+		}
+	aStream << L"}, (";
+	iUid.AddPackageEntry(aStream, aVerbose);
+	aStream << L"), ";
+	iVersion.AddPackageEntry(aStream, aVerbose);
+	aStream << L", TYPE=";
+	switch (iInstallType)
+		{
+		case EInstInstallation:
+			aStream << L"SA";
+			break;
+		case EInstAugmentation:
+			aStream << L"SP";
+			break;
+		case EInstPartialUpgrade:
+			aStream << L"PU";
+			break;
+		case EInstPreInstalledApp:
+			aStream << L"PA";
+			break;
+		case EInstPreInstalledPatch:
+			aStream << L"PP";
+			break;
+		default:
+			aStream << L"*UNKNOWN*";
+			break;
+		}
+		
+	//Flag indicates package is ROM upgradeable.
+	if (iInstallFlags & EInstFlagROMUpgrade)
+		{
+		aStream << L", RU";
+		}
+	
+	if (iInstallFlags & EInstFlagShutdownApps)
+		{
+		aStream << L", SH";
+		}
+	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	if (iInstallFlags & EInstFlagHide)
+		{
+		aStream << L", H";
+		}
+	#endif
+
+	aStream << std::endl;
+
+	TUint32 vendorCount = iVendorNames.size();
+	if (vendorCount)
+		{
+		if (aVerbose)
+			{
+			aStream << L"; Vendor names" << std::endl;
+			}
+		aStream << L"%{";
+		for (int j = 0; j < vendorCount; ++j)
+			{
+			aStream << L"\"";
+			iVendorNames[j].AddPackageEntry(aStream, aVerbose);
+			aStream << L"\"";
+			if ((j+1)<vendorCount)
+				{
+				aStream << L",";
+				}
+			}
+		aStream << L"}" << std::endl;
+		}
+	else if (aVerbose)
+		{
+		aStream << L"; No vendor names" << std::endl;
+		}
+
+	if (aVerbose)
+		{
+		aStream << L"; SIS file build time ";
+		iCreationTime.AddPackageEntry(aStream, aVerbose);
+		aStream << std::endl;
+		}
+	aStream << L":\"";
+	iVendorUniqueName.AddPackageEntry(aStream, aVerbose);
+	aStream << L"\"" << std::endl;
+	aStream << std::endl;
+	}
+
+