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);
|
||||
}}
|
||||
|
||||
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 bool MoveNext()
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
|||
Terminated,
|
||||
}
|
||||
|
||||
static Encoding _ascii = Encoding.ASCII;
|
||||
Mode _mode;
|
||||
private bool _resultStarted;
|
||||
private bool _responseStarted;
|
||||
|
|
@ -517,11 +518,11 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
|||
ch2 != ' ' &&
|
||||
ch2 != '\t')
|
||||
{
|
||||
var name = Encoding.ASCII.GetString(remaining.Array, remaining.Offset, colonIndex);
|
||||
var name = _ascii.GetString(remaining.Array, remaining.Offset, colonIndex);
|
||||
var value = "";
|
||||
if (valueEndIndex != -1)
|
||||
{
|
||||
value = Encoding.ASCII.GetString(
|
||||
value = _ascii.GetString(
|
||||
remaining.Array, remaining.Offset + valueStartIndex, valueEndIndex - valueStartIndex);
|
||||
}
|
||||
if (wrappedHeaders)
|
||||
|
|
@ -565,17 +566,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
|||
|
||||
private void AddRequestHeader(string name, string value)
|
||||
{
|
||||
string[] existing;
|
||||
if (!RequestHeaders.TryGetValue(name, out existing) ||
|
||||
existing == null ||
|
||||
existing.Length == 0)
|
||||
{
|
||||
RequestHeaders[name] = new[] { value };
|
||||
}
|
||||
else
|
||||
{
|
||||
RequestHeaders[name] = existing.Concat(new[] { value }).ToArray();
|
||||
}
|
||||
_requestHeaders.Append(name, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
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 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()
|
||||
{ throw new NotImplementedException(); }
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue