Improvements to appending request header
This commit is contained in:
parent
96b03ee212
commit
f9cf9f1936
|
|
@ -288,6 +288,32 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
((ICollection<KeyValuePair<string, string[]>>)MaybeUnknown)?.CopyTo(array, arrayIndex);
|
((ICollection<KeyValuePair<string, string[]>>)MaybeUnknown)?.CopyTo(array, arrayIndex);
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
public void Append(string key, string value)
|
||||||
|
{{
|
||||||
|
switch(key.Length)
|
||||||
|
{{{Each(loop.HeadersByLength, byLength => $@"
|
||||||
|
case {byLength.Key}:
|
||||||
|
{{{Each(byLength, header => $@"
|
||||||
|
if (""{header.Name}"".Equals(key, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{{
|
||||||
|
if ({header.TestBit()})
|
||||||
|
{{
|
||||||
|
_{header.Identifier} = AppendValue(_{header.Identifier}, value);
|
||||||
|
}}
|
||||||
|
else
|
||||||
|
{{
|
||||||
|
{header.SetBit()};
|
||||||
|
_{header.Identifier} = new[] {{value}};
|
||||||
|
}}
|
||||||
|
return;
|
||||||
|
}}
|
||||||
|
")}}}
|
||||||
|
break;
|
||||||
|
")}}}
|
||||||
|
string[] existing;
|
||||||
|
Unknown[key] = Unknown.TryGetValue(key, out existing) ? AppendValue(existing, value) : new[] {{value}};
|
||||||
|
}}
|
||||||
|
|
||||||
public partial struct Enumerator
|
public partial struct Enumerator
|
||||||
{{
|
{{
|
||||||
public bool MoveNext()
|
public bool MoveNext()
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
Terminated,
|
Terminated,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Encoding _ascii = Encoding.ASCII;
|
||||||
Mode _mode;
|
Mode _mode;
|
||||||
private bool _resultStarted;
|
private bool _resultStarted;
|
||||||
private bool _responseStarted;
|
private bool _responseStarted;
|
||||||
|
|
@ -517,11 +518,11 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
ch2 != ' ' &&
|
ch2 != ' ' &&
|
||||||
ch2 != '\t')
|
ch2 != '\t')
|
||||||
{
|
{
|
||||||
var name = Encoding.ASCII.GetString(remaining.Array, remaining.Offset, colonIndex);
|
var name = _ascii.GetString(remaining.Array, remaining.Offset, colonIndex);
|
||||||
var value = "";
|
var value = "";
|
||||||
if (valueEndIndex != -1)
|
if (valueEndIndex != -1)
|
||||||
{
|
{
|
||||||
value = Encoding.ASCII.GetString(
|
value = _ascii.GetString(
|
||||||
remaining.Array, remaining.Offset + valueStartIndex, valueEndIndex - valueStartIndex);
|
remaining.Array, remaining.Offset + valueStartIndex, valueEndIndex - valueStartIndex);
|
||||||
}
|
}
|
||||||
if (wrappedHeaders)
|
if (wrappedHeaders)
|
||||||
|
|
@ -565,17 +566,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
|
|
||||||
private void AddRequestHeader(string name, string value)
|
private void AddRequestHeader(string name, string value)
|
||||||
{
|
{
|
||||||
string[] existing;
|
_requestHeaders.Append(name, value);
|
||||||
if (!RequestHeaders.TryGetValue(name, out existing) ||
|
|
||||||
existing == null ||
|
|
||||||
existing.Length == 0)
|
|
||||||
{
|
|
||||||
RequestHeaders[name] = new[] { value };
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
RequestHeaders[name] = existing.Concat(new[] { value }).ToArray();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -11,6 +11,14 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
|
|
||||||
protected Dictionary<string, string[]> Unknown => MaybeUnknown ?? (MaybeUnknown = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase));
|
protected Dictionary<string, string[]> Unknown => MaybeUnknown ?? (MaybeUnknown = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase));
|
||||||
|
|
||||||
|
protected static string[] AppendValue(string[] existing, string append)
|
||||||
|
{
|
||||||
|
var appended = new string[existing.Length + 1];
|
||||||
|
Array.Copy(existing, appended, existing.Length);
|
||||||
|
appended[existing.Length] = append;
|
||||||
|
return appended;
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual int GetCountFast()
|
protected virtual int GetCountFast()
|
||||||
{ throw new NotImplementedException(); }
|
{ throw new NotImplementedException(); }
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue