| 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 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 if (_socketClosedWrite) { | 384 if (_socketClosedWrite) { |
| 385 _close(); | 385 _close(); |
| 386 } | 386 } |
| 387 } | 387 } |
| 388 } | 388 } |
| 389 | 389 |
| 390 bool get writeEventsEnabled => _writeEventsEnabled; | 390 bool get writeEventsEnabled => _writeEventsEnabled; |
| 391 | 391 |
| 392 void set writeEventsEnabled(bool value) { | 392 void set writeEventsEnabled(bool value) { |
| 393 if (value && | 393 if (value && |
| 394 _controller.hasSubscribers && | 394 _controller.hasListener && |
| 395 _secureFilter != null && | 395 _secureFilter != null && |
| 396 _secureFilter.buffers[WRITE_PLAINTEXT].free > 0) { | 396 _secureFilter.buffers[WRITE_PLAINTEXT].free > 0) { |
| 397 Timer.run(() => _controller.add(RawSocketEvent.WRITE)); | 397 Timer.run(() => _controller.add(RawSocketEvent.WRITE)); |
| 398 } else { | 398 } else { |
| 399 _writeEventsEnabled = value; | 399 _writeEventsEnabled = value; |
| 400 } | 400 } |
| 401 } | 401 } |
| 402 | 402 |
| 403 bool get readEventsEnabled => _readEventsEnabled; | 403 bool get readEventsEnabled => _readEventsEnabled; |
| 404 | 404 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 if (_filterWriteEmpty && _closedWrite && !_socketClosedWrite) { | 494 if (_filterWriteEmpty && _closedWrite && !_socketClosedWrite) { |
| 495 // Close _socket for write, by calling shutdown(), to avoid cloning the | 495 // Close _socket for write, by calling shutdown(), to avoid cloning the |
| 496 // socket closing code in shutdown(). | 496 // socket closing code in shutdown(). |
| 497 shutdown(SocketDirection.SEND); | 497 shutdown(SocketDirection.SEND); |
| 498 } | 498 } |
| 499 if (_status == HANDSHAKE) { | 499 if (_status == HANDSHAKE) { |
| 500 try { | 500 try { |
| 501 _secureHandshake(); | 501 _secureHandshake(); |
| 502 } catch (e) { _reportError(e, "RawSecureSocket error"); } | 502 } catch (e) { _reportError(e, "RawSecureSocket error"); } |
| 503 } else if (_status == CONNECTED && | 503 } else if (_status == CONNECTED && |
| 504 _controller.hasSubscribers && | 504 _controller.hasListener && |
| 505 _writeEventsEnabled && | 505 _writeEventsEnabled && |
| 506 _secureFilter.buffers[WRITE_PLAINTEXT].free > 0) { | 506 _secureFilter.buffers[WRITE_PLAINTEXT].free > 0) { |
| 507 // Reset the one-shot handler. | 507 // Reset the one-shot handler. |
| 508 _writeEventsEnabled = false; | 508 _writeEventsEnabled = false; |
| 509 _controller.add(RawSocketEvent.WRITE); | 509 _controller.add(RawSocketEvent.WRITE); |
| 510 } | 510 } |
| 511 } | 511 } |
| 512 | 512 |
| 513 void _eventDispatcher(RawSocketEvent event) { | 513 void _eventDispatcher(RawSocketEvent event) { |
| 514 if (event == RawSocketEvent.READ) { | 514 if (event == RawSocketEvent.READ) { |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 621 if (!_socketClosedRead || !_socketClosedWrite) { | 621 if (!_socketClosedRead || !_socketClosedWrite) { |
| 622 if (_controller.isPaused) { | 622 if (_controller.isPaused) { |
| 623 _socketSubscription.pause(); | 623 _socketSubscription.pause(); |
| 624 } else { | 624 } else { |
| 625 _socketSubscription.resume(); | 625 _socketSubscription.resume(); |
| 626 } | 626 } |
| 627 } | 627 } |
| 628 } | 628 } |
| 629 | 629 |
| 630 void _onSubscriptionStateChange() { | 630 void _onSubscriptionStateChange() { |
| 631 if (_controller.hasSubscribers) { | 631 if (_controller.hasListener) { |
| 632 // TODO(ajohnsen): Do something here? | 632 // TODO(ajohnsen): Do something here? |
| 633 } | 633 } |
| 634 } | 634 } |
| 635 | 635 |
| 636 void _readEncryptedData() { | 636 void _readEncryptedData() { |
| 637 // Read from the socket, and push it through the filter as far as | 637 // Read from the socket, and push it through the filter as far as |
| 638 // possible. | 638 // possible. |
| 639 var encrypted = _secureFilter.buffers[READ_ENCRYPTED]; | 639 var encrypted = _secureFilter.buffers[READ_ENCRYPTED]; |
| 640 var plaintext = _secureFilter.buffers[READ_PLAINTEXT]; | 640 var plaintext = _secureFilter.buffers[READ_PLAINTEXT]; |
| 641 bool progress = true; | 641 bool progress = true; |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 753 void destroy(); | 753 void destroy(); |
| 754 void handshake(); | 754 void handshake(); |
| 755 void init(); | 755 void init(); |
| 756 X509Certificate get peerCertificate; | 756 X509Certificate get peerCertificate; |
| 757 int processBuffer(int bufferIndex); | 757 int processBuffer(int bufferIndex); |
| 758 void registerBadCertificateCallback(Function callback); | 758 void registerBadCertificateCallback(Function callback); |
| 759 void registerHandshakeCompleteCallback(Function handshakeCompleteHandler); | 759 void registerHandshakeCompleteCallback(Function handshakeCompleteHandler); |
| 760 | 760 |
| 761 List<_ExternalBuffer> get buffers; | 761 List<_ExternalBuffer> get buffers; |
| 762 } | 762 } |
| OLD | NEW |