--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/dumpsis/main.cpp Tue Jan 26 12:06:03 2010 +0200
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2004-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:
+*
+*/
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4786)
+#endif // _MSC_VER
+
+
+#include <iostream>
+#include <string>
+#include <fstream>
+#include <wchar.h>
+#include <openssl/err.h>
+#include <stdio.h>
+
+#include "utility_interface.h"
+#include "options.h"
+#include "siscontents.h"
+#include "siscontroller.h"
+#include "dumpsis.h"
+
+enum DumpsisException
+ {
+ EDumpsisExecutionSuccessful,
+ EDumpsisExecutionError,
+ EDumpsisUnknownError
+ };
+
+void DisplayFileCapList(CDumpSis& dumpsis, Options& aOptions)
+ {
+ TFileCapTestList fileList;
+ dumpsis.GetCapVerifiedFileList(fileList);
+ int fileCount = fileList.size();
+
+ if(fileCount != 0 && aOptions.CreateECI() && !aOptions.Verbose())
+ {
+ std::wcout << L"[FILELIST]" << std::endl;
+ }
+
+ for(int i = 0; i < fileCount; ++i)
+ {
+ std::wcout << std::endl;
+ const CSISFileDescription* fdesc = fileList[i].iFileDesc;
+ std::wstring str = fdesc->Target().GetString();
+ std::wcout << L"File" << i+1;
+ if(aOptions.CreateECI() && !aOptions.Verbose())
+ {
+ std::wcout << L"=" << str;
+ std::wcout << L"@" << fdesc->Capabilities() << std::endl;
+ }
+ else
+ {
+ std::wcout << L":" << str;
+ std::vector<std::wstring> capList;
+ fdesc->GetCapabilityList(capList);
+ std::wcout << std::endl;
+ for(int j = 0; j < capList.size(); ++j)
+ {
+ std::wcout << L"\t" << capList[j] << std::endl;
+ }
+ }
+ }
+ if(!aOptions.Verbose())
+ {
+ for(int i = 0; i < fileCount; ++i)
+ {
+ if(fileList[i].iActualCap < 0)
+ {
+ continue;
+ }
+ if(aOptions.CreateECI() && fileList[i].iFileDesc->Capabilities() == 0)
+ {
+ std::wcout << L"0" << std::endl;
+ }
+ else if(!aOptions.CreateECI())
+ {
+ std::wcout << std::endl;
+ std::wcout << L"Executable" << i+1;
+ if(fileList[i].iActualCap)
+ {
+ std::wcout << L": capabilities matched with the SIS file header capabilities";
+ }
+ else
+ {
+ std::wcout << L": capabilities mismatched with the SIS file header capabilities";
+ }
+ std::wcout << std::endl << std::endl;
+ }
+ }
+ }
+ }
+
+int main(int argc, char *argv[])
+ {
+ wchar_t **argv1 = CommandLineArgs(argc,argv);
+
+ Options* options = NULL;
+ int retVal = EDumpsisExecutionSuccessful;
+ try
+ {
+ options = new Options (argc, argv1);
+
+ SISLogger::SetStream(std::wcout);
+
+ CDumpSis dumpsis(options->SISFileName(), options->Verbose());
+
+ CDumpSis::TExtractionLevel extractionLevel = CDumpSis::ENone;
+
+ if(options->ExtractFiles())
+ {
+ extractionLevel = (options->Verbose())? CDumpSis::EEverything : CDumpSis::EAllButCerts;
+ }
+ else
+ {
+ extractionLevel = CDumpSis::EAllDataFiles;
+ }
+
+ dumpsis.ExtractFiles(options->ExtractDirectory(), extractionLevel);
+
+ if(options->Listexe())
+ {
+ DisplayFileCapList(dumpsis, *options);
+ }
+ }
+ catch (CmdLineException err)
+ {
+ Options::DisplayError (err);
+ retVal = EDumpsisExecutionError;
+ }
+ catch(CSISException oops)
+ {
+ switch(oops.ErrorCategory())
+ {
+ case CSISException::EFileProblem:
+ std::cerr << "cannot open specified SIS file for reading" << std::endl;
+ break;
+ case CSISException::EFileFormat:
+ case CSISException::EMemory:
+ case CSISException::EIllegal:
+ std::cerr << "error whilst parsing file contents" << std::endl;
+ break;
+ case CSISException::ELegacyFormat:
+ std::cerr << "This is an old format (pre 9.x) SIS file, which is no longer supported" << std::endl;
+ break;
+ case CSISException::ECompress:
+ std::cerr << "error while decompressing" << std::endl;
+ break;
+ default:
+ std::cerr << "unknown error reading SIS file" << std::endl;
+ break;
+ }
+ retVal = EDumpsisExecutionError;
+ }
+ catch (std::exception &err)
+ {
+ std::cerr << "Error: " << err.what() << std::endl;
+ retVal = EDumpsisExecutionError;
+ }
+ catch (...)
+ {
+ retVal = EDumpsisUnknownError;
+ std::cerr << "Unknown error";
+ }
+
+ if ((NULL != options) && (options->PauseOnExit()))
+ {
+ std::cout << argv[0] << " Finished" << std::endl;
+ getchar ();
+ }
+ delete options;
+
+ return retVal;
+ }