summaryrefslogtreecommitdiff
path: root/mcs/class/System.Net.Http/System.Net.Http.Headers/NameValueWithParametersHeaderValue.cs
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/System.Net.Http/System.Net.Http.Headers/NameValueWithParametersHeaderValue.cs')
-rw-r--r--mcs/class/System.Net.Http/System.Net.Http.Headers/NameValueWithParametersHeaderValue.cs53
1 files changed, 45 insertions, 8 deletions
diff --git a/mcs/class/System.Net.Http/System.Net.Http.Headers/NameValueWithParametersHeaderValue.cs b/mcs/class/System.Net.Http/System.Net.Http.Headers/NameValueWithParametersHeaderValue.cs
index 81d7bb089c..3d32834184 100644
--- a/mcs/class/System.Net.Http/System.Net.Http.Headers/NameValueWithParametersHeaderValue.cs
+++ b/mcs/class/System.Net.Http/System.Net.Http.Headers/NameValueWithParametersHeaderValue.cs
@@ -53,8 +53,8 @@ namespace System.Net.Http.Headers
}
}
- private NameValueWithParametersHeaderValue (NameValueHeaderValue source)
- : base (source)
+ private NameValueWithParametersHeaderValue ()
+ : base ()
{
}
@@ -102,15 +102,52 @@ namespace System.Net.Http.Headers
public static bool TryParse (string input, out NameValueWithParametersHeaderValue parsedValue)
{
- List<NameValueHeaderValue> values;
- if (!TryParseParameters (new Lexer (input), out values)) {
- parsedValue = null;
+ var lexer = new Lexer (input);
+ Token token;
+ if (TryParseElement (lexer, out parsedValue, out token) && token == Token.Type.End)
+ return true;
+
+ parsedValue = null;
+ return false;
+ }
+
+ internal static bool TryParse (string input, int minimalCount, out List<NameValueWithParametersHeaderValue> result)
+ {
+ return CollectionParser.TryParse (input, minimalCount, TryParseElement, out result);
+ }
+
+ static bool TryParseElement (Lexer lexer, out NameValueWithParametersHeaderValue parsedValue, out Token t)
+ {
+ parsedValue = null;
+
+ t = lexer.Scan ();
+ if (t != Token.Type.Token)
return false;
+
+ parsedValue = new NameValueWithParametersHeaderValue () {
+ Name = lexer.GetStringValue (t),
+ };
+
+ t = lexer.Scan ();
+ if (t == Token.Type.SeparatorEqual) {
+ t = lexer.Scan ();
+
+ if (t == Token.Type.Token || t == Token.Type.QuotedString) {
+ parsedValue.value = lexer.GetStringValue (t);
+ t = lexer.Scan ();
+ } else {
+ return false;
+ }
+ }
+
+ if (t == Token.Type.SeparatorSemicolon) {
+ List<NameValueHeaderValue> result;
+ if (!TryParseParameters (lexer, out result, out t))
+ return false;
+
+ parsedValue.parameters = result;
}
- parsedValue = new NameValueWithParametersHeaderValue (values[0]);
- values.RemoveAt (0);
- parsedValue.parameters = values;
return true;
}
}