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); } }
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()); }
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)); }
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); }
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(); }
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); } }
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()); }
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); }
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); }
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); }