public static List<IEric> ParseEricFile(string outPath, string binPath, bool isGz, bool isParseAsn, uint[] parTraces = null) { Stream stream; if (!string.IsNullOrEmpty(outPath)) { new StringBuilder(); } Hashtable ericPmEvents = EricPmEvent.GetEricPmEvents(); if (isGz) { stream = UnzipToMemoryStream(binPath); } else { stream = new FileStream(binPath, FileMode.Open, FileAccess.Read); } stream.Position = 0L; BigEndianBinaryReader contentStream = new BigEndianBinaryReader(stream); List<IEric> list = new List<IEric>(); while (!contentStream.Eof()) { uint recordLength = contentStream.ReadUInt16(); uint recordType = contentStream.ReadUInt16(); IEric item = null; switch (((EricHeadEnum)recordType)) { case EricHeadEnum.EricHeader: item = new EricHeader(recordLength, recordType, contentStream); break; case EricHeadEnum.EricTcpStream: item = new EricTcpStream(recordLength, recordType, contentStream); break; case EricHeadEnum.EricUdpStream: item = new EricUdpStream(recordLength, recordType, contentStream); break; case EricHeadEnum.EricScanner: item = new EricScanner(recordLength, recordType, contentStream); break; case EricHeadEnum.EricEvent: item = new EricEvent(recordLength, recordType, contentStream, ericPmEvents, false); break; case EricHeadEnum.EricFooter: item = new EricFooter(recordLength, recordType, contentStream); break; } if ((parTraces != null) && (item is EricEvent)) { if (parTraces.Contains(((EricEvent)item).EventId)) { list.Add(item); } if (isParseAsn) { ((EricEvent)item).ParseAsn(); } } else { if (isParseAsn && (item is EricEvent)) { ((EricEvent)item).ParseAsn(); } list.Add(item); } } return list; }
public void Parse(Stream stream, bool isParseAsn, uint[] parTraces = null) { if (stream == null) { throw new ArgumentNullException("stream"); } BigEndianBinaryReader reader = new BigEndianBinaryReader(stream); FileHeader header = new FileHeader { file_flag_ui4 = reader.ReadUInt32() }; reader.ReadString(4); reader.ReadUInt32(); header.fver_ui2 = reader.ReadUInt16(); reader.ReadString(4); reader.ReadUInt32(); header.ttyp_ui2 = reader.ReadUInt16(); reader.ReadString(4); reader.ReadUInt32(); header.fno_ui4 = reader.ReadUInt32(); reader.ReadString(4); reader.ReadUInt32(); header.ntyp_i1 = reader.ReadByte(); reader.ReadString(4); reader.ReadUInt32(); header.nver_s40 = reader.ReadString(40); reader.ReadString(4); reader.ReadUInt32(); header.ndep_ui1 = reader.ReadSByte(); OnFileHeader(header); ParTraces = parTraces; IsParseAsn = isParseAsn; uint num = BlockType("msg0"); while (!reader.Eof()) { uint num2 = reader.ReadUInt32(); if (num2 == num) { ParseMsg0(reader); } else { Console.WriteLine("unknown block type as {0:X}, expect {1:X}, but {2:X}", reader.BaseStream.Position, num, num2); return; } } }