| Index: sdk/lib/io/http_headers.dart
|
| diff --git a/sdk/lib/io/http_headers.dart b/sdk/lib/io/http_headers.dart
|
| index cff9d37fb2f6afbfb57c27f3fe9373106ba8fca5..1d7e9b55382bf03d76358e873cfd403a72bb9ffa 100644
|
| --- a/sdk/lib/io/http_headers.dart
|
| +++ b/sdk/lib/io/http_headers.dart
|
| @@ -17,17 +17,14 @@ class _HttpHeaders implements HttpHeaders {
|
| String _host;
|
| int _port;
|
|
|
| - _HttpHeaders(String this.protocolVersion)
|
| + _HttpHeaders(this.protocolVersion)
|
| : _headers = new HashMap<String, List<String>>() {
|
| if (protocolVersion == "1.0") {
|
| _persistentConnection = false;
|
| }
|
| }
|
|
|
| - List<String> operator[](String name) {
|
| - name = name.toLowerCase();
|
| - return _headers[name];
|
| - }
|
| + List<String> operator[](String name) => _headers[name.toLowerCase()];
|
|
|
| String value(String name) {
|
| name = name.toLowerCase();
|
| @@ -46,9 +43,7 @@ class _HttpHeaders implements HttpHeaders {
|
|
|
| void _addAll(String name, value) {
|
| if (value is List) {
|
| - for (int i = 0; i < value.length; i++) {
|
| - _add(name, value[i]);
|
| - }
|
| + value.forEach((v) => _add(name, v));
|
| } else {
|
| _add(name, value);
|
| }
|
| @@ -252,82 +247,99 @@ class _HttpHeaders implements HttpHeaders {
|
| // [name] must be a lower-case version of the name.
|
| void _add(String name, value) {
|
| // TODO(sgjesse): Add immutable state throw HttpException is immutable.
|
| - if (name == HttpHeaders.CONTENT_LENGTH) {
|
| - if (value is int) {
|
| - contentLength = value;
|
| - } else if (value is String) {
|
| - contentLength = int.parse(value);
|
| - } else {
|
| - throw new HttpException("Unexpected type for header named $name");
|
| - }
|
| - } else if (name == HttpHeaders.TRANSFER_ENCODING) {
|
| - if (value == "chunked") {
|
| - chunkedTransferEncoding = true;
|
| - } else {
|
| - _addValue(name, value);
|
| - }
|
| - } else if (name == HttpHeaders.DATE) {
|
| - if (value is DateTime) {
|
| - date = value;
|
| - } else if (value is String) {
|
| - _set(HttpHeaders.DATE, value);
|
| - } else {
|
| - throw new HttpException("Unexpected type for header named $name");
|
| - }
|
| - } else if (name == HttpHeaders.EXPIRES) {
|
| - if (value is DateTime) {
|
| - expires = value;
|
| - } else if (value is String) {
|
| - _set(HttpHeaders.EXPIRES, value);
|
| - } else {
|
| - throw new HttpException("Unexpected type for header named $name");
|
| - }
|
| - } else if (name == HttpHeaders.IF_MODIFIED_SINCE) {
|
| - if (value is DateTime) {
|
| - ifModifiedSince = value;
|
| - } else if (value is String) {
|
| - _set(HttpHeaders.IF_MODIFIED_SINCE, value);
|
| - } else {
|
| - throw new HttpException("Unexpected type for header named $name");
|
| - }
|
| - } else if (name == HttpHeaders.HOST) {
|
| - if (value is String) {
|
| - int pos = value.indexOf(":");
|
| - if (pos == -1) {
|
| - _host = value;
|
| - _port = HttpClient.DEFAULT_HTTP_PORT;
|
| + switch (name) {
|
| + case HttpHeaders.CONTENT_LENGTH:
|
| + if (value is int) {
|
| + contentLength = value;
|
| + } else if (value is String) {
|
| + contentLength = int.parse(value);
|
| } else {
|
| - if (pos > 0) {
|
| - _host = value.substring(0, pos);
|
| - } else {
|
| - _host = null;
|
| - }
|
| - if (pos + 1 == value.length) {
|
| + throw new HttpException("Unexpected type for header named $name");
|
| + }
|
| + break;
|
| +
|
| + case HttpHeaders.TRANSFER_ENCODING:
|
| + if (value == "chunked") {
|
| + chunkedTransferEncoding = true;
|
| + } else {
|
| + _addValue(name, value);
|
| + }
|
| + break;
|
| +
|
| + case HttpHeaders.DATE:
|
| + if (value is DateTime) {
|
| + date = value;
|
| + } else if (value is String) {
|
| + _set(HttpHeaders.DATE, value);
|
| + } else {
|
| + throw new HttpException("Unexpected type for header named $name");
|
| + }
|
| + break;
|
| +
|
| + case HttpHeaders.EXPIRES:
|
| + if (value is DateTime) {
|
| + expires = value;
|
| + } else if (value is String) {
|
| + _set(HttpHeaders.EXPIRES, value);
|
| + } else {
|
| + throw new HttpException("Unexpected type for header named $name");
|
| + }
|
| + break;
|
| +
|
| + case HttpHeaders.IF_MODIFIED_SINCE:
|
| + if (value is DateTime) {
|
| + ifModifiedSince = value;
|
| + } else if (value is String) {
|
| + _set(HttpHeaders.IF_MODIFIED_SINCE, value);
|
| + } else {
|
| + throw new HttpException("Unexpected type for header named $name");
|
| + }
|
| + break;
|
| +
|
| + case HttpHeaders.HOST:
|
| + if (value is String) {
|
| + int pos = value.indexOf(":");
|
| + if (pos == -1) {
|
| + _host = value;
|
| _port = HttpClient.DEFAULT_HTTP_PORT;
|
| } else {
|
| - try {
|
| - _port = int.parse(value.substring(pos + 1));
|
| - } on FormatException catch (e) {
|
| - _port = null;
|
| + if (pos > 0) {
|
| + _host = value.substring(0, pos);
|
| + } else {
|
| + _host = null;
|
| + }
|
| + if (pos + 1 == value.length) {
|
| + _port = HttpClient.DEFAULT_HTTP_PORT;
|
| + } else {
|
| + try {
|
| + _port = int.parse(value.substring(pos + 1));
|
| + } on FormatException catch (e) {
|
| + _port = null;
|
| + }
|
| }
|
| }
|
| + _set(HttpHeaders.HOST, value);
|
| + } else {
|
| + throw new HttpException("Unexpected type for header named $name");
|
| }
|
| - _set(HttpHeaders.HOST, value);
|
| - } else {
|
| - throw new HttpException("Unexpected type for header named $name");
|
| - }
|
| - } else if (name == HttpHeaders.CONNECTION) {
|
| - var lowerCaseValue = value.toLowerCase();
|
| - if (lowerCaseValue == 'close') {
|
| - _persistentConnection = false;
|
| - } else if (lowerCaseValue == 'keep-alive') {
|
| - _persistentConnection = true;
|
| - }
|
| - _addValue(name, value);
|
| - } else if (name == HttpHeaders.CONTENT_TYPE) {
|
| - _set(HttpHeaders.CONTENT_TYPE, value);
|
| - } else {
|
| - _addValue(name, value);
|
| + break;
|
| +
|
| + case HttpHeaders.CONNECTION:
|
| + var lowerCaseValue = value.toLowerCase();
|
| + if (lowerCaseValue == 'close') {
|
| + _persistentConnection = false;
|
| + } else if (lowerCaseValue == 'keep-alive') {
|
| + _persistentConnection = true;
|
| + }
|
| + _addValue(name, value);
|
| + break;
|
| +
|
| + case HttpHeaders.CONTENT_TYPE:
|
| + _set(HttpHeaders.CONTENT_TYPE, value);
|
| + break;
|
| +
|
| + default:
|
| + _addValue(name, value);
|
| }
|
| }
|
|
|
| @@ -409,17 +421,14 @@ class _HttpHeaders implements HttpHeaders {
|
| String toString() {
|
| StringBuffer sb = new StringBuffer();
|
| _headers.forEach((String name, List<String> values) {
|
| - sb.write(name);
|
| - sb.write(": ");
|
| + sb..write(name)..write(": ");
|
| bool fold = _foldHeader(name);
|
| for (int i = 0; i < values.length; i++) {
|
| if (i > 0) {
|
| if (fold) {
|
| sb.write(", ");
|
| } else {
|
| - sb.write("\n");
|
| - sb.write(name);
|
| - sb.write(": ");
|
| + sb..write("\n")..write(name)..write(": ");
|
| }
|
| }
|
| sb.write(values[i]);
|
| @@ -533,10 +542,7 @@ class _HeaderValue implements HeaderValue {
|
| sb.write(_value);
|
| if (parameters != null && parameters.length > 0) {
|
| _parameters.forEach((String name, String value) {
|
| - sb.write("; ");
|
| - sb.write(name);
|
| - sb.write("=");
|
| - sb.write(value);
|
| + sb..write("; ")..write(name)..write("=")..write(value);
|
| });
|
| }
|
| return sb.toString();
|
| @@ -694,7 +700,16 @@ class _ContentType extends _HeaderValue implements ContentType {
|
|
|
|
|
| class _Cookie implements Cookie {
|
| - _Cookie([String this.name, String this.value]);
|
| + String name;
|
| + String value;
|
| + DateTime expires;
|
| + int maxAge;
|
| + String domain;
|
| + String path;
|
| + bool httpOnly = false;
|
| + bool secure = false;
|
| +
|
| + _Cookie([this.name, this.value]);
|
|
|
| _Cookie.fromSetCookieValue(String value) {
|
| // Parse the 'set-cookie' header value.
|
| @@ -789,38 +804,23 @@ class _Cookie implements Cookie {
|
|
|
| String toString() {
|
| StringBuffer sb = new StringBuffer();
|
| - sb.write(name);
|
| - sb.write("=");
|
| - sb.write(value);
|
| + sb..write(name)..write("=")..write(value);
|
| if (expires != null) {
|
| - sb.write("; Expires=");
|
| - sb.write(HttpDate.format(expires));
|
| + sb..write("; Expires=")..write(HttpDate.format(expires));
|
| }
|
| if (maxAge != null) {
|
| - sb.write("; Max-Age=");
|
| - sb.write(maxAge);
|
| + sb..write("; Max-Age=")..write(maxAge);
|
| }
|
| if (domain != null) {
|
| - sb.write("; Domain=");
|
| - sb.write(domain);
|
| + sb..write("; Domain=")..write(domain);
|
| }
|
| if (path != null) {
|
| - sb.write("; Path=");
|
| - sb.write(path);
|
| + sb..write("; Path=")..write(path);
|
| }
|
| if (secure) sb.write("; Secure");
|
| if (httpOnly) sb.write("; HttpOnly");
|
| return sb.toString();
|
| }
|
| -
|
| - String name;
|
| - String value;
|
| - DateTime expires;
|
| - int maxAge;
|
| - String domain;
|
| - String path;
|
| - bool httpOnly = false;
|
| - bool secure = false;
|
| }
|
|
|
|
|
|
|