private static void WriteDevice(XmlWriter aOutput, CXmlDataBlock datablock) { // Device aOutput.WriteStartElement(XmlConsts.Kxml_device); if (datablock.Platform().Equals(XmlConsts.Kxml_sos)) { aOutput.WriteAttributeString(XmlConsts.Kxml_platform, XmlConsts.Kxml_s60); } else { aOutput.WriteAttributeString(XmlConsts.Kxml_platform, datablock.Platform()); } aOutput.WriteAttributeString(XmlConsts.Kxml_code, datablock.ProductType()); aOutput.WriteAttributeString(XmlConsts.Kxml_version, datablock.SWVersion()); if (datablock.RomId() != null) { aOutput.WriteAttributeString(XmlConsts.Kxml_romid, datablock.RomId().ToString()); } // variant is not written. if (datablock.Imei() != string.Empty) { aOutput.WriteAttributeString(XmlConsts.Kxml_imei, datablock.Imei()); } // Write additional device details here if exist. aOutput.WriteEndElement(); }
/** 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 CXmlDataBlock datablock = new CXmlDataBlock(); //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); }
private void WriteReport(XmlWriter aOutput) { CXmlDataBlock datablock = iDatablocks[0]; aOutput.WriteStartElement(XmlConsts.Kxml_report); WriteDevice(aOutput, datablock); WriteReportDetails(aOutput, datablock); aOutput.WriteEndElement(); }
private static void WriteSymbolFileNames(XmlWriter aOutput, CXmlDataBlock datablock) { List <string> symbolFiles = datablock.SymbolFiles(); string symbolfilenames = string.Empty; foreach (string fileName in symbolFiles) { if (symbolfilenames != string.Empty) { symbolfilenames = symbolfilenames + ", "; } symbolfilenames = symbolfilenames + Path.GetFileName(fileName); } WriteDetail(aOutput, XmlConsts.Kxml_symbol_file_name, symbolfilenames); }
/** * Writes unique values. */ private static void WriteUniqueValues(StreamWriter writer, CXmlDataBlock datablock) { // Unique values writer.Write(PrettyTitle(KTitleUniqueValues)); // Available memory writer.Write(PrettyString(XmlConsts.Kxml_available_memory, datablock.FreeMemory())); if (datablock.RegStorage() != null && datablock.RegStorage().ProgramCounter() != null) { writer.Write(PrettyString(XmlConsts.Kxml_program_counter, "0x" + datablock.RegStorage().ProgramCounter().Value.ToString("X8"))); writer.Write(PrettyString(XmlConsts.Kxml_program_counter_symbol, datablock.RegStorage().ProgramCounter().Symbol)); } writer.Write(PrettyString(XmlConsts.Kxml_misc_info, datablock.GetMiscInfo())); // Reporter not written. // Resetreason not written. writer.Write(PrettyString(XmlConsts.Kxml_uptime, datablock.Uptime())); writer.Write(PrettyString(XmlConsts.Kxml_siminfo, datablock.Imsi())); writer.Write(PrettyString(XmlConsts.Kxml_locinfo, datablock.LocInfo())); writer.Write(PrettyString(XmlConsts.Kxml_cellid, datablock.NetworkCell())); writer.Write(PrettyString(XmlConsts.Kxml_psninfo, datablock.SerialNumber())); if (datablock.UID() != null) { writer.Write(PrettyString(XmlConsts.Kxml_uid, "0x" + datablock.UID().Value.ToString("X8"))); } writer.Write(PrettyString(XmlConsts.Kxml_diskinfo, datablock.DiskInfo())); writer.Write(PrettyString(XmlConsts.Kxml_phone_number, datablock.PhoneNumber())); writer.Write(PrettyString(XmlConsts.Kxml_report_ok, datablock.ReportOK())); writer.Write(PrettyString(XmlConsts.Kxml_report_fail, datablock.ReportFail())); writer.Write(PrettyString(XmlConsts.Kxml_report_param_name1, datablock.ReportParamName1())); writer.Write(PrettyString(XmlConsts.Kxml_report_param_value1, datablock.ReportParamValue1())); writer.Write(PrettyString(XmlConsts.Kxml_report_param_name2, datablock.ReportParamName2())); writer.Write(PrettyString(XmlConsts.Kxml_report_param_value2, datablock.ReportParamValue2())); writer.Write(PrettyString(XmlConsts.Kxml_report_param_name3, datablock.ReportParamName3())); writer.Write(PrettyString(XmlConsts.Kxml_report_param_value3, datablock.ReportParamValue3())); writer.Write(PrettyString(XmlConsts.Kxml_report_comments, datablock.ReportComments())); }
private static void WriteUniqueValues(XmlWriter aOutput, CXmlDataBlock datablock) { // Unique values aOutput.WriteStartElement(XmlConsts.Kxml_unique_values); // Hw version is not added because it doesn't exist. WriteDetail(aOutput, XmlConsts.Kxml_available_memory, datablock.FreeMemory()); if (datablock.RegStorage() != null && datablock.RegStorage().ProgramCounter() != null) { WriteDetail(aOutput, XmlConsts.Kxml_program_counter, datablock.RegStorage().ProgramCounter().Value); WriteDetail(aOutput, XmlConsts.Kxml_program_counter_symbol, datablock.RegStorage().ProgramCounter().Symbol); } WriteDetail(aOutput, XmlConsts.Kxml_misc_info, datablock.GetMiscInfo()); // Reporter not written. // Resetreason not written. WriteDetail(aOutput, XmlConsts.Kxml_uptime, datablock.Uptime()); WriteDetail(aOutput, XmlConsts.Kxml_siminfo, datablock.Imsi()); WriteDetail(aOutput, XmlConsts.Kxml_locinfo, datablock.LocInfo()); WriteDetail(aOutput, XmlConsts.Kxml_cellid, datablock.NetworkCell()); WriteDetail(aOutput, XmlConsts.Kxml_psninfo, datablock.SerialNumber()); WriteDetail(aOutput, XmlConsts.Kxml_uid, datablock.UID()); WriteDetail(aOutput, XmlConsts.Kxml_diskinfo, datablock.DiskInfo()); WriteDetail(aOutput, XmlConsts.Kxml_phone_number, datablock.PhoneNumber()); WriteDetail(aOutput, XmlConsts.Kxml_report_ok, datablock.ReportOK()); WriteDetail(aOutput, XmlConsts.Kxml_report_fail, datablock.ReportFail()); WriteDetail(aOutput, XmlConsts.Kxml_report_param_name1, datablock.ReportParamName1()); WriteDetail(aOutput, XmlConsts.Kxml_report_param_value1, datablock.ReportParamValue1()); WriteDetail(aOutput, XmlConsts.Kxml_report_param_name2, datablock.ReportParamName2()); WriteDetail(aOutput, XmlConsts.Kxml_report_param_value2, datablock.ReportParamValue2()); WriteDetail(aOutput, XmlConsts.Kxml_report_param_name3, datablock.ReportParamName3()); WriteDetail(aOutput, XmlConsts.Kxml_report_param_value3, datablock.ReportParamValue3()); WriteDetail(aOutput, XmlConsts.Kxml_report_comments, datablock.ReportComments()); aOutput.WriteEndElement(); // unique values }
/** * Writes one datablock as plain text. */ private static void WriteDataBlock(StreamWriter writer, CXmlDataBlock datablock) { writer.Write(PrettyTitle(KTitleCrashFile)); // Device if (datablock.Platform().Equals(XmlConsts.Kxml_sos)) { writer.Write(PrettyString(XmlConsts.Kxml_platform, XmlConsts.Kxml_s60)); } else { writer.Write(PrettyString(XmlConsts.Kxml_platform, datablock.Platform())); } writer.Write(PrettyString(XmlConsts.Kxml_code, datablock.ProductType())); writer.Write(PrettyString(XmlConsts.Kxml_version, datablock.SWVersion())); if (datablock.RomId() != null) { writer.Write(PrettyString(XmlConsts.Kxml_romid, "0x" + datablock.RomId().Value.ToString("X8"))); } // variant is not written. if (datablock.Imei() != string.Empty) { writer.Write(PrettyString(XmlConsts.Kxml_imei, datablock.Imei())); } writer.Write(PrettyString(XmlConsts.Kxml_timestamp, datablock.TimeStampText())); string crashtypestr = "Not found"; if (datablock.FileType() == XmlConsts.MobileCrashFileType.ETypeBasicCrash) { crashtypestr = XmlConsts.Kxml_type_crash; } else if (datablock.FileType() == XmlConsts.MobileCrashFileType.ETypeAliveMessage) { crashtypestr = XmlConsts.Kxml_type_alivemsg; } else if (datablock.FileType() == XmlConsts.MobileCrashFileType.ETypeCrashAPIReport) { crashtypestr = XmlConsts.Kxml_type_report; } else if (datablock.FileType() == XmlConsts.MobileCrashFileType.ETypeRegistrationMessage) { crashtypestr = XmlConsts.Kxml_type_regmsg; } writer.Write(PrettyString(XmlConsts.Kxml_type, crashtypestr)); writer.Write(PrettyString(XmlConsts.Kxml_file_name, datablock.BinFilename())); if (crashtypestr.Equals(XmlConsts.Kxml_type_report)) { writer.Write(PrettyString(XmlConsts.Kxml_report_category, datablock.ReportCategory())); } if (crashtypestr.Equals(XmlConsts.Kxml_type_report)) { writer.Write(PrettyString(XmlConsts.Kxml_report_type, datablock.ReportType())); } if (datablock.CrashedModuleName() != string.Empty) { writer.Write(PrettyString(XmlConsts.Kxml_crashed_module, datablock.CrashedModuleName())); } if (datablock.Hash() != string.Empty) { writer.Write(PrettyString(XmlConsts.Kxml_defect_hash, datablock.Hash())); } if (datablock.DetailedHash() != string.Empty) { writer.Write(PrettyString(XmlConsts.Kxml_detailed_defect_hash, datablock.DetailedHash())); } if (datablock.TestSet() != string.Empty) { writer.Write(PrettyString(XmlConsts.Kxml_testset, datablock.TestSet())); } WriteDictionaryValues(writer, datablock); // Codesegments if (datablock.CodeSegs().Count > 0) { writer.Write(PrettyTitle(KTitleCodesegments)); } foreach (CXmlCodeSegItem codeseg in datablock.CodeSegs()) { string range = "0x" + codeseg.Start.ToString("X8") + " - " + "0x" + codeseg.End.ToString("x8"); writer.WriteLine(range + FillSpaces(range) + codeseg.Name); } // Registers if (datablock.RegStorage().BasicRegs().ToPrettyString().Length > 0 || datablock.RegStorage().OtherRegLists().Count > 0) { writer.Write(PrettyTitle(KTitleRegisters)); } writer.WriteLine(datablock.RegStorage().BasicRegs().ToPrettyString()); // Extra registers foreach (CXmlRegisterStorage.CCrashInfoRegisterList registerList in datablock.RegStorage().OtherRegLists()) { writer.WriteLine(registerList.ToPrettyString()); } // Call stacks if (datablock.CallStacks().Count > 0) { writer.Write(PrettyTitle(KTitleCallStacks)); } foreach (XmlFilePlugin.FileFormat.CXmlCallStack stack in datablock.CallStacks()) { writer.WriteLine(stack.ToString()); } // OST traces if (datablock.OstTraces().Count > 0) { writer.Write(PrettyTitle(KTitleOstTraces)); } foreach (string line in datablock.OstTraces()) { writer.WriteLine(line); } // Event log if (datablock.Eventlog().Count > 0) { writer.Write(PrettyTitle(KTitleEventLog)); } foreach (string line in datablock.Eventlog()) { writer.WriteLine(line); } }
/** * Writes dictionary values. */ private static void WriteDictionaryValues(StreamWriter writer, CXmlDataBlock datablock) { writer.Write(PrettyString(XmlConsts.Kxml_panic_id, datablock.PanicId())); writer.Write(PrettyString(XmlConsts.Kxml_panic_category, datablock.PanicCategory())); writer.Write(PrettyString(XmlConsts.Kxml_panic_description, Regex.Replace(datablock.PanicDescription(), "<(.|\n)*?>", ""))); writer.Write(PrettyString(XmlConsts.Kxml_language, datablock.Language())); if (!datablock.Process().Equals(XmlConsts.Kxml_unknown_process)) { writer.Write(PrettyString(XmlConsts.Kxml_panicked_process, datablock.Process())); } writer.Write(PrettyString(XmlConsts.Kxml_network_country_code, datablock.NetworkCountry())); writer.Write(PrettyString(XmlConsts.Kxml_network_identity, datablock.NetworkIdentity())); writer.Write(PrettyString(XmlConsts.Kxml_s60version, datablock.S60Version())); writer.Write(PrettyString(XmlConsts.Kxml_product_code, datablock.ProductCode())); writer.Write(PrettyString(XmlConsts.Kxml_variant_version, datablock.VariantVersion())); if (datablock.ReportType() != string.Empty) { writer.Write(PrettyString(XmlConsts.Kxml_file_type, "1")); } else { writer.Write(PrettyString(XmlConsts.Kxml_file_type, "0")); } // Production mode if (datablock.ProductionMode() != -1) { if (datablock.ProductionMode() == 1) { writer.Write(PrettyString(XmlConsts.Kxml_production_mode, XmlConsts.Kxml_production_mode_value)); } else { writer.Write(PrettyString(XmlConsts.Kxml_production_mode, XmlConsts.Kxml_rnd_mode_value)); } } // Crash source if (datablock.CrashSource() != -1) { if (datablock.CrashSource() == 1) { writer.Write(PrettyString(XmlConsts.Kxml_crash_source, XmlConsts.Kxml_crash_source_user)); } else { writer.Write(PrettyString(XmlConsts.Kxml_crash_source, XmlConsts.Kxml_crash_source_kernel)); } } // Symbol file names if (datablock.SymbolFiles().Count > 0) { writer.Write(PrettyTitle(KTitleSymbolFileNames)); } foreach (string fileName in datablock.SymbolFiles()) { writer.WriteLine(fileName); } }
private static void WriteDictionaryValues(XmlWriter aOutput, CXmlDataBlock datablock) { // Dictionary values aOutput.WriteStartElement(XmlConsts.Kxml_dictionary_values); WriteDetail(aOutput, XmlConsts.Kxml_panic_id, datablock.PanicId()); WriteDetail(aOutput, XmlConsts.Kxml_panic_category, datablock.PanicCategory()); WriteDetail(aOutput, XmlConsts.Kxml_language, datablock.Language()); if (!datablock.Process().Equals(XmlConsts.Kxml_unknown_process)) { WriteDetail(aOutput, XmlConsts.Kxml_panicked_process, datablock.Process()); } WriteDetail(aOutput, XmlConsts.Kxml_network_country_code, datablock.NetworkCountry()); WriteDetail(aOutput, XmlConsts.Kxml_network_identity, datablock.NetworkIdentity()); WriteDetail(aOutput, XmlConsts.Kxml_s60version, datablock.S60Version()); WriteDetail(aOutput, XmlConsts.Kxml_product_code, datablock.ProductCode()); WriteDetail(aOutput, XmlConsts.Kxml_variant_version, datablock.VariantVersion()); aOutput.WriteStartElement(XmlConsts.Kxml_detail); aOutput.WriteAttributeString(XmlConsts.Kxml_name, XmlConsts.Kxml_file_type); if (datablock.ReportType() != string.Empty) { aOutput.WriteAttributeString(XmlConsts.Kxml_value, "1"); } else { aOutput.WriteAttributeString(XmlConsts.Kxml_value, "0"); } aOutput.WriteEndElement(); // Production mode if (datablock.ProductionMode() != -1) { aOutput.WriteStartElement(XmlConsts.Kxml_detail); aOutput.WriteAttributeString(XmlConsts.Kxml_name, XmlConsts.Kxml_production_mode); if (datablock.ProductionMode() == 1) { aOutput.WriteAttributeString(XmlConsts.Kxml_value, XmlConsts.Kxml_production_mode_value); } else { aOutput.WriteAttributeString(XmlConsts.Kxml_value, XmlConsts.Kxml_rnd_mode_value); } aOutput.WriteEndElement(); } // Crash source if (datablock.CrashSource() != -1) { aOutput.WriteStartElement(XmlConsts.Kxml_detail); aOutput.WriteAttributeString(XmlConsts.Kxml_name, XmlConsts.Kxml_crash_source); if (datablock.CrashSource() == 1) { aOutput.WriteAttributeString(XmlConsts.Kxml_value, XmlConsts.Kxml_crash_source_user); } else { aOutput.WriteAttributeString(XmlConsts.Kxml_value, XmlConsts.Kxml_crash_source_kernel); } aOutput.WriteEndElement(); } WriteSymbolFileNames(aOutput, datablock); aOutput.WriteEndElement(); // dictionary values }
private static void WriteReportDetails(XmlWriter aOutput, CXmlDataBlock datablock) { // Device report details aOutput.WriteStartElement(XmlConsts.Kxml_report_details); aOutput.WriteAttributeString(XmlConsts.Kxml_timestamp, datablock.TimeStampText()); string crashtypestr = "Not found"; if (datablock.FileType() == XmlConsts.MobileCrashFileType.ETypeBasicCrash) { crashtypestr = XmlConsts.Kxml_type_crash; } else if (datablock.FileType() == XmlConsts.MobileCrashFileType.ETypeAliveMessage) { crashtypestr = XmlConsts.Kxml_type_alivemsg; } else if (datablock.FileType() == XmlConsts.MobileCrashFileType.ETypeCrashAPIReport) { crashtypestr = XmlConsts.Kxml_type_report; } else if (datablock.FileType() == XmlConsts.MobileCrashFileType.ETypeRegistrationMessage) { crashtypestr = XmlConsts.Kxml_type_regmsg; } aOutput.WriteAttributeString(XmlConsts.Kxml_type, crashtypestr); aOutput.WriteAttributeString(XmlConsts.Kxml_file_name, datablock.BinFilename()); if (crashtypestr.Equals(XmlConsts.Kxml_type_report)) { aOutput.WriteAttributeString(XmlConsts.Kxml_report_category, datablock.ReportCategory()); } if (crashtypestr.Equals(XmlConsts.Kxml_type_report)) { aOutput.WriteAttributeString(XmlConsts.Kxml_report_type, datablock.ReportType()); } if (datablock.CrashedModuleName() != string.Empty) { aOutput.WriteAttributeString(XmlConsts.Kxml_crashed_module, datablock.CrashedModuleName()); } if (datablock.Hash() != string.Empty) { aOutput.WriteAttributeString(XmlConsts.Kxml_defect_hash, datablock.Hash()); } if (datablock.DetailedHash() != string.Empty) { aOutput.WriteAttributeString(XmlConsts.Kxml_detailed_defect_hash, datablock.DetailedHash()); } if (datablock.TestSet() != string.Empty) { aOutput.WriteAttributeString(XmlConsts.Kxml_testset, datablock.TestSet()); } // Child elements for report details if (datablock.CodeSegs().Count > 0) { aOutput.WriteStartElement(XmlConsts.Kxml_loaded_dlls); } foreach (CXmlCodeSegItem codeseg in datablock.CodeSegs()) { aOutput.WriteStartElement(XmlConsts.Kxml_loaded_dll); aOutput.WriteAttributeString(XmlConsts.Kxml_name, codeseg.Name); aOutput.WriteAttributeString(XmlConsts.Kxml_start_address, codeseg.Start.ToString()); aOutput.WriteAttributeString(XmlConsts.Kxml_end_address, codeseg.End.ToString()); aOutput.WriteEndElement(); // loaded dll } if (datablock.CodeSegs().Count > 0) { aOutput.WriteEndElement(); // loaded dlls } // Traces if (datablock.RegStorage().BasicRegs().Registers.Count > 0 || datablock.CallStacks().Count > 0 || datablock.OstTraces().Count > 0 || datablock.Eventlog().Count > 0 || datablock.RegStorage().OtherRegLists().Count > 0 || datablock.PanicDescription() != String.Empty) { aOutput.WriteStartElement(XmlConsts.Kxml_traces); } WriteDetail(aOutput, XmlConsts.Kxml_register, datablock.RegStorage().BasicRegs().ToPrettyString()); // Extra registers System.Text.StringBuilder extraRegisters = new System.Text.StringBuilder(); foreach (CXmlRegisterStorage.CCrashInfoRegisterList registerList in datablock.RegStorage().OtherRegLists()) { extraRegisters.AppendLine(registerList.ToPrettyString()); } WriteDetail(aOutput, XmlConsts.Kxml_register_extra, extraRegisters.ToString()); // Call stack foreach (XmlFilePlugin.FileFormat.CXmlCallStack stack in datablock.CallStacks()) { WriteDetail(aOutput, XmlConsts.Kxml_call_stack_text, stack.ToString()); } // OST traces System.Text.StringBuilder ostTraces = new System.Text.StringBuilder(); foreach (string line in datablock.OstTraces()) { ostTraces.AppendLine(line); } WriteDetail(aOutput, XmlConsts.Kxml_trace_data, ostTraces.ToString()); // Event log System.Text.StringBuilder eventLog = new System.Text.StringBuilder(); foreach (string line in datablock.Eventlog()) { eventLog.AppendLine(line); } WriteDetail(aOutput, XmlConsts.Kxml_eventlog, eventLog.ToString()); // Panic description WriteDetail(aOutput, XmlConsts.Kxml_panic_description, datablock.PanicDescription()); if (datablock.RegStorage().BasicRegs().Registers.Count > 0 || datablock.CallStacks().Count > 0 || datablock.OstTraces().Count > 0 || datablock.Eventlog().Count > 0 || datablock.RegStorage().OtherRegLists().Count > 0 || datablock.PanicDescription() != String.Empty) { aOutput.WriteEndElement(); // traces } WriteDictionaryValues(aOutput, datablock); WriteUniqueValues(aOutput, datablock); aOutput.WriteEndElement(); // report details }