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._(this._socket); | 16 /** |
| 17 * Whether the underlying socket of this [SecureServerSocket] might |
| 18 * potentially be shared. |
| 19 */ |
| 20 final bool shared; |
| 21 |
| 22 SecureServerSocket._(this._socket, this.shared); |
17 | 23 |
18 /** | 24 /** |
19 * Returns a future for a [SecureServerSocket]. When the future | 25 * Returns a future for a [SecureServerSocket]. When the future |
20 * completes the server socket is bound to the given [address] and | 26 * completes the server socket is bound to the given [address] and |
21 * [port] and has started listening on it. | 27 * [port] and has started listening on it. |
22 * | 28 * |
23 * The [address] can either be a [String] or an | 29 * The [address] can either be a [String] or an |
24 * [InternetAddress]. If [address] is a [String], [bind] will | 30 * [InternetAddress]. If [address] is a [String], [bind] will |
25 * perform a [InternetAddress.lookup] and use the first value in the | 31 * perform a [InternetAddress.lookup] and use the first value in the |
26 * list. To listen on the loopback adapter, which will allow only | 32 * list. To listen on the loopback adapter, which will allow only |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 * was received, the result will be null. | 66 * was received, the result will be null. |
61 */ | 67 */ |
62 static Future<SecureServerSocket> bind( | 68 static Future<SecureServerSocket> bind( |
63 address, | 69 address, |
64 int port, | 70 int port, |
65 String certificateName, | 71 String certificateName, |
66 {int backlog: 0, | 72 {int backlog: 0, |
67 bool v6Only: false, | 73 bool v6Only: false, |
68 bool requestClientCertificate: false, | 74 bool requestClientCertificate: false, |
69 bool requireClientCertificate: false, | 75 bool requireClientCertificate: false, |
70 List<String> supportedProtocols}) { | 76 List<String> supportedProtocols, |
| 77 bool shared: false}) { |
71 return RawSecureServerSocket.bind( | 78 return RawSecureServerSocket.bind( |
72 address, | 79 address, |
73 port, | 80 port, |
74 certificateName, | 81 certificateName, |
75 backlog: backlog, | 82 backlog: backlog, |
76 v6Only: v6Only, | 83 v6Only: v6Only, |
77 requestClientCertificate: requestClientCertificate, | 84 requestClientCertificate: requestClientCertificate, |
78 requireClientCertificate: requireClientCertificate, | 85 requireClientCertificate: requireClientCertificate, |
79 supportedProtocols: supportedProtocols).then( | 86 supportedProtocols: supportedProtocols, |
80 (serverSocket) => new SecureServerSocket._(serverSocket)); | 87 shared: shared).then( |
| 88 (serverSocket) => new SecureServerSocket._(serverSocket, shared)); |
81 } | 89 } |
82 | 90 |
83 StreamSubscription<SecureSocket> listen(void onData(SecureSocket socket), | 91 StreamSubscription<SecureSocket> listen(void onData(SecureSocket socket), |
84 {Function onError, | 92 {Function onError, |
85 void onDone(), | 93 void onDone(), |
86 bool cancelOnError}) { | 94 bool cancelOnError}) { |
87 return _socket.map((rawSocket) => new SecureSocket._(rawSocket)) | 95 return _socket.map((rawSocket) => new SecureSocket._(rawSocket)) |
88 .listen(onData, | 96 .listen(onData, |
89 onError: onError, | 97 onError: onError, |
90 onDone: onDone, | 98 onDone: onDone, |
(...skipping 29 matching lines...) Expand all Loading... |
120 class RawSecureServerSocket extends Stream<RawSecureSocket> { | 128 class RawSecureServerSocket extends Stream<RawSecureSocket> { |
121 RawServerSocket _socket; | 129 RawServerSocket _socket; |
122 StreamController<RawSecureSocket> _controller; | 130 StreamController<RawSecureSocket> _controller; |
123 StreamSubscription<RawSocket> _subscription; | 131 StreamSubscription<RawSocket> _subscription; |
124 final String certificateName; | 132 final String certificateName; |
125 final bool requestClientCertificate; | 133 final bool requestClientCertificate; |
126 final bool requireClientCertificate; | 134 final bool requireClientCertificate; |
127 final List<String> supportedProtocols; | 135 final List<String> supportedProtocols; |
128 bool _closed = false; | 136 bool _closed = false; |
129 | 137 |
| 138 /** |
| 139 * Whether the underlying socket of this [RawSecureServerSocket] might |
| 140 * potentially be shared. |
| 141 */ |
| 142 final bool shared; |
| 143 |
130 RawSecureServerSocket._(RawServerSocket serverSocket, | 144 RawSecureServerSocket._(RawServerSocket serverSocket, |
131 this.certificateName, | 145 this.certificateName, |
132 this.requestClientCertificate, | 146 this.requestClientCertificate, |
133 this.requireClientCertificate, | 147 this.requireClientCertificate, |
134 this.supportedProtocols) { | 148 this.supportedProtocols, |
| 149 this.shared) { |
135 _socket = serverSocket; | 150 _socket = serverSocket; |
136 _controller = new StreamController<RawSecureSocket>( | 151 _controller = new StreamController<RawSecureSocket>( |
137 sync: true, | 152 sync: true, |
138 onListen: _onSubscriptionStateChange, | 153 onListen: _onSubscriptionStateChange, |
139 onPause: _onPauseStateChange, | 154 onPause: _onPauseStateChange, |
140 onResume: _onPauseStateChange, | 155 onResume: _onPauseStateChange, |
141 onCancel: _onSubscriptionStateChange); | 156 onCancel: _onSubscriptionStateChange); |
142 } | 157 } |
143 | 158 |
144 /** | 159 /** |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 * was received, the result will be null. | 200 * was received, the result will be null. |
186 */ | 201 */ |
187 static Future<RawSecureServerSocket> bind( | 202 static Future<RawSecureServerSocket> bind( |
188 address, | 203 address, |
189 int port, | 204 int port, |
190 String certificateName, | 205 String certificateName, |
191 {int backlog: 0, | 206 {int backlog: 0, |
192 bool v6Only: false, | 207 bool v6Only: false, |
193 bool requestClientCertificate: false, | 208 bool requestClientCertificate: false, |
194 bool requireClientCertificate: false, | 209 bool requireClientCertificate: false, |
195 List<String> supportedProtocols}) { | 210 List<String> supportedProtocols, |
196 return RawServerSocket.bind(address, port, backlog: backlog, v6Only: v6Only) | 211 bool shared: false}) { |
| 212 return RawServerSocket.bind( |
| 213 address, port, backlog: backlog, v6Only: v6Only, shared: shared) |
197 .then((serverSocket) => new RawSecureServerSocket._( | 214 .then((serverSocket) => new RawSecureServerSocket._( |
198 serverSocket, | 215 serverSocket, |
199 certificateName, | 216 certificateName, |
200 requestClientCertificate, | 217 requestClientCertificate, |
201 requireClientCertificate, | 218 requireClientCertificate, |
202 supportedProtocols)); | 219 supportedProtocols, |
| 220 shared)); |
203 } | 221 } |
204 | 222 |
205 StreamSubscription<RawSecureSocket> listen(void onData(RawSecureSocket s), | 223 StreamSubscription<RawSecureSocket> listen(void onData(RawSecureSocket s), |
206 {Function onError, | 224 {Function onError, |
207 void onDone(), | 225 void onDone(), |
208 bool cancelOnError}) { | 226 bool cancelOnError}) { |
209 return _controller.stream.listen(onData, | 227 return _controller.stream.listen(onData, |
210 onError: onError, | 228 onError: onError, |
211 onDone: onDone, | 229 onDone: onDone, |
212 cancelOnError: cancelOnError); | 230 cancelOnError: cancelOnError); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 onError: _onError); | 303 onError: _onError); |
286 } else { | 304 } else { |
287 close(); | 305 close(); |
288 } | 306 } |
289 } | 307 } |
290 | 308 |
291 void set _owner(owner) { (_socket as dynamic)._owner = owner; } | 309 void set _owner(owner) { (_socket as dynamic)._owner = owner; } |
292 } | 310 } |
293 | 311 |
294 | 312 |
OLD | NEW |