Beispiel #1
0
        public IpV4Header(byte[] byBuffer, int nReceived)
        {
            _dataGram = new BitArrayReader(byBuffer);
            try
            {
                // The first eight bits of the IP header contain the version and
                // header length so we read them.
                _version      = (int)_dataGram.ReadInt(4);
                _headerLength = (byte)(_dataGram.ReadByte(4) * 4);

                _dscp = _dataGram.ReadByte(6);
                _ecn  = _dataGram.ReadByte(2);

                _totalLength = _dataGram.ReadShort();

                _identification = _dataGram.ReadShort();
                _flags          = _dataGram.ReadByte(3);
                _fragmentOffset = _dataGram.ReadShort(13);
                _timeToLive     = _dataGram.ReadByte();
                _protocolType   = (Protocol)_dataGram.ReadByte();
                _checksum       = (short)_dataGram.ReadShort();
                _srcIP          = _dataGram.ReadInt().Reverse();
                _destIP         = _dataGram.ReadInt().Reverse();

                _dataGram.CurrentPositionInBytes = _headerLength;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Network Sniffer", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Beispiel #2
0
        public static DataType ReadBuildFrom(this BitArrayReader reader)
        {
            if (!reader.Read())
            {
                return(null);
            }

            switch (reader.ReadInt())
            {
            case 0:
                return(DataType.Level1);

            case 1:
                return(DataType.MarketDepth);

            case 2:
                return(DataType.OrderLog);

            case 3:
                return(DataType.Ticks);

            case 4:
                return(DataType.Transactions);

            case 5:
                return(reader.ReadInt().ToDataType(reader.ReadLong(), reader.Read() ? reader.ReadDecimal(0) : 0M, reader.ReadInt()));

            default:
                throw new InvalidOperationException();
            }
        }
        public static decimal ReadDecimal(this BitArrayReader reader, decimal prevPrice)
        {
            var isPos = reader.Read();

            var diff = new decimal(new[] { reader.ReadInt(), reader.ReadInt(), reader.ReadInt(), reader.ReadInt() << 16 });

            if (!isPos)
            {
                diff = -diff;
            }

            return(prevPrice + diff);
        }
        public static DateTimeOffset ReadTime(this BitArrayReader reader, ref DateTime prevTime, bool allowNonOrdered, bool isUtc, TimeSpan timeZone)
        {
            long time;

            if (allowNonOrdered)
            {
                time = 0;

                var sign = reader.Read() ? 1 : -1;

                if (reader.Read())
                {
                    time += (reader.Read() ? reader.Read(5) : reader.ReadInt()) * TimeSpan.TicksPerHour;
                    time += reader.Read(6) * TimeSpan.TicksPerMinute;
                    time += reader.Read(6) * TimeSpan.TicksPerSecond;
                }
                else
                {
                    time += reader.ReadInt() * TimeSpan.TicksPerSecond;
                }

                time += reader.ReadInt() * TimeSpan.TicksPerMillisecond;

                time = prevTime.Ticks + sign * time;
            }
            else
            {
                time = prevTime.Ticks;

                if (reader.Read())
                {
                    time -= time % TimeSpan.TicksPerDay;

                    time += reader.Read(5) * TimeSpan.TicksPerHour;
                    time += reader.Read(6) * TimeSpan.TicksPerMinute;
                    time += reader.Read(6) * TimeSpan.TicksPerSecond;
                }
                else
                {
                    time += reader.ReadInt() * TimeSpan.TicksPerSecond;
                }

                time += reader.ReadInt() * TimeSpan.TicksPerMillisecond;
            }

            prevTime = new DateTime(time, isUtc ? DateTimeKind.Utc : DateTimeKind.Unspecified);

            return(isUtc
                                ? new DateTime(time + timeZone.Ticks).ApplyTimeZone(timeZone)
                                : prevTime.ApplyTimeZone(timeZone));
        }
        private static IEnumerable <QuoteChange> DeserializeQuotes(BitArrayReader reader, QuoteMetaInfo metaInfo, Sides side, bool useLong, bool nonAdjustPrice)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            if (metaInfo == null)
            {
                throw new ArgumentNullException(nameof(metaInfo));
            }

            var list = new List <QuoteChange>();

            var deltaCount = reader.ReadInt();

            if (deltaCount == 0)
            {
                return(list);
            }

            for (var i = 0; i < deltaCount; i++)
            {
                var prevPrice = metaInfo.FirstPrice;
                var price     = reader.ReadPrice(ref prevPrice, metaInfo, useLong, nonAdjustPrice);
                metaInfo.FirstPrice = prevPrice;

                var volume = reader.ReadVolume(metaInfo);

                list.Add(new QuoteChange(side, price, volume));
            }

            return(list);
        }
        public static decimal ReadPrice <T>(this BitArrayReader reader, decimal prevPrice, MetaInfo <T> info, bool useLong = false)
            where T : MetaInfo <T>
        {
            var count = useLong ? reader.ReadLong() : reader.ReadInt();

            return(prevPrice + count * info.PriceStep);
        }
        private static QuoteChange[] DeserializeQuotes(BitArrayReader reader, QuoteMetaInfo metaInfo, Sides side, bool useLong, bool nonAdjustPrice)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            if (metaInfo == null)
            {
                throw new ArgumentNullException(nameof(metaInfo));
            }

            var deltaCount = reader.ReadInt();

            if (deltaCount == 0)
            {
                return(ArrayHelper.Empty <QuoteChange>());
            }

            var quotes = new QuoteChange[deltaCount];

            for (var i = 0; i < deltaCount; i++)
            {
                var prevPrice = metaInfo.FirstPrice;
                var price     = reader.ReadPrice(ref prevPrice, metaInfo, useLong, nonAdjustPrice);
                metaInfo.FirstPrice = prevPrice;

                var volume = reader.ReadVolume(metaInfo);

                quotes[i] = new QuoteChange(side, price, volume);
            }

            return(quotes);
        }
        private static string ReadString(BitArrayReader reader, IList <string> items)
        {
            if (!reader.Read())
            {
                return(null);
            }

            return(items[reader.ReadInt()]);
        }
        public static int?ReadNullableInt(this BitArrayReader reader)
        {
            if (!reader.Read())
            {
                return(null);
            }

            return(reader.ReadInt());
        }
