public static IEnumerable ReadFile()

in Source/Tx.Network/Pcap/Pcap.cs [14:65]


        public static IEnumerable<PcapRecord> ReadFile(string filename)
        {
            using (var stream = File.OpenRead(filename))
            {
                using (var reader = new BinaryReader(stream))
                {
                    int pos = 0;
                    int length = (int)reader.BaseStream.Length;
                    if (length <= (24 + 16))
                    {
                        yield break;
                    }

                    var magicNumber = reader.ReadUInt32();
                    var version_major = reader.ReadUInt16();
                    var version_minor = reader.ReadUInt16();
                    var thiszone = reader.ReadInt32();
                    var sigfigs = reader.ReadUInt32();
                    var snaplen = reader.ReadUInt32();
                    var network = reader.ReadUInt32();

                    pos += 24;

                    while ((pos + 16) < length)
                    {
                        var ts_sec = reader.ReadUInt32();
                        var ts_usec = reader.ReadUInt32();
                        var incl_len = reader.ReadUInt32();
                        var orig_len = reader.ReadUInt32();

                        pos += 16;

                        if ((pos + incl_len) > length)
                        {
                            yield break;
                        }

                        var data = reader.ReadBytes((int)incl_len);
                        pos += (int)incl_len;

                        yield return new PcapRecord
                        {
                            Data = data,
                            NetworkId = network,
                            Timestamp = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero)
                                .AddSeconds(ts_sec + thiszone)
                                .AddMilliseconds((ts_usec == 0 || ts_usec >= 1000000) ? ts_usec : ts_usec / 1000)
                        };
                    }
                }
            }
        }