public static bool TryParse(MemoryCursor cursor, out InitialPacket result) { result = new InitialPacket(); var startOffset = cursor.AsOffset(); var firstByte = PacketFirstByte.Parse(cursor.Peek(1).Span[0]); if (!firstByte.IsInitialType()) { return(false); } cursor.Move(1); var version = PacketVersion.Parse(cursor); var destinationConnectionId = PacketConnectionId.Parse(cursor); var sourceConnectionId = PacketConnectionId.Parse(cursor); var token = PacketToken.Parse(cursor); var payload = PacketPayload.SlicePacketBytes(cursor, firstByte, startOffset, null, out var packetNumber); result = new InitialPacket(version, destinationConnectionId, sourceConnectionId, token, packetNumber, payload); return(true); }
public static bool TryParse(MemoryCursor cursor, PacketNumber largestAcknowledgedPacketNumber, out HandshakePacket result) { result = new HandshakePacket(); var startOffset = cursor.AsOffset(); var firstByte = PacketFirstByte.Parse(cursor.Peek(1).Span[0]); if (!firstByte.IsHandshakeType()) { return(false); } cursor.Move(1); var version = PacketVersion.Parse(cursor); var destinationConnectionId = PacketConnectionId.Parse(cursor); var sourceConnectionId = PacketConnectionId.Parse(cursor); var payload = PacketPayload.SlicePacketBytes(cursor, firstByte, startOffset, largestAcknowledgedPacketNumber, out var packetNumber); result = new HandshakePacket(version, destinationConnectionId, sourceConnectionId, packetNumber, payload); return(true); }