namespace Sick.SafetyScanners.DataStructures; /// /// Represents a PacketBuffer with a parsed DatagramHeader /// Used for merging fragmented UDP packets /// public sealed class ParsedPacketBuffer { /// /// Gets the packet buffer /// public PacketBuffer PacketBuffer { get; init; } /// /// Gets the parsed datagram header /// public DatagramHeader DatagramHeader { get; init; } public ParsedPacketBuffer(PacketBuffer packetBuffer, DatagramHeader datagramHeader) { PacketBuffer = packetBuffer ?? throw new ArgumentNullException(nameof(packetBuffer)); DatagramHeader = datagramHeader ?? throw new ArgumentNullException(nameof(datagramHeader)); } /// /// Compares two ParsedPacketBuffer instances by fragment offset for sorting /// public static int CompareByOffset(ParsedPacketBuffer x, ParsedPacketBuffer y) { if (x == null && y == null) return 0; if (x == null) return -1; if (y == null) return 1; return x.DatagramHeader.FragmentOffset.CompareTo(y.DatagramHeader.FragmentOffset); } }