Beispiel #10
0
        public static DateTimeOffset ReadTime(this BitArrayReader reader, ref DateTime prevTime, bool allowNonOrdered, bool isUtc, TimeSpan offset, bool allowDiffOffsets, ref TimeSpan prevOffset)
        {
            if (allowDiffOffsets)
            {
                if (!reader.Read())
                {
                    prevOffset = new TimeSpan(reader.ReadInt(), reader.Read() ? 0 : reader.ReadInt(), 0);
                }

                offset = prevOffset;
            }

            long time;

            if (allowNonOrdered)
            {
                time = 0;

                var sign = reader.Read() ? 1 : -1;

                if (reader.Read())
                {
                    time += (reader.Read() ? reader.Read(5) : reader.ReadInt()) * TimeSpan.TicksPerHour;
                    time += reader.Read(6) * TimeSpan.TicksPerMinute;
                    time += reader.Read(6) * TimeSpan.TicksPerSecond;
                }
                else
                {
                    time += reader.ReadInt() * TimeSpan.TicksPerSecond;
                }

                time += reader.ReadInt() * TimeSpan.TicksPerMillisecond;

                time = prevTime.Ticks + sign * time;
            }
            else
            {
                time = prevTime.Ticks;

                if (reader.Read())
                {
                    time -= time % TimeSpan.TicksPerDay;

                    time += reader.Read(5) * TimeSpan.TicksPerHour;
                    time += reader.Read(6) * TimeSpan.TicksPerMinute;
                    time += reader.Read(6) * TimeSpan.TicksPerSecond;
                }
                else
                {
                    time += reader.ReadInt() * TimeSpan.TicksPerSecond;
                }

                time += reader.ReadInt() * TimeSpan.TicksPerMillisecond;
            }

            prevTime = new DateTime(time, isUtc ? DateTimeKind.Utc : DateTimeKind.Unspecified);

            return((isUtc ? new DateTime(time + offset.Ticks) : prevTime).ApplyTimeZone(offset));
        }
