Index: sdk/lib/io/secure_socket.dart |
diff --git a/sdk/lib/io/secure_socket.dart b/sdk/lib/io/secure_socket.dart |
index 903ecf8b0f6132200f3559dd8d51ff473c30a45f..680acb616bb6d908e9f3d4c3a62352fc1d966f3d 100644 |
--- a/sdk/lib/io/secure_socket.dart |
+++ b/sdk/lib/io/secure_socket.dart |
@@ -258,7 +258,6 @@ abstract class RawSecureSocket implements RawSocket { |
return RawSocket.connect(host, port) |
.then((socket) { |
return secure(socket, |
- host: host, |
sendClientCertificate: sendClientCertificate, |
certificateName: certificateName, |
onBadCertificate: onBadCertificate); |
@@ -303,7 +302,7 @@ abstract class RawSecureSocket implements RawSocket { |
socket.readEventsEnabled = false; |
socket.writeEventsEnabled = false; |
return _RawSecureSocket.connect( |
- host != null ? host : socket.address, |
+ host != null ? host : socket.address.host, |
socket.port, |
certificateName, |
is_server: false, |
@@ -473,34 +472,24 @@ class _RawSecureSocket extends Stream<RawSocketEvent> |
bool requireClientCertificate: false, |
bool sendClientCertificate: false, |
bool onBadCertificate(X509Certificate certificate)}) { |
- var future; |
_verifyFields(host, requestedPort, certificateName, is_server, |
requestClientCertificate, requireClientCertificate, |
sendClientCertificate, onBadCertificate); |
- if (host is String) { |
- if (socket != null) { |
- future = new Future.value( |
- (socket.address as dynamic)._cloneWithNewHost(host)); |
- } else { |
- future = InternetAddress.lookup(host).then((addrs) => addrs.first); |
- } |
- } else { |
- future = new Future.value(host); |
- } |
- return future.then((addr) { |
- return new _RawSecureSocket(addr, |
- requestedPort, |
- certificateName, |
- is_server, |
- socket, |
- subscription, |
- bufferedData, |
- requestClientCertificate, |
- requireClientCertificate, |
- sendClientCertificate, |
- onBadCertificate) |
- ._handshakeComplete.future; |
- }); |
+ if (host is InternetAddress) host = host.host; |
+ var address = socket.address; |
+ if (host != null) address = address._cloneWithNewHost(host); |
+ return new _RawSecureSocket(address, |
+ requestedPort, |
+ certificateName, |
+ is_server, |
+ socket, |
+ subscription, |
+ bufferedData, |
+ requestClientCertificate, |
+ requireClientCertificate, |
+ sendClientCertificate, |
+ onBadCertificate) |
+ ._handshakeComplete.future; |
} |
_RawSecureSocket( |
@@ -508,7 +497,7 @@ class _RawSecureSocket extends Stream<RawSocketEvent> |
int requestedPort, |
this.certificateName, |
this.is_server, |
- RawSocket socket, |
+ RawSocket this._socket, |
this._socketSubscription, |
this._bufferedData, |
this.requestClientCertificate, |
@@ -531,31 +520,26 @@ class _RawSecureSocket extends Stream<RawSocketEvent> |
if (onBadCertificate != null) { |
_secureFilter.registerBadCertificateCallback(_onBadCertificateWrapper); |
} |
- var futureSocket; |
- if (socket == null) { |
- futureSocket = RawSocket.connect(address, requestedPort); |
+ _socket.readEventsEnabled = true; |
+ _socket.writeEventsEnabled = false; |
+ if (_socketSubscription == null) { |
+ // If a current subscription is provided use this otherwise |
+ // create a new one. |
+ _socketSubscription = _socket.listen(_eventDispatcher, |
+ onError: _reportError, |
+ onDone: _doneHandler); |
} else { |
- futureSocket = new Future.value(socket); |
- } |
- futureSocket.then((rawSocket) { |
- _socket = rawSocket; |
- _socket.readEventsEnabled = true; |
- _socket.writeEventsEnabled = false; |
- if (_socketSubscription == null) { |
- // If a current subscription is provided use this otherwise |
- // create a new one. |
- _socketSubscription = _socket.listen(_eventDispatcher, |
- onError: _reportError, |
- onDone: _doneHandler); |
- } else { |
- if (_socketSubscription.isPaused) { |
- throw new StateError("Subscription passed to TLS upgrade is paused"); |
- } |
- _socketSubscription |
- ..onData(_eventDispatcher) |
- ..onError(_reportError) |
- ..onDone(_doneHandler); |
+ if (_socketSubscription.isPaused) { |
+ _socket.close(); |
+ throw new ArgumentError( |
+ "Subscription passed to TLS upgrade is paused"); |
} |
+ _socketSubscription |
+ ..onData(_eventDispatcher) |
+ ..onError(_reportError) |
+ ..onDone(_doneHandler); |
+ } |
+ try { |
_secureFilter.connect(address.host, |
(address as dynamic)._in_addr, |
port, |
@@ -566,8 +550,9 @@ class _RawSecureSocket extends Stream<RawSocketEvent> |
requireClientCertificate, |
sendClientCertificate); |
_secureHandshake(); |
- }) |
- .catchError(_reportError); |
+ } catch (e, s) { |
+ _reportError(e, s); |
+ } |
} |
StreamSubscription listen(void onData(RawSocketEvent data), |