Merge branch 'benaadams/fastpath-header-enumerator' into dev
This commit is contained in:
commit
6d3e5d3bf2
|
|
@ -418,7 +418,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
|
|
||||||
var status = ReasonPhrases.ToStatus(StatusCode, ReasonPhrase);
|
var status = ReasonPhrases.ToStatus(StatusCode, ReasonPhrase);
|
||||||
|
|
||||||
var responseHeader = CreateResponseHeader(status, appCompleted, ResponseHeaders);
|
var responseHeader = CreateResponseHeader(status, appCompleted);
|
||||||
SocketOutput.Write(responseHeader.Item1, immediate: immediate);
|
SocketOutput.Write(responseHeader.Item1, immediate: immediate);
|
||||||
responseHeader.Item2.Dispose();
|
responseHeader.Item2.Dispose();
|
||||||
}
|
}
|
||||||
|
|
@ -461,8 +461,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
|
|
||||||
private Tuple<ArraySegment<byte>, IDisposable> CreateResponseHeader(
|
private Tuple<ArraySegment<byte>, IDisposable> CreateResponseHeader(
|
||||||
string status,
|
string status,
|
||||||
bool appCompleted,
|
bool appCompleted)
|
||||||
IEnumerable<KeyValuePair<string, StringValues>> headers)
|
|
||||||
{
|
{
|
||||||
var writer = new MemoryPoolTextWriter(Memory);
|
var writer = new MemoryPoolTextWriter(Memory);
|
||||||
writer.Write(HttpVersion);
|
writer.Write(HttpVersion);
|
||||||
|
|
@ -474,42 +473,41 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
var hasConnection = false;
|
var hasConnection = false;
|
||||||
var hasTransferEncoding = false;
|
var hasTransferEncoding = false;
|
||||||
var hasContentLength = false;
|
var hasContentLength = false;
|
||||||
if (headers != null)
|
|
||||||
|
foreach (var header in _responseHeaders)
|
||||||
{
|
{
|
||||||
foreach (var header in headers)
|
var isConnection = false;
|
||||||
|
if (!hasConnection &&
|
||||||
|
string.Equals(header.Key, "Connection", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
var isConnection = false;
|
hasConnection = isConnection = true;
|
||||||
if (!hasConnection &&
|
}
|
||||||
string.Equals(header.Key, "Connection", StringComparison.OrdinalIgnoreCase))
|
else if (!hasTransferEncoding &&
|
||||||
{
|
string.Equals(header.Key, "Transfer-Encoding", StringComparison.OrdinalIgnoreCase))
|
||||||
hasConnection = isConnection = true;
|
{
|
||||||
}
|
hasTransferEncoding = true;
|
||||||
else if (!hasTransferEncoding &&
|
}
|
||||||
string.Equals(header.Key, "Transfer-Encoding", StringComparison.OrdinalIgnoreCase))
|
else if (!hasContentLength &&
|
||||||
{
|
string.Equals(header.Key, "Content-Length", StringComparison.OrdinalIgnoreCase))
|
||||||
hasTransferEncoding = true;
|
{
|
||||||
}
|
hasContentLength = true;
|
||||||
else if (!hasContentLength &&
|
}
|
||||||
string.Equals(header.Key, "Content-Length", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
hasContentLength = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var value in header.Value)
|
foreach (var value in header.Value)
|
||||||
{
|
{
|
||||||
writer.Write(header.Key);
|
writer.Write(header.Key);
|
||||||
writer.Write(':');
|
writer.Write(':');
|
||||||
writer.Write(' ');
|
writer.Write(' ');
|
||||||
writer.Write(value);
|
writer.Write(value);
|
||||||
writer.Write('\r');
|
writer.Write('\r');
|
||||||
writer.Write('\n');
|
writer.Write('\n');
|
||||||
|
|
||||||
if (isConnection && value.IndexOf("close", StringComparison.OrdinalIgnoreCase) != -1)
|
if (isConnection && value.IndexOf("close", StringComparison.OrdinalIgnoreCase) != -1)
|
||||||
{
|
{
|
||||||
_keepAlive = false;
|
_keepAlive = false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_keepAlive && !hasTransferEncoding && !hasContentLength)
|
if (_keepAlive && !hasTransferEncoding && !hasContentLength)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue