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 * |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 * SecureSocket.peerCertificate after connecting. If no certificate | 59 * SecureSocket.peerCertificate after connecting. If no certificate |
60 * was received, the result will be null. | 60 * was received, the result will be null. |
61 */ | 61 */ |
62 static Future<SecureServerSocket> bind( | 62 static Future<SecureServerSocket> bind( |
63 address, | 63 address, |
64 int port, | 64 int port, |
65 String certificateName, | 65 String certificateName, |
66 {int backlog: 0, | 66 {int backlog: 0, |
67 bool v6Only: false, | 67 bool v6Only: false, |
68 bool requestClientCertificate: false, | 68 bool requestClientCertificate: false, |
69 bool requireClientCertificate: false}) { | 69 bool requireClientCertificate: false, |
| 70 List<String> supportedProtocols}) { |
70 return RawSecureServerSocket.bind( | 71 return RawSecureServerSocket.bind( |
71 address, | 72 address, |
72 port, | 73 port, |
73 certificateName, | 74 certificateName, |
74 backlog: backlog, | 75 backlog: backlog, |
75 v6Only: v6Only, | 76 v6Only: v6Only, |
76 requestClientCertificate: requestClientCertificate, | 77 requestClientCertificate: requestClientCertificate, |
77 requireClientCertificate: requireClientCertificate).then( | 78 requireClientCertificate: requireClientCertificate, |
| 79 supportedProtocols: supportedProtocols).then( |
78 (serverSocket) => new SecureServerSocket._(serverSocket)); | 80 (serverSocket) => new SecureServerSocket._(serverSocket)); |
79 } | 81 } |
80 | 82 |
81 StreamSubscription<SecureSocket> listen(void onData(SecureSocket socket), | 83 StreamSubscription<SecureSocket> listen(void onData(SecureSocket socket), |
82 {Function onError, | 84 {Function onError, |
83 void onDone(), | 85 void onDone(), |
84 bool cancelOnError}) { | 86 bool cancelOnError}) { |
85 return _socket.map((rawSocket) => new SecureSocket._(rawSocket)) | 87 return _socket.map((rawSocket) => new SecureSocket._(rawSocket)) |
86 .listen(onData, | 88 .listen(onData, |
87 onError: onError, | 89 onError: onError, |
(...skipping 27 matching lines...) Expand all Loading... |
115 * | 117 * |
116 * See [RawSecureSocket] for more info. | 118 * See [RawSecureSocket] for more info. |
117 */ | 119 */ |
118 class RawSecureServerSocket extends Stream<RawSecureSocket> { | 120 class RawSecureServerSocket extends Stream<RawSecureSocket> { |
119 RawServerSocket _socket; | 121 RawServerSocket _socket; |
120 StreamController<RawSecureSocket> _controller; | 122 StreamController<RawSecureSocket> _controller; |
121 StreamSubscription<RawSocket> _subscription; | 123 StreamSubscription<RawSocket> _subscription; |
122 final String certificateName; | 124 final String certificateName; |
123 final bool requestClientCertificate; | 125 final bool requestClientCertificate; |
124 final bool requireClientCertificate; | 126 final bool requireClientCertificate; |
| 127 final List<String> supportedProtocols; |
125 bool _closed = false; | 128 bool _closed = false; |
126 | 129 |
127 RawSecureServerSocket._(RawServerSocket serverSocket, | 130 RawSecureServerSocket._(RawServerSocket serverSocket, |
128 this.certificateName, | 131 this.certificateName, |
129 this.requestClientCertificate, | 132 this.requestClientCertificate, |
130 this.requireClientCertificate) { | 133 this.requireClientCertificate, |
| 134 this.supportedProtocols) { |
131 _socket = serverSocket; | 135 _socket = serverSocket; |
132 _controller = new StreamController<RawSecureSocket>( | 136 _controller = new StreamController<RawSecureSocket>( |
133 sync: true, | 137 sync: true, |
134 onListen: _onSubscriptionStateChange, | 138 onListen: _onSubscriptionStateChange, |
135 onPause: _onPauseStateChange, | 139 onPause: _onPauseStateChange, |
136 onResume: _onPauseStateChange, | 140 onResume: _onPauseStateChange, |
137 onCancel: _onSubscriptionStateChange); | 141 onCancel: _onSubscriptionStateChange); |
138 } | 142 } |
139 | 143 |
140 /** | 144 /** |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 * check SecureSocket.peerCertificate after connecting. If no certificate | 184 * check SecureSocket.peerCertificate after connecting. If no certificate |
181 * was received, the result will be null. | 185 * was received, the result will be null. |
182 */ | 186 */ |
183 static Future<RawSecureServerSocket> bind( | 187 static Future<RawSecureServerSocket> bind( |
184 address, | 188 address, |
185 int port, | 189 int port, |
186 String certificateName, | 190 String certificateName, |
187 {int backlog: 0, | 191 {int backlog: 0, |
188 bool v6Only: false, | 192 bool v6Only: false, |
189 bool requestClientCertificate: false, | 193 bool requestClientCertificate: false, |
190 bool requireClientCertificate: false}) { | 194 bool requireClientCertificate: false, |
| 195 List<String> supportedProtocols}) { |
191 return RawServerSocket.bind(address, port, backlog: backlog, v6Only: v6Only) | 196 return RawServerSocket.bind(address, port, backlog: backlog, v6Only: v6Only) |
192 .then((serverSocket) => new RawSecureServerSocket._( | 197 .then((serverSocket) => new RawSecureServerSocket._( |
193 serverSocket, | 198 serverSocket, |
194 certificateName, | 199 certificateName, |
195 requestClientCertificate, | 200 requestClientCertificate, |
196 requireClientCertificate)); | 201 requireClientCertificate, |
| 202 supportedProtocols)); |
197 } | 203 } |
198 | 204 |
199 StreamSubscription<RawSecureSocket> listen(void onData(RawSecureSocket s), | 205 StreamSubscription<RawSecureSocket> listen(void onData(RawSecureSocket s), |
200 {Function onError, | 206 {Function onError, |
201 void onDone(), | 207 void onDone(), |
202 bool cancelOnError}) { | 208 bool cancelOnError}) { |
203 return _controller.stream.listen(onData, | 209 return _controller.stream.listen(onData, |
204 onError: onError, | 210 onError: onError, |
205 onDone: onDone, | 211 onDone: onDone, |
206 cancelOnError: cancelOnError); | 212 cancelOnError: cancelOnError); |
(...skipping 27 matching lines...) Expand all Loading... |
234 // Do nothing - connection is closed. | 240 // Do nothing - connection is closed. |
235 return; | 241 return; |
236 } | 242 } |
237 _RawSecureSocket.connect( | 243 _RawSecureSocket.connect( |
238 connection.address, | 244 connection.address, |
239 remotePort, | 245 remotePort, |
240 certificateName, | 246 certificateName, |
241 is_server: true, | 247 is_server: true, |
242 socket: connection, | 248 socket: connection, |
243 requestClientCertificate: requestClientCertificate, | 249 requestClientCertificate: requestClientCertificate, |
244 requireClientCertificate: requireClientCertificate) | 250 requireClientCertificate: requireClientCertificate, |
| 251 supportedProtocols: supportedProtocols) |
245 .then((RawSecureSocket secureConnection) { | 252 .then((RawSecureSocket secureConnection) { |
246 if (_closed) { | 253 if (_closed) { |
247 secureConnection.close(); | 254 secureConnection.close(); |
248 } else { | 255 } else { |
249 _controller.add(secureConnection); | 256 _controller.add(secureConnection); |
250 } | 257 } |
251 }).catchError((e) { | 258 }).catchError((e) { |
252 if (!_closed) { | 259 if (!_closed) { |
253 _controller.addError(e); | 260 _controller.addError(e); |
254 } | 261 } |
(...skipping 23 matching lines...) Expand all Loading... |
278 onError: _onError); | 285 onError: _onError); |
279 } else { | 286 } else { |
280 close(); | 287 close(); |
281 } | 288 } |
282 } | 289 } |
283 | 290 |
284 void set _owner(owner) { (_socket as dynamic)._owner = owner; } | 291 void set _owner(owner) { (_socket as dynamic)._owner = owner; } |
285 } | 292 } |
286 | 293 |
287 | 294 |
OLD | NEW |