Index: sdk/lib/io/http_impl.dart |
diff --git a/sdk/lib/io/http_impl.dart b/sdk/lib/io/http_impl.dart |
index dff98f04f64c30e13a008bc1de37d282f7082a16..846b724f389b87e0ec7dc6cd62868a959f0c78a7 100644 |
--- a/sdk/lib/io/http_impl.dart |
+++ b/sdk/lib/io/http_impl.dart |
@@ -129,14 +129,13 @@ class _HttpRequest extends _HttpInboundMessage implements HttpRequest { |
var proto = headers['x-forwarded-proto']; |
var scheme = proto != null ? proto.first : |
_httpConnection._socket is SecureSocket ? "https" : "http"; |
- var hostList = headers['x-forwarded-host']; |
- String host; |
- if (hostList != null) { |
- host = hostList.first; |
+ var host = headers['x-forwarded-host']; |
+ if (host != null) { |
+ host = host.first; |
} else { |
- hostList = headers['host']; |
- if (hostList != null) { |
- host = hostList.first; |
+ host = headers['host']; |
+ if (host != null) { |
+ host = host.first; |
} else { |
host = "${_httpServer.address.host}:${_httpServer.port}"; |
} |
@@ -183,6 +182,8 @@ class _HttpClientResponse |
// The HttpClientRequest of this response. |
final _HttpClientRequest _httpRequest; |
+ List<Cookie> _cookies; |
+ |
_HttpClientResponse(_HttpIncoming _incoming, this._httpRequest, |
this._httpClient) : super(_incoming) { |
// Set uri for potential exceptions. |
@@ -193,9 +194,9 @@ class _HttpClientResponse |
String get reasonPhrase => _incoming.reasonPhrase; |
X509Certificate get certificate { |
+ // The peerCertificate isn't on a plain socket, so cast to dynamic. |
var socket = _httpRequest._httpClientConnection._socket; |
- if (socket is SecureSocket) return socket.peerCertificate; |
- throw new UnsupportedError("Socket is not a SecureSocket"); |
+ return socket.peerCertificate; |
} |
List<Cookie> get cookies { |
@@ -868,12 +869,8 @@ class _HttpGZipSink extends ByteConversionSink { |
_consume(chunk); |
} |
- void addSlice(List<int> chunk, int start, int end, bool isLast) { |
- if (chunk is Uint8List) { |
- _consume(new Uint8List.view(chunk.buffer, start, end - start)); |
- } else { |
- _consume(chunk.sublist(start, end - start)); |
- } |
+ void addSlice(Uint8List chunk, int start, int end, bool isLast) { |
+ _consume(new Uint8List.view(chunk.buffer, start, end - start)); |
} |
void close() {} |
@@ -939,16 +936,14 @@ class _HttpOutgoing implements StreamConsumer<List<int>> { |
"Headers size exceeded the of '$_OUTGOING_BUFFER_SIZE'" |
" bytes")); |
} |
- return null; |
} |
- |
if (headersWritten) return null; |
headersWritten = true; |
Future drainFuture; |
+ bool isServerSide = outbound is _HttpResponse; |
bool gzip = false; |
- if (outbound is _HttpResponse) { |
- // Server side. |
- _HttpResponse response = outbound; |
+ if (isServerSide) { |
+ var response = outbound; |
if (response._httpRequest._httpServer.autoCompress && |
outbound.bufferOutput && |
outbound.headers.chunkedTransferEncoding) { |
@@ -1500,8 +1495,7 @@ class _HttpClientConnection { |
throw "Proxy failed to establish tunnel " |
"(${response.statusCode} ${response.reasonPhrase})"; |
} |
- var socket = (response as _HttpClientResponse)._httpRequest |
- ._httpClientConnection._socket; |
+ var socket = response._httpRequest._httpClientConnection._socket; |
return SecureSocket.secure( |
socket, |
host: host, |
@@ -1635,12 +1629,9 @@ class _ConnectionTarget { |
return completer.future; |
} |
var currentBadCertificateCallback = client._badCertificateCallback; |
- |
- bool callback(X509Certificate certificate) { |
- if (currentBadCertificateCallback == null) return false; |
- return currentBadCertificateCallback(certificate, uriHost, uriPort); |
- } |
- |
+ callback(X509Certificate certificate) => |
+ currentBadCertificateCallback == null ? false : |
+ currentBadCertificateCallback(certificate, uriHost, uriPort); |
Future socketFuture = (isSecure && proxy.isDirect |
? SecureSocket.connect(host, |
port, |
@@ -1673,7 +1664,6 @@ class _ConnectionTarget { |
} |
} |
-typedef bool BadCertificateCallback(X509Certificate cr, String host, int port); |
class _HttpClient implements HttpClient { |
bool _closing = false; |
@@ -1687,7 +1677,7 @@ class _HttpClient implements HttpClient { |
Function _authenticateProxy; |
Function _findProxy = HttpClient.findProxyFromEnvironment; |
Duration _idleTimeout = const Duration(seconds: 15); |
- BadCertificateCallback _badCertificateCallback; |
+ Function _badCertificateCallback; |
Duration get idleTimeout => _idleTimeout; |
@@ -1744,8 +1734,9 @@ class _HttpClient implements HttpClient { |
return _openUrl(method, uri); |
} |
- Future<HttpClientRequest> openUrl(String method, Uri url) |
- => _openUrl(method, url); |
+ Future<HttpClientRequest> openUrl(String method, Uri url) { |
+ return _openUrl(method, url); |
+ } |
Future<HttpClientRequest> get(String host, int port, String path) |
=> open("get", host, port, path); |
@@ -1808,7 +1799,7 @@ class _HttpClient implements HttpClient { |
set findProxy(String f(Uri uri)) => _findProxy = f; |
- Future<_HttpClientRequest> _openUrl(String method, Uri uri) { |
+ Future<HttpClientRequest> _openUrl(String method, Uri uri) { |
// Ignore any fragments on the request URI. |
uri = uri.removeFragment(); |
@@ -1843,15 +1834,13 @@ class _HttpClient implements HttpClient { |
} |
} |
return _getConnection(uri.host, port, proxyConf, isSecure) |
- .then((_ConnectionInfo info) { |
- |
- _HttpClientRequest send(_ConnectionInfo info) { |
+ .then((info) { |
+ send(info) { |
return info.connection.send(uri, |
port, |
method.toUpperCase(), |
info.proxy); |
} |
- |
// If the connection was closed before the request was sent, create |
// and use another connection. |
if (info.connection.closed) { |
@@ -1862,13 +1851,13 @@ class _HttpClient implements HttpClient { |
}); |
} |
- Future<_HttpClientRequest> _openUrlFromRequest(String method, |
+ Future<HttpClientRequest> _openUrlFromRequest(String method, |
Uri uri, |
_HttpClientRequest previous) { |
// If the new URI is relative (to either '/' or some sub-path), |
// construct a full URI from the previous one. |
Uri resolved = previous.uri.resolveUri(uri); |
- return _openUrl(method, resolved).then((_HttpClientRequest request) { |
+ return openUrl(method, resolved).then((_HttpClientRequest request) { |
request |
// Only follow redirects if initial request did. |
@@ -1952,13 +1941,10 @@ class _HttpClient implements HttpClient { |
_SiteCredentials _findCredentials(Uri url, [_AuthenticationScheme scheme]) { |
// Look for credentials. |
_SiteCredentials cr = |
- _credentials.fold(null, (_SiteCredentials prev, value) { |
- var siteCredentials = value as _SiteCredentials; |
- if (siteCredentials.applies(url, scheme)) { |
+ _credentials.fold(null, (prev, value) { |
+ if (value.applies(url, scheme)) { |
if (prev == null) return value; |
- return siteCredentials.uri.path.length > prev.uri.path.length |
- ? siteCredentials |
- : prev; |
+ return value.uri.path.length > prev.uri.path.length ? value : prev; |
} else { |
return prev; |
} |
@@ -1975,7 +1961,6 @@ class _HttpClient implements HttpClient { |
return it.current; |
} |
} |
- return null; |
} |
void _removeCredentials(_Credentials cr) { |
@@ -2181,7 +2166,7 @@ class _HttpConnection |
Map _toJSON(bool ref) { |
var name = "${_socket.address.host}:${_socket.port} <-> " |
"${_socket.remoteAddress.host}:${_socket.remotePort}"; |
- var r = <String, dynamic>{ |
+ var r = { |
'id': _servicePath, |
'type': _serviceType(ref), |
'name': name, |
@@ -2427,8 +2412,8 @@ class _HttpServer |
String get _serviceTypePath => 'io/http/servers'; |
String get _serviceTypeName => 'HttpServer'; |
- Map<String, dynamic> _toJSON(bool ref) { |
- var r = <String, dynamic>{ |
+ Map _toJSON(bool ref) { |
+ var r = { |
'id': _servicePath, |
'type': _serviceType(ref), |
'name': '${address.host}:$port', |