File: Http3Limits.cs
Web Access
Project: src\src\Servers\Kestrel\Core\src\Microsoft.AspNetCore.Server.Kestrel.Core.csproj (Microsoft.AspNetCore.Server.Kestrel.Core)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Text.Json;
 
namespace Microsoft.AspNetCore.Server.Kestrel.Core;
 
/// <summary>
/// Limits only applicable to HTTP/3 connections.
/// </summary>
public class Http3Limits
{
    private int _headerTableSize;
    private int _maxRequestHeaderFieldSize = 32 * 1024; // Matches MaxRequestHeadersTotalSize
 
    /// <summary>
    /// Limits the size of the header compression table, in octets, the QPACK decoder on the server can use.
    /// <para>
    /// Value must be greater than 0, defaults to 0.
    /// </para>
    /// </summary>
    // TODO: Make public https://github.com/dotnet/aspnetcore/issues/26666
    internal int HeaderTableSize
    {
        get => _headerTableSize;
        set
        {
            if (value <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(value), value, CoreStrings.GreaterThanZeroRequired);
            }
 
            _headerTableSize = value;
        }
    }
 
    /// <summary>
    /// Indicates the size of the maximum allowed size of a request header field sequence. This limit applies to both name and value sequences in their compressed and uncompressed representations.
    /// <para>
    /// Value must be greater than 0, defaults to 2^14 (16,384).
    /// </para>
    /// </summary>
    public int MaxRequestHeaderFieldSize
    {
        get => _maxRequestHeaderFieldSize;
        set
        {
            if (value <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(value), value, CoreStrings.GreaterThanZeroRequired);
            }
 
            _maxRequestHeaderFieldSize = value;
        }
    }
 
    internal void Serialize(Utf8JsonWriter writer)
    {
        writer.WritePropertyName(nameof(HeaderTableSize));
        writer.WriteNumberValue(HeaderTableSize);
 
        writer.WritePropertyName(nameof(MaxRequestHeaderFieldSize));
        writer.WriteNumberValue(MaxRequestHeaderFieldSize);
    }
}