HeaderInfo.CreateMulti<string> ("Trailer", Parser.Token.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response),
HeaderInfo.CreateMulti<TransferCodingHeaderValue> ("Transfer-Encoding", TransferCodingHeaderValue.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response),
HeaderInfo.CreateMulti<ProductHeaderValue> ("Upgrade", ProductHeaderValue.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response),
- HeaderInfo.CreateMulti<ProductInfoHeaderValue> ("User-Agent", ProductInfoHeaderValue.TryParse, HttpHeaderKind.Request),
+ HeaderInfo.CreateMultiList<ProductInfoHeaderValue> ("User-Agent", ProductInfoHeaderValue.TryParse, HttpHeaderKind.Request),
HeaderInfo.CreateMulti<string> ("Vary", Parser.Token.TryParse, HttpHeaderKind.Response),
HeaderInfo.CreateMulti<ViaHeaderValue> ("Via", ViaHeaderValue.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response),
HeaderInfo.CreateMulti<WarningHeaderValue> ("Warning", WarningHeaderValue.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response),
if (values == null)
throw new ArgumentNullException ("values");
- if (string.IsNullOrEmpty (name))
- return false;
-
- Parser.Token.Check (name);
-
HeaderInfo headerInfo;
- if (known_headers.TryGetValue (name, out headerInfo) && (headerInfo.HeaderKind & HeaderKind) == 0) {
- if (HeaderKind != HttpHeaderKind.None && ((HeaderKind | headerInfo.HeaderKind) & HttpHeaderKind.Content) != 0)
- return false;
- }
+ if (!TryCheckName (name, out headerInfo))
+ return false;
AddInternal (name, values, null, true);
return true;
return headerInfo;
}
+ bool TryCheckName (string name, out HeaderInfo headerInfo)
+ {
+ if (!Parser.Token.TryCheck (name)) {
+ headerInfo = null;
+ return false;
+ }
+
+ if (known_headers.TryGetValue (name, out headerInfo) && (headerInfo.HeaderKind & HeaderKind) == 0) {
+ if (HeaderKind != HttpHeaderKind.None && ((HeaderKind | headerInfo.HeaderKind) & HttpHeaderKind.Content) != 0)
+ return false;
+ }
+
+ return true;
+ }
+
public void Clear ()
{
connectionclose = null;
public IEnumerable<string> GetValues (string name)
{
+ CheckName (name);
+
IEnumerable<string> values;
if (!TryGetValues (name, out values))
throw new InvalidOperationException ();
public bool TryGetValues (string name, out IEnumerable<string> values)
{
- var header_info = CheckName (name);
+ HeaderInfo headerInfo;
+ if (!TryCheckName (name, out headerInfo)) {
+ values = null;
+ return false;
+ }
HeaderBucket bucket;
if (!headers.TryGetValue (name, out bucket)) {
return false;
}
- values = GetAllHeaderValues (bucket, header_info);
+ values = GetAllHeaderValues (bucket, headerInfo);
return true;
}