|
1 /* |
|
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * The class CCrashInfoFileDocument is part of CrashAnalyser CrashInfoFile plugin. |
|
16 * Container and output implementation for data in Crash Info File format. |
|
17 * CI format is an intermediate file used in the MobileCrash server |
|
18 * CCrashInfoFileSink creates an instance of this class and uses it to output |
|
19 * crash data to file in CI format. |
|
20 * |
|
21 */ |
|
22 |
|
23 using System; |
|
24 using System.Collections.Generic; |
|
25 using System.Text; |
|
26 |
|
27 using CrashItemLib.Crash.Base; |
|
28 using CrashItemLib.Crash.Processes; |
|
29 using CrashItemLib.Crash.Container; |
|
30 using System.IO; |
|
31 using CrashItemLib.Sink; |
|
32 |
|
33 namespace CrashInfoFilePlugin.PluginImplementations.FileFormat |
|
34 { |
|
35 internal class CCrashInfoFileDocument |
|
36 { |
|
37 #region Constructors |
|
38 public CCrashInfoFileDocument() |
|
39 |
|
40 { |
|
41 } |
|
42 |
|
43 #endregion |
|
44 |
|
45 /** Creates a new datablock and inputs data from container to the datablock */ |
|
46 public void ReadDataFromContainer(CISinkSerializationParameters aParams) |
|
47 { |
|
48 CIContainer container = aParams.Container; |
|
49 |
|
50 //Create a datablock for this container's contents |
|
51 CCrashInfoDataBlock datablock = new CCrashInfoDataBlock(); |
|
52 |
|
53 //Read all interesting data from container to the datablock |
|
54 datablock.AddHeader(container); |
|
55 datablock.AddSWInfos(container); |
|
56 datablock.AddThreadAndExitInfo(container); |
|
57 datablock.AddPanicedProcess(container); |
|
58 datablock.AddRegisterLists(container); |
|
59 datablock.AddStacks(container); |
|
60 datablock.AddCodeSegments(container); |
|
61 datablock.AddMemoryInfo(container); |
|
62 datablock.AddHWInfo(container); |
|
63 datablock.AddTelephony(container); |
|
64 datablock.AddEnvInfo(container); |
|
65 datablock.AddReportParameters(container); |
|
66 datablock.AddMessages(container); |
|
67 datablock.AddCrashHash(container); |
|
68 |
|
69 string archivedFileName = (String)aParams.OperationData1; |
|
70 datablock.AddFileNames(container, archivedFileName); |
|
71 datablock.AddEventlog(container); |
|
72 |
|
73 datablock.AddOstTraces(container); |
|
74 |
|
75 //If all went well, we will add datablock to stored datablocks |
|
76 iDatablocks.Add(datablock); |
|
77 } |
|
78 |
|
79 /** Writes datablock contents to stream in CrashInfoFile format. Makes a complete .ci file */ |
|
80 public void WriteToStream(StreamWriter aOutput) |
|
81 { |
|
82 aOutput.Write(CCrashInfoFileUtilities.BlockStartMarker(CrashInfoConsts.Kversion)); |
|
83 aOutput.Write(CrashInfoConsts.KVersionNumber.ToString().PadLeft(8, '0')); |
|
84 aOutput.Write(CCrashInfoFileUtilities.BlockEndMarker(CrashInfoConsts.Kversion)); |
|
85 |
|
86 aOutput.Write(CCrashInfoFileUtilities.BlockStartMarker(CrashInfoConsts.Knum_datablocks)); |
|
87 aOutput.Write(iDatablocks.Count.ToString().PadLeft(8, '0')); |
|
88 aOutput.Write(CCrashInfoFileUtilities.BlockEndMarker(CrashInfoConsts.Knum_datablocks)); |
|
89 |
|
90 foreach (CCrashInfoDataBlock datablock in iDatablocks) |
|
91 { |
|
92 datablock.WriteTimeStamp(aOutput); |
|
93 datablock.WriteRomID(aOutput); |
|
94 datablock.WriteSWVersion(aOutput); |
|
95 datablock.WriteVariantID(aOutput); |
|
96 datablock.WriteHWVersion(aOutput); |
|
97 datablock.WritePanicID(aOutput); |
|
98 datablock.WritePanicCategory(aOutput); |
|
99 datablock.WriteLanguage(aOutput); |
|
100 datablock.WritePanicedProcess(aOutput); |
|
101 datablock.WriteProgramCounter(aOutput); |
|
102 datablock.WriteModuleName(aOutput); |
|
103 datablock.WriteRegisterList(aOutput); |
|
104 datablock.WriteLoadedDLLs(aOutput); |
|
105 datablock.WriteAvailableMemory(aOutput); |
|
106 datablock.WriteUserComment(aOutput); |
|
107 datablock.WriteMemoryInfo(aOutput); |
|
108 datablock.WriteMiscInfo(aOutput); |
|
109 datablock.WriteReporter(aOutput); |
|
110 datablock.WriteArchive(aOutput); |
|
111 datablock.WriteProductType(aOutput); |
|
112 datablock.WriteImei(aOutput); |
|
113 datablock.WriteResetreason(aOutput); |
|
114 datablock.WriteUptime(aOutput); |
|
115 datablock.WriteTestset(aOutput); |
|
116 datablock.WriteIMSI(aOutput); |
|
117 datablock.WriteNetworkCountry(aOutput); |
|
118 datablock.WriteNetworkIdentity(aOutput); |
|
119 datablock.WriteLocInfo(aOutput); |
|
120 datablock.WriteNetworkCell(aOutput); |
|
121 datablock.WriteSerialNumber(aOutput); |
|
122 datablock.WriteS60Version(aOutput); |
|
123 datablock.WriteProductCode(aOutput); |
|
124 datablock.WriteVariantVersion(aOutput); |
|
125 datablock.WriteMMCInfo(aOutput); |
|
126 datablock.WriteUID(aOutput); |
|
127 datablock.WriteDiskInfo(aOutput); |
|
128 datablock.WriteFileType(aOutput); |
|
129 |
|
130 datablock.WriteReportType(aOutput); |
|
131 datablock.WriteReportCategory(aOutput); |
|
132 datablock.WriteReportOK(aOutput); |
|
133 datablock.WriteReportFail(aOutput); |
|
134 datablock.WriteReportParam1(aOutput); |
|
135 datablock.WriteReportParam2(aOutput); |
|
136 datablock.WriteReportParam3(aOutput); |
|
137 datablock.WriteReportComments(aOutput); |
|
138 |
|
139 datablock.WriteRegisterExtraList(aOutput); |
|
140 |
|
141 datablock.WriteCrashHash(aOutput); |
|
142 |
|
143 datablock.WriteBinFileName(aOutput); |
|
144 datablock.WriteSymbolFileNames(aOutput); |
|
145 |
|
146 datablock.WriteCallstacks(aOutput); |
|
147 datablock.WriteEventlog(aOutput); |
|
148 |
|
149 datablock.WriteOstTraces(aOutput); |
|
150 |
|
151 |
|
152 } |
|
153 } |
|
154 |
|
155 #region Data members |
|
156 private List<CCrashInfoDataBlock> iDatablocks = new List<CCrashInfoDataBlock>(); |
|
157 #endregion |
|
158 } |
|
159 } |