Remove HTTP/2 headers from request primary headers (#24900)

This commit is contained in:
James Newton-King 2020-08-21 07:39:40 +12:00 committed by GitHub
parent 8522ba8e55
commit 920d93590d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 394 additions and 351 deletions

View File

@ -1208,15 +1208,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
case 5: case 5:
{ {
if (ReferenceEquals(HeaderNames.Path, key))
{
if ((_bits & 0x400000L) != 0)
{
value = _headers._Path;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Allow, key)) if (ReferenceEquals(HeaderNames.Allow, key))
{ {
if ((_bits & 0x800L) != 0) if ((_bits & 0x800L) != 0)
@ -1226,6 +1217,15 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (ReferenceEquals(HeaderNames.Path, key))
{
if ((_bits & 0x400000L) != 0)
{
value = _headers._Path;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Range, key)) if (ReferenceEquals(HeaderNames.Range, key))
{ {
if ((_bits & 0x80000000000L) != 0) if ((_bits & 0x80000000000L) != 0)
@ -1236,15 +1236,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return false; return false;
} }
if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x400000L) != 0)
{
value = _headers._Path;
return true;
}
return false;
}
if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x800L) != 0) if ((_bits & 0x800L) != 0)
@ -1254,6 +1245,15 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x400000L) != 0)
{
value = _headers._Path;
return true;
}
return false;
}
if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x80000000000L) != 0) if ((_bits & 0x80000000000L) != 0)
@ -1362,24 +1362,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
case 7: case 7:
{ {
if (ReferenceEquals(HeaderNames.Method, key))
{
if ((_bits & 0x200000L) != 0)
{
value = _headers._Method;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Scheme, key))
{
if ((_bits & 0x800000L) != 0)
{
value = _headers._Scheme;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Trailer, key)) if (ReferenceEquals(HeaderNames.Trailer, key))
{ {
if ((_bits & 0x40L) != 0) if ((_bits & 0x40L) != 0)
@ -1416,6 +1398,24 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (ReferenceEquals(HeaderNames.Method, key))
{
if ((_bits & 0x200000L) != 0)
{
value = _headers._Method;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Scheme, key))
{
if ((_bits & 0x800000L) != 0)
{
value = _headers._Scheme;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Referer, key)) if (ReferenceEquals(HeaderNames.Referer, key))
{ {
if ((_bits & 0x40000000000L) != 0) if ((_bits & 0x40000000000L) != 0)
@ -1426,24 +1426,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return false; return false;
} }
if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x200000L) != 0)
{
value = _headers._Method;
return true;
}
return false;
}
if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x800000L) != 0)
{
value = _headers._Scheme;
return true;
}
return false;
}
if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x40L) != 0) if ((_bits & 0x40L) != 0)
@ -1480,6 +1462,24 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x200000L) != 0)
{
value = _headers._Method;
return true;
}
return false;
}
if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x800000L) != 0)
{
value = _headers._Scheme;
return true;
}
return false;
}
if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x40000000000L) != 0) if ((_bits & 0x40000000000L) != 0)
@ -1566,15 +1566,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (ReferenceEquals(HeaderNames.Authority, key))
{
if ((_bits & 0x100000L) != 0)
{
value = _headers._Authority;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.UserAgent, key)) if (ReferenceEquals(HeaderNames.UserAgent, key))
{ {
if ((_bits & 0x400000000000L) != 0) if ((_bits & 0x400000000000L) != 0)
@ -1593,6 +1584,15 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (ReferenceEquals(HeaderNames.Authority, key))
{
if ((_bits & 0x100000L) != 0)
{
value = _headers._Authority;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.RequestId, key)) if (ReferenceEquals(HeaderNames.RequestId, key))
{ {
if ((_bits & 0x2000000000000L) != 0) if ((_bits & 0x2000000000000L) != 0)
@ -1621,15 +1621,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x100000L) != 0)
{
value = _headers._Authority;
return true;
}
return false;
}
if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x400000000000L) != 0) if ((_bits & 0x400000000000L) != 0)
@ -1648,6 +1639,15 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x100000L) != 0)
{
value = _headers._Authority;
return true;
}
return false;
}
if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x2000000000000L) != 0) if ((_bits & 0x2000000000000L) != 0)
@ -2312,18 +2312,18 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
case 5: case 5:
{ {
if (ReferenceEquals(HeaderNames.Path, key))
{
_bits |= 0x400000L;
_headers._Path = value;
return;
}
if (ReferenceEquals(HeaderNames.Allow, key)) if (ReferenceEquals(HeaderNames.Allow, key))
{ {
_bits |= 0x800L; _bits |= 0x800L;
_headers._Allow = value; _headers._Allow = value;
return; return;
} }
if (ReferenceEquals(HeaderNames.Path, key))
{
_bits |= 0x400000L;
_headers._Path = value;
return;
}
if (ReferenceEquals(HeaderNames.Range, key)) if (ReferenceEquals(HeaderNames.Range, key))
{ {
_bits |= 0x80000000000L; _bits |= 0x80000000000L;
@ -2331,18 +2331,18 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return; return;
} }
if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase))
{
_bits |= 0x400000L;
_headers._Path = value;
return;
}
if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
_bits |= 0x800L; _bits |= 0x800L;
_headers._Allow = value; _headers._Allow = value;
return; return;
} }
if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase))
{
_bits |= 0x400000L;
_headers._Path = value;
return;
}
if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
_bits |= 0x80000000000L; _bits |= 0x80000000000L;
@ -2418,18 +2418,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
case 7: case 7:
{ {
if (ReferenceEquals(HeaderNames.Method, key))
{
_bits |= 0x200000L;
_headers._Method = value;
return;
}
if (ReferenceEquals(HeaderNames.Scheme, key))
{
_bits |= 0x800000L;
_headers._Scheme = value;
return;
}
if (ReferenceEquals(HeaderNames.Trailer, key)) if (ReferenceEquals(HeaderNames.Trailer, key))
{ {
_bits |= 0x40L; _bits |= 0x40L;
@ -2454,6 +2442,18 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
_headers._Expires = value; _headers._Expires = value;
return; return;
} }
if (ReferenceEquals(HeaderNames.Method, key))
{
_bits |= 0x200000L;
_headers._Method = value;
return;
}
if (ReferenceEquals(HeaderNames.Scheme, key))
{
_bits |= 0x800000L;
_headers._Scheme = value;
return;
}
if (ReferenceEquals(HeaderNames.Referer, key)) if (ReferenceEquals(HeaderNames.Referer, key))
{ {
_bits |= 0x40000000000L; _bits |= 0x40000000000L;
@ -2461,18 +2461,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return; return;
} }
if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase))
{
_bits |= 0x200000L;
_headers._Method = value;
return;
}
if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase))
{
_bits |= 0x800000L;
_headers._Scheme = value;
return;
}
if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
_bits |= 0x40L; _bits |= 0x40L;
@ -2497,6 +2485,18 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
_headers._Expires = value; _headers._Expires = value;
return; return;
} }
if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase))
{
_bits |= 0x200000L;
_headers._Method = value;
return;
}
if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase))
{
_bits |= 0x800000L;
_headers._Scheme = value;
return;
}
if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
_bits |= 0x40000000000L; _bits |= 0x40000000000L;
@ -2559,12 +2559,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
_headers._Connection = value; _headers._Connection = value;
return; return;
} }
if (ReferenceEquals(HeaderNames.Authority, key))
{
_bits |= 0x100000L;
_headers._Authority = value;
return;
}
if (ReferenceEquals(HeaderNames.UserAgent, key)) if (ReferenceEquals(HeaderNames.UserAgent, key))
{ {
_bits |= 0x400000000000L; _bits |= 0x400000000000L;
@ -2577,6 +2571,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
_headers._KeepAlive = value; _headers._KeepAlive = value;
return; return;
} }
if (ReferenceEquals(HeaderNames.Authority, key))
{
_bits |= 0x100000L;
_headers._Authority = value;
return;
}
if (ReferenceEquals(HeaderNames.RequestId, key)) if (ReferenceEquals(HeaderNames.RequestId, key))
{ {
_bits |= 0x2000000000000L; _bits |= 0x2000000000000L;
@ -2596,12 +2596,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
_headers._Connection = value; _headers._Connection = value;
return; return;
} }
if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase))
{
_bits |= 0x100000L;
_headers._Authority = value;
return;
}
if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
_bits |= 0x400000000000L; _bits |= 0x400000000000L;
@ -2614,6 +2608,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
_headers._KeepAlive = value; _headers._KeepAlive = value;
return; return;
} }
if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase))
{
_bits |= 0x100000L;
_headers._Authority = value;
return;
}
if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
_bits |= 0x2000000000000L; _bits |= 0x2000000000000L;
@ -3156,16 +3156,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
case 5: case 5:
{ {
if (ReferenceEquals(HeaderNames.Path, key))
{
if ((_bits & 0x400000L) == 0)
{
_bits |= 0x400000L;
_headers._Path = value;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Allow, key)) if (ReferenceEquals(HeaderNames.Allow, key))
{ {
if ((_bits & 0x800L) == 0) if ((_bits & 0x800L) == 0)
@ -3176,6 +3166,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (ReferenceEquals(HeaderNames.Path, key))
{
if ((_bits & 0x400000L) == 0)
{
_bits |= 0x400000L;
_headers._Path = value;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Range, key)) if (ReferenceEquals(HeaderNames.Range, key))
{ {
if ((_bits & 0x80000000000L) == 0) if ((_bits & 0x80000000000L) == 0)
@ -3187,16 +3187,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return false; return false;
} }
if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x400000L) == 0)
{
_bits |= 0x400000L;
_headers._Path = value;
return true;
}
return false;
}
if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x800L) == 0) if ((_bits & 0x800L) == 0)
@ -3207,6 +3197,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x400000L) == 0)
{
_bits |= 0x400000L;
_headers._Path = value;
return true;
}
return false;
}
if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x80000000000L) == 0) if ((_bits & 0x80000000000L) == 0)
@ -3326,26 +3326,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
case 7: case 7:
{ {
if (ReferenceEquals(HeaderNames.Method, key))
{
if ((_bits & 0x200000L) == 0)
{
_bits |= 0x200000L;
_headers._Method = value;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Scheme, key))
{
if ((_bits & 0x800000L) == 0)
{
_bits |= 0x800000L;
_headers._Scheme = value;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Trailer, key)) if (ReferenceEquals(HeaderNames.Trailer, key))
{ {
if ((_bits & 0x40L) == 0) if ((_bits & 0x40L) == 0)
@ -3386,6 +3366,26 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (ReferenceEquals(HeaderNames.Method, key))
{
if ((_bits & 0x200000L) == 0)
{
_bits |= 0x200000L;
_headers._Method = value;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Scheme, key))
{
if ((_bits & 0x800000L) == 0)
{
_bits |= 0x800000L;
_headers._Scheme = value;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Referer, key)) if (ReferenceEquals(HeaderNames.Referer, key))
{ {
if ((_bits & 0x40000000000L) == 0) if ((_bits & 0x40000000000L) == 0)
@ -3397,26 +3397,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return false; return false;
} }
if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x200000L) == 0)
{
_bits |= 0x200000L;
_headers._Method = value;
return true;
}
return false;
}
if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x800000L) == 0)
{
_bits |= 0x800000L;
_headers._Scheme = value;
return true;
}
return false;
}
if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x40L) == 0) if ((_bits & 0x40L) == 0)
@ -3457,6 +3437,26 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x200000L) == 0)
{
_bits |= 0x200000L;
_headers._Method = value;
return true;
}
return false;
}
if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x800000L) == 0)
{
_bits |= 0x800000L;
_headers._Scheme = value;
return true;
}
return false;
}
if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x40000000000L) == 0) if ((_bits & 0x40000000000L) == 0)
@ -3551,16 +3551,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (ReferenceEquals(HeaderNames.Authority, key))
{
if ((_bits & 0x100000L) == 0)
{
_bits |= 0x100000L;
_headers._Authority = value;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.UserAgent, key)) if (ReferenceEquals(HeaderNames.UserAgent, key))
{ {
if ((_bits & 0x400000000000L) == 0) if ((_bits & 0x400000000000L) == 0)
@ -3581,6 +3571,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (ReferenceEquals(HeaderNames.Authority, key))
{
if ((_bits & 0x100000L) == 0)
{
_bits |= 0x100000L;
_headers._Authority = value;
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.RequestId, key)) if (ReferenceEquals(HeaderNames.RequestId, key))
{ {
if ((_bits & 0x2000000000000L) == 0) if ((_bits & 0x2000000000000L) == 0)
@ -3612,16 +3612,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x100000L) == 0)
{
_bits |= 0x100000L;
_headers._Authority = value;
return true;
}
return false;
}
if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x400000000000L) == 0) if ((_bits & 0x400000000000L) == 0)
@ -3642,6 +3632,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x100000L) == 0)
{
_bits |= 0x100000L;
_headers._Authority = value;
return true;
}
return false;
}
if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x2000000000000L) == 0) if ((_bits & 0x2000000000000L) == 0)
@ -4408,16 +4408,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
case 5: case 5:
{ {
if (ReferenceEquals(HeaderNames.Path, key))
{
if ((_bits & 0x400000L) != 0)
{
_bits &= ~0x400000L;
_headers._Path = default(StringValues);
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Allow, key)) if (ReferenceEquals(HeaderNames.Allow, key))
{ {
if ((_bits & 0x800L) != 0) if ((_bits & 0x800L) != 0)
@ -4428,6 +4418,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (ReferenceEquals(HeaderNames.Path, key))
{
if ((_bits & 0x400000L) != 0)
{
_bits &= ~0x400000L;
_headers._Path = default(StringValues);
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Range, key)) if (ReferenceEquals(HeaderNames.Range, key))
{ {
if ((_bits & 0x80000000000L) != 0) if ((_bits & 0x80000000000L) != 0)
@ -4439,16 +4439,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return false; return false;
} }
if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x400000L) != 0)
{
_bits &= ~0x400000L;
_headers._Path = default(StringValues);
return true;
}
return false;
}
if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Allow.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x800L) != 0) if ((_bits & 0x800L) != 0)
@ -4459,6 +4449,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (HeaderNames.Path.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x400000L) != 0)
{
_bits &= ~0x400000L;
_headers._Path = default(StringValues);
return true;
}
return false;
}
if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Range.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x80000000000L) != 0) if ((_bits & 0x80000000000L) != 0)
@ -4578,26 +4578,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
case 7: case 7:
{ {
if (ReferenceEquals(HeaderNames.Method, key))
{
if ((_bits & 0x200000L) != 0)
{
_bits &= ~0x200000L;
_headers._Method = default(StringValues);
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Scheme, key))
{
if ((_bits & 0x800000L) != 0)
{
_bits &= ~0x800000L;
_headers._Scheme = default(StringValues);
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Trailer, key)) if (ReferenceEquals(HeaderNames.Trailer, key))
{ {
if ((_bits & 0x40L) != 0) if ((_bits & 0x40L) != 0)
@ -4638,6 +4618,26 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (ReferenceEquals(HeaderNames.Method, key))
{
if ((_bits & 0x200000L) != 0)
{
_bits &= ~0x200000L;
_headers._Method = default(StringValues);
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Scheme, key))
{
if ((_bits & 0x800000L) != 0)
{
_bits &= ~0x800000L;
_headers._Scheme = default(StringValues);
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.Referer, key)) if (ReferenceEquals(HeaderNames.Referer, key))
{ {
if ((_bits & 0x40000000000L) != 0) if ((_bits & 0x40000000000L) != 0)
@ -4649,26 +4649,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return false; return false;
} }
if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x200000L) != 0)
{
_bits &= ~0x200000L;
_headers._Method = default(StringValues);
return true;
}
return false;
}
if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x800000L) != 0)
{
_bits &= ~0x800000L;
_headers._Scheme = default(StringValues);
return true;
}
return false;
}
if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Trailer.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x40L) != 0) if ((_bits & 0x40L) != 0)
@ -4709,6 +4689,26 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (HeaderNames.Method.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x200000L) != 0)
{
_bits &= ~0x200000L;
_headers._Method = default(StringValues);
return true;
}
return false;
}
if (HeaderNames.Scheme.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x800000L) != 0)
{
_bits &= ~0x800000L;
_headers._Scheme = default(StringValues);
return true;
}
return false;
}
if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.Referer.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x40000000000L) != 0) if ((_bits & 0x40000000000L) != 0)
@ -4803,16 +4803,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (ReferenceEquals(HeaderNames.Authority, key))
{
if ((_bits & 0x100000L) != 0)
{
_bits &= ~0x100000L;
_headers._Authority = default(StringValues);
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.UserAgent, key)) if (ReferenceEquals(HeaderNames.UserAgent, key))
{ {
if ((_bits & 0x400000000000L) != 0) if ((_bits & 0x400000000000L) != 0)
@ -4833,6 +4823,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (ReferenceEquals(HeaderNames.Authority, key))
{
if ((_bits & 0x100000L) != 0)
{
_bits &= ~0x100000L;
_headers._Authority = default(StringValues);
return true;
}
return false;
}
if (ReferenceEquals(HeaderNames.RequestId, key)) if (ReferenceEquals(HeaderNames.RequestId, key))
{ {
if ((_bits & 0x2000000000000L) != 0) if ((_bits & 0x2000000000000L) != 0)
@ -4864,16 +4864,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x100000L) != 0)
{
_bits &= ~0x100000L;
_headers._Authority = default(StringValues);
return true;
}
return false;
}
if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.UserAgent.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x400000000000L) != 0) if ((_bits & 0x400000000000L) != 0)
@ -4894,6 +4884,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
return false; return false;
} }
if (HeaderNames.Authority.Equals(key, StringComparison.OrdinalIgnoreCase))
{
if ((_bits & 0x100000L) != 0)
{
_bits &= ~0x100000L;
_headers._Authority = default(StringValues);
return true;
}
return false;
}
if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase)) if (HeaderNames.RequestId.Equals(key, StringComparison.OrdinalIgnoreCase))
{ {
if ((_bits & 0x2000000000000L) != 0) if ((_bits & 0x2000000000000L) != 0)
@ -5532,46 +5532,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
tempBits &= ~0x2L; tempBits &= ~0x2L;
} }
if ((tempBits & 0x100000L) != 0)
{
_headers._Authority = default;
if((tempBits & ~0x100000L) == 0)
{
return;
}
tempBits &= ~0x100000L;
}
if ((tempBits & 0x200000L) != 0)
{
_headers._Method = default;
if((tempBits & ~0x200000L) == 0)
{
return;
}
tempBits &= ~0x200000L;
}
if ((tempBits & 0x400000L) != 0)
{
_headers._Path = default;
if((tempBits & ~0x400000L) == 0)
{
return;
}
tempBits &= ~0x400000L;
}
if ((tempBits & 0x800000L) != 0)
{
_headers._Scheme = default;
if((tempBits & ~0x800000L) == 0)
{
return;
}
tempBits &= ~0x800000L;
}
if ((tempBits & 0x1000000L) != 0) if ((tempBits & 0x1000000L) != 0)
{ {
_headers._Accept = default; _headers._Accept = default;
@ -5792,6 +5752,46 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
tempBits &= ~0x80000L; tempBits &= ~0x80000L;
} }
if ((tempBits & 0x100000L) != 0)
{
_headers._Authority = default;
if((tempBits & ~0x100000L) == 0)
{
return;
}
tempBits &= ~0x100000L;
}
if ((tempBits & 0x200000L) != 0)
{
_headers._Method = default;
if((tempBits & ~0x200000L) == 0)
{
return;
}
tempBits &= ~0x200000L;
}
if ((tempBits & 0x400000L) != 0)
{
_headers._Path = default;
if((tempBits & ~0x400000L) == 0)
{
return;
}
tempBits &= ~0x400000L;
}
if ((tempBits & 0x800000L) != 0)
{
_headers._Scheme = default;
if((tempBits & ~0x800000L) == 0)
{
return;
}
tempBits &= ~0x800000L;
}
if ((tempBits & 0x2000000L) != 0) if ((tempBits & 0x2000000L) != 0)
{ {
_headers._AcceptCharset = default; _headers._AcceptCharset = default;
@ -6785,13 +6785,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
} }
break; break;
case 10: case 10:
if (((Unsafe.ReadUnaligned<ulong>(ref nameStart) & 0xdfdfdfdfdfdfdfffuL) == 0x49524f485455413auL) && ((Unsafe.ReadUnaligned<ushort>(ref Unsafe.AddByteOffset(ref nameStart, (IntPtr)(4 * sizeof(ushort)))) & 0xdfdfu) == 0x5954u)) if (((Unsafe.ReadUnaligned<ulong>(ref nameStart) & 0xdfdfdfdfdfdfdfdfuL) == 0x495443454e4e4f43uL) && ((Unsafe.ReadUnaligned<ushort>(ref Unsafe.AddByteOffset(ref nameStart, (IntPtr)(4 * sizeof(ushort)))) & 0xdfdfu) == 0x4e4fu))
{
flag = 0x100000L;
values = ref _headers._Authority;
nameStr = HeaderNames.Authority;
}
else if (((Unsafe.ReadUnaligned<ulong>(ref nameStart) & 0xdfdfdfdfdfdfdfdfuL) == 0x495443454e4e4f43uL) && ((Unsafe.ReadUnaligned<ushort>(ref Unsafe.AddByteOffset(ref nameStart, (IntPtr)(4 * sizeof(ushort)))) & 0xdfdfu) == 0x4e4fu))
{ {
flag = 0x2L; flag = 0x2L;
values = ref _headers._Connection; values = ref _headers._Connection;
@ -6803,6 +6797,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
values = ref _headers._UserAgent; values = ref _headers._UserAgent;
nameStr = HeaderNames.UserAgent; nameStr = HeaderNames.UserAgent;
} }
else if (((Unsafe.ReadUnaligned<ulong>(ref nameStart) & 0xdfdfdfdfdfdfdfffuL) == 0x49524f485455413auL) && ((Unsafe.ReadUnaligned<ushort>(ref Unsafe.AddByteOffset(ref nameStart, (IntPtr)(4 * sizeof(ushort)))) & 0xdfdfu) == 0x5954u))
{
flag = 0x100000L;
values = ref _headers._Authority;
nameStr = HeaderNames.Authority;
}
else if (((Unsafe.ReadUnaligned<ulong>(ref nameStart) & 0xdfdfdfffdfdfdfdfuL) == 0x494c412d5045454buL) && ((Unsafe.ReadUnaligned<ushort>(ref Unsafe.AddByteOffset(ref nameStart, (IntPtr)(4 * sizeof(ushort)))) & 0xdfdfu) == 0x4556u)) else if (((Unsafe.ReadUnaligned<ulong>(ref nameStart) & 0xdfdfdfffdfdfdfdfuL) == 0x494c412d5045454buL) && ((Unsafe.ReadUnaligned<ushort>(ref Unsafe.AddByteOffset(ref nameStart, (IntPtr)(4 * sizeof(ushort)))) & 0xdfdfu) == 0x4556u))
{ {
flag = 0x10L; flag = 0x10L;

View File

@ -5,11 +5,19 @@ using System;
using System.IO; using System.IO;
using Microsoft.AspNetCore.Testing; using Microsoft.AspNetCore.Testing;
using Xunit; using Xunit;
using Xunit.Abstractions;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{ {
public class GeneratedCodeTests public class GeneratedCodeTests
{ {
private readonly ITestOutputHelper _output;
public GeneratedCodeTests(ITestOutputHelper output)
{
_output = output;
}
[ConditionalFact] [ConditionalFact]
public void GeneratedCodeIsUpToDate() public void GeneratedCodeIsUpToDate()
{ {
@ -50,12 +58,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
var testTransportMultiplxedConnectionGenerated = File.ReadAllText(testTransportMultiplexedConnectionGeneratedPath); var testTransportMultiplxedConnectionGenerated = File.ReadAllText(testTransportMultiplexedConnectionGeneratedPath);
var testTransportConnectionGenerated = File.ReadAllText(testTransportConnectionGeneratedPath); var testTransportConnectionGenerated = File.ReadAllText(testTransportConnectionGeneratedPath);
AssertFileContentEqual(currentHttpHeadersGenerated, testHttpHeadersGenerated); AssertFileContentEqual(currentHttpHeadersGenerated, testHttpHeadersGenerated, "HTTP headers");
AssertFileContentEqual(currentHttpProtocolGenerated, testHttpProtocolGenerated); AssertFileContentEqual(currentHttpProtocolGenerated, testHttpProtocolGenerated, "HTTP protocol");
AssertFileContentEqual(currentHttpUtilitiesGenerated, testHttpUtilitiesGenerated); AssertFileContentEqual(currentHttpUtilitiesGenerated, testHttpUtilitiesGenerated, "HTTP utilities");
AssertFileContentEqual(currentHttp2ConnectionGenerated, testHttp2ConnectionGenerated); AssertFileContentEqual(currentHttp2ConnectionGenerated, testHttp2ConnectionGenerated, "HTTP2 connection");
AssertFileContentEqual(currentTransportConnectionBaseGenerated, testTransportMultiplxedConnectionGenerated); AssertFileContentEqual(currentTransportConnectionBaseGenerated, testTransportMultiplxedConnectionGenerated, "TransportConnectionBase");
AssertFileContentEqual(currentTransportConnectionGenerated, testTransportConnectionGenerated); AssertFileContentEqual(currentTransportConnectionGenerated, testTransportConnectionGenerated, "TransportConnection");
} }
finally finally
{ {
@ -68,9 +76,21 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
} }
} }
private void AssertFileContentEqual(string expected, string actual) private void AssertFileContentEqual(string expected, string actual, string type)
{ {
Assert.Equal(expected.Trim(), actual.Trim(), ignoreLineEndingDifferences: true); try
{
Assert.Equal(expected.Trim(), actual.Trim(), ignoreLineEndingDifferences: true);
}
catch (Exception)
{
_output.WriteLine($"Error when comparing {type}.");
_output.WriteLine("Expected:");
_output.WriteLine(expected);
_output.WriteLine("Actual:");
_output.WriteLine(actual);
throw;
}
} }
} }
} }

