Don't alloc IEnumerable in Reset for ITlsConnectionFeature (#2009)
* Don't alloc IEnumerable for ITlsConnectionFeature * Delegate to ConnectionFeatures and determine scheme once
This commit is contained in:
parent
2e6687031d
commit
11a9b6498d
|
|
@ -251,13 +251,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
||||||
|
|
||||||
object IFeatureCollection.this[Type key]
|
object IFeatureCollection.this[Type key]
|
||||||
{
|
{
|
||||||
get => FastFeatureGet(key);
|
get => FastFeatureGet(key) ?? ConnectionFeatures?[key];
|
||||||
set => FastFeatureSet(key, value);
|
set => FastFeatureSet(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
TFeature IFeatureCollection.Get<TFeature>()
|
TFeature IFeatureCollection.Get<TFeature>()
|
||||||
{
|
{
|
||||||
return (TFeature)FastFeatureGet(typeof(TFeature));
|
return (TFeature)(FastFeatureGet(typeof(TFeature)) ?? ConnectionFeatures?[typeof(TFeature)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IFeatureCollection.Set<TFeature>(TFeature instance)
|
void IFeatureCollection.Set<TFeature>(TFeature instance)
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
||||||
|
|
||||||
private HttpRequestTarget _requestTargetForm = HttpRequestTarget.Unknown;
|
private HttpRequestTarget _requestTargetForm = HttpRequestTarget.Unknown;
|
||||||
private Uri _absoluteRequestTarget;
|
private Uri _absoluteRequestTarget;
|
||||||
|
private string _scheme = null;
|
||||||
|
|
||||||
public Frame(FrameContext frameContext)
|
public Frame(FrameContext frameContext)
|
||||||
{
|
{
|
||||||
|
|
@ -338,7 +339,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
||||||
MaxRequestBodySize = ServerOptions.Limits.MaxRequestBodySize;
|
MaxRequestBodySize = ServerOptions.Limits.MaxRequestBodySize;
|
||||||
AllowSynchronousIO = ServerOptions.AllowSynchronousIO;
|
AllowSynchronousIO = ServerOptions.AllowSynchronousIO;
|
||||||
TraceIdentifier = null;
|
TraceIdentifier = null;
|
||||||
Scheme = null;
|
|
||||||
Method = null;
|
Method = null;
|
||||||
PathBase = null;
|
PathBase = null;
|
||||||
Path = null;
|
Path = null;
|
||||||
|
|
@ -362,20 +362,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
|
||||||
RequestHeaders = FrameRequestHeaders;
|
RequestHeaders = FrameRequestHeaders;
|
||||||
ResponseHeaders = FrameResponseHeaders;
|
ResponseHeaders = FrameResponseHeaders;
|
||||||
|
|
||||||
if (ConnectionFeatures != null)
|
if (_scheme == null)
|
||||||
{
|
{
|
||||||
foreach (var feature in ConnectionFeatures)
|
var tlsFeature = ConnectionFeatures?[typeof(ITlsConnectionFeature)];
|
||||||
{
|
_scheme = tlsFeature != null ? "https" : "http";
|
||||||
// Set the scheme to https if there's an ITlsConnectionFeature
|
|
||||||
if (feature.Key == typeof(ITlsConnectionFeature))
|
|
||||||
{
|
|
||||||
Scheme = "https";
|
|
||||||
}
|
|
||||||
|
|
||||||
FastFeatureSet(feature.Key, feature.Value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Scheme = _scheme;
|
||||||
|
|
||||||
_manuallySetRequestAbortToken = null;
|
_manuallySetRequestAbortToken = null;
|
||||||
_abortedCts = null;
|
_abortedCts = null;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -246,13 +246,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
||||||
|
|
||||||
object IFeatureCollection.this[Type key]
|
object IFeatureCollection.this[Type key]
|
||||||
{
|
{
|
||||||
get => FastFeatureGet(key);
|
get => FastFeatureGet(key) ?? ConnectionFeatures?[key];
|
||||||
set => FastFeatureSet(key, value);
|
set => FastFeatureSet(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
TFeature IFeatureCollection.Get<TFeature>()
|
TFeature IFeatureCollection.Get<TFeature>()
|
||||||
{
|
{
|
||||||
return (TFeature)FastFeatureGet(typeof(TFeature));
|
return (TFeature)(FastFeatureGet(typeof(TFeature)) ?? ConnectionFeatures?[typeof(TFeature)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IFeatureCollection.Set<TFeature>(TFeature instance)
|
void IFeatureCollection.Set<TFeature>(TFeature instance)
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
||||||
|
|
||||||
private HttpRequestTarget _requestTargetForm = HttpRequestTarget.Unknown;
|
private HttpRequestTarget _requestTargetForm = HttpRequestTarget.Unknown;
|
||||||
private Uri _absoluteRequestTarget;
|
private Uri _absoluteRequestTarget;
|
||||||
|
private string _scheme = null;
|
||||||
|
|
||||||
public Http2Stream(Http2StreamContext context)
|
public Http2Stream(Http2StreamContext context)
|
||||||
{
|
{
|
||||||
|
|
@ -248,7 +249,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
||||||
MaxRequestBodySize = ServerOptions.Limits.MaxRequestBodySize;
|
MaxRequestBodySize = ServerOptions.Limits.MaxRequestBodySize;
|
||||||
AllowSynchronousIO = ServerOptions.AllowSynchronousIO;
|
AllowSynchronousIO = ServerOptions.AllowSynchronousIO;
|
||||||
TraceIdentifier = null;
|
TraceIdentifier = null;
|
||||||
Scheme = null;
|
|
||||||
Method = null;
|
Method = null;
|
||||||
PathBase = null;
|
PathBase = null;
|
||||||
Path = null;
|
Path = null;
|
||||||
|
|
@ -271,20 +271,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2
|
||||||
RequestHeaders = FrameRequestHeaders;
|
RequestHeaders = FrameRequestHeaders;
|
||||||
ResponseHeaders = FrameResponseHeaders;
|
ResponseHeaders = FrameResponseHeaders;
|
||||||
|
|
||||||
if (ConnectionFeatures != null)
|
if (_scheme == null)
|
||||||
{
|
{
|
||||||
foreach (var feature in ConnectionFeatures)
|
var tlsFeature = ConnectionFeatures?[typeof(ITlsConnectionFeature)];
|
||||||
{
|
_scheme = tlsFeature != null ? "https" : "http";
|
||||||
// Set the scheme to https if there's an ITlsConnectionFeature
|
|
||||||
if (feature.Key == typeof(ITlsConnectionFeature))
|
|
||||||
{
|
|
||||||
Scheme = "https";
|
|
||||||
}
|
|
||||||
|
|
||||||
FastFeatureSet(feature.Key, feature.Value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Scheme = _scheme;
|
||||||
|
|
||||||
_manuallySetRequestAbortToken = null;
|
_manuallySetRequestAbortToken = null;
|
||||||
_abortedCts = null;
|
_abortedCts = null;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue