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

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

Issue 12389050: Remane io_stream_consumer.dart to io_sink and move out all implementation from IOSink to _IOSinkImp… (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Make _DetachedSocket pass dart-analyzer. Created 7 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | sdk/lib/io/io.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) 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 class _HttpIncoming extends Stream<List<int>> { 7 class _HttpIncoming extends Stream<List<int>> {
8 final int _transferLength; 8 final int _transferLength;
9 final Completer _dataCompleter = new Completer(); 9 final Completer _dataCompleter = new Completer();
10 Stream<List<int>> _stream; 10 Stream<List<int>> _stream;
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 return this; 311 return this;
312 } 312 }
313 }); 313 });
314 } 314 }
315 // No credentials were found and the callback was not set. 315 // No credentials were found and the callback was not set.
316 return new Future.immediate(this); 316 return new Future.immediate(this);
317 } 317 }
318 } 318 }
319 319
320 320
321 abstract class _HttpOutboundMessage<T> extends IOSink { 321 abstract class _HttpOutboundMessage<T> implements IOSink {
322 // Used to mark when the body should be written. This is used for HEAD 322 // Used to mark when the body should be written. This is used for HEAD
323 // requests and in error handling. 323 // requests and in error handling.
324 bool _ignoreBody = false; 324 bool _ignoreBody = false;
325 bool _headersWritten = false;
326 bool _chunked = false;
327
328 final IOSink _ioSink;
329 final _HttpOutgoing _outgoing;
330
331 final _HttpHeaders headers;
325 332
326 _HttpOutboundMessage(String protocolVersion, _HttpOutgoing outgoing) 333 _HttpOutboundMessage(String protocolVersion, _HttpOutgoing outgoing)
327 : super(outgoing), 334 : _outgoing = outgoing,
328 _outgoing = outgoing, 335 _ioSink = new IOSink(outgoing),
329 headers = new _HttpHeaders(protocolVersion); 336 headers = new _HttpHeaders(protocolVersion);
330 337
331 int get contentLength => headers.contentLength; 338 int get contentLength => headers.contentLength;
332 void set contentLength(int contentLength) { 339 void set contentLength(int contentLength) {
333 headers.contentLength = contentLength; 340 headers.contentLength = contentLength;
334 } 341 }
335 342
336 bool get persistentConnection => headers.persistentConnection; 343 bool get persistentConnection => headers.persistentConnection;
337 void set persistentConnection(bool p) { 344 void set persistentConnection(bool p) {
338 headers.persistentConnection = p; 345 headers.persistentConnection = p;
339 } 346 }
340 347
341 Future<T> consume(Stream<List<int>> stream) { 348 Future<T> consume(Stream<List<int>> stream) {
342 _writeHeaders(); 349 _writeHeaders();
343 if (_ignoreBody) return new Future.immediate(this); 350 if (_ignoreBody) return new Future.immediate(this);
344 if (_chunked) { 351 if (_chunked) {
345 // Transform when chunked. 352 // Transform when chunked.
346 stream = stream.transform(new _ChunkedTransformer()); 353 stream = stream.transform(new _ChunkedTransformer());
347 } 354 }
348 return super.consume(stream).then((_) => this); 355 return _ioSink.consume(stream).then((_) => this);
349 } 356 }
350 357
351 void add(List<int> data) { 358 void add(List<int> data) {
352 _writeHeaders(); 359 _writeHeaders();
353 if (_ignoreBody || data.length == 0) return; 360 if (_ignoreBody || data.length == 0) return;
354 if (_chunked) { 361 if (_chunked) {
355 _ChunkedTransformer._addChunk(data, super.add); 362 _ChunkedTransformer._addChunk(data, _ioSink.add);
356 } else { 363 } else {
357 super.add(data); 364 _ioSink.add(data);
358 } 365 }
359 } 366 }
360 367
361 Future addStream(Stream<List<int>> stream) { 368 void addString(String string, [Encoding encoding = Encoding.UTF_8]) {
369 add(_encodeString(string, encoding));
370 }
371
372 Future<T> addStream(Stream<List<int>> stream) {
362 _writeHeaders(); 373 _writeHeaders();
363 if (_ignoreBody) return new Future.immediate(this); 374 if (_ignoreBody) return new Future.immediate(this);
364 if (_chunked) { 375 if (_chunked) {
365 // Transform when chunked. 376 // Transform when chunked.
366 stream = stream.transform(new _ChunkedTransformer(writeEnd: false)); 377 stream = stream.transform(new _ChunkedTransformer(writeEnd: false));
367 } 378 }
368 return super.addStream(stream).then((_) => this); 379 return _ioSink.addStream(stream).then((_) => this);
369 } 380 }
370 381
371 void close() { 382 void close() {
372 if (!_headersWritten && !_ignoreBody && headers.chunkedTransferEncoding) { 383 if (!_headersWritten && !_ignoreBody && headers.chunkedTransferEncoding) {
373 // If no body was written, _ignoreBody is false (it's not a HEAD 384 // If no body was written, _ignoreBody is false (it's not a HEAD
374 // request) and the content-length is unspecified, set contentLength to 0. 385 // request) and the content-length is unspecified, set contentLength to 0.
375 headers.contentLength = 0; 386 headers.contentLength = 0;
376 } 387 }
377 _writeHeaders(); 388 _writeHeaders();
378 if (!_ignoreBody) { 389 if (!_ignoreBody) {
379 if (_chunked) { 390 if (_chunked) {
380 _ChunkedTransformer._addChunk([], super.add); 391 _ChunkedTransformer._addChunk([], _ioSink.add);
381 } 392 }
382 } 393 }
383 super.close(); 394 _ioSink.close();
384 } 395 }
385 396
397 Future<T> get done => _ioSink.done.then((_) => this);
398
386 void _writeHeaders() { 399 void _writeHeaders() {
387 if (_headersWritten) return; 400 if (_headersWritten) return;
388 bool _tmpIgnoreBody = _ignoreBody; 401 bool _tmpIgnoreBody = _ignoreBody;
389 _ignoreBody = false; 402 _ignoreBody = false;
390 _headersWritten = true; 403 _headersWritten = true;
391 _writeHeader(); 404 _writeHeader();
392 _ignoreBody = _tmpIgnoreBody; 405 _ignoreBody = _tmpIgnoreBody;
393 if (_ignoreBody) { 406 if (_ignoreBody) {
394 super.close(); 407 _ioSink.close();
395 return; 408 return;
396 } 409 }
397 _chunked = headers.chunkedTransferEncoding; 410 _chunked = headers.chunkedTransferEncoding;
398 if (headers.contentLength >= 0) { 411 if (headers.contentLength >= 0) {
399 _outgoing.setTransferLength(headers.contentLength); 412 _outgoing.setTransferLength(headers.contentLength);
400 } 413 }
401 } 414 }
402 415
403 void _writeHeader(); // TODO(ajohnsen): Better name. 416 void _writeHeader(); // TODO(ajohnsen): Better name.
404
405 final _HttpHeaders headers;
406
407 final _HttpOutgoing _outgoing;
408 bool _headersWritten = false;
409 bool _chunked = false;
410 } 417 }
411 418
412 419
413 class _HttpResponse extends _HttpOutboundMessage<HttpResponse> 420 class _HttpResponse extends _HttpOutboundMessage<HttpResponse>
414 implements HttpResponse { 421 implements HttpResponse {
415 int statusCode = 200; 422 int statusCode = 200;
416 String _reasonPhrase; 423 String _reasonPhrase;
417 List<Cookie> _cookies; 424 List<Cookie> _cookies;
418 _HttpRequest _httpRequest; 425 _HttpRequest _httpRequest;
419 426
(...skipping 1058 matching lines...) Expand 10 before | Expand all | Expand 10 after
1478 } 1485 }
1479 1486
1480 _HttpConnectionInfo._(); 1487 _HttpConnectionInfo._();
1481 1488
1482 String remoteHost; 1489 String remoteHost;
1483 int remotePort; 1490 int remotePort;
1484 int localPort; 1491 int localPort;
1485 } 1492 }
1486 1493
1487 1494
1488 class _DetachedSocket implements Socket { 1495 class _DetachedSocket extends Stream<List<int>> implements Socket {
1489 final Stream<List<int>> _incoming; 1496 final Stream<List<int>> _incoming;
1490 final Socket _socket; 1497 final Socket _socket;
1491 1498
1492 _DetachedSocket(this._socket, this._incoming); 1499 _DetachedSocket(this._socket, this._incoming);
1493 1500
1494 StreamSubscription<List<int>> listen(void onData(List<int> event), 1501 StreamSubscription<List<int>> listen(void onData(List<int> event),
1495 {void onError(AsyncError error), 1502 {void onError(AsyncError error),
1496 void onDone(), 1503 void onDone(),
1497 bool unsubscribeOnError}) { 1504 bool unsubscribeOnError}) {
1498 return _incoming.listen(onData, 1505 return _incoming.listen(onData,
(...skipping 11 matching lines...) Expand all
1510 } 1517 }
1511 1518
1512 void addString(String string, [Encoding encoding = Encoding.UTF_8]) { 1519 void addString(String string, [Encoding encoding = Encoding.UTF_8]) {
1513 return _socket.addString(string, encoding); 1520 return _socket.addString(string, encoding);
1514 } 1521 }
1515 1522
1516 void destroy() => _socket.destroy(); 1523 void destroy() => _socket.destroy();
1517 void add(List<int> data) => _socket.add(data); 1524 void add(List<int> data) => _socket.add(data);
1518 void close() => _socket.close(); 1525 void close() => _socket.close();
1519 Future<Socket> get done => _socket.done; 1526 Future<Socket> get done => _socket.done;
1527 int get port => _socket.port;
1528 String get remoteHost => _socket.remoteHost;
1529 int get remotePort => _socket.remotePort;
1520 } 1530 }
1521 1531
1522 1532
1523 class _AuthenticationScheme { 1533 class _AuthenticationScheme {
1524 static const UNKNOWN = const _AuthenticationScheme(-1); 1534 static const UNKNOWN = const _AuthenticationScheme(-1);
1525 static const BASIC = const _AuthenticationScheme(0); 1535 static const BASIC = const _AuthenticationScheme(0);
1526 static const DIGEST = const _AuthenticationScheme(1); 1536 static const DIGEST = const _AuthenticationScheme(1);
1527 1537
1528 const _AuthenticationScheme(this._scheme); 1538 const _AuthenticationScheme(this._scheme);
1529 1539
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1625 1635
1626 1636
1627 class _RedirectInfo implements RedirectInfo { 1637 class _RedirectInfo implements RedirectInfo {
1628 const _RedirectInfo(int this.statusCode, 1638 const _RedirectInfo(int this.statusCode,
1629 String this.method, 1639 String this.method,
1630 Uri this.location); 1640 Uri this.location);
1631 final int statusCode; 1641 final int statusCode;
1632 final String method; 1642 final String method;
1633 final Uri location; 1643 final Uri location;
1634 } 1644 }
OLDNEW
« no previous file with comments | « no previous file | sdk/lib/io/io.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698