Parse chunked trailing headers
This commit is contained in:
parent
8d8176f14a
commit
e0f7bb06dd
|
|
@ -205,7 +205,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
||||||
private class ForChunkedEncoding : MessageBody
|
private class ForChunkedEncoding : MessageBody
|
||||||
{
|
{
|
||||||
private int _inputLength;
|
private int _inputLength;
|
||||||
|
|
||||||
private Mode _mode = Mode.ChunkPrefix;
|
private Mode _mode = Mode.ChunkPrefix;
|
||||||
|
|
||||||
public ForChunkedEncoding(bool keepAlive, FrameContext context)
|
public ForChunkedEncoding(bool keepAlive, FrameContext context)
|
||||||
|
|
@ -251,7 +250,26 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
||||||
while (_mode == Mode.Trailer)
|
while (_mode == Mode.Trailer)
|
||||||
{
|
{
|
||||||
ReadChunkedTrailer(input);
|
ReadChunkedTrailer(input);
|
||||||
await input;
|
|
||||||
|
if (_mode != Mode.Complete && _mode != Mode.TrailerHeaders)
|
||||||
|
{
|
||||||
|
await input;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_mode == Mode.TrailerHeaders)
|
||||||
|
{
|
||||||
|
// Take trailer headers
|
||||||
|
var frame = (Frame)_context;
|
||||||
|
while (!Frame.TakeMessageHeaders(input, frame._requestHeaders))
|
||||||
|
{
|
||||||
|
if (input.RemoteIntakeFin)
|
||||||
|
{
|
||||||
|
ThrowChunkedRequestIncomplete();
|
||||||
|
}
|
||||||
|
|
||||||
|
await input;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -270,6 +288,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
||||||
{
|
{
|
||||||
_mode = Mode.ChunkData;
|
_mode = Mode.ChunkData;
|
||||||
}
|
}
|
||||||
|
|
||||||
_inputLength = chunkSize;
|
_inputLength = chunkSize;
|
||||||
}
|
}
|
||||||
else if (input.RemoteIntakeFin)
|
else if (input.RemoteIntakeFin)
|
||||||
|
|
@ -361,7 +380,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Post request headers
|
// Post request headers
|
||||||
ThrowTrailingHeadersNotSupported();
|
if (_context is Frame)
|
||||||
|
{
|
||||||
|
_mode = Mode.TrailerHeaders;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ThrowTrailingHeadersNotSupported();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|
@ -489,6 +515,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Http
|
||||||
ChunkData,
|
ChunkData,
|
||||||
ChunkSuffix,
|
ChunkSuffix,
|
||||||
Trailer,
|
Trailer,
|
||||||
|
TrailerHeaders,
|
||||||
Complete
|
Complete
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue