crashanalysercmd/Libraries/File Formats/Plugins/XmlFilePlugin/FileFormat/CXmlDataBlock.cs
changeset 2 0c91f0baec58
child 3 045ade241ef5
equal deleted inserted replaced
1:7a31f7298d8f 2:0c91f0baec58
       
     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 CCrashInfoDataBlock is part of CrashAnalyser CrashInfoFile plugin.
       
    16 * Provides reading methods, container and output methods for all data in a single
       
    17 * datablock of crashinfo file, corresponding to one crash. Complete crashinfo file 
       
    18 * may contain one or more datablock.
       
    19 * 
       
    20 */
       
    21 using System;
       
    22 using System.Collections.Generic;
       
    23 using System.Text;
       
    24 using CrashItemLib.Crash.Container;
       
    25 using CrashItemLib.Crash.Base;
       
    26 using CrashItemLib.Crash.Processes;
       
    27 using CrashItemLib.Crash.InfoSW;
       
    28 using CrashItemLib.Crash.Utils;
       
    29 using System.Globalization;
       
    30 using CrashItemLib.Crash.Threads;
       
    31 using CrashItemLib.Crash.Registers;
       
    32 using CrashItemLib.Crash.Symbols;
       
    33 using CrashItemLib.Crash.CodeSegs;
       
    34 using CrashItemLib.Crash.Memory;
       
    35 using CrashItemLib.Crash.Summarisable;
       
    36 using CrashItemLib.Crash.InfoHW;
       
    37 using CrashItemLib.Crash.Telephony;
       
    38 using CrashItemLib.Crash.Header;
       
    39 using CrashItemLib.Crash.Reports;
       
    40 using CrashItemLib.Crash.Stacks;
       
    41 using XmlFilePlugin.FileFormat;
       
    42 using CrashItemLib.Crash.Source;
       
    43 using CrashItemLib.Crash.Events;
       
    44 using CrashItemLib.Crash.Messages;
       
    45 using System.IO;
       
    46 using CrashItemLib.Crash.Traces;
       
    47 using SymbianStructuresLib.Debug.Trace;
       
    48 using CrashItemLib.Crash.InfoEnvironment;
       
    49 using ErrorLibrary;
       
    50 using MobileCrashLib;
       
    51 
       
    52 namespace XmlFilePlugin.PluginImplementations.FileFormat
       
    53 {
       
    54     internal class CXmlDataBlock
       
    55     {
       
    56         #region Constructors
       
    57         public CXmlDataBlock()
       
    58            
       
    59         {
       
    60         }
       
    61 
       
    62         #endregion
       
    63 
       
    64         #region Adding data content
       
    65         /** Add timestamp and uptime */
       
    66         internal void AddHeader(CIContainer aContainer)
       
    67         {
       
    68             CIHeader header = (CIHeader) aContainer.ChildByType( typeof( CIHeader ) );
       
    69             if (header != null)
       
    70             {
       
    71                 //Timestamp
       
    72                 DateTime timeStamp = header.CrashTime;
       
    73                 String date = timeStamp.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo);
       
    74                 int hour = timeStamp.Hour;
       
    75                 int minute = timeStamp.Minute;
       
    76                 int second = timeStamp.Second;
       
    77                 iTimeStampText = date + hour.ToString().PadLeft(2, '0') + minute.ToString().PadLeft(2, '0') + second.ToString().PadLeft(2, '0');
       
    78 
       
    79                 //UpTime
       
    80                 iUptime = header.UpTime.TotalSeconds;
       
    81                 
       
    82                 // Crash source
       
    83                 iCrashSource = header.CrashSource;
       
    84             }
       
    85         }
       
    86         /** Add romid, timestamp, platform, language and sw version */
       
    87         internal void AddSWInfos(CIContainer aContainer)
       
    88         {
       
    89             CIInfoSW info = (CIInfoSW) aContainer.ChildByType( typeof( CIInfoSW ) );
       
    90             if (info != null)
       
    91             {
       
    92                 //RomID
       
    93                 if (info.ImageCheckSum != 0)
       
    94                 {
       
    95                     iRomId = info.ImageCheckSum;                    
       
    96                 }
       
    97                 //Platform
       
    98                 iPlatform = info.Platform;
       
    99                 
       
   100                 //Language
       
   101                 iLanguage = info.Language;             
       
   102 
       
   103                 //Version                
       
   104                 const string KInfoSW_Version_Runtime    = "Runtime Version";
       
   105                 const string KInfoSW_Version_Variant    = "Variant Version";
       
   106                 const string KInfoSW_Version_S60        = "S60 Version";      
       
   107                 foreach ( CIVersionInfo version in info )
       
   108                 {
       
   109                     if (version.IsValid && version.Name == KInfoSW_Version_Runtime)
       
   110                     {                        
       
   111                         iSWVersion = version.Value;                            
       
   112                     }
       
   113                     if (version.IsValid && version.Name == KInfoSW_Version_Variant)
       
   114                     {                        
       
   115                         iVariantVersion =  version.Value;                            
       
   116                     }
       
   117                     if (version.IsValid && version.Name == KInfoSW_Version_S60)
       
   118                     {                        
       
   119                         iS60Version =  version.Value;                            
       
   120                     }
       
   121                 }          
       
   122  
       
   123                 //Timestamp
       
   124                 DateTime timeStamp = info.ImageTimeStamp;
       
   125                 String date = timeStamp.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo);
       
   126                 int hour = timeStamp.Hour;
       
   127                 int minute = timeStamp.Minute;
       
   128                 int second = timeStamp.Second;
       
   129                 iTimeStampText = date + hour.ToString().PadLeft(2, '0') + minute.ToString().PadLeft(2, '0') + second.ToString().PadLeft(2, '0');
       
   130                            
       
   131             }
       
   132         }
       
   133 
       
   134           
       
   135 
       
   136         internal void AddThreadAndExitInfo(CIContainer aContainer)
       
   137         {
       
   138 
       
   139             CIElementList<CIThread> threads = aContainer.ChildrenByType<CIThread>( CIElement.TChildSearchType.EEntireHierarchy );
       
   140             if (threads.Count > 1)
       
   141             {
       
   142                 System.Console.WriteLine("Warning: XmlFilePlugin found multiple threads. XML file output can handle only one thread!");
       
   143             }
       
   144             foreach (CIThread thread in threads)
       
   145             {
       
   146                 iPanicCategory = thread.ExitInfo.Category;
       
   147                 iPanicID = thread.ExitInfo.Reason;
       
   148                 iPanicDescription = XmlErrorLibrary.GetPanicDescription(iPanicCategory, iPanicID.ToString());
       
   149                 iCrashedModuleName = thread.FullName;
       
   150             }
       
   151 
       
   152         }
       
   153 
       
   154         internal void AddPanicedProcess(CIContainer aContainer)
       
   155         {
       
   156             CIElementList<CIProcess> processes = aContainer.ChildrenByType<CIProcess>(CIElement.TChildSearchType.EEntireHierarchy);
       
   157             if (processes.Count > 1)
       
   158             {
       
   159                 System.Console.WriteLine("Warning: CrashInfoFilePlugin found multiple processes. CI file output can handle only one process!");
       
   160             }
       
   161             foreach (CIProcess process in processes)
       
   162             {
       
   163                  iProcess = process.Name;
       
   164                  iUID = process.Uids.MostSignificant;
       
   165             }
       
   166 
       
   167         }
       
   168 
       
   169         internal void AddRegisterLists(CIContainer aContainer)
       
   170         {
       
   171             CIElementList<CIRegisterListCollection> regListCols = aContainer.ChildrenByType<CIRegisterListCollection>(CIElement.TChildSearchType.EEntireHierarchy);
       
   172             foreach (CIRegisterListCollection regListCol in regListCols)
       
   173             {
       
   174                 foreach (CIRegisterList regList in regListCol)
       
   175                 {                                      
       
   176                     iRegStorage.ReadRegisterData(regList);     
       
   177                 }
       
   178             }
       
   179 
       
   180         }
       
   181 
       
   182         internal void AddStacks(CIContainer aContainer)
       
   183         {
       
   184             CIElementList<CIStack> stacks = aContainer.ChildrenByType<CIStack>(CIElement.TChildSearchType.EEntireHierarchy);
       
   185             foreach (CIStack stack in stacks)
       
   186             {
       
   187                 CXmlCallStack callStack = new CXmlCallStack();
       
   188                 callStack.Read(stack);
       
   189                 callStack.CleanStack();
       
   190                 iCallStacks.Add(callStack);
       
   191 
       
   192             }
       
   193         }
       
   194 
       
   195         internal void AddCodeSegments(CIContainer aContainer)
       
   196         {
       
   197             // Get the code segments
       
   198             CIElementList<CICodeSeg> codeSegs = aContainer.ChildrenByType<CICodeSeg>(CIElement.TChildSearchType.EEntireHierarchy);
       
   199 
       
   200             // Sort them
       
   201             Comparison<CICodeSeg> comparer = delegate(CICodeSeg aLeft, CICodeSeg aRight)
       
   202             {
       
   203                 return string.Compare(aLeft.Name, aRight.Name, true);
       
   204             };
       
   205             codeSegs.Sort(comparer);
       
   206 
       
   207             // List them
       
   208             foreach (CICodeSeg codeSeg in codeSegs)
       
   209             {
       
   210                 uint start = codeSeg.Range.Min;
       
   211                 uint end = codeSeg.Range.Max;
       
   212                 string name = codeSeg.Name;
       
   213 
       
   214                 CXmlCodeSegItem ciCodeSeg = new CXmlCodeSegItem(start, end, name);
       
   215                 iCodeSegs.Add(ciCodeSeg);
       
   216             }
       
   217         }
       
   218 
       
   219         internal void AddMemoryInfo(CIContainer aContainer)
       
   220         {
       
   221             CIElementList<CIMemoryInfo> list = aContainer.ChildrenByType<CIMemoryInfo>(CIElement.TChildSearchType.EEntireHierarchy);
       
   222             foreach ( CIMemoryInfo info in list )
       
   223             {                
       
   224                 if ( info.Type == CIMemoryInfo.TType.ETypeRAM )
       
   225                 {
       
   226                     iFreeMomery = info.Free;        
       
   227                 }
       
   228                 if (info.Type == CIMemoryInfo.TType.ETypeDrive)
       
   229                 {
       
   230                     iDiskInfo = info.Free;
       
   231                 }
       
   232             }
       
   233         }
       
   234 
       
   235         internal void AddHWInfo(CIContainer aContainer)
       
   236         {
       
   237             CIInfoHW info = (CIInfoHW)aContainer.ChildByType(typeof(CIInfoHW));
       
   238             if (info != null)
       
   239             {
       
   240                 iProductType = info.ProductType; 
       
   241                 iProductCode = info.ProductCode.Trim();
       
   242                 iSerialNumber = info.SerialNumber.Trim();
       
   243                 iProductionMode = info.ProductionMode;
       
   244             }           
       
   245         }
       
   246 
       
   247         internal void AddTelephony(CIContainer aContainer)
       
   248         {
       
   249             CITelephony info = (CITelephony)aContainer.ChildByType(typeof(CITelephony));
       
   250             if (info != null)
       
   251             {
       
   252                 iPhoneNumber = info.PhoneNumber;
       
   253                 iImei = info.IMEI;
       
   254                 iImsi = info.IMSI;
       
   255 
       
   256                 CITelephonyNetworkInfo networkInfo = info.NetworkInfo;
       
   257 
       
   258                 iNetworkCountry = networkInfo.Country;
       
   259                 iNetworkIdentity = networkInfo.Identity;
       
   260                 iNetworkCell = networkInfo.CellId;
       
   261                 iLocInfo = networkInfo.CGI;
       
   262 
       
   263             }
       
   264 
       
   265         }
       
   266 
       
   267         internal void AddEnvInfo(CIContainer aContainer)
       
   268         {
       
   269             CIInfoEnvironment info = (CIInfoEnvironment)aContainer.ChildByType(typeof(CIInfoEnvironment));
       
   270             if (info != null)
       
   271             {
       
   272                 iTestSet = info.TestSet;
       
   273             }
       
   274 
       
   275         }
       
   276 
       
   277         internal void AddReportParameters(CIContainer aContainer)
       
   278         {
       
   279             CIReportInfo report = (CIReportInfo)aContainer.ChildByType(typeof(CIReportInfo));
       
   280             if (report != null)
       
   281             {
       
   282                 iReportType = report.Type;
       
   283                 if (iReportType != string.Empty)
       
   284                 {
       
   285                     iFileType = XmlConsts.MobileCrashFileType.ETypeCrashAPIReport;
       
   286                 }
       
   287                 
       
   288 
       
   289                 iReportCategory = report.Category;
       
   290                 iReportOK = report.CountSuccess;
       
   291                 iReportFail = report.CountFail;
       
   292                 IEnumerator<CIReportParameter> parameters = report.GetEnumerator();
       
   293                 if (parameters.MoveNext()) //has first parameter
       
   294                 {
       
   295                     iReportParamName1 = parameters.Current.Name;
       
   296                     iReportParamValue1 = parameters.Current.Value;
       
   297 
       
   298                     if (parameters.MoveNext()) //has second parameter
       
   299                     {
       
   300                         iReportParamName2 = parameters.Current.Name;
       
   301                         iReportParamValue2 = parameters.Current.Value;
       
   302                         if (parameters.MoveNext())
       
   303                         {
       
   304                             iReportParamName3 = parameters.Current.Name;
       
   305                             iReportParamValue3 = parameters.Current.Value;
       
   306                         }
       
   307                     }
       
   308                 }
       
   309                    
       
   310                 iReportComments = report.Comments;
       
   311                 
       
   312             }
       
   313             
       
   314         }
       
   315 
       
   316         internal void AddMessages(CIContainer container)
       
   317         {
       
   318             foreach (CIMessage message in container.Messages)
       
   319             {
       
   320                 if (message.Title == "Miscellaneous Information")
       
   321                 {
       
   322 
       
   323                     if (message.Description.Trim() == XmlConsts.KRegistrationMiscInfo)
       
   324                     {
       
   325                         iFileType = XmlConsts.MobileCrashFileType.ETypeRegistrationMessage;
       
   326                     }
       
   327                     if (message.Description.Trim() == XmlConsts.KAliveTimeMiscInfo)
       
   328                     {
       
   329                         iFileType = XmlConsts.MobileCrashFileType.ETypeAliveMessage;
       
   330                     }
       
   331                 }
       
   332             }
       
   333         }
       
   334 
       
   335         internal void AddCrashHash(CIContainer aContainer)
       
   336         {
       
   337             //hash is only calculated for normal crashes - registrations and reports are omitted
       
   338             if (iFileType == XmlConsts.MobileCrashFileType.ETypeBasicCrash)
       
   339             {
       
   340                 CISummarisableEntity primarySummary = aContainer.PrimarySummary;
       
   341                 if (primarySummary != null)
       
   342                 {
       
   343                     MobileCrashHashBuilder.TConfiguration config = MobileCrashHashBuilder.TConfiguration.EDefault;
       
   344                     try //CCrashInfoHashBuilder.New throws an exception if there's not enough data for hash creation
       
   345                     {
       
   346                         MobileCrashHashBuilder builder = MobileCrashHashBuilder.New(config, primarySummary);
       
   347                         iHash = builder.GetHash();
       
   348                     }
       
   349                     catch (Exception /* e */)
       
   350                     {
       
   351                         //Not enough data -> no hash and no grouping
       
   352                     }
       
   353                 }
       
   354             }
       
   355         }
       
   356 
       
   357         internal void AddFileNames(CIContainer aContainer, string aArchivedFileName)
       
   358      
       
   359         {
       
   360             iBinFilename = aArchivedFileName;
       
   361 
       
   362             CISource source = aContainer.Source;
       
   363             string binFileOriginalName = source.MasterFileName;
       
   364                         
       
   365             foreach (string filename in aContainer.FileNames)
       
   366             {
       
   367                 if (filename != binFileOriginalName) //Since bin file name is stored separately, remove it from this list
       
   368                 {
       
   369                     iSymbolFiles.Add(filename);
       
   370                 }
       
   371             }          
       
   372 
       
   373         }
       
   374         internal void AddEventlog(CIContainer aContainer)
       
   375         {
       
   376             CIEventList events = aContainer.Events;
       
   377             foreach (CIEvent ev in events)
       
   378             {
       
   379 
       
   380                 iEventlog.Add(ev.Value.ToString());
       
   381             }
       
   382         }
       
   383 
       
   384 
       
   385         internal void AddOstTraces(CIContainer aContainer)
       
   386         {
       
   387             CITraceData traceData = aContainer.Traces;
       
   388             //
       
   389             if (traceData != null && traceData.Lines.Length > 0)
       
   390             {
       
   391                 foreach (CITrace ciTrace in traceData)
       
   392                 {
       
   393                     System.Text.StringBuilder line = new System.Text.StringBuilder();                
       
   394                    
       
   395                     TraceLine trace = ciTrace;
       
   396 
       
   397                     // Type
       
   398                     string type = string.Empty;
       
   399                     switch (trace.Type)
       
   400                     {
       
   401                         case TraceLine.TType.ETypeBinary:
       
   402                             type = "Bin";
       
   403                             break;
       
   404                         case TraceLine.TType.ETypeRaw:
       
   405                             type = "Raw";
       
   406                             break;
       
   407                         case TraceLine.TType.ETypeText:
       
   408                             type = "Text";
       
   409                             break;
       
   410                         default:
       
   411                             type = "Unknown";
       
   412                             break;
       
   413                     }
       
   414                     if (string.IsNullOrEmpty(type) == false)
       
   415                     {
       
   416                         line.Append(type);
       
   417                     }
       
   418 
       
   419                     // Context id
       
   420                     if (trace.ContextId != 0)
       
   421                     {
       
   422                         line.Append(" " + "0x" + trace.ContextId.ToString("x8"));
       
   423                     }
       
   424 
       
   425                     // Time stamp
       
   426                     line.Append(" " + trace.TimeStamp.ToString());
       
   427 
       
   428                     // Prefix
       
   429                     string prefix = trace.Prefix;
       
   430                     if (string.IsNullOrEmpty(prefix) == false)
       
   431                     {
       
   432                         line.Append(" " + prefix);
       
   433                     }
       
   434 
       
   435                     // Suffix
       
   436                     string suffix = trace.Suffix;
       
   437                     if (string.IsNullOrEmpty(suffix) == false)
       
   438                     {
       
   439                         line.Append(" " + suffix);
       
   440                     }
       
   441 
       
   442                     if (trace.HasIdentifier)
       
   443                     {
       
   444                         // Component/group/id triplet
       
   445                         TraceIdentifier identifier = trace.Identifier;
       
   446                         line.Append(" C:" + "0x" + identifier.Component.ToString("x8"));
       
   447                         line.Append(" G:" + identifier.Group.ToString());
       
   448                         line.Append(" I:" + identifier.Id.ToString());
       
   449                         // File & line
       
   450                         TraceLocation location = identifier.Location;
       
   451                         //
       
   452                         string file = location.File;
       
   453                         string lineNumber = location.Line.ToString();
       
   454                         //
       
   455                         if (string.IsNullOrEmpty(file) == false && string.IsNullOrEmpty(lineNumber) == false)
       
   456                         {
       
   457                             line.Append(" " +file);
       
   458                             line.Append(":" + lineNumber);
       
   459                         }
       
   460                     }
       
   461 
       
   462                     // Payload
       
   463                     string payload = trace.Payload;
       
   464                     line.Append(" " + payload);
       
   465                     iOstTraces.Add(line.ToString());
       
   466                 }
       
   467             }
       
   468         }
       
   469 
       
   470         #endregion
       
   471 
       
   472         #region Getters
       
   473 
       
   474         internal XmlConsts.MobileCrashFileType FileType()
       
   475         {
       
   476             return iFileType;
       
   477         }
       
   478 
       
   479         internal string GetMiscInfo()
       
   480         {
       
   481             string mInfo = "NotFound";
       
   482             if (iFileType == XmlConsts.MobileCrashFileType.ETypeRegistrationMessage)
       
   483             {
       
   484                 mInfo = XmlConsts.KRegistrationMiscInfo;
       
   485             }
       
   486             if (iFileType == XmlConsts.MobileCrashFileType.ETypeAliveMessage)
       
   487             {
       
   488                 mInfo = XmlConsts.KAliveTimeMiscInfo;
       
   489             }
       
   490             return mInfo;
       
   491         }
       
   492 
       
   493          internal string TimeStampText()
       
   494          {
       
   495              return iTimeStampText;
       
   496          }
       
   497 
       
   498          internal uint? RomId()
       
   499          {
       
   500              return iRomId;
       
   501          }
       
   502 
       
   503          internal string Platform()
       
   504          {
       
   505              return iPlatform;
       
   506          }
       
   507 
       
   508          internal string SWVersion()
       
   509          {
       
   510              return iSWVersion;
       
   511          }
       
   512 
       
   513          internal string S60Version()
       
   514          {
       
   515              return iS60Version;
       
   516          }
       
   517 
       
   518          internal string VariantVersion()
       
   519          {
       
   520              return iVariantVersion;
       
   521          }
       
   522 
       
   523          internal int? PanicId()
       
   524          {
       
   525              return iPanicID;
       
   526          }
       
   527 
       
   528          internal string PanicCategory()
       
   529          {
       
   530              return iPanicCategory;
       
   531          }
       
   532 
       
   533          internal string PanicDescription()
       
   534          {
       
   535              return iPanicDescription;
       
   536          }
       
   537 
       
   538          internal string Language()
       
   539          {
       
   540              return iLanguage;
       
   541          }
       
   542 
       
   543          internal string Process()
       
   544          {
       
   545              return iProcess;
       
   546          }
       
   547 
       
   548          internal CXmlRegisterStorage RegStorage()
       
   549          {
       
   550              return iRegStorage;
       
   551          }
       
   552 
       
   553          internal string CrashedModuleName()
       
   554          {
       
   555              return iCrashedModuleName;
       
   556          }
       
   557 
       
   558          internal List<CXmlCodeSegItem> CodeSegs()
       
   559          {
       
   560              return iCodeSegs;
       
   561          }
       
   562 
       
   563          internal ulong? FreeMemory() 
       
   564          {
       
   565              return iFreeMomery;
       
   566          }
       
   567 
       
   568          internal string ProductType()
       
   569          {
       
   570              return iProductType;
       
   571          }
       
   572 
       
   573          internal int? ProductionMode()
       
   574          {
       
   575              return iProductionMode;
       
   576          }
       
   577 
       
   578          internal int? CrashSource()
       
   579          {
       
   580              return iCrashSource;
       
   581          }
       
   582 
       
   583          internal string ProductCode() 
       
   584          {
       
   585              return iProductCode;
       
   586          }
       
   587          
       
   588          internal string SerialNumber() 
       
   589          {
       
   590              return iSerialNumber;
       
   591          }
       
   592 
       
   593          internal string PhoneNumber()
       
   594          {
       
   595              return iPhoneNumber;
       
   596          }
       
   597         
       
   598          internal string Imei() 
       
   599          {
       
   600              return iImei;
       
   601          }
       
   602 
       
   603          internal string Imsi() 
       
   604          {
       
   605              return iImsi;
       
   606          }
       
   607 
       
   608          internal string NetworkCountry() 
       
   609          {
       
   610              return iNetworkCountry;
       
   611          }
       
   612 
       
   613          internal string NetworkIdentity() 
       
   614          {
       
   615              return iNetworkIdentity;
       
   616          }
       
   617 
       
   618          internal string NetworkCell() 
       
   619          {
       
   620              return iNetworkCell;
       
   621          }
       
   622 
       
   623          internal string LocInfo() 
       
   624          {
       
   625              return iLocInfo;
       
   626          }
       
   627 
       
   628          internal string TestSet() 
       
   629          {
       
   630              return iTestSet;
       
   631          }
       
   632 
       
   633          internal double? Uptime() 
       
   634          {
       
   635              return iUptime;
       
   636          }
       
   637 
       
   638          internal uint? UID() 
       
   639          {
       
   640              return iUID;
       
   641          }
       
   642 
       
   643          internal ulong? DiskInfo() 
       
   644          {
       
   645              return iDiskInfo;
       
   646          }
       
   647 
       
   648          internal string ReportType() 
       
   649          {
       
   650              return iReportType;
       
   651          }
       
   652 
       
   653          internal string ReportCategory() 
       
   654          {
       
   655              return iReportCategory;
       
   656          }
       
   657 
       
   658          internal uint? ReportOK() 
       
   659          {
       
   660              return iReportOK;
       
   661          }
       
   662 
       
   663          internal uint? ReportFail() 
       
   664          {
       
   665              return iReportFail;
       
   666          }
       
   667 
       
   668          internal string ReportParamName1() 
       
   669          {
       
   670              return iReportParamName1;
       
   671          }
       
   672 
       
   673          internal uint? ReportParamValue1() 
       
   674          {
       
   675              return iReportParamValue1;
       
   676          }
       
   677 
       
   678          internal string ReportParamName2() 
       
   679          {
       
   680              return iReportParamName2;
       
   681          }
       
   682 
       
   683          internal uint? ReportParamValue2() 
       
   684          {
       
   685              return iReportParamValue2;
       
   686          }
       
   687 
       
   688          internal string ReportParamName3() 
       
   689          {
       
   690              return iReportParamName3;
       
   691          }
       
   692 
       
   693          internal uint? ReportParamValue3()
       
   694          {
       
   695              return iReportParamValue3;
       
   696          }
       
   697                  
       
   698         internal string ReportComments() 
       
   699          {
       
   700              return iReportComments;
       
   701          }
       
   702         
       
   703         internal string Hash()
       
   704          {
       
   705              return iHash;
       
   706          }
       
   707 
       
   708         internal List<CXmlCallStack> CallStacks()
       
   709         {
       
   710              return iCallStacks;
       
   711         }
       
   712 
       
   713         internal string BinFilename()
       
   714         {
       
   715             return iBinFilename;
       
   716         }
       
   717 
       
   718         internal List<string> SymbolFiles()
       
   719         {
       
   720             return iSymbolFiles;
       
   721         }
       
   722 
       
   723         internal List<string> Eventlog()
       
   724         {
       
   725             return iEventlog;
       
   726         }
       
   727 
       
   728         internal List<string> OstTraces()
       
   729         {
       
   730             return iOstTraces;
       
   731         }
       
   732         
       
   733         #endregion
       
   734 
       
   735          #region Data members
       
   736          private XmlConsts.MobileCrashFileType iFileType = XmlConsts.MobileCrashFileType.ETypeBasicCrash;
       
   737         
       
   738         private string iTimeStampText = string.Empty; //YearMonthDayHourMinSec
       
   739         private uint? iRomId = null; //aka rom's checksum word
       
   740         private string iPlatform = string.Empty; //usually SOS
       
   741         private string iSWVersion = string.Empty; //The "main" version number
       
   742         private string iS60Version = string.Empty;
       
   743         private string iVariantVersion = string.Empty;
       
   744 
       
   745         private int? iPanicID = null;
       
   746         private string iPanicCategory = string.Empty;
       
   747         private string iPanicDescription = string.Empty;
       
   748 
       
   749         private string iLanguage = string.Empty; //english, finnish etc
       
   750         
       
   751         private string iProcess = string.Empty;
       
   752 
       
   753         private CXmlRegisterStorage iRegStorage = new CXmlRegisterStorage(); //registers
       
   754 
       
   755         private string iCrashedModuleName = string.Empty; //thread name
       
   756 
       
   757         private List<CXmlCodeSegItem> iCodeSegs = new List<CXmlCodeSegItem>(); //crash time loaded dlls
       
   758 
       
   759         private ulong? iFreeMomery = null; //free ram
       
   760 
       
   761         private string iProductType = string.Empty; //aka RM-code
       
   762         private string iProductCode = string.Empty; //7-digit HW variant code 
       
   763         private string iSerialNumber = string.Empty; //aka PSN
       
   764         private int? iProductionMode = null; // 1: production mode phone, 0: RnD phone
       
   765         private int? iCrashSource = null; // 1: crash from user side, 0: from kernel side.
       
   766 
       
   767         private string iPhoneNumber = "NotFound";
       
   768         private string iImei = string.Empty;
       
   769         private string iImsi = string.Empty;
       
   770         private string iNetworkCountry = string.Empty;
       
   771         private string iNetworkIdentity = string.Empty;
       
   772         private string iNetworkCell = string.Empty;
       
   773         private string iLocInfo = string.Empty;
       
   774         private string iTestSet = string.Empty;
       
   775         private double? iUptime = null;
       
   776         private uint? iUID = null;
       
   777         private ulong? iDiskInfo = null;
       
   778         private string iReportType = string.Empty;
       
   779         private string iReportCategory = string.Empty;
       
   780         private uint? iReportOK = null;
       
   781         private uint? iReportFail = null;
       
   782         private string iReportParamName1 = string.Empty;
       
   783         private uint? iReportParamValue1 = null;
       
   784         private string iReportParamName2 = string.Empty;
       
   785         private uint? iReportParamValue2 = null;
       
   786         private string iReportParamName3 = string.Empty;
       
   787         private uint? iReportParamValue3 = null;
       
   788         private string iReportComments = string.Empty;
       
   789         private string iHash = string.Empty;
       
   790 
       
   791         private List<CXmlCallStack> iCallStacks = new List<CXmlCallStack>(); //Call stacks
       
   792 
       
   793         private string iBinFilename = string.Empty;
       
   794         List<string> iSymbolFiles = new List<string>();
       
   795         List<string> iEventlog = new List<string>();
       
   796         List<string> iOstTraces = new List<string>();
       
   797 
       
   798         #endregion
       
   799 
       
   800 
       
   801 
       
   802     }
       
   803 }