View File

@ -21,10 +21,6 @@ namespace CodeGenerator
{ {
var requestPrimaryHeaders = new[] var requestPrimaryHeaders = new[]
{ {
":authority",
":method",
":path",
":scheme",
"Accept", "Accept",
"Connection", "Connection",
"Host", "Host",
@ -216,7 +212,7 @@ namespace CodeGenerator
static string AppendSwitch(IEnumerable<IGrouping<int, KnownHeader>> values) => static string AppendSwitch(IEnumerable<IGrouping<int, KnownHeader>> values) =>
$@"switch (name.Length) $@"switch (name.Length)
{{{Each(values, byLength => $@" {{{Each(values, byLength => $@"
case {byLength.Key}:{AppendSwitchSection(byLength.Key, byLength.OrderBy(h => (h.PrimaryHeader ? "_" : "") + h.Name))} case {byLength.Key}:{AppendSwitchSection(byLength.Key, byLength.OrderBy(h => h, KnownHeaderComparer.Instance).ToList())}
break;")} break;")}
}}"; }}";
@ -288,7 +284,7 @@ namespace CodeGenerator
} }
} }
static string AppendSwitchSection(int length, IOrderedEnumerable<KnownHeader> values) static string AppendSwitchSection(int length, IList<KnownHeader> values)
{ {
var useVarForFirstTerm = values.Count() > 1 && values.Select(h => h.FirstNameIgnoreCaseSegment()).Distinct().Count() == 1; var useVarForFirstTerm = values.Count() > 1 && values.Select(h => h.FirstNameIgnoreCaseSegment()).Distinct().Count() == 1;
var firstTermVarExpression = values.Select(h => h.FirstNameIgnoreCaseSegment()).FirstOrDefault(); var firstTermVarExpression = values.Select(h => h.FirstNameIgnoreCaseSegment()).FirstOrDefault();
@ -329,8 +325,13 @@ namespace CodeGenerator
} }
} }
var groups = values.GroupBy(header => header.EqualIgnoreCaseBytesFirstTerm()); // Group headers together that have the same ignore equal case equals check for the first term.
return start + $@"{Each(groups, (byFirstTerm, i) => $@"{(byFirstTerm.Count() == 1 ? $@"{Each(byFirstTerm, header => $@" // There will probably only be more than one item in a group for Content-Encoding, Content-Language, Content-Location.
var groups = values.GroupBy(header => header.EqualIgnoreCaseBytesFirstTerm())
.OrderBy(g => g.First(), KnownHeaderComparer.Instance)
.ToList();
return start + $@"{Each(groups, (byFirstTerm, i) => $@"{(byFirstTerm.Count() == 1 ? $@"{Each(byFirstTerm, header => $@"
{(i > 0 ? "else " : "")}if ({header.EqualIgnoreCaseBytes(firstTermVar)}) {(i > 0 ? "else " : "")}if ({header.EqualIgnoreCaseBytes(firstTermVar)})
{{{GenerateIfBody(header)} {{{GenerateIfBody(header)}
}}")}" : $@" }}")}" : $@"
@ -342,6 +343,7 @@ namespace CodeGenerator
}}")}")}"; }}")}")}";
} }
[DebuggerDisplay("{Name}")]
public class KnownHeader public class KnownHeader
{ {
public string Name { get; set; } public string Name { get; set; }
@ -654,7 +656,7 @@ namespace CodeGenerator
var responseTrailers = ResponseTrailers; var responseTrailers = ResponseTrailers;
var allHeaderNames = RequestHeaders.Concat(ResponseHeaders).Concat(ResponseTrailers) var allHeaderNames = RequestHeaders.Concat(ResponseHeaders).Concat(ResponseTrailers)
.Select(h => h.Identifier).Distinct().OrderBy(n => n).ToArray(); .Select(h => h.Identifier).Distinct().OrderBy(n => n, StringComparer.InvariantCulture).ToArray();
var loops = new[] var loops = new[]
{ {
@ -1174,13 +1176,6 @@ $@" private void Clear(long bitsToClear)
")}}}"; ")}}}";
} }
private class HPackGroup
{
public int[] HPackStaticTableIndexes { get; set; }
public KnownHeader Header { get; set; }
public string Name { get; set; }
}
private static IEnumerable<HPackGroup> GroupHPack(KnownHeader[] headers) private static IEnumerable<HPackGroup> GroupHPack(KnownHeader[] headers)
{ {
var staticHeaders = new (int Index, HeaderField HeaderField)[H2StaticTable.Count]; var staticHeaders = new (int Index, HeaderField HeaderField)[H2StaticTable.Count];
@ -1201,5 +1196,33 @@ $@" private void Clear(long bitsToClear)
return groupedHeaders; return groupedHeaders;
} }
private class HPackGroup
{
public int[] HPackStaticTableIndexes { get; set; }
public KnownHeader Header { get; set; }
public string Name { get; set; }
}
private class KnownHeaderComparer : IComparer<KnownHeader>
{
public static readonly KnownHeaderComparer Instance = new KnownHeaderComparer();
public int Compare(KnownHeader x, KnownHeader y)
{
// Primary headers appear first
if (x.PrimaryHeader && !y.PrimaryHeader)
{
return -1;
}
if (y.PrimaryHeader && !x.PrimaryHeader)
{
return 1;
}
// Then alphabetical
return StringComparer.InvariantCulture.Compare(x.Name, y.Name);
}
}
} }
} }