Beispiel #11
0
        public static T?ReadNullableInt <T>(this BitArrayReader reader)
            where T : struct
        {
            if (!reader.Read())
            {
                return(null);
            }

            return(reader.ReadInt().To <T?>());
        }
        private static QuoteChange[] DeserializeQuotes(BitArrayReader reader, QuoteMetaInfo metaInfo, bool useLong, bool nonAdjustPrice)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            if (metaInfo == null)
            {
                throw new ArgumentNullException(nameof(metaInfo));
            }

            var deltaCount = reader.ReadInt();

            if (deltaCount == 0)
            {
                return(ArrayHelper.Empty <QuoteChange>());
            }

            var quotes = new QuoteChange[deltaCount];

            for (var i = 0; i < deltaCount; i++)
            {
                var prevPrice = metaInfo.FirstPrice;
                var price     = reader.ReadPrice(ref prevPrice, metaInfo, useLong, nonAdjustPrice);
                metaInfo.FirstPrice = prevPrice;

                var volume = reader.ReadVolume(metaInfo);

                var ordersCount = metaInfo.Version >= MarketDataVersions.Version56
                                        ? reader.ReadNullableInt()
                                        : null;

                var condition = metaInfo.Version >= MarketDataVersions.Version57
                                        ? reader.Read() ? (QuoteConditions)reader.ReadInt() : default
                                        : default;

                quotes[i] = new QuoteChange(price, volume, ordersCount, condition);
            }

            return(quotes);
        }
Beispiel #13
0
 public IcmpHeader(BitArrayReader dataGram, int nReceived)
 {
     // ICMP type
     _Type = dataGram.ReadByte();
     // ICMP subtype
     _Code = dataGram.ReadByte();
     // Error checking data, calculated from the ICMP header and data, with value 0 substituted for this field. The Internet Checksum is used, specified in RFC 1071
     _Checksum = dataGram.ReadShort();
     // Four-bytes field, contents vary based on the ICMP type and code.
     _Header = dataGram.ReadInt();
 }
