crashanalysercmd/Libraries/File Formats/Plugins/CrashInfoFilePlugin/FileFormat/CCrashInfoFileDocument.cs
changeset 0 818e61de6cd1
child 2 0c91f0baec58
--- /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
+    }
+}