Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(119)

Side by Side Diff: sdk/lib/io/secure_socket.dart

Issue 18500006: dart:io | Pass errors from multithreaded encryption back to Dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Compile libssl_dart without DEBUG defined. Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/bin/socket_patch.dart ('k') | sdk/lib/io/socket.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 716 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 _scheduleFilter(); 727 _scheduleFilter();
728 } 728 }
729 729
730 void _doneHandler() { 730 void _doneHandler() {
731 if (_filterStatus.readEmpty) { 731 if (_filterStatus.readEmpty) {
732 _close(); 732 _close();
733 } 733 }
734 } 734 }
735 735
736 void _reportError(e) { 736 void _reportError(e) {
737 if (_connectPending) { 737 if (_status == CLOSED) {
738 return;
739 } else if (_connectPending) {
738 // _connectPending is true after the underlying connection has been 740 // _connectPending is true after the underlying connection has been
739 // made, but before the handshake has completed. 741 // made, but before the handshake has completed.
740 if (e is! TlsException) { 742 if (e is! TlsException) {
741 e = new HandshakeException("$e", null); 743 e = new HandshakeException("$e", null);
742 } 744 }
743 _handshakeComplete.completeError(e); 745 _handshakeComplete.completeError(e);
744 } else { 746 } else {
745 _controller.addError(e); 747 _controller.addError(e);
746 } 748 }
747 _close(); 749 _close();
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 _filterService = _SecureFilter._newServicePort(); 942 _filterService = _SecureFilter._newServicePort();
941 } 943 }
942 List args = [_filterPointer, _status != CONNECTED]; 944 List args = [_filterPointer, _status != CONNECTED];
943 var bufs = _secureFilter.buffers; 945 var bufs = _secureFilter.buffers;
944 for (var i = 0; i < NUM_BUFFERS; ++i) { 946 for (var i = 0; i < NUM_BUFFERS; ++i) {
945 args.add(bufs[i].start); 947 args.add(bufs[i].start);
946 args.add(bufs[i].end); 948 args.add(bufs[i].end);
947 } 949 }
948 950
949 return _filterService.call(args).then((response) { 951 return _filterService.call(args).then((response) {
952 if (response.length == 2) {
953 _reportError(new TlsException('${response[1]} error ${response[0]}'));
954 }
950 bool wasInHandshake = response[1]; 955 bool wasInHandshake = response[1];
951 int start(int index) => response[2 * index + 2]; 956 int start(int index) => response[2 * index + 2];
952 int end(int index) => response[2 * index + 3]; 957 int end(int index) => response[2 * index + 3];
953 958
954 _FilterStatus status = new _FilterStatus(); 959 _FilterStatus status = new _FilterStatus();
955 // Compute writeEmpty as "write plaintext buffer and write encrypted 960 // Compute writeEmpty as "write plaintext buffer and write encrypted
956 // buffer were empty when we started and are empty now". 961 // buffer were empty when we started and are empty now".
957 status.writeEmpty = bufs[WRITE_PLAINTEXT].isEmpty && 962 status.writeEmpty = bufs[WRITE_PLAINTEXT].isEmpty &&
958 start(WRITE_ENCRYPTED) == end(WRITE_ENCRYPTED); 963 start(WRITE_ENCRYPTED) == end(WRITE_ENCRYPTED);
959 // If we were in handshake when this started, _writeEmpty may be false 964 // If we were in handshake when this started, _writeEmpty may be false
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
1209 /** 1214 /**
1210 * An exception that happens in the handshake phase of establishing 1215 * An exception that happens in the handshake phase of establishing
1211 * a secure network connection, when looking up or verifying a 1216 * a secure network connection, when looking up or verifying a
1212 * certificate. 1217 * certificate.
1213 */ 1218 */
1214 class CertificateException extends TlsException { 1219 class CertificateException extends TlsException {
1215 const CertificateException([String message = "", 1220 const CertificateException([String message = "",
1216 OSError osError = null]) 1221 OSError osError = null])
1217 : super._("CertificateException", message, osError); 1222 : super._("CertificateException", message, osError);
1218 } 1223 }
OLDNEW
« no previous file with comments | « runtime/bin/socket_patch.dart ('k') | sdk/lib/io/socket.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698