| 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 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 return statusCode == HttpStatus.UNAUTHORIZED && | 253 return statusCode == HttpStatus.UNAUTHORIZED && |
| 254 challenge != null && challenge.length == 1; | 254 challenge != null && challenge.length == 1; |
| 255 } | 255 } |
| 256 | 256 |
| 257 Future<HttpClientResponse> _authenticate() { | 257 Future<HttpClientResponse> _authenticate() { |
| 258 Future<HttpClientResponse> retryWithCredentials(_Credentials cr) { | 258 Future<HttpClientResponse> retryWithCredentials(_Credentials cr) { |
| 259 if (cr != null) { | 259 if (cr != null) { |
| 260 // TODO(sgjesse): Support digest. | 260 // TODO(sgjesse): Support digest. |
| 261 if (cr.scheme == _AuthenticationScheme.BASIC) { | 261 if (cr.scheme == _AuthenticationScheme.BASIC) { |
| 262 // Drain body and retry. | 262 // Drain body and retry. |
| 263 return reduce(null, (x, y) {}).then((_) { | 263 return fold(null, (x, y) {}).then((_) { |
| 264 return _httpClient._openUrlFromRequest(_httpRequest.method, | 264 return _httpClient._openUrlFromRequest(_httpRequest.method, |
| 265 _httpRequest.uri, | 265 _httpRequest.uri, |
| 266 _httpRequest) | 266 _httpRequest) |
| 267 .then((request) => request.close()); | 267 .then((request) => request.close()); |
| 268 }); | 268 }); |
| 269 } | 269 } |
| 270 } | 270 } |
| 271 | 271 |
| 272 // Fall through to here to perform normal response handling if | 272 // Fall through to here to perform normal response handling if |
| 273 // there is no sensible authorization handling. | 273 // there is no sensible authorization handling. |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 } | 453 } |
| 454 _writeHeader(); | 454 _writeHeader(); |
| 455 _ioSink = new IOSink(new _HttpOutboundConsumer(_ioSink, _consume, asGZip)); | 455 _ioSink = new IOSink(new _HttpOutboundConsumer(_ioSink, _consume, asGZip)); |
| 456 _ioSink.encoding = encoding; | 456 _ioSink.encoding = encoding; |
| 457 } | 457 } |
| 458 | 458 |
| 459 Future _consume(IOSink ioSink, Stream<List<int>> stream, bool asGZip) { | 459 Future _consume(IOSink ioSink, Stream<List<int>> stream, bool asGZip) { |
| 460 int contentLength = headers.contentLength; | 460 int contentLength = headers.contentLength; |
| 461 if (_ignoreBody) { | 461 if (_ignoreBody) { |
| 462 ioSink.close(); | 462 ioSink.close(); |
| 463 return stream.reduce(null, (x, y) {}).then((_) => this); | 463 return stream.fold(null, (x, y) {}).then((_) => this); |
| 464 } | 464 } |
| 465 stream = stream.transform(new _BufferTransformer()); | 465 stream = stream.transform(new _BufferTransformer()); |
| 466 if (headers.chunkedTransferEncoding) { | 466 if (headers.chunkedTransferEncoding) { |
| 467 if (asGZip) { | 467 if (asGZip) { |
| 468 stream = stream.transform(new ZLibDeflater(gzip: true, level: 6)); | 468 stream = stream.transform(new ZLibDeflater(gzip: true, level: 6)); |
| 469 } | 469 } |
| 470 stream = stream.transform(new _ChunkedTransformer()); | 470 stream = stream.transform(new _ChunkedTransformer()); |
| 471 } else if (contentLength >= 0) { | 471 } else if (contentLength >= 0) { |
| 472 stream = stream.transform(new _ContentLengthValidator(contentLength)); | 472 stream = stream.transform(new _ContentLengthValidator(contentLength)); |
| 473 } | 473 } |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 HttpConnectionInfo get connectionInfo => _httpClientConnection.connectionInfo; | 728 HttpConnectionInfo get connectionInfo => _httpClientConnection.connectionInfo; |
| 729 | 729 |
| 730 void _onIncoming(_HttpIncoming incoming) { | 730 void _onIncoming(_HttpIncoming incoming) { |
| 731 var response = new _HttpClientResponse(incoming, | 731 var response = new _HttpClientResponse(incoming, |
| 732 this, | 732 this, |
| 733 _httpClient); | 733 _httpClient); |
| 734 Future<HttpClientResponse> future; | 734 Future<HttpClientResponse> future; |
| 735 if (followRedirects && response.isRedirect) { | 735 if (followRedirects && response.isRedirect) { |
| 736 if (response.redirects.length < maxRedirects) { | 736 if (response.redirects.length < maxRedirects) { |
| 737 // Redirect and drain response. | 737 // Redirect and drain response. |
| 738 future = response.reduce(null, (x, y) {}) | 738 future = response.fold(null, (x, y) {}) |
| 739 .then((_) => response.redirect()); | 739 .then((_) => response.redirect()); |
| 740 } else { | 740 } else { |
| 741 // End with exception, too many redirects. | 741 // End with exception, too many redirects. |
| 742 future = response.reduce(null, (x, y) {}) | 742 future = response.fold(null, (x, y) {}) |
| 743 .then((_) => new Future.immediateError( | 743 .then((_) => new Future.immediateError( |
| 744 new RedirectLimitExceededException(response.redirects))); | 744 new RedirectLimitExceededException(response.redirects))); |
| 745 } | 745 } |
| 746 } else if (response._shouldAuthenticate) { | 746 } else if (response._shouldAuthenticate) { |
| 747 future = response._authenticate(); | 747 future = response._authenticate(); |
| 748 } else { | 748 } else { |
| 749 future = new Future<HttpClientResponse>.immediate(response); | 749 future = new Future<HttpClientResponse>.immediate(response); |
| 750 } | 750 } |
| 751 future.then( | 751 future.then( |
| 752 (v) => _responseCompleter.complete(v), | 752 (v) => _responseCompleter.complete(v), |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1090 } | 1090 } |
| 1091 | 1091 |
| 1092 Future<HttpClientRequest> postUrl(Uri url) { | 1092 Future<HttpClientRequest> postUrl(Uri url) { |
| 1093 return _openUrl("post", url); | 1093 return _openUrl("post", url); |
| 1094 } | 1094 } |
| 1095 | 1095 |
| 1096 void close({bool force: false}) { | 1096 void close({bool force: false}) { |
| 1097 _closing = true; | 1097 _closing = true; |
| 1098 // Create flattened copy of _idleConnections, as 'destory' will manipulate | 1098 // Create flattened copy of _idleConnections, as 'destory' will manipulate |
| 1099 // it. | 1099 // it. |
| 1100 var idle = _idleConnections.values.reduce( | 1100 var idle = _idleConnections.values.fold( |
| 1101 [], | 1101 [], |
| 1102 (l, e) { | 1102 (l, e) { |
| 1103 l.addAll(e); | 1103 l.addAll(e); |
| 1104 return l; | 1104 return l; |
| 1105 }); | 1105 }); |
| 1106 idle.forEach((e) { | 1106 idle.forEach((e) { |
| 1107 e.close(); | 1107 e.close(); |
| 1108 }); | 1108 }); |
| 1109 assert(_idleConnections.isEmpty); | 1109 assert(_idleConnections.isEmpty); |
| 1110 if (force) { | 1110 if (force) { |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1242 // Continue with next proxy. | 1242 // Continue with next proxy. |
| 1243 return connect(error.error); | 1243 return connect(error.error); |
| 1244 }); | 1244 }); |
| 1245 } | 1245 } |
| 1246 return connect(new HttpException("No proxies given")); | 1246 return connect(new HttpException("No proxies given")); |
| 1247 } | 1247 } |
| 1248 | 1248 |
| 1249 _Credentials _findCredentials(Uri url, [_AuthenticationScheme scheme]) { | 1249 _Credentials _findCredentials(Uri url, [_AuthenticationScheme scheme]) { |
| 1250 // Look for credentials. | 1250 // Look for credentials. |
| 1251 _Credentials cr = | 1251 _Credentials cr = |
| 1252 _credentials.reduce(null, (_Credentials prev, _Credentials value) { | 1252 _credentials.fold(null, (_Credentials prev, _Credentials value) { |
| 1253 if (value.applies(url, scheme)) { | 1253 if (value.applies(url, scheme)) { |
| 1254 if (prev == null) return value; | 1254 if (prev == null) return value; |
| 1255 return value.uri.path.length > prev.uri.path.length ? value : prev; | 1255 return value.uri.path.length > prev.uri.path.length ? value : prev; |
| 1256 } else { | 1256 } else { |
| 1257 return prev; | 1257 return prev; |
| 1258 } | 1258 } |
| 1259 }); | 1259 }); |
| 1260 return cr; | 1260 return cr; |
| 1261 } | 1261 } |
| 1262 | 1262 |
| (...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1780 | 1780 |
| 1781 | 1781 |
| 1782 class _RedirectInfo implements RedirectInfo { | 1782 class _RedirectInfo implements RedirectInfo { |
| 1783 const _RedirectInfo(int this.statusCode, | 1783 const _RedirectInfo(int this.statusCode, |
| 1784 String this.method, | 1784 String this.method, |
| 1785 Uri this.location); | 1785 Uri this.location); |
| 1786 final int statusCode; | 1786 final int statusCode; |
| 1787 final String method; | 1787 final String method; |
| 1788 final Uri location; | 1788 final Uri location; |
| 1789 } | 1789 } |
| OLD | NEW |