Index: sdk/lib/io/http_impl.dart |
diff --git a/sdk/lib/io/http_impl.dart b/sdk/lib/io/http_impl.dart |
index ee36808eaea7459082c51a7ad5072106f22020e5..31099ccf03910fac880959c64a9b97e406ab6096 100644 |
--- a/sdk/lib/io/http_impl.dart |
+++ b/sdk/lib/io/http_impl.dart |
@@ -318,14 +318,21 @@ class _HttpClientResponse |
} |
-abstract class _HttpOutboundMessage<T> extends IOSink { |
+abstract class _HttpOutboundMessage<T> implements IOSink { |
// Used to mark when the body should be written. This is used for HEAD |
// requests and in error handling. |
bool _ignoreBody = false; |
+ bool _headersWritten = false; |
+ bool _chunked = false; |
+ |
+ final IOSink _ioSink; |
+ final _HttpOutgoing _outgoing; |
+ |
+ final _HttpHeaders headers; |
_HttpOutboundMessage(String protocolVersion, _HttpOutgoing outgoing) |
- : super(outgoing), |
- _outgoing = outgoing, |
+ : _outgoing = outgoing, |
+ _ioSink = new IOSink(outgoing), |
headers = new _HttpHeaders(protocolVersion); |
int get contentLength => headers.contentLength; |
@@ -345,27 +352,31 @@ abstract class _HttpOutboundMessage<T> extends IOSink { |
// Transform when chunked. |
stream = stream.transform(new _ChunkedTransformer()); |
} |
- return super.consume(stream).then((_) => this); |
+ return _ioSink.consume(stream).then((_) => this); |
} |
void add(List<int> data) { |
_writeHeaders(); |
if (_ignoreBody || data.length == 0) return; |
if (_chunked) { |
- _ChunkedTransformer._addChunk(data, super.add); |
+ _ChunkedTransformer._addChunk(data, _ioSink.add); |
} else { |
- super.add(data); |
+ _ioSink.add(data); |
} |
} |
- Future addStream(Stream<List<int>> stream) { |
+ void addString(String string, [Encoding encoding = Encoding.UTF_8]) { |
+ add(_encodeString(string, encoding)); |
+ } |
+ |
+ Future<T> addStream(Stream<List<int>> stream) { |
_writeHeaders(); |
if (_ignoreBody) return new Future.immediate(this); |
if (_chunked) { |
// Transform when chunked. |
stream = stream.transform(new _ChunkedTransformer(writeEnd: false)); |
} |
- return super.addStream(stream).then((_) => this); |
+ return _ioSink.addStream(stream).then((_) => this); |
} |
void close() { |
@@ -377,12 +388,14 @@ abstract class _HttpOutboundMessage<T> extends IOSink { |
_writeHeaders(); |
if (!_ignoreBody) { |
if (_chunked) { |
- _ChunkedTransformer._addChunk([], super.add); |
+ _ChunkedTransformer._addChunk([], _ioSink.add); |
} |
} |
- super.close(); |
+ _ioSink.close(); |
} |
+ Future<T> get done => _ioSink.done.then((_) => this); |
+ |
void _writeHeaders() { |
if (_headersWritten) return; |
bool _tmpIgnoreBody = _ignoreBody; |
@@ -391,7 +404,7 @@ abstract class _HttpOutboundMessage<T> extends IOSink { |
_writeHeader(); |
_ignoreBody = _tmpIgnoreBody; |
if (_ignoreBody) { |
- super.close(); |
+ _ioSink.close(); |
return; |
} |
_chunked = headers.chunkedTransferEncoding; |
@@ -401,12 +414,6 @@ abstract class _HttpOutboundMessage<T> extends IOSink { |
} |
void _writeHeader(); // TODO(ajohnsen): Better name. |
- |
- final _HttpHeaders headers; |
- |
- final _HttpOutgoing _outgoing; |
- bool _headersWritten = false; |
- bool _chunked = false; |
} |
@@ -1485,7 +1492,7 @@ class _HttpConnectionInfo implements HttpConnectionInfo { |
} |
-class _DetachedSocket implements Socket { |
+class _DetachedSocket extends Stream<List<int>> implements Socket { |
final Stream<List<int>> _incoming; |
final Socket _socket; |
@@ -1517,6 +1524,9 @@ class _DetachedSocket implements Socket { |
void add(List<int> data) => _socket.add(data); |
void close() => _socket.close(); |
Future<Socket> get done => _socket.done; |
+ int get port => _socket.port; |
+ String get remoteHost => _socket.remoteHost; |
+ int get remotePort => _socket.remotePort; |
} |