| OLD | NEW |
| 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 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 _HttpOutboundConsumer(_HttpOutboundMessage this._outbound); | 563 _HttpOutboundConsumer(_HttpOutboundMessage this._outbound); |
| 564 | 564 |
| 565 void _cancel() { | 565 void _cancel() { |
| 566 if (_subscription != null) { | 566 if (_subscription != null) { |
| 567 StreamSubscription subscription = _subscription; | 567 StreamSubscription subscription = _subscription; |
| 568 _subscription = null; | 568 _subscription = null; |
| 569 subscription.cancel(); | 569 subscription.cancel(); |
| 570 } | 570 } |
| 571 } | 571 } |
| 572 | 572 |
| 573 bool _ignoreError(error) |
| 574 => error is SocketException && _outbound is HttpResponse; |
| 575 |
| 573 _ensureController() { | 576 _ensureController() { |
| 574 if (_controller != null) return; | 577 if (_controller != null) return; |
| 575 _controller = new StreamController(sync: true, | 578 _controller = new StreamController(sync: true, |
| 576 onPause: () => _subscription.pause(), | 579 onPause: () => _subscription.pause(), |
| 577 onResume: () => _subscription.resume(), | 580 onResume: () => _subscription.resume(), |
| 578 onListen: () => _subscription.resume(), | 581 onListen: () => _subscription.resume(), |
| 579 onCancel: _cancel); | 582 onCancel: _cancel); |
| 580 _outbound._addStream(_controller.stream) | 583 _outbound._addStream(_controller.stream) |
| 581 .then((_) { | 584 .then((_) { |
| 582 _cancel(); | 585 _cancel(); |
| 583 _done(); | 586 _done(); |
| 584 _closeCompleter.complete(_outbound); | 587 _closeCompleter.complete(_outbound); |
| 585 }, | 588 }, |
| 586 onError: (error) { | 589 onError: (error) { |
| 587 _socketError = true; | 590 _socketError = true; |
| 588 if (error is SocketException && | 591 if (_ignoreError(error)) { |
| 589 _outbound is HttpResponse) { | |
| 590 _cancel(); | 592 _cancel(); |
| 591 _done(); | 593 _done(); |
| 592 _closeCompleter.complete(_outbound); | 594 _closeCompleter.complete(_outbound); |
| 593 } else { | 595 } else { |
| 594 if (!_done(error)) { | 596 if (!_done(error)) { |
| 595 _closeCompleter.completeError(error); | 597 _closeCompleter.completeError(error); |
| 596 } | 598 } |
| 597 } | 599 } |
| 598 }); | 600 }); |
| 599 } | 601 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 630 cancelOnError: true); | 632 cancelOnError: true); |
| 631 // Pause the first request. | 633 // Pause the first request. |
| 632 if (_controller == null) _subscription.pause(); | 634 if (_controller == null) _subscription.pause(); |
| 633 _ensureController(); | 635 _ensureController(); |
| 634 return _completer.future; | 636 return _completer.future; |
| 635 } | 637 } |
| 636 | 638 |
| 637 Future close() { | 639 Future close() { |
| 638 Future closeOutbound() { | 640 Future closeOutbound() { |
| 639 if (_socketError) return new Future.value(_outbound); | 641 if (_socketError) return new Future.value(_outbound); |
| 640 return _outbound._close().then((_) => _outbound); | 642 return _outbound._close() |
| 643 .catchError((_) {}, test: _ignoreError) |
| 644 .then((_) => _outbound); |
| 641 } | 645 } |
| 642 if (_controller == null) return closeOutbound(); | 646 if (_controller == null) return closeOutbound(); |
| 643 _controller.close(); | 647 _controller.close(); |
| 644 return _closeCompleter.future.then((_) => closeOutbound()); | 648 return _closeCompleter.future.then((_) => closeOutbound()); |
| 645 } | 649 } |
| 646 } | 650 } |
| 647 | 651 |
| 648 | 652 |
| 649 class _BufferTransformer extends StreamEventTransformer<List<int>, List<int>> { | 653 class _BufferTransformer extends StreamEventTransformer<List<int>, List<int>> { |
| 650 static const int MIN_CHUNK_SIZE = 4 * 1024; | 654 static const int MIN_CHUNK_SIZE = 4 * 1024; |
| (...skipping 1815 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2466 final Uri location; | 2470 final Uri location; |
| 2467 } | 2471 } |
| 2468 | 2472 |
| 2469 String _getHttpVersion() { | 2473 String _getHttpVersion() { |
| 2470 var version = Platform.version; | 2474 var version = Platform.version; |
| 2471 // Only include major and minor version numbers. | 2475 // Only include major and minor version numbers. |
| 2472 int index = version.indexOf('.', version.indexOf('.') + 1); | 2476 int index = version.indexOf('.', version.indexOf('.') + 1); |
| 2473 version = version.substring(0, index); | 2477 version = version.substring(0, index); |
| 2474 return 'Dart/$version (dart:io)'; | 2478 return 'Dart/$version (dart:io)'; |
| 2475 } | 2479 } |
| OLD | NEW |