| Index: pkg/http/lib/src/streamed_request.dart
|
| diff --git a/pkg/http/lib/src/streamed_request.dart b/pkg/http/lib/src/streamed_request.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3570541f653c114ef039d17569a70be98a46eb71
|
| --- /dev/null
|
| +++ b/pkg/http/lib/src/streamed_request.dart
|
| @@ -0,0 +1,49 @@
|
| +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library streamed_request;
|
| +
|
| +import 'dart:io';
|
| +import 'dart:uri';
|
| +
|
| +import 'base_request.dart';
|
| +
|
| +/// An HTTP request where the request body is sent asynchronously after the
|
| +/// connection has been established and the headers have been sent.
|
| +///
|
| +/// When the request is sent via [BaseClient.send], only the headers and
|
| +/// whatever data has already been written to [StreamedRequest.stream] will be
|
| +/// sent immediately. More data will be sent as soon as it's written to
|
| +/// [StreamedRequest.stream], and when the stream is closed the request will
|
| +/// end.
|
| +class StreamedRequest extends BaseRequest {
|
| + /// The stream to which to write data that will be sent as the request body.
|
| + /// This may be safely written to before the request is sent; the data will be
|
| + /// buffered.
|
| + ///
|
| + /// Closing this signals the end of the request.
|
| + final OutputStream stream;
|
| +
|
| + /// The stream from which the [BaseClient] will read the data in [stream] once
|
| + /// the request has been finalized.
|
| + final ListInputStream _inputStream;
|
| +
|
| + /// Creates a new streaming request.
|
| + StreamedRequest(String method, Uri url)
|
| + : super(method, url),
|
| + stream = new ListOutputStream(),
|
| + _inputStream = new ListInputStream() {
|
| + // TODO(nweiz): pipe errors from the output stream to the input stream once
|
| + // issue 3657 is fixed
|
| + stream.onData = () => _inputStream.write(stream.read());
|
| + stream.onClosed = _inputStream.markEndOfStream;
|
| + }
|
| +
|
| + /// Freezes all mutable fields other than [stream] and returns an [InputStream]
|
| + /// that emits the data being written to [stream].
|
| + InputStream finalize() {
|
| + super.finalize();
|
| + return _inputStream;
|
| + }
|
| +}
|
|
|