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

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

Issue 1319703002: Breaking Change: merge BoringSSL branch into master (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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
« no previous file with comments | « sdk/lib/io/iolib_sources.gypi ('k') | sdk/lib/io/secure_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) 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 27 matching lines...) Expand all
38 * The optional argument [backlog] can be used to specify the listen 38 * The optional argument [backlog] can be used to specify the listen
39 * backlog for the underlying OS listen setup. If [backlog] has the 39 * backlog for the underlying OS listen setup. If [backlog] has the
40 * value of [:0:] (the default) a reasonable value will be chosen by 40 * value of [:0:] (the default) a reasonable value will be chosen by
41 * the system. 41 * the system.
42 * 42 *
43 * Incoming client connections are promoted to secure connections, using 43 * Incoming client connections are promoted to secure connections, using
44 * the server certificate given by [certificateName]. 44 * the server certificate given by [certificateName].
45 * 45 *
46 * [address] must be given as a numeric address, not a host name. 46 * [address] must be given as a numeric address, not a host name.
47 * 47 *
48 * [certificateName] is the nickname or the distinguished name (DN) of
49 * the certificate in the certificate database. It is looked up in the
50 * NSS certificate database set by SecureSocket.initialize.
51 * If [certificateName] contains "CN=", it is assumed to be a distinguished
52 * name. Otherwise, it is looked up as a nickname.
53 *
54 * To request or require that clients authenticate by providing an SSL (TLS) 48 * To request or require that clients authenticate by providing an SSL (TLS)
55 * client certificate, set the optional parameter [requestClientCertificate] 49 * client certificate, set the optional parameter [requestClientCertificate]
56 * or [requireClientCertificate] to true. Requiring a certificate implies 50 * or [requireClientCertificate] to true. Requiring a certificate implies
57 * requesting a certificate, so one doesn't need to set both to true. 51 * requesting a certificate, so one doesn't need to set both to true.
58 * To check whether a client certificate was received, check 52 * To check whether a client certificate was received, check
59 * SecureSocket.peerCertificate after connecting. If no certificate 53 * SecureSocket.peerCertificate after connecting. If no certificate
60 * was received, the result will be null. 54 * was received, the result will be null.
61 * 55 *
62 * The optional argument [shared] specify whether additional binds 56 * The optional argument [shared] specify whether additional binds
63 * to the same `address`, `port` and `v6Only` combination is 57 * to the same `address`, `port` and `v6Only` combination is
64 * possible from the same Dart process. If `shared` is `true` and 58 * possible from the same Dart process. If `shared` is `true` and
65 * additional binds are performed, then the incoming connections 59 * additional binds are performed, then the incoming connections
66 * will be distributed between that set of 60 * will be distributed between that set of
67 * `SecureServerSocket`s. One way of using this is to have number of 61 * `SecureServerSocket`s. One way of using this is to have number of
68 * isolates between which incoming connections are distributed. 62 * isolates between which incoming connections are distributed.
69 */ 63 */
70 static Future<SecureServerSocket> bind( 64 static Future<SecureServerSocket> bind(
71 address, 65 address,
72 int port, 66 int port,
73 String certificateName, 67 SecurityContext context,
74 {int backlog: 0, 68 {int backlog: 0,
75 bool v6Only: false, 69 bool v6Only: false,
76 bool requestClientCertificate: false, 70 bool requestClientCertificate: false,
77 bool requireClientCertificate: false, 71 bool requireClientCertificate: false,
78 List<String> supportedProtocols, 72 List<String> supportedProtocols,
79 bool shared: false}) { 73 bool shared: false}) {
80 return RawSecureServerSocket.bind( 74 return RawSecureServerSocket.bind(
81 address, 75 address,
82 port, 76 port,
83 certificateName, 77 context,
84 backlog: backlog, 78 backlog: backlog,
85 v6Only: v6Only, 79 v6Only: v6Only,
86 requestClientCertificate: requestClientCertificate, 80 requestClientCertificate: requestClientCertificate,
87 requireClientCertificate: requireClientCertificate, 81 requireClientCertificate: requireClientCertificate,
88 supportedProtocols: supportedProtocols, 82 supportedProtocols: supportedProtocols,
89 shared: shared).then( 83 shared: shared).then(
90 (serverSocket) => new SecureServerSocket._(serverSocket)); 84 (serverSocket) => new SecureServerSocket._(serverSocket));
91 } 85 }
92 86
93 StreamSubscription<SecureSocket> listen(void onData(SecureSocket socket), 87 StreamSubscription<SecureSocket> listen(void onData(SecureSocket socket),
(...skipping 27 matching lines...) Expand all
121 } 115 }
122 116
123 117
124 /** 118 /**
125 * The RawSecureServerSocket is a server socket, providing a stream of low-level 119 * The RawSecureServerSocket is a server socket, providing a stream of low-level
126 * [RawSecureSocket]s. 120 * [RawSecureSocket]s.
127 * 121 *
128 * See [RawSecureSocket] for more info. 122 * See [RawSecureSocket] for more info.
129 */ 123 */
130 class RawSecureServerSocket extends Stream<RawSecureSocket> { 124 class RawSecureServerSocket extends Stream<RawSecureSocket> {
131 RawServerSocket _socket; 125 final RawServerSocket _socket;
132 StreamController<RawSecureSocket> _controller; 126 StreamController<RawSecureSocket> _controller;
133 StreamSubscription<RawSocket> _subscription; 127 StreamSubscription<RawSocket> _subscription;
134 final String certificateName; 128 final SecurityContext _context;
135 final bool requestClientCertificate; 129 final bool requestClientCertificate;
136 final bool requireClientCertificate; 130 final bool requireClientCertificate;
137 final List<String> supportedProtocols; 131 final List<String> supportedProtocols;
138 bool _closed = false; 132 bool _closed = false;
139 133
140 RawSecureServerSocket._(RawServerSocket serverSocket, 134 RawSecureServerSocket._(this._socket,
141 this.certificateName, 135 this._context,
142 this.requestClientCertificate, 136 this.requestClientCertificate,
143 this.requireClientCertificate, 137 this.requireClientCertificate,
144 this.supportedProtocols) { 138 this.supportedProtocols) {
145 _socket = serverSocket;
146 _controller = new StreamController<RawSecureSocket>( 139 _controller = new StreamController<RawSecureSocket>(
147 sync: true, 140 sync: true,
148 onListen: _onSubscriptionStateChange, 141 onListen: _onSubscriptionStateChange,
149 onPause: _onPauseStateChange, 142 onPause: _onPauseStateChange,
150 onResume: _onPauseStateChange, 143 onResume: _onPauseStateChange,
151 onCancel: _onSubscriptionStateChange); 144 onCancel: _onSubscriptionStateChange);
152 } 145 }
153 146
154 /** 147 /**
155 * Returns a future for a [RawSecureServerSocket]. When the future 148 * Returns a future for a [RawSecureServerSocket]. When the future
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 * to the same `address`, `port` and `v6Only` combination is 191 * to the same `address`, `port` and `v6Only` combination is
199 * possible from the same Dart process. If `shared` is `true` and 192 * possible from the same Dart process. If `shared` is `true` and
200 * additional binds are performed, then the incoming connections 193 * additional binds are performed, then the incoming connections
201 * will be distributed between that set of 194 * will be distributed between that set of
202 * `RawSecureServerSocket`s. One way of using this is to have number 195 * `RawSecureServerSocket`s. One way of using this is to have number
203 * of isolates between which incoming connections are distributed. 196 * of isolates between which incoming connections are distributed.
204 */ 197 */
205 static Future<RawSecureServerSocket> bind( 198 static Future<RawSecureServerSocket> bind(
206 address, 199 address,
207 int port, 200 int port,
208 String certificateName, 201 SecurityContext context,
209 {int backlog: 0, 202 {int backlog: 0,
210 bool v6Only: false, 203 bool v6Only: false,
211 bool requestClientCertificate: false, 204 bool requestClientCertificate: false,
212 bool requireClientCertificate: false, 205 bool requireClientCertificate: false,
213 List<String> supportedProtocols, 206 List<String> supportedProtocols,
214 bool shared: false}) { 207 bool shared: false}) {
215 return RawServerSocket.bind( 208 return RawServerSocket.bind(
216 address, port, backlog: backlog, v6Only: v6Only, shared: shared) 209 address, port, backlog: backlog, v6Only: v6Only, shared: shared)
217 .then((serverSocket) => new RawSecureServerSocket._( 210 .then((serverSocket) => new RawSecureServerSocket._(
218 serverSocket, 211 serverSocket,
219 certificateName, 212 context,
220 requestClientCertificate, 213 requestClientCertificate,
221 requireClientCertificate, 214 requireClientCertificate,
222 supportedProtocols)); 215 supportedProtocols));
223 } 216 }
224 217
225 StreamSubscription<RawSecureSocket> listen(void onData(RawSecureSocket s), 218 StreamSubscription<RawSecureSocket> listen(void onData(RawSecureSocket s),
226 {Function onError, 219 {Function onError,
227 void onDone(), 220 void onDone(),
228 bool cancelOnError}) { 221 bool cancelOnError}) {
229 return _controller.stream.listen(onData, 222 return _controller.stream.listen(onData,
(...skipping 26 matching lines...) Expand all
256 try { 249 try {
257 remotePort = connection.remotePort; 250 remotePort = connection.remotePort;
258 } catch (e) { 251 } catch (e) {
259 // If connection is already closed, remotePort throws an exception. 252 // If connection is already closed, remotePort throws an exception.
260 // Do nothing - connection is closed. 253 // Do nothing - connection is closed.
261 return; 254 return;
262 } 255 }
263 _RawSecureSocket.connect( 256 _RawSecureSocket.connect(
264 connection.address, 257 connection.address,
265 remotePort, 258 remotePort,
266 certificateName, 259 context: _context,
267 is_server: true, 260 is_server: true,
268 socket: connection, 261 socket: connection,
269 requestClientCertificate: requestClientCertificate, 262 requestClientCertificate: requestClientCertificate,
270 requireClientCertificate: requireClientCertificate, 263 requireClientCertificate: requireClientCertificate,
271 supportedProtocols: supportedProtocols) 264 supportedProtocols: supportedProtocols)
272 .then((RawSecureSocket secureConnection) { 265 .then((RawSecureSocket secureConnection) {
273 if (_closed) { 266 if (_closed) {
274 secureConnection.close(); 267 secureConnection.close();
275 } else { 268 } else {
276 _controller.add(secureConnection); 269 _controller.add(secureConnection);
(...skipping 22 matching lines...) Expand all
299 close(); 292 close();
300 } 293 }
301 } 294 }
302 295
303 void set _owner(owner) { 296 void set _owner(owner) {
304 (_socket as dynamic)._owner = owner; 297 (_socket as dynamic)._owner = owner;
305 } 298 }
306 } 299 }
307 300
308 301
OLDNEW
« no previous file with comments | « sdk/lib/io/iolib_sources.gypi ('k') | sdk/lib/io/secure_socket.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698