Пример #1
0
        public static bool TryParseProtectedByConnectionId(IAead aead,
                                                           ICipher cipher,
                                                           MemoryCursor cursor,
                                                           PacketConnectionId connectionId,
                                                           PacketNumber largestAcknowledgedPacketNumber,
                                                           out ShortPacket result)
        {
            result = new ShortPacket();

            var startOffset = cursor.AsOffset();
            var firstByte   = PacketFirstByte.Parse(cursor.Peek(1).Span[0]);

            if (!firstByte.IsShortHeader())
            {
                return(false);
            }

            cursor.Move(1);

            if (!connectionId.TrySliceValue(cursor))
            {
                return(false);
            }

            var payload = PacketPayload.SliceShortProtectedPacketBytes(cursor, aead, cipher, startOffset, firstByte, largestAcknowledgedPacketNumber, out var packetNumber);

            result = new ShortPacket(connectionId, packetNumber, payload);

            return(true);
        }