public PacketBufferScanner(byte[] buffer) { if (buffer.Length < PacketFormat.PacketHeaderLength + PacketFormat.PacketTrailerMinLength) { throw new PacketFormatException(buffer, buffer.Length, "Insufficient bytes to form a valid packet."); } int lastTabPosition = buffer.Length - 1 - PacketFormat.PacketTrailerMinLength; HasChecksum = buffer[lastTabPosition] != PacketFormatDelimiters.Tab; if (HasChecksum) { const int packetLength = PacketFormat.PacketHeaderLength + PacketFormat.OptionalChecksumLength + PacketFormat.PacketTrailerMinLength; if (buffer.Length < packetLength) { throw new PacketFormatException(buffer, lastTabPosition, "Insufficient bytes to form a valid packet with checksum."); } VerifyChecksum(buffer); } HeaderContext = new PacketParseContext(buffer, 0, PacketFormat.PacketHeaderLength); int trailerLength = HasChecksum ? PacketFormat.PacketTrailerMinLength + PacketFormat.OptionalChecksumLength : PacketFormat.PacketTrailerMinLength; int trailerStartPosition = HasChecksum ? buffer.Length - PacketFormat.PacketTrailerMinLength - PacketFormat.OptionalChecksumLength : buffer.Length - PacketFormat.PacketTrailerMinLength; TrailerContext = new PacketParseContext(buffer, trailerStartPosition, trailerLength); int payloadSize = buffer.Length - PacketFormat.PacketHeaderLength - trailerLength; PayloadContext = new PacketParseContext(buffer, PacketFormat.PacketHeaderLength, payloadSize); }
public PacketBufferScanner([NotNull] byte[] buffer) { if (buffer.Length < PacketFormat.PacketHeaderLength + PacketFormat.PacketTrailerMinLength) { throw new PacketFormatException(buffer, buffer.Length, "Insufficient bytes to form a valid packet."); } int lastTabPosition = buffer.Length - 1 - PacketFormat.PacketTrailerMinLength; HasChecksum = buffer[lastTabPosition] != PacketFormatDelimiters.Tab; if (HasChecksum) { const int packetLength = PacketFormat.PacketHeaderLength + PacketFormat.OptionalChecksumLength + PacketFormat.PacketTrailerMinLength; if (buffer.Length < packetLength) { throw new PacketFormatException(buffer, lastTabPosition, "Insufficient bytes to form a valid packet with checksum."); } VerifyChecksum(buffer); } HeaderContext = new PacketParseContext(buffer, 0, PacketFormat.PacketHeaderLength); int trailerLength = HasChecksum ? PacketFormat.PacketTrailerMinLength + PacketFormat.OptionalChecksumLength : PacketFormat.PacketTrailerMinLength; int trailerStartPosition = HasChecksum ? buffer.Length - PacketFormat.PacketTrailerMinLength - PacketFormat.OptionalChecksumLength : buffer.Length - PacketFormat.PacketTrailerMinLength; TrailerContext = new PacketParseContext(buffer, trailerStartPosition, trailerLength); int payloadSize = buffer.Length - PacketFormat.PacketHeaderLength - trailerLength; PayloadContext = new PacketParseContext(buffer, PacketFormat.PacketHeaderLength, payloadSize); }