crashanalysercmd/Libraries/File Formats/Plugins/CrashInfoFilePlugin/FileFormat/CCrashInfoFileDocument.cs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/crashanalysercmd/Libraries/File Formats/Plugins/CrashInfoFilePlugin/FileFormat/CCrashInfoFileDocument.cs Thu Feb 11 15:50:58 2010 +0200
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:
+* The class CCrashInfoFileDocument is part of CrashAnalyser CrashInfoFile plugin.
+* Container and output implementation for data in Crash Info File format.
+* CI format is an intermediate file used in the MobileCrash server
+* CCrashInfoFileSink creates an instance of this class and uses it to output
+* crash data to file in CI format.
+*
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using CrashItemLib.Crash.Base;
+using CrashItemLib.Crash.Processes;
+using CrashItemLib.Crash.Container;
+using System.IO;
+using CrashItemLib.Sink;
+
+namespace CrashInfoFilePlugin.PluginImplementations.FileFormat
+{
+ internal class CCrashInfoFileDocument
+ {
+ #region Constructors
+ public CCrashInfoFileDocument()
+
+ {
+ }
+
+ #endregion
+
+ /** Creates a new datablock and inputs data from container to the datablock */
+ public void ReadDataFromContainer(CISinkSerializationParameters aParams)
+ {
+ CIContainer container = aParams.Container;
+
+ //Create a datablock for this container's contents
+ CCrashInfoDataBlock datablock = new CCrashInfoDataBlock();
+
+ //Read all interesting data from container to the datablock
+ datablock.AddHeader(container);
+ datablock.AddSWInfos(container);
+ datablock.AddThreadAndExitInfo(container);
+ datablock.AddPanicedProcess(container);
+ datablock.AddRegisterLists(container);
+ datablock.AddStacks(container);
+ datablock.AddCodeSegments(container);
+ datablock.AddMemoryInfo(container);
+ datablock.AddHWInfo(container);
+ datablock.AddTelephony(container);
+ datablock.AddEnvInfo(container);
+ datablock.AddReportParameters(container);
+ datablock.AddMessages(container);
+ datablock.AddCrashHash(container);
+
+ string archivedFileName = (String)aParams.OperationData1;
+ datablock.AddFileNames(container, archivedFileName);
+ datablock.AddEventlog(container);
+
+ datablock.AddOstTraces(container);
+
+ //If all went well, we will add datablock to stored datablocks
+ iDatablocks.Add(datablock);
+ }
+
+ /** Writes datablock contents to stream in CrashInfoFile format. Makes a complete .ci file */
+ public void WriteToStream(StreamWriter aOutput)
+ {
+ aOutput.Write(CCrashInfoFileUtilities.BlockStartMarker(CrashInfoConsts.Kversion));
+ aOutput.Write(CrashInfoConsts.KVersionNumber.ToString().PadLeft(8, '0'));
+ aOutput.Write(CCrashInfoFileUtilities.BlockEndMarker(CrashInfoConsts.Kversion));
+
+ aOutput.Write(CCrashInfoFileUtilities.BlockStartMarker(CrashInfoConsts.Knum_datablocks));
+ aOutput.Write(iDatablocks.Count.ToString().PadLeft(8, '0'));
+ aOutput.Write(CCrashInfoFileUtilities.BlockEndMarker(CrashInfoConsts.Knum_datablocks));
+
+ foreach (CCrashInfoDataBlock datablock in iDatablocks)
+ {
+ datablock.WriteTimeStamp(aOutput);
+ datablock.WriteRomID(aOutput);
+ datablock.WriteSWVersion(aOutput);
+ datablock.WriteVariantID(aOutput);
+ datablock.WriteHWVersion(aOutput);
+ datablock.WritePanicID(aOutput);
+ datablock.WritePanicCategory(aOutput);
+ datablock.WriteLanguage(aOutput);
+ datablock.WritePanicedProcess(aOutput);
+ datablock.WriteProgramCounter(aOutput);
+ datablock.WriteModuleName(aOutput);
+ datablock.WriteRegisterList(aOutput);
+ datablock.WriteLoadedDLLs(aOutput);
+ datablock.WriteAvailableMemory(aOutput);
+ datablock.WriteUserComment(aOutput);
+ datablock.WriteMemoryInfo(aOutput);
+ datablock.WriteMiscInfo(aOutput);
+ datablock.WriteReporter(aOutput);
+ datablock.WriteArchive(aOutput);
+ datablock.WriteProductType(aOutput);
+ datablock.WriteImei(aOutput);
+ datablock.WriteResetreason(aOutput);
+ datablock.WriteUptime(aOutput);
+ datablock.WriteTestset(aOutput);
+ datablock.WriteIMSI(aOutput);
+ datablock.WriteNetworkCountry(aOutput);
+ datablock.WriteNetworkIdentity(aOutput);
+ datablock.WriteLocInfo(aOutput);
+ datablock.WriteNetworkCell(aOutput);
+ datablock.WriteSerialNumber(aOutput);
+ datablock.WriteS60Version(aOutput);
+ datablock.WriteProductCode(aOutput);
+ datablock.WriteVariantVersion(aOutput);
+ datablock.WriteMMCInfo(aOutput);
+ datablock.WriteUID(aOutput);
+ datablock.WriteDiskInfo(aOutput);
+ datablock.WriteFileType(aOutput);
+
+ datablock.WriteReportType(aOutput);
+ datablock.WriteReportCategory(aOutput);
+ datablock.WriteReportOK(aOutput);
+ datablock.WriteReportFail(aOutput);
+ datablock.WriteReportParam1(aOutput);
+ datablock.WriteReportParam2(aOutput);
+ datablock.WriteReportParam3(aOutput);
+ datablock.WriteReportComments(aOutput);
+
+ datablock.WriteRegisterExtraList(aOutput);
+
+ datablock.WriteCrashHash(aOutput);
+
+ datablock.WriteBinFileName(aOutput);
+ datablock.WriteSymbolFileNames(aOutput);
+
+ datablock.WriteCallstacks(aOutput);
+ datablock.WriteEventlog(aOutput);
+
+ datablock.WriteOstTraces(aOutput);
+
+
+ }
+ }
+
+ #region Data members
+ private List<CCrashInfoDataBlock> iDatablocks = new List<CCrashInfoDataBlock>();
+ #endregion
+ }
+}