Chromium Code Reviews| Index: sdk/lib/io/http_date.dart |
| diff --git a/sdk/lib/io/http_utils.dart b/sdk/lib/io/http_date.dart |
| similarity index 69% |
| rename from sdk/lib/io/http_utils.dart |
| rename to sdk/lib/io/http_date.dart |
| index 487096c41030aefbd7ddded14dfdb6fbc632f4ca..1fdd60903df44645a3005f99a22bde35e2b2d473 100644 |
| --- a/sdk/lib/io/http_utils.dart |
| +++ b/sdk/lib/io/http_date.dart |
| @@ -202,114 +202,9 @@ class HttpDate { |
| expectEnd(); |
| return new DateTime.utc(year, month + 1, day, hours, minutes, seconds, 0); |
| } |
| -} |
| -class _HttpUtils { |
| - static String decodeUrlEncodedString( |
| - String urlEncoded, |
| - {Encoding encoding: Encoding.UTF_8}) { |
| - // First check the string for any encoding. |
| - int index = 0; |
| - bool encoded = false; |
| - while (!encoded && index < urlEncoded.length) { |
| - encoded = urlEncoded[index] == "+" || urlEncoded[index] == "%"; |
| - index++; |
| - } |
| - if (!encoded) return urlEncoded; |
| - index--; |
| - |
| - // Start decoding from the first encoded character. |
| - List<int> bytes = new List<int>(); |
| - for (int i = 0; i < index; i++) bytes.add(urlEncoded.codeUnitAt(i)); |
| - for (int i = index; i < urlEncoded.length; i++) { |
| - if (urlEncoded[i] == "+") { |
| - bytes.add(32); |
| - } else if (urlEncoded[i] == "%") { |
| - if (urlEncoded.length - i < 2) { |
| - throw new HttpException("Invalid URL encoding"); |
| - } |
| - int byte = 0; |
| - for (int j = 0; j < 2; j++) { |
| - var charCode = urlEncoded.codeUnitAt(i + j + 1); |
| - if (0x30 <= charCode && charCode <= 0x39) { |
| - byte = byte * 16 + charCode - 0x30; |
| - } else { |
| - // Check ranges A-F (0x41-0x46) and a-f (0x61-0x66). |
| - charCode |= 0x20; |
| - if (0x61 <= charCode && charCode <= 0x66) { |
| - byte = byte * 16 + charCode - 0x57; |
| - } else { |
| - throw new ArgumentError("Invalid URL encoding"); |
| - } |
| - } |
| - } |
| - bytes.add(byte); |
| - i += 2; |
| - } else { |
| - bytes.add(urlEncoded.codeUnitAt(i)); |
| - } |
| - } |
| - return _decodeString(bytes, encoding); |
| - } |
| - |
| - static Map<String, String> splitQueryString( |
| - String queryString, |
| - {Encoding encoding: Encoding.UTF_8}) { |
| - Map<String, String> result = new Map<String, String>(); |
| - int currentPosition = 0; |
| - int length = queryString.length; |
| - |
| - while (currentPosition < length) { |
| - |
| - // Find the first equals character between current position and |
| - // the provided end. |
| - int indexOfEquals(int end) { |
| - int index = currentPosition; |
| - while (index < end) { |
| - if (queryString.codeUnitAt(index) == _CharCode.EQUAL) return index; |
| - index++; |
| - } |
| - return -1; |
| - } |
| - |
| - // Find the next separator (either & or ;), see |
| - // http://www.w3.org/TR/REC-html40/appendix/notes.html#ampersands-in-uris |
| - // relating the ; separator. If no separator is found returns |
| - // the length of the query string. |
| - int indexOfSeparator() { |
| - int end = length; |
| - int index = currentPosition; |
| - while (index < end) { |
| - int codeUnit = queryString.codeUnitAt(index); |
| - if (codeUnit == _CharCode.AMPERSAND || |
| - codeUnit == _CharCode.SEMI_COLON) { |
| - return index; |
| - } |
| - index++; |
| - } |
| - return end; |
| - } |
| - |
| - int seppos = indexOfSeparator(); |
| - int equalspos = indexOfEquals(seppos); |
| - String name; |
| - String value; |
| - if (equalspos == -1) { |
| - name = queryString.substring(currentPosition, seppos); |
| - value = ''; |
| - } else { |
| - name = queryString.substring(currentPosition, equalspos); |
| - value = queryString.substring(equalspos + 1, seppos); |
| - } |
| - currentPosition = seppos + 1; // This also works when seppos == length. |
| - if (name == '') continue; |
| - result[_HttpUtils.decodeUrlEncodedString(name, encoding: encoding)] = |
| - _HttpUtils.decodeUrlEncodedString(value, encoding: encoding); |
| - } |
| - return result; |
| - } |
| - |
| - static DateTime parseCookieDate(String date) { |
| + // Parse a cookie date string. |
| + static DateTime _parseCookieDate(String date) { |
|
Lasse Reichstein Nielsen
2013/07/04 14:56:33
Yey, less code!
Anders Johnsen
2013/07/05 09:51:28
:)
|
| const List monthsLowerCase = const ["jan", "feb", "mar", "apr", "may", |
| "jun", "jul", "aug", "sep", "oct", |
| "nov", "dec"]; |
| @@ -418,41 +313,4 @@ class _HttpUtils { |
| return new DateTime.utc(year, month, dayOfMonth, hour, minute, second, 0); |
| } |
| - |
| - // Decode a string with HTTP entities. Returns null if the string ends in the |
| - // middle of a http entity. |
| - static String decodeHttpEntityString(String input) { |
| - int amp = input.lastIndexOf('&'); |
| - if (amp < 0) return input; |
| - int end = input.lastIndexOf(';'); |
| - if (end < amp) return null; |
| - |
| - var buffer = new StringBuffer(); |
| - int offset = 0; |
| - |
| - parse(amp, end) { |
| - switch (input[amp + 1]) { |
| - case '#': |
| - if (input[amp + 2] == 'x') { |
| - buffer.writeCharCode( |
| - int.parse(input.substring(amp + 3, end), radix: 16)); |
| - } else { |
| - buffer.writeCharCode(int.parse(input.substring(amp + 2, end))); |
| - } |
| - break; |
| - |
| - default: |
| - throw new HttpException('Unhandled HTTP entity token'); |
| - } |
| - } |
| - |
| - while ((amp = input.indexOf('&', offset)) >= 0) { |
| - buffer.write(input.substring(offset, amp)); |
| - int end = input.indexOf(';', amp); |
| - parse(amp, end); |
| - offset = end + 1; |
| - } |
| - buffer.write(input.substring(offset)); |
| - return buffer.toString(); |
| - } |
| } |