Beispiel #14
0
 public TcpHeader(BitArrayReader dataGram, int nReceived)
 {
     _dataGram = dataGram;
     try
     {
         // The first sixteen bits contain the source port.
         _sourcePort = _dataGram.ReadShort();
         // The next sixteen contain the destiination port.
         _destinationPort = _dataGram.ReadShort();
         // Next thirty two have the sequence number.
         _sequenceNumber = _dataGram.ReadInt();
         // Next thirty two have the acknowledgement number.
         _acknowledgementNumber = _dataGram.ReadInt();
         // The next sixteen bits hold the flags and the data offset.
         _headerLength = _dataGram.ReadByte(4);
         _dataGram.SkipBits(3);
         _nFlags = _dataGram.ReadShort(9);
         // The next sixteen contain the window size.
         _window = _dataGram.ReadShort();
         // In the next sixteen we have the checksum.
         _checksum = (short)_dataGram.ReadShort();
         // The following sixteen contain the urgent pointer.
         _urgentPointer = _dataGram.ReadShort();
         //// The data offset indicates where the data begins, so using it we
         //// calculate the header length.
         //_headerLength = (byte)(_dataOffset >> 12);
         _headerLength *= 4;
         //// Message length = Total length of the TCP packet - Header length.
         //_messageLength = (ushort)(nReceived - _headerLength);
         //// Copy the TCP data into the data buffer.
         //_nFlags = _dataOffset & 0x3F;
         _dataGram.CurrentPositionInBytes = _headerLength;
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "Network Sniffer" + (nReceived), MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
Beispiel #15
0
        public IgmpHeader(BitArrayReader dataGram, int nReceived)
        {
            // ICMP type
            _Type = dataGram.ReadByte();
            // ICMP subtype
            _MaxRespCode = dataGram.ReadByte();
            // Error checking data, calculated from the ICMP header and data, with value 0 substituted for this field. The Internet Checksum is used, specified in RFC 1071
            _Checksum = dataGram.ReadShort();

            _GroupAddress = new IPAddress(dataGram.ReadInt().Reverse());

            if (_Type == 0x11)
            {
                _Resv            = dataGram.ReadByte(4);
                _SFlag           = dataGram.ReadByte(1);
                _QRV             = dataGram.ReadByte(3);
                _QQIC            = dataGram.ReadByte();
                _NumberofSources = dataGram.ReadShort();
            }

            // Four-bytes field, contents vary based on the ICMP type and code.
            //_Header = (uint)IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
        }
Beispiel #16
0
        private static IEnumerable <QuoteChange> DeserializeQuotes(BitArrayReader reader, QuoteMetaInfo metaInfo, Sides side)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            if (metaInfo == null)
            {
                throw new ArgumentNullException("metaInfo");
            }

            var list = new List <QuoteChange>();

            var deltaCount = reader.ReadInt();

            if (deltaCount == 0)
            {
                return(list);
            }

            var prevPrice = metaInfo.FirstPrice;

            for (var i = 0; i < deltaCount; i++)
            {
                metaInfo.FirstPrice = reader.ReadPrice(metaInfo.FirstPrice, metaInfo);

                var volume = reader.ReadVolume(metaInfo);

                list.Add(new QuoteChange(side, metaInfo.FirstPrice, volume));
            }

            metaInfo.FirstPrice = prevPrice;

            return(list);
        }
Beispiel #17
0
        private static QuoteChange[] DeserializeQuotes(BitArrayReader reader, QuoteMetaInfo metaInfo, bool useLong, bool nonAdjustPrice)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            if (metaInfo == null)
            {
                throw new ArgumentNullException(nameof(metaInfo));
            }

            var count = reader.ReadInt();

            if (count == 0)
            {
                return(ArrayHelper.Empty <QuoteChange>());
            }

            var is56 = metaInfo.Version >= MarketDataVersions.Version56;
            var is57 = metaInfo.Version >= MarketDataVersions.Version57;
            var is58 = metaInfo.Version >= MarketDataVersions.Version58;

            var quotes = new QuoteChange[count];

            for (var i = 0; i < count; i++)
            {
                var prevPrice = metaInfo.FirstPrice;
                var price     = reader.ReadPrice(ref prevPrice, metaInfo, useLong, nonAdjustPrice);
                metaInfo.FirstPrice = prevPrice;

                var volume = reader.ReadVolume(metaInfo);

                var ordersCount = is56
                                        ? reader.ReadNullableInt()
                                        : null;

                var condition = is57
                                        ? (QuoteConditions)(reader.ReadNullableInt() ?? 0)
                                        : default;

                var quote = new QuoteChange(price, volume, ordersCount, condition);

                if (is58)
                {
                    if (reader.Read())
                    {
                        quote.Action = (QuoteChangeActions)reader.ReadInt();
                    }

                    if (reader.Read())
                    {
                        quote.StartPosition = reader.ReadInt();
                    }

                    if (reader.Read())
                    {
                        quote.EndPosition = reader.ReadInt();
                    }
                }

                quotes[i] = quote;
            }

            return(quotes);
        }
Beispiel #18
0
 public static DateTimeOffset?ReadDto(this BitArrayReader reader)
 {
     return(reader.Read() ? reader.ReadLong().To <DateTime>().ApplyTimeZone(new TimeSpan(reader.ReadInt(), reader.ReadInt(), 0)) : (DateTimeOffset?)null);
 }
        public static string ReadString(this BitArrayReader reader)
        {
            var len = reader.ReadInt();

            return(Encoding.UTF8.GetString(reader.ReadArray(len).To <BitArray>().To <byte[]>()));
        }
        private static decimal ReadPrice(this BitArrayReader reader, decimal prevPrice, decimal priceStep, bool useLong)
        {
            var count = useLong ? reader.ReadLong() : reader.ReadInt();

            return(prevPrice + count * priceStep);
        }