示例#1
0
        internal async Task SendGoAwayAsync(long streamId, bool endStream = false)
        {
            var data = new byte[VariableLengthIntegerHelper.GetByteCount(streamId)];

            VariableLengthIntegerHelper.WriteInteger(data, streamId);

            await SendFrameAsync(Http3FrameType.GoAway, data, endStream);
        }
示例#2
0
        internal static void WriteSettings(List <Http3PeerSetting> settings, Span <byte> destination)
        {
            foreach (var setting in settings)
            {
                var parameterLength = VariableLengthIntegerHelper.WriteInteger(destination, (long)setting.Parameter);
                destination = destination.Slice(parameterLength);

                var valueLength = VariableLengthIntegerHelper.WriteInteger(destination, (long)setting.Value);
                destination = destination.Slice(valueLength);
            }
        }
    public void CheckEncoding(long input, byte[] expected)
    {
        var outputBuffer  = new Span <byte>(new byte[8]);
        var encodedLength = VariableLengthIntegerHelper.WriteInteger(outputBuffer, input);

        Assert.Equal(expected.Length, encodedLength);
        for (var i = 0; i < expected.Length; i++)
        {
            Assert.Equal(expected[i], outputBuffer[i]);
        }
    }
示例#4
0
        public async Task WriteStreamIdAsync(int id)
        {
            var writableBuffer = Pair.Application.Output;

            void WriteSpan(PipeWriter pw)
            {
                var buffer        = pw.GetSpan(sizeHint: 8);
                var lengthWritten = VariableLengthIntegerHelper.WriteInteger(buffer, id);

                pw.Advance(lengthWritten);
            }

            WriteSpan(writableBuffer);

            await FlushAsync(writableBuffer);
        }