diff options
author | James Newton-King <james@newtonking.com> | 2022-07-11 08:06:45 +0300 |
---|---|---|
committer | James Newton-King <james@newtonking.com> | 2022-07-11 08:06:45 +0300 |
commit | 568710014ad33ceda4c732f584ad74330f6bacb8 (patch) | |
tree | 0d8018326c877fa0266ca23f9dc00759ad5aea3c | |
parent | e6dd3946f1f14e4182c70ac532dda10dd0f25f4b (diff) |
Reuse Http3MessageBodyjamesnk/h3-messagebody
-rw-r--r-- | src/Servers/Kestrel/Core/src/Internal/Http3/Http3MessageBody.cs | 9 | ||||
-rw-r--r-- | src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs | 14 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3MessageBody.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3MessageBody.cs index b271ebc076..3acf52411a 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3MessageBody.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3MessageBody.cs @@ -14,10 +14,11 @@ internal sealed class Http3MessageBody : MessageBody private readonly Http3Stream _context; private ReadResult _readResult; - private Http3MessageBody(Http3Stream context) + public Http3MessageBody(Http3Stream context) : base(context) { _context = context; + ExtendedConnect = _context.IsExtendedConnectRequest; } protected override void OnReadStarting() @@ -31,9 +32,11 @@ internal sealed class Http3MessageBody : MessageBody } } - public static MessageBody For(Http3Stream context) + public override void Reset() { - return new Http3MessageBody(context); + base.Reset(); + _readResult = default; + ExtendedConnect = _context.IsExtendedConnectRequest; } public override void AdvanceTo(SequencePosition consumed, SequencePosition examined) diff --git a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs index fd264c564a..3dc1bcc628 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs @@ -52,6 +52,7 @@ internal abstract partial class Http3Stream : HttpProtocol, IHttp3Stream, IHttpS private PseudoHeaderFields _parsedPseudoHeaderFields; private int _totalParsedHeaderSize; private bool _isMethodConnect; + private Http3MessageBody? _messageBody; private readonly ManualResetValueTaskSource<object?> _appCompletedTaskSource = new ManualResetValueTaskSource<object?>(); @@ -921,7 +922,18 @@ internal abstract partial class Http3Stream : HttpProtocol, IHttp3Stream, IHttpS } protected override MessageBody CreateMessageBody() - => Http3MessageBody.For(this); + { + if (_messageBody != null) + { + _messageBody.Reset(); + } + else + { + _messageBody = new Http3MessageBody(this); + } + + return _messageBody; + } protected override bool TryParseRequest(ReadResult result, out bool endConnection) { |