| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart.io; | 5 part of dart.io; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * A high-level class for communicating securely over a TCP socket, using | 8 * A high-level class for communicating securely over a TCP socket, using |
| 9 * TLS and SSL. The [SecureSocket] exposes both a [Stream] and an | 9 * TLS and SSL. The [SecureSocket] exposes both a [Stream] and an |
| 10 * [IOSink] interface, making it ideal for using together with | 10 * [IOSink] interface, making it ideal for using together with |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 * handshake to make the communication secure. When the returned | 53 * handshake to make the communication secure. When the returned |
| 54 * future completes the [SecureSocket] has completed the TLS | 54 * future completes the [SecureSocket] has completed the TLS |
| 55 * handshake. Using this function requires that the other end of the | 55 * handshake. Using this function requires that the other end of the |
| 56 * connection is prepared for TLS handshake. | 56 * connection is prepared for TLS handshake. |
| 57 * | 57 * |
| 58 * If the [socket] already has a subscription, this subscription | 58 * If the [socket] already has a subscription, this subscription |
| 59 * will no longer receive and events. In most cases calling | 59 * will no longer receive and events. In most cases calling |
| 60 * [:pause:] on this subscription before starting TLS handshake is | 60 * [:pause:] on this subscription before starting TLS handshake is |
| 61 * the right thing to do. | 61 * the right thing to do. |
| 62 * | 62 * |
| 63 * If the [host] argument is passed it will be used as the host name |
| 64 * for the TLS handshake. If [host] is not passed the host name from |
| 65 * the [socket] will be used. The [host] can be either a [String] or |
| 66 * an [InternetAddress]. |
| 67 * |
| 63 * See [connect] for more information on the arguments. | 68 * See [connect] for more information on the arguments. |
| 64 * | 69 * |
| 65 */ | 70 */ |
| 66 static Future<SecureSocket> secure( | 71 static Future<SecureSocket> secure( |
| 67 Socket socket, | 72 Socket socket, |
| 68 {bool sendClientCertificate: false, | 73 {host, |
| 74 bool sendClientCertificate: false, |
| 69 String certificateName, | 75 String certificateName, |
| 70 bool onBadCertificate(X509Certificate certificate)}) { | 76 bool onBadCertificate(X509Certificate certificate)}) { |
| 71 var completer = new Completer(); | 77 var completer = new Completer(); |
| 72 (socket as dynamic)._detachRaw() | 78 (socket as dynamic)._detachRaw() |
| 73 .then((detachedRaw) { | 79 .then((detachedRaw) { |
| 74 return RawSecureSocket.secure( | 80 return RawSecureSocket.secure( |
| 75 detachedRaw[0], | 81 detachedRaw[0], |
| 76 subscription: detachedRaw[1], | 82 subscription: detachedRaw[1], |
| 83 host: host, |
| 77 sendClientCertificate: sendClientCertificate, | 84 sendClientCertificate: sendClientCertificate, |
| 78 onBadCertificate: onBadCertificate); | 85 onBadCertificate: onBadCertificate); |
| 79 }) | 86 }) |
| 80 .then((raw) { | 87 .then((raw) { |
| 81 completer.complete(new SecureSocket._(raw)); | 88 completer.complete(new SecureSocket._(raw)); |
| 82 }); | 89 }); |
| 83 return completer.future; | 90 return completer.future; |
| 84 } | 91 } |
| 85 | 92 |
| 86 /** | 93 /** |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 * subscription in the [subscription] parameter. The secure socket | 240 * subscription in the [subscription] parameter. The secure socket |
| 234 * will take over the subscription and process any subsequent | 241 * will take over the subscription and process any subsequent |
| 235 * events. | 242 * events. |
| 236 * | 243 * |
| 237 * See [connect] for more information on the arguments. | 244 * See [connect] for more information on the arguments. |
| 238 * | 245 * |
| 239 */ | 246 */ |
| 240 static Future<RawSecureSocket> secure( | 247 static Future<RawSecureSocket> secure( |
| 241 RawSocket socket, | 248 RawSocket socket, |
| 242 {StreamSubscription subscription, | 249 {StreamSubscription subscription, |
| 250 host, |
| 243 bool sendClientCertificate: false, | 251 bool sendClientCertificate: false, |
| 244 String certificateName, | 252 String certificateName, |
| 245 bool onBadCertificate(X509Certificate certificate)}) { | 253 bool onBadCertificate(X509Certificate certificate)}) { |
| 246 return _RawSecureSocket.connect( | 254 return _RawSecureSocket.connect( |
| 247 socket.address, | 255 host != null ? host : socket.address, |
| 248 socket.port, | 256 socket.port, |
| 249 certificateName, | 257 certificateName, |
| 250 is_server: false, | 258 is_server: false, |
| 251 socket: socket, | 259 socket: socket, |
| 252 subscription: subscription, | 260 subscription: subscription, |
| 253 sendClientCertificate: sendClientCertificate, | 261 sendClientCertificate: sendClientCertificate, |
| 254 onBadCertificate: onBadCertificate); | 262 onBadCertificate: onBadCertificate); |
| 255 } | 263 } |
| 256 | 264 |
| 257 /** | 265 /** |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 442 // create a new one. | 450 // create a new one. |
| 443 _socketSubscription = _socket.listen(_eventDispatcher, | 451 _socketSubscription = _socket.listen(_eventDispatcher, |
| 444 onError: _errorHandler, | 452 onError: _errorHandler, |
| 445 onDone: _doneHandler); | 453 onDone: _doneHandler); |
| 446 } else { | 454 } else { |
| 447 _socketSubscription.onData(_eventDispatcher); | 455 _socketSubscription.onData(_eventDispatcher); |
| 448 _socketSubscription.onError(_errorHandler); | 456 _socketSubscription.onError(_errorHandler); |
| 449 _socketSubscription.onDone(_doneHandler); | 457 _socketSubscription.onDone(_doneHandler); |
| 450 } | 458 } |
| 451 _connectPending = true; | 459 _connectPending = true; |
| 452 _secureFilter.connect(rawSocket.address.host, | 460 _secureFilter.connect(address.host, |
| 453 port, | 461 port, |
| 454 is_server, | 462 is_server, |
| 455 certificateName, | 463 certificateName, |
| 456 requestClientCertificate || | 464 requestClientCertificate || |
| 457 requireClientCertificate, | 465 requireClientCertificate, |
| 458 requireClientCertificate, | 466 requireClientCertificate, |
| 459 sendClientCertificate); | 467 sendClientCertificate); |
| 460 _status = HANDSHAKE; | 468 _status = HANDSHAKE; |
| 461 _secureHandshake(); | 469 _secureHandshake(); |
| 462 }) | 470 }) |
| (...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 953 void destroy(); | 961 void destroy(); |
| 954 void handshake(); | 962 void handshake(); |
| 955 void init(); | 963 void init(); |
| 956 X509Certificate get peerCertificate; | 964 X509Certificate get peerCertificate; |
| 957 int processBuffer(int bufferIndex); | 965 int processBuffer(int bufferIndex); |
| 958 void registerBadCertificateCallback(Function callback); | 966 void registerBadCertificateCallback(Function callback); |
| 959 void registerHandshakeCompleteCallback(Function handshakeCompleteHandler); | 967 void registerHandshakeCompleteCallback(Function handshakeCompleteHandler); |
| 960 | 968 |
| 961 List<_ExternalBuffer> get buffers; | 969 List<_ExternalBuffer> get buffers; |
| 962 } | 970 } |
| OLD | NEW |