Esempio n. 1
0
        static byte[] GenerateHeaderBytes(Http3HeadersEnumerator enumerator)
        {
            var buffer          = new byte[1024 * 1024];
            var totalHeaderSize = 0;
            var success         = QPackHeaderWriter.BeginEncodeHeaders(enumerator, buffer, ref totalHeaderSize, out var length);

            if (!success)
            {
                throw new InvalidOperationException();
            }

            return(buffer[..length]);
Esempio n. 2
0
        public async Task SendHeadersAsync(Http3HeadersEnumerator headers, bool endStream = false)
        {
            var headersTotalSize = 0;

            var buffer = _headerHandler.HeaderEncodingBuffer.AsMemory();
            var done   = QPackHeaderWriter.BeginEncode(headers, buffer.Span, ref headersTotalSize, out var length);

            if (!done)
            {
                throw new InvalidOperationException("Headers not sent.");
            }

            await SendFrameAsync(Http3FrameType.Headers, buffer.Slice(0, length), endStream);
        }
Esempio n. 3
0
    public void BeginEncodeHeaders_StatusWithIndexedValue_ExpectedLength(int statusCode)
    {
        Span <byte> buffer = new byte[1024 * 16];

        var totalHeaderSize = 0;
        var headers         = new HttpResponseHeaders();
        var enumerator      = new Http3HeadersEnumerator();

        enumerator.Initialize(headers);

        Assert.True(QPackHeaderWriter.BeginEncodeHeaders(statusCode, enumerator, buffer, ref totalHeaderSize, out var length));
        length -= 2; // Remove prefix

        Assert.True(length <= 2, "Indexed header should be encoded into 1 or 2 bytes");
    }
    public void BeginEncodeHeaders_StatusWithIndexedValue_WriteIndex()
    {
        Span <byte> buffer = new byte[1024 * 16];

        var totalHeaderSize = 0;
        var headers         = new HttpResponseHeaders();
        var enumerator      = new Http3HeadersEnumerator();

        enumerator.Initialize(headers);

        Assert.True(QPackHeaderWriter.BeginEncodeHeaders(200, enumerator, buffer, ref totalHeaderSize, out var length));

        var result = buffer.Slice(0, length).ToArray();
        var hex    = BitConverter.ToString(result);

        Assert.Equal("00-00-D9", hex);
    }
    public void BeginEncodeHeaders_NoStatus_NonStaticKey_WriteFullNameAndFullValue()
    {
        Span <byte> buffer = new byte[1024 * 16];

        var headers = (IHeaderDictionary) new HttpResponseHeaders();

        headers.Translate = "private";

        var totalHeaderSize = 0;
        var enumerator      = new Http3HeadersEnumerator();

        enumerator.Initialize(headers);

        Assert.True(QPackHeaderWriter.BeginEncodeHeaders(enumerator, buffer, ref totalHeaderSize, out var length));

        var result = buffer.Slice(2, length - 2).ToArray();
        var hex    = BitConverter.ToString(result);

        Assert.Equal("37-02-74-72-61-6E-73-6C-61-74-65-07-70-72-69-76-61-74-65", hex);
    }
Esempio n. 6
0
    public void BeginEncodeHeaders_StaticKeyAndValue_WriteIndex()
    {
        Span <byte> buffer = new byte[1024 * 16];

        var headers = (IHeaderDictionary) new HttpResponseHeaders();

        headers.ContentType = "application/json";

        var totalHeaderSize = 0;
        var enumerator      = new Http3HeadersEnumerator();

        enumerator.Initialize(headers);

        Assert.True(QPackHeaderWriter.BeginEncodeHeaders(enumerator, buffer, ref totalHeaderSize, out var length));

        var result = buffer.Slice(2, length - 2).ToArray(); // trim prefix
        var hex    = BitConverter.ToString(result);

        Assert.Equal("EE", hex);
    }
Esempio n. 7
0
    public void BeginEncodeHeaders_StaticKey_WriteStaticNameAndFullValue()
    {
        Span <byte> buffer = new byte[1024 * 16];

        var headers = (IHeaderDictionary) new HttpResponseHeaders();

        headers.ContentType = "application/custom";

        var totalHeaderSize = 0;
        var enumerator      = new Http3HeadersEnumerator();

        enumerator.Initialize(headers);

        Assert.True(QPackHeaderWriter.BeginEncodeHeaders(enumerator, buffer, ref totalHeaderSize, out var length));

        var result = buffer.Slice(2, length - 2).ToArray();
        var hex    = BitConverter.ToString(result);

        Assert.Equal("5F-1D-12-61-70-70-6C-69-63-61-74-69-6F-6E-2F-63-75-73-74-6F-6D", hex);
    }
Esempio n. 8
0
    public void BeginEncodeHeaders_NonStaticKey_WriteFullNameAndFullValue_CustomHeader()
    {
        Span <byte> buffer = new byte[1024 * 16];

        var headers = (IHeaderDictionary) new HttpResponseHeaders();

        headers["new-header"] = "value";

        var totalHeaderSize = 0;
        var enumerator      = new Http3HeadersEnumerator();

        enumerator.Initialize(headers);

        Assert.True(QPackHeaderWriter.BeginEncodeHeaders(enumerator, buffer, ref totalHeaderSize, out var length));

        var result = buffer.Slice(2, length - 2).ToArray(); // trim prefix
        var hex    = BitConverter.ToString(result);

        Assert.Equal("37-03-6E-65-77-2D-68-65-61-64-65-72-05-76-61-6C-75-65", hex);
    }