38 lines
1.2 KiB
C#
38 lines
1.2 KiB
C#
namespace Sick.SafetyScanners.DataStructures;
|
|
|
|
/// <summary>
|
|
/// Represents a PacketBuffer with a parsed DatagramHeader
|
|
/// Used for merging fragmented UDP packets
|
|
/// </summary>
|
|
public sealed class ParsedPacketBuffer
|
|
{
|
|
/// <summary>
|
|
/// Gets the packet buffer
|
|
/// </summary>
|
|
public PacketBuffer PacketBuffer { get; init; }
|
|
|
|
/// <summary>
|
|
/// Gets the parsed datagram header
|
|
/// </summary>
|
|
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));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Compares two ParsedPacketBuffer instances by fragment offset for sorting
|
|
/// </summary>
|
|
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);
|
|
}
|
|
}
|
|
|