| 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 955 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 966 _pauseCount == 0 && | 966 _pauseCount == 0 && |
| 967 _secureFilter != null && | 967 _secureFilter != null && |
| 968 !_secureFilter.buffers[READ_PLAINTEXT].isEmpty) { | 968 !_secureFilter.buffers[READ_PLAINTEXT].isEmpty) { |
| 969 _pendingReadEvent = true; | 969 _pendingReadEvent = true; |
| 970 Timer.run(_sendReadEvent); | 970 Timer.run(_sendReadEvent); |
| 971 } | 971 } |
| 972 } | 972 } |
| 973 | 973 |
| 974 _sendReadEvent() { | 974 _sendReadEvent() { |
| 975 _pendingReadEvent = false; | 975 _pendingReadEvent = false; |
| 976 if (_readEventsEnabled && | 976 if (_status != CLOSED && |
| 977 _readEventsEnabled && |
| 977 _pauseCount == 0 && | 978 _pauseCount == 0 && |
| 978 _secureFilter != null && | 979 _secureFilter != null && |
| 979 !_secureFilter.buffers[READ_PLAINTEXT].isEmpty) { | 980 !_secureFilter.buffers[READ_PLAINTEXT].isEmpty) { |
| 980 _controller.add(RawSocketEvent.READ); | 981 _controller.add(RawSocketEvent.READ); |
| 981 _scheduleReadEvent(); | 982 _scheduleReadEvent(); |
| 982 } | 983 } |
| 983 } | 984 } |
| 984 | 985 |
| 985 // If a write event should be sent, add it to the controller. | 986 // If a write event should be sent, add it to the controller. |
| 986 _sendWriteEvent() { | 987 _sendWriteEvent() { |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1157 written += toWrite; | 1158 written += toWrite; |
| 1158 toWrite = min(bytes - written, linearFree); | 1159 toWrite = min(bytes - written, linearFree); |
| 1159 } | 1160 } |
| 1160 return written; | 1161 return written; |
| 1161 } | 1162 } |
| 1162 | 1163 |
| 1163 int writeFromSource(List<int> getData(int requested)) { | 1164 int writeFromSource(List<int> getData(int requested)) { |
| 1164 int written = 0; | 1165 int written = 0; |
| 1165 int toWrite = linearFree; | 1166 int toWrite = linearFree; |
| 1166 // Loop over zero, one, or two linear data ranges. | 1167 // Loop over zero, one, or two linear data ranges. |
| 1167 while (toWrite > 0) { | 1168 do { |
| 1168 // Source returns at most toWrite bytes, and it returns null when empty. | 1169 // Source returns at most toWrite bytes, and it returns null when empty. |
| 1169 var inputData = getData(toWrite); | 1170 var inputData = getData(toWrite); |
| 1170 if (inputData == null) break; | 1171 if (inputData == null || inputData.length == 0) break; |
| 1171 var len = inputData.length; | 1172 var len = inputData.length; |
| 1172 data.setRange(end, end + len, inputData); | 1173 data.setRange(end, end + len, inputData); |
| 1173 advanceEnd(len); | 1174 advanceEnd(len); |
| 1174 written += len; | 1175 written += len; |
| 1175 toWrite = linearFree; | 1176 toWrite = linearFree; |
| 1176 } | 1177 } while (toWrite > 0); |
| 1177 return written; | 1178 return written; |
| 1178 } | 1179 } |
| 1179 | 1180 |
| 1180 bool readToSocket(RawSocket socket) { | 1181 bool readToSocket(RawSocket socket) { |
| 1181 // Loop over zero, one, or two linear data ranges. | 1182 // Loop over zero, one, or two linear data ranges. |
| 1182 while (true) { | 1183 while (true) { |
| 1183 var toWrite = linearLength; | 1184 var toWrite = linearLength; |
| 1184 if (toWrite == 0) return false; | 1185 if (toWrite == 0) return false; |
| 1185 int bytes = socket.write(data, start, toWrite); | 1186 int bytes = socket.write(data, start, toWrite); |
| 1186 advanceStart(bytes); | 1187 advanceStart(bytes); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1264 /** | 1265 /** |
| 1265 * An exception that happens in the handshake phase of establishing | 1266 * An exception that happens in the handshake phase of establishing |
| 1266 * a secure network connection, when looking up or verifying a | 1267 * a secure network connection, when looking up or verifying a |
| 1267 * certificate. | 1268 * certificate. |
| 1268 */ | 1269 */ |
| 1269 class CertificateException extends TlsException { | 1270 class CertificateException extends TlsException { |
| 1270 const CertificateException([String message = "", | 1271 const CertificateException([String message = "", |
| 1271 OSError osError = null]) | 1272 OSError osError = null]) |
| 1272 : super._("CertificateException", message, osError); | 1273 : super._("CertificateException", message, osError); |
| 1273 } | 1274 } |
| OLD | NEW |