Imported Upstream version 3.12.0

Former-commit-id: cf92446697332992ec36726e78eb8703e1f259d7
This commit is contained in:
Jo Shields
2015-01-13 10:44:36 +00:00
parent 8b9b85e7f5
commit 181b81b4a4
659 changed files with 12743 additions and 16300 deletions

View File

@ -120,9 +120,17 @@ namespace System.Net.Http.Headers
public string Name {
get {
return FindParameter ("name");
var value = FindParameter ("name");
if (value == null)
return null;
return DecodeValue (value, false);
}
set {
if (value != null)
value = EncodeBase64Value (value);
SetValue ("name", value);
}
}
@ -249,6 +257,11 @@ namespace System.Net.Http.Headers
continue;
}
if (!Lexer.IsValidCharacter (ch) || ch == '*' || ch == '?' || ch == '%') {
sb.Append (Uri.HexEscape (ch));
continue;
}
sb.Append (ch);
}

View File

@ -170,7 +170,7 @@ namespace System.Net.Http.Headers
} else {
value.From = nvalue;
t = lexer.Scan ();
t = lexer.Scan (recognizeDash: true);
if (t != Token.Type.SeparatorDash)
return false;

View File

@ -96,6 +96,7 @@ namespace System.Net.Http.Headers
HeaderInfo.CreateSingle<AuthenticationHeaderValue> ("Authorization", AuthenticationHeaderValue.TryParse, HttpHeaderKind.Request),
HeaderInfo.CreateSingle<CacheControlHeaderValue> ("Cache-Control", CacheControlHeaderValue.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response),
HeaderInfo.CreateMulti<string> ("Connection", CollectionParser.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response),
HeaderInfo.CreateSingle<ContentDispositionHeaderValue> ("Content-Disposition", ContentDispositionHeaderValue.TryParse, HttpHeaderKind.Content),
HeaderInfo.CreateMulti<string> ("Content-Encoding", CollectionParser.TryParse, HttpHeaderKind.Content),
HeaderInfo.CreateMulti<string> ("Content-Language", CollectionParser.TryParse, HttpHeaderKind.Content),
HeaderInfo.CreateSingle<long> ("Content-Length", Parser.Long.TryParse, HttpHeaderKind.Content),

View File

@ -193,13 +193,18 @@ namespace System.Net.Http.Headers
//
for (; i < input.Length; ++i) {
char s = input[i];
if (s > last_token_char || !token_chars[s])
if (!IsValidCharacter (s))
return false;
}
return i > 0;
}
public static bool IsValidCharacter (char input)
{
return input <= last_token_char && token_chars[input];
}
public void EatChar ()
{
++pos;
@ -247,7 +252,7 @@ namespace System.Net.Http.Headers
return false;
}
public Token Scan ()
public Token Scan (bool recognizeDash = false)
{
int start = pos;
if (s == null)
@ -279,8 +284,12 @@ namespace System.Net.Http.Headers
ttype = Token.Type.SeparatorSlash;
break;
case '-':
ttype = Token.Type.SeparatorDash;
break;
if (recognizeDash) {
ttype = Token.Type.SeparatorDash;
break;
}
goto default;
case ',':
ttype = Token.Type.SeparatorComma;
break;

View File

@ -127,7 +127,7 @@ namespace System.Net.Http.Headers
int number;
token_read = false;
t = lexer.Scan ();
t = lexer.Scan (recognizeDash: true);
switch (t.Kind) {
case Token.Type.SeparatorDash:
t = lexer.Scan ();
@ -144,7 +144,7 @@ namespace System.Net.Http.Headers
switch (values.Length) {
case 1:
t = lexer.Scan ();
t = lexer.Scan (recognizeDash: true);
from = number;
switch (t.Kind) {
case Token.Type.SeparatorDash:

View File

@ -50,7 +50,6 @@ namespace System.Net.Http
bool useProxy;
ClientCertificateOption certificate;
bool sentRequest;
HttpWebRequest wrequest;
string connectionGroupName;
bool disposed;
@ -221,12 +220,9 @@ namespace System.Net.Http
protected override void Dispose (bool disposing)
{
if (disposing) {
if (wrequest != null) {
wrequest.ServicePoint.CloseConnectionGroup (wrequest.ConnectionGroupName);
Volatile.Write (ref wrequest, null);
}
if (disposing && !disposed) {
Volatile.Write (ref disposed, true);
ServicePointManager.CloseConnectionGroup (connectionGroupName);
}
base.Dispose (disposing);
@ -317,7 +313,7 @@ namespace System.Net.Http
throw new ObjectDisposedException (GetType ().ToString ());
Volatile.Write (ref sentRequest, true);
wrequest = CreateWebRequest (request);
var wrequest = CreateWebRequest (request);
if (request.Content != null) {
var headers = wrequest.Headers;

View File

@ -237,6 +237,36 @@ namespace MonoTests.System.Net.Http.Headers
value.FileNameStar = "ÄŤ";
Assert.AreEqual ("ÄŤ", value.FileNameStar, "#11");
Assert.AreEqual (new NameValueHeaderValue ("filename*", "utf-8''%C4%8D"), value.Parameters.First (), "#12");
value.FileNameStar = "@x*\\%?.txt";
Assert.AreEqual ("@x*\\%?.txt", value.FileNameStar, "#21");
Assert.AreEqual (new NameValueHeaderValue ("filename*", "utf-8''%40x%2A%5C%25%3F.txt"), value.Parameters.First (), "#22");
}
[Test]
public void Properties_Name ()
{
var value = new ContentDispositionHeaderValue ("a");
value.Name = "aa";
Assert.AreEqual ("aa", value.Name, "#1");
Assert.AreEqual (new NameValueHeaderValue ("name", "aa"), value.Parameters.First (), "#2");
value.Name = "ÄŤ";
Assert.AreEqual ("ÄŤ", value.Name, "#11");
Assert.AreEqual (new NameValueHeaderValue ("name", "\"=?utf-8?B?xI0=?=\""), value.Parameters.First (), "#12");
value.Name = "(@)";
Assert.AreEqual ("\"(@)\"", value.Name, "#21");
Assert.AreEqual (new NameValueHeaderValue ("name", "\"(@)\""), value.Parameters.First (), "#22");
value.Name = "\"ÄŤ\"";
Assert.AreEqual ("ÄŤ", value.Name, "#31");
Assert.AreEqual (new NameValueHeaderValue ("name", "\"=?utf-8?B?xI0=?=\""), value.Parameters.First (), "#32");
value.Name = "\"quoted\"";
Assert.AreEqual ("\"quoted\"", value.Name, "#41");
Assert.AreEqual (new NameValueHeaderValue ("name", "\"quoted\""), value.Parameters.First (), "#42");
}
[Test]

View File

@ -31,6 +31,7 @@ using System.Collections;
using System.Collections.Generic;
using NUnit.Framework;
using System.Net.Http.Headers;
using System.Linq;
namespace MonoTests.System.Net.Http.Headers
{
@ -81,6 +82,13 @@ namespace MonoTests.System.Net.Http.Headers
Assert.AreEqual ("mu/m", res.MediaType, "#2");
Assert.AreEqual ("jj'", res.CharSet, "#2b");
Assert.AreEqual ("mu/m; CHarset=jj'", res.ToString (), "#2c");
res = MediaTypeHeaderValue.Parse ("multipart/form-data; boundary=----Wk");
Assert.AreEqual ("multipart/form-data", res.MediaType, "#3");
Assert.IsNull (res.CharSet, "#3b");
Assert.AreEqual (1, res.Parameters.Count, "#3c");
Assert.AreEqual (new NameValueHeaderValue ("boundary", "----Wk"), res.Parameters.First (), "#3d");
Assert.AreEqual ("multipart/form-data; boundary=----Wk", res.ToString (), "#3e");
}
[Test]

View File

@ -222,6 +222,7 @@ namespace MonoTests.System.Net.Http
Assert.AreEqual (330, scm.Headers.ContentLength, "#2");
headers.Allow.Add ("a1");
headers.ContentDisposition = new ContentDispositionHeaderValue ("cd1");
headers.ContentEncoding.Add ("ce1");
headers.ContentLanguage.Add ("cl1");
headers.ContentLength = 23;
@ -234,6 +235,12 @@ namespace MonoTests.System.Net.Http
headers.Add ("allow", "a2");
try {
headers.Add ("content-disposition", "cd2");
Assert.Fail ("content-disposition");
} catch (FormatException) {
}
headers.Add ("content-encoding", "ce3");
headers.Add ("content-language", "cl2");
@ -307,6 +314,7 @@ namespace MonoTests.System.Net.Http
Assert.AreEqual (new MediaTypeHeaderValue ("multipart/*"), headers.ContentType);
Assert.AreEqual (new DateTimeOffset (DateTime.Today), headers.Expires);
Assert.AreEqual (new DateTimeOffset (DateTime.Today), headers.LastModified);
Assert.AreEqual (new ContentDispositionHeaderValue ("cd1"), headers.ContentDisposition);
}
[Test]