OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 * The [SecureServerSocket] is a server socket, providing a stream of high-level | 8 * The [SecureServerSocket] is a server socket, providing a stream of high-level |
9 * [Socket]s. | 9 * [Socket]s. |
10 * | 10 * |
11 * See [SecureSocket] for more info. | 11 * See [SecureSocket] for more info. |
12 */ | 12 */ |
13 class SecureServerSocket extends Stream<SecureSocket> { | 13 class SecureServerSocket extends Stream<SecureSocket> { |
14 final RawSecureServerSocket _socket; | 14 final RawSecureServerSocket _socket; |
15 | 15 |
16 SecureServerSocket._(RawSecureServerSocket this._socket); | 16 SecureServerSocket._(this._socket); |
17 | 17 |
18 /** | 18 /** |
19 * Returns a future for a [SecureServerSocket]. When the future | 19 * Returns a future for a [SecureServerSocket]. When the future |
20 * completes the server socket is bound to the given [address] and | 20 * completes the server socket is bound to the given [address] and |
21 * [port] and has started listening on it. | 21 * [port] and has started listening on it. |
22 * | 22 * |
23 * The [address] can either be a [String] or an | 23 * The [address] can either be a [String] or an |
24 * [InternetAddress]. If [address] is a [String], [bind] will | 24 * [InternetAddress]. If [address] is a [String], [bind] will |
25 * perform a [InternetAddress.lookup] and use the first value in the | 25 * perform a [InternetAddress.lookup] and use the first value in the |
26 * list. To listen on the loopback adapter, which will allow only | 26 * list. To listen on the loopback adapter, which will allow only |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 class RawSecureServerSocket extends Stream<RawSecureSocket> { | 116 class RawSecureServerSocket extends Stream<RawSecureSocket> { |
117 RawServerSocket _socket; | 117 RawServerSocket _socket; |
118 StreamController<RawSecureSocket> _controller; | 118 StreamController<RawSecureSocket> _controller; |
119 StreamSubscription<RawSocket> _subscription; | 119 StreamSubscription<RawSocket> _subscription; |
120 final String certificateName; | 120 final String certificateName; |
121 final bool requestClientCertificate; | 121 final bool requestClientCertificate; |
122 final bool requireClientCertificate; | 122 final bool requireClientCertificate; |
123 bool _closed = false; | 123 bool _closed = false; |
124 | 124 |
125 RawSecureServerSocket._(RawServerSocket serverSocket, | 125 RawSecureServerSocket._(RawServerSocket serverSocket, |
126 String this.certificateName, | 126 this.certificateName, |
127 bool this.requestClientCertificate, | 127 this.requestClientCertificate, |
128 bool this.requireClientCertificate) { | 128 this.requireClientCertificate) { |
129 _socket = serverSocket; | 129 _socket = serverSocket; |
130 _controller = new StreamController<RawSecureSocket>( | 130 _controller = new StreamController<RawSecureSocket>( |
131 sync: true, | 131 sync: true, |
132 onListen: _onSubscriptionStateChange, | 132 onListen: _onSubscriptionStateChange, |
133 onPause: _onPauseStateChange, | 133 onPause: _onPauseStateChange, |
134 onResume: _onPauseStateChange, | 134 onResume: _onPauseStateChange, |
135 onCancel: _onSubscriptionStateChange); | 135 onCancel: _onSubscriptionStateChange); |
136 } | 136 } |
137 | 137 |
138 /** | 138 /** |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 } else { | 246 } else { |
247 _controller.add(secureConnection); | 247 _controller.add(secureConnection); |
248 } | 248 } |
249 }).catchError((e) { | 249 }).catchError((e) { |
250 if (!_closed) { | 250 if (!_closed) { |
251 _controller.addError(e); | 251 _controller.addError(e); |
252 } | 252 } |
253 }); | 253 }); |
254 } | 254 } |
255 | 255 |
256 void _onError(e, [StackTrace stackTrace]) { | 256 void _onError(e, [StackTrace stackTrace]) => |
257 _controller.addError(e, stackTrace); | 257 _controller.addError(e, stackTrace); |
258 } | |
259 | 258 |
260 void _onDone() { | 259 void _onDone() => _controller.close(); |
261 _controller.close(); | |
262 } | |
263 | 260 |
264 void _onPauseStateChange() { | 261 void _onPauseStateChange() { |
265 if (_controller.isPaused) { | 262 if (_controller.isPaused) { |
266 _subscription.pause(); | 263 _subscription.pause(); |
267 } else { | 264 } else { |
268 _subscription.resume(); | 265 _subscription.resume(); |
269 } | 266 } |
270 } | 267 } |
271 | 268 |
272 void _onSubscriptionStateChange() { | 269 void _onSubscriptionStateChange() { |
273 if (_controller.hasListener) { | 270 if (_controller.hasListener) { |
274 _subscription = _socket.listen(_onData, | 271 _subscription = _socket.listen(_onData, |
275 onDone: _onDone, | 272 onDone: _onDone, |
276 onError: _onError); | 273 onError: _onError); |
277 } else { | 274 } else { |
278 close(); | 275 close(); |
279 } | 276 } |
280 } | 277 } |
281 } | 278 } |
282 | 279 |
283 | 280 |
OLD | NEW |