< Summary

Information
Class: System.Net.Http.HPack.H2StaticTable
Assembly: System.Net.Http
File(s): D:\runner\runtime\src\libraries\Common\src\System\Net\Http\aspnetcore\Http2\Hpack\H2StaticTable.Http2.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 70
Coverable lines: 70
Total lines: 105
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 2
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
Get(...)100%110%
.cctor()100%110%
CreateHeaderField(...)0%220%

File(s)

D:\runner\runtime\src\libraries\Common\src\System\Net\Http\aspnetcore\Http2\Hpack\H2StaticTable.Http2.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System.Text;
 5
 6namespace System.Net.Http.HPack
 7{
 8    internal static partial class H2StaticTable
 9    {
 010        public static int Count => s_staticDecoderTable.Length;
 11
 012        public static ref readonly HeaderField Get(int index) => ref s_staticDecoderTable[index];
 13
 14        public static bool TryGetStatusIndex(int status, out int index)
 15        {
 16            index = status switch
 17            {
 18                200 => 8,
 19                204 => 9,
 20                206 => 10,
 21                304 => 11,
 22                400 => 12,
 23                404 => 13,
 24                500 => 14,
 25                _ => -1
 26            };
 27
 28            return index != -1;
 29        }
 30
 031        private static readonly HeaderField[] s_staticDecoderTable = new HeaderField[]
 032        {
 033            CreateHeaderField(1, ":authority", ""),
 034            CreateHeaderField(2, ":method", "GET"),
 035            CreateHeaderField(3, ":method", "POST"),
 036            CreateHeaderField(4, ":path", "/"),
 037            CreateHeaderField(5, ":path", "/index.html"),
 038            CreateHeaderField(6, ":scheme", "http"),
 039            CreateHeaderField(7, ":scheme", "https"),
 040            CreateHeaderField(8, ":status", "200"),
 041            CreateHeaderField(9, ":status", "204"),
 042            CreateHeaderField(10, ":status", "206"),
 043            CreateHeaderField(11, ":status", "304"),
 044            CreateHeaderField(12, ":status", "400"),
 045            CreateHeaderField(13, ":status", "404"),
 046            CreateHeaderField(14, ":status", "500"),
 047            CreateHeaderField(15, "accept-charset", ""),
 048            CreateHeaderField(16, "accept-encoding", "gzip, deflate"),
 049            CreateHeaderField(17, "accept-language", ""),
 050            CreateHeaderField(18, "accept-ranges", ""),
 051            CreateHeaderField(19, "accept", ""),
 052            CreateHeaderField(20, "access-control-allow-origin", ""),
 053            CreateHeaderField(21, "age", ""),
 054            CreateHeaderField(22, "allow", ""),
 055            CreateHeaderField(23, "authorization", ""),
 056            CreateHeaderField(24, "cache-control", ""),
 057            CreateHeaderField(25, "content-disposition", ""),
 058            CreateHeaderField(26, "content-encoding", ""),
 059            CreateHeaderField(27, "content-language", ""),
 060            CreateHeaderField(28, "content-length", ""),
 061            CreateHeaderField(29, "content-location", ""),
 062            CreateHeaderField(30, "content-range", ""),
 063            CreateHeaderField(31, "content-type", ""),
 064            CreateHeaderField(32, "cookie", ""),
 065            CreateHeaderField(33, "date", ""),
 066            CreateHeaderField(34, "etag", ""),
 067            CreateHeaderField(35, "expect", ""),
 068            CreateHeaderField(36, "expires", ""),
 069            CreateHeaderField(37, "from", ""),
 070            CreateHeaderField(38, "host", ""),
 071            CreateHeaderField(39, "if-match", ""),
 072            CreateHeaderField(40, "if-modified-since", ""),
 073            CreateHeaderField(41, "if-none-match", ""),
 074            CreateHeaderField(42, "if-range", ""),
 075            CreateHeaderField(43, "if-unmodified-since", ""),
 076            CreateHeaderField(44, "last-modified", ""),
 077            CreateHeaderField(45, "link", ""),
 078            CreateHeaderField(46, "location", ""),
 079            CreateHeaderField(47, "max-forwards", ""),
 080            CreateHeaderField(48, "proxy-authenticate", ""),
 081            CreateHeaderField(49, "proxy-authorization", ""),
 082            CreateHeaderField(50, "range", ""),
 083            CreateHeaderField(51, "referer", ""),
 084            CreateHeaderField(52, "refresh", ""),
 085            CreateHeaderField(53, "retry-after", ""),
 086            CreateHeaderField(54, "server", ""),
 087            CreateHeaderField(55, "set-cookie", ""),
 088            CreateHeaderField(56, "strict-transport-security", ""),
 089            CreateHeaderField(57, "transfer-encoding", ""),
 090            CreateHeaderField(58, "user-agent", ""),
 091            CreateHeaderField(59, "vary", ""),
 092            CreateHeaderField(60, "via", ""),
 093            CreateHeaderField(61, "www-authenticate", "")
 094        };
 95
 96        // TODO: The HeaderField constructor will allocate and copy again. We should avoid this.
 97        // Tackle as part of header table allocation strategy in general (see note in HeaderField constructor).
 98
 99        private static HeaderField CreateHeaderField(int staticTableIndex, string name, string value) =>
 0100            new HeaderField(
 0101                staticTableIndex,
 0102                Encoding.ASCII.GetBytes(name),
 0103                value.Length != 0 ? Encoding.ASCII.GetBytes(value) : Array.Empty<byte>());
 104    }
 105}