| 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 300 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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 } | 
| OLD | NEW |