t = lexer.Scan ();
if (!lexer.IsStarStringValue (t)) {
- if (!lexer.TryGetNumericValue (t, out nvalue))
+ long lvalue;
+ if (!lexer.TryGetNumericValue (t, out lvalue))
return false;
- value.Length = nvalue;
+ value.Length = lvalue;
}
t = lexer.Scan ();
return int.TryParse (GetStringValue (token), NumberStyles.None, CultureInfo.InvariantCulture, out value);
}
+ public bool TryGetNumericValue (Token token, out long value)
+ {
+ return long.TryParse (GetStringValue (token), NumberStyles.None, CultureInfo.InvariantCulture, out value);
+ }
+
public TimeSpan? TryGetTimeSpanValue (Token token)
{
int seconds;
bool token_read;
do {
- int? from = null, to = null;
- int number;
+ long? from = null, to = null;
+ long number;
token_read = false;
t = lexer.Scan (recognizeDash: true);
case Token.Type.Token:
string s = lexer.GetStringValue (t);
var values = s.Split (new [] { '-' }, StringSplitOptions.RemoveEmptyEntries);
- if (!int.TryParse (values[0], out number))
+ if (!Parser.Long.TryParse (values[0], out number))
return false;
switch (values.Length) {
case 2:
from = number;
- if (!int.TryParse (values[1], out number))
+ if (!Parser.Long.TryParse (values[1], out number))
return false;
to = number;
[Test]
public void Parse ()
{
- var res = ContentRangeHeaderValue.Parse ("bytes 0 - 499/ 1234");
+ var res = ContentRangeHeaderValue.Parse ("bytes 0 - 499/ 9223372036854775807");
Assert.AreEqual (0, res.From, "#1");
Assert.AreEqual (499, res.To, "#2");
- Assert.AreEqual (1234, res.Length, "#3");
- Assert.AreEqual ("bytes 0-499/1234", res.ToString (), "#4");
+ Assert.AreEqual (9223372036854775807, res.Length, "#3");
+ Assert.AreEqual ("bytes 0-499/9223372036854775807", res.ToString (), "#4");
res = ContentRangeHeaderValue.Parse ("bytes */ 8");
Assert.IsNull (res.From, "#11");
Assert.IsNull (res.Ranges.Skip (1).First ().From, "#53");
Assert.AreEqual (9, res.Ranges.Skip (1).First ().To, "#54");
Assert.AreEqual ("bytes=0-, -9", res.ToString (), "#55");
+
+ res = RangeHeaderValue.Parse ("bytes=3637717541-9223372036854775807");
+ Assert.AreEqual ("bytes", res.Unit, "#60");
+ Assert.AreEqual (3637717541, res.Ranges.First ().From, "#61");
+ Assert.AreEqual (9223372036854775807, res.Ranges.First ().To, "#62");
+ Assert.AreEqual ("bytes=3637717541-9223372036854775807", res.ToString (), "#63");
}
[Test]