secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpchainvaliditytool/options.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpchainvaliditytool/options.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,234 @@
+/*
+* Copyright (c) 2005-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 "options.h"
+#include "openssllicense.h"
+using namespace std;
+
+void Options::DisplayError (const Exceptions& aErr)
+	{
+	const char* msg;
+	switch (aErr)
+		{
+		case EUnknownOption:
+			msg = "unknown option specified" ;
+			DisplayUsage ();
+			break;
+		case EMissingDATFile:
+			msg = "Dat File Input not specified ";
+			DisplayUsage ();
+			break;
+		case EMissingSISFile:
+			msg = "SIS File Input not specified ";
+			DisplayUsage ();
+			break;
+		case EUnableToOpenFile:
+			msg = "Unable to open file " ;
+			break;
+		case ESupportingExeError:
+			msg = "Unable to execute Supporting Executable.Set Environment PATH" ;
+			DisplayUsage ();
+			break;
+		case ECorruptCCIFile:
+			msg = "File containing signing chain information is corrupted " ;
+			break;
+		case EErrorExecutingSupportingExeSignsis:
+			msg = "Error while Executing Supporting \nExecutable SignSIS.exe.Either SIS File is Unsigned or does not exist in the specified path" ;
+			break;
+		case EErrorExecutingSupportingDumpSwiCertstoreExe:
+			msg = "Error while Executing Supporting \nExecutable DumpSWICertstoreTool.exe" ;
+			break;
+		case ENotADerBitString:
+			msg = "Error reading a DER encoded ASN.1 Bit String Type .";
+			break;
+		case ENotADerSequence:
+			msg = "Error reading a DER Encoded ASN.1 Sequence Type." ;
+			break;
+		case ENotADerInteger:
+			msg = "Error reading a DER Encoded ASN.1 Integer Type." ;
+			break;
+		case ENotADerUtf8String:
+			msg = "Error reading a DER Encoded ASN.1 UTF8 String." ;
+			break;
+		default:
+			msg = "unknown error";
+			break;
+		}
+		cerr << CommandName () << ": Error in command: " << msg << std::endl <<std::endl;
+	}
+
+
+void Options::DisplayVersion() const
+	{
+	 cout << "\nDumpChainValidity Utility   Version " << KMajorVersion << '.' \
+		  << setw(2) << KMinorVersion << setfill('0') <<  "\nCopyright (c) 2005-2006 Symbian Software Limited . All rights reserved.\n\n" << flush;
+	}
+
+
+void Options::DisplayUsage()
+	{
+	cout << "Usage: DumpChainValidityTool [-v][-h][-i][-l] Signed_SIS_Input DAT_Input Directory  \n\n" \
+					" -v		specifies the version of the tool \n" \
+					" -h		Prints the help message\n" \
+					" -i        Output licence information \n" \
+					" -l		Displays unified capabilities list of the validated chains \n" \
+					"DAT_Input	ROM Based SWICertstore.dat.Optional if Directory is specified \n" \
+					"Directory	Writable SWICertstore.Optional if swicertstore.dat is specified\n" \
+					"SIS_Input	Signed SIS File\n" \
+					"All inputs must be specified in the same order as mentioned above.\n\n" << flush;
+	}
+
+
+Options::Options (int argc, char** argv)
+	:iList(false),
+	iVersion (false),
+	iHelpFlag (false),
+	iDATFileSpecified (false),
+	iSISFileSpecified (false),
+	iDirectorySpecified (false)
+	{
+	iDATFile.empty();
+	iCertstore.empty();
+	iSISFile.empty();
+	unsigned char stage = 0;
+	bool ssl = false;
+	int argCount = argc;
+	while (--argc > 0)
+		{
+		argv++;
+		if ((**argv == '-') || (**argv == '/'))
+			{
+			const char* optPtr = *argv;
+			while (*++optPtr)
+				{
+				switch (*optPtr)
+					{
+					case 'h':
+					case 'H':
+					case '?':
+						{
+						iHelpFlag = true;
+						DisplayUsage();
+						break;
+						}
+					case 'v':
+					case 'V':
+						{
+						iVersion = true;
+						DisplayVersion();
+						break;
+						}
+					case 'i' :
+					case 'I' :
+						{
+						ssl = true;
+						break;
+						}
+					case 'l':
+					case 'L':
+						iList = true;
+						break;
+
+					default:
+						throw EUnknownOption;
+					}
+				}
+			}
+			
+		else
+			{
+			switch(stage)
+				{
+				case 0:
+						{
+						iSISFile = *argv;
+						iSISFileSpecified = true;
+						break;
+						}
+				case 1:
+						{
+						iDATFile = *argv;
+						iDATFileSpecified = true;
+						break;
+						}
+				case 2:
+						{
+						iCertstore = *argv;
+						iDirectorySpecified = true;
+						break;
+						}
+				default:
+						throw EUnknownOption;
+				}
+			stage++;
+			}
+		}
+
+	//displays OpenSSL copyright notice.
+	if (ssl)
+		{
+		for (int index = 0; index < (sizeof(openSSLLicenseString)/sizeof(openSSLLicenseString[0])); ++index)
+			{
+			cout << openSSLLicenseString [index] << endl;
+			}
+		}
+
+	CheckCmdLineExceptions();
+	}
+
+void Options::CheckCmdLineExceptions()
+	{
+	if(iDirectorySpecified && iDATFileSpecified)
+		{
+		iCertstore.append(" ");
+		iCertstore.append(iDATFile);
+		}
+
+
+	if(iDATFileSpecified && !iDirectorySpecified)
+		{
+		iCertstore=iDATFile;
+		}
+
+	//if only -h or -v or both are specified
+	if(!iDATFileSpecified && !iDirectorySpecified && !iSISFileSpecified )
+		{
+		exit(0);
+		}
+
+	//Neither dat file nor directory is specified			
+	if (!iDATFileSpecified && !iDirectorySpecified )
+		{
+		throw EMissingDATFile;	
+		}
+
+	//no sis file specified
+	if(!iSISFileSpecified)
+		{
+		throw EMissingSISFile;
+		}
+	}
+
+Options::~Options()
+	{
+	}
+
+
+
+
+