diff -r 000000000000 -r 818e61de6cd1 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 iDatablocks = new List(); + #endregion + } +}