X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Net.Http%2FSystem.Net.Http.Headers%2FHttpHeaders.cs;h=a36652ce4eb4e3379bd626abd17c3473056a6b2c;hb=17183a6fbf75a5ca960d7541676aea7fd7b09d21;hp=5f32c034c710ed742ada3c669eb38940154b5860;hpb=e7951e6ee0786855af92d677d5fb20fe14f5ecdf;p=mono.git diff --git a/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs b/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs index 5f32c034c71..a36652ce4eb 100644 --- a/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs +++ b/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs @@ -117,7 +117,7 @@ namespace System.Net.Http.Headers HeaderInfo.CreateSingle ("Last-Modified", Parser.DateTime.TryParse, HttpHeaderKind.Content), HeaderInfo.CreateSingle ("Location", Parser.Uri.TryParse, HttpHeaderKind.Response), HeaderInfo.CreateSingle ("Max-Forwards", Parser.Int.TryParse, HttpHeaderKind.Request), - HeaderInfo.CreateMulti ("Pragma", NameValueHeaderValue.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response), + HeaderInfo.CreateMultiList ("Pragma", NameValueHeaderValue.TryParsePragma, HttpHeaderKind.Request | HttpHeaderKind.Response), HeaderInfo.CreateMulti ("Proxy-Authenticate", AuthenticationHeaderValue.TryParse, HttpHeaderKind.Response), HeaderInfo.CreateSingle ("Proxy-Authorization", AuthenticationHeaderValue.TryParse, HttpHeaderKind.Request), HeaderInfo.CreateSingle ("Range", RangeHeaderValue.TryParse, HttpHeaderKind.Request), @@ -128,7 +128,7 @@ namespace System.Net.Http.Headers HeaderInfo.CreateMulti ("Trailer", Parser.Token.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response), HeaderInfo.CreateMulti ("Transfer-Encoding", TransferCodingHeaderValue.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response), HeaderInfo.CreateMulti ("Upgrade", ProductHeaderValue.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response), - HeaderInfo.CreateMulti ("User-Agent", ProductInfoHeaderValue.TryParse, HttpHeaderKind.Request), + HeaderInfo.CreateMultiList ("User-Agent", ProductInfoHeaderValue.TryParse, HttpHeaderKind.Request), HeaderInfo.CreateMulti ("Vary", Parser.Token.TryParse, HttpHeaderKind.Response), HeaderInfo.CreateMulti ("Via", ViaHeaderValue.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response), HeaderInfo.CreateMulti ("Warning", WarningHeaderValue.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response), @@ -221,18 +221,22 @@ namespace System.Net.Http.Headers return ok; } - public void AddWithoutValidation (string name, string value) + public bool TryAddWithoutValidation (string name, string value) { - AddWithoutValidation (name, new[] { value }); + return TryAddWithoutValidation (name, new[] { value }); } - public void AddWithoutValidation (string name, IEnumerable values) + public bool TryAddWithoutValidation (string name, IEnumerable values) { if (values == null) throw new ArgumentNullException ("values"); - CheckName (name); + HeaderInfo headerInfo; + if (!TryCheckName (name, out headerInfo)) + return false; + AddInternal (name, values, null, true); + return true; } HeaderInfo CheckName (string name) @@ -253,6 +257,21 @@ namespace System.Net.Http.Headers 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; @@ -290,6 +309,8 @@ namespace System.Net.Http.Headers public IEnumerable GetValues (string name) { + CheckName (name); + IEnumerable values; if (!TryGetValues (name, out values)) throw new InvalidOperationException (); @@ -305,7 +326,11 @@ namespace System.Net.Http.Headers public bool TryGetValues (string name, out IEnumerable 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)) { @@ -313,7 +338,7 @@ namespace System.Net.Http.Headers return false; } - values = GetAllHeaderValues (bucket, header_info); + values = GetAllHeaderValues (bucket, headerInfo); return true; }