| Index: sdk/lib/io/http_body_impl.dart
|
| diff --git a/sdk/lib/io/http_body_impl.dart b/sdk/lib/io/http_body_impl.dart
|
| deleted file mode 100644
|
| index 2eaf07bd791b9e66290e04a28621b464edb2929f..0000000000000000000000000000000000000000
|
| --- a/sdk/lib/io/http_body_impl.dart
|
| +++ /dev/null
|
| @@ -1,199 +0,0 @@
|
| -// Copyright (c) 2013, 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.
|
| -
|
| -part of dart.io;
|
| -
|
| -class _HttpBodyHandlerTransformer
|
| - extends StreamEventTransformer<HttpRequest, HttpRequestBody> {
|
| - final Encoding _defaultEncoding;
|
| - _HttpBodyHandlerTransformer(this._defaultEncoding);
|
| -
|
| - void handleData(HttpRequest request, EventSink<HttpRequestBody> sink) {
|
| - _HttpBodyHandler.processRequest(request, _defaultEncoding)
|
| - .then(sink.add, onError: sink.addError);
|
| - }
|
| -}
|
| -
|
| -class _HttpBodyHandler {
|
| - static Future<HttpRequestBody> processRequest(
|
| - HttpRequest request,
|
| - Encoding defaultEncoding) {
|
| - return process(request, request.headers, defaultEncoding)
|
| - .then((body) => new _HttpRequestBody(request, body),
|
| - onError: (error) {
|
| - // Try to send BAD_REQUEST response.
|
| - request.response.statusCode = HttpStatus.BAD_REQUEST;
|
| - request.response.close();
|
| - request.response.done.catchError((_) {});
|
| - throw error;
|
| - });
|
| - }
|
| -
|
| - static Future<HttpClientResponseBody> processResponse(
|
| - HttpClientResponse response,
|
| - Encoding defaultEncoding) {
|
| - return process(response, response.headers, defaultEncoding)
|
| - .then((body) => new _HttpClientResponseBody(response, body));
|
| - }
|
| -
|
| - static Future<HttpBody> process(Stream<List<int>> stream,
|
| - HttpHeaders headers,
|
| - Encoding defaultEncoding) {
|
| - ContentType contentType = headers.contentType;
|
| -
|
| - Future<HttpBody> asBinary() {
|
| - return stream
|
| - .fold(new BytesBuilder(), (builder, data) => builder..add(data))
|
| - .then((builder) => new _HttpBody(contentType,
|
| - "binary",
|
| - builder.takeBytes()));
|
| - }
|
| -
|
| - Future<HttpBody> asText(Encoding defaultEncoding) {
|
| - var encoding;
|
| - var charset = contentType.charset;
|
| - if (charset != null) encoding = Encoding.fromName(charset);
|
| - if (encoding == null) encoding = defaultEncoding;
|
| - return stream
|
| - .transform(new StringDecoder(encoding))
|
| - .fold(new StringBuffer(), (buffer, data) => buffer..write(data))
|
| - .then((buffer) => new _HttpBody(contentType,
|
| - "text",
|
| - buffer.toString()));
|
| - }
|
| -
|
| - Future<HttpBody> asFormData() {
|
| - return stream
|
| - .transform(new MimeMultipartTransformer(
|
| - contentType.parameters['boundary']))
|
| - .map((HttpMultipartFormData.parse))
|
| - .map((multipart) {
|
| - var future;
|
| - if (multipart.isText) {
|
| - future = multipart
|
| - .fold(new StringBuffer(), (b, s) => b..write(s))
|
| - .then((b) => b.toString());
|
| - } else {
|
| - future = multipart
|
| - .fold(new BytesBuilder(), (b, d) => b..add(d))
|
| - .then((b) => b.takeBytes());
|
| - }
|
| - return future.then((data) {
|
| - var filename =
|
| - multipart.contentDisposition.parameters['filename'];
|
| - if (filename != null) {
|
| - data = new _HttpBodyFileUpload(multipart.contentType,
|
| - filename,
|
| - data);
|
| - }
|
| - return [multipart.contentDisposition.parameters['name'], data];
|
| - });
|
| - })
|
| - .fold([], (l, f) => l..add(f))
|
| - .then(Future.wait)
|
| - .then((parts) {
|
| - Map<String, dynamic> map = new Map<String, dynamic>();
|
| - for (var part in parts) {
|
| - map[part[0]] = part[1]; // Override existing entries.
|
| - }
|
| - return new _HttpBody(contentType, 'form', map);
|
| - });
|
| - }
|
| -
|
| - if (contentType == null) {
|
| - return asBinary();
|
| - }
|
| -
|
| - switch (contentType.primaryType) {
|
| - case "text":
|
| - return asText(Encoding.ASCII);
|
| -
|
| - case "application":
|
| - switch (contentType.subType) {
|
| - case "json":
|
| - return asText(Encoding.UTF_8)
|
| - .then((body) => new _HttpBody(contentType,
|
| - "json",
|
| - JSON.parse(body.body)));
|
| -
|
| - case "x-www-form-urlencoded":
|
| - return asText(Encoding.ASCII)
|
| - .then((body) {
|
| - var map = Uri.splitQueryString(body.body,
|
| - decode: (s) => _decodeString(s, defaultEncoding));
|
| - var result = {};
|
| - for (var key in map.keys) {
|
| - result[key] = map[key];
|
| - }
|
| - return new _HttpBody(contentType, "form", result);
|
| - });
|
| -
|
| - default:
|
| - break;
|
| - }
|
| - break;
|
| -
|
| - case "multipart":
|
| - switch (contentType.subType) {
|
| - case "form-data":
|
| - return asFormData();
|
| -
|
| - default:
|
| - break;
|
| - }
|
| - break;
|
| -
|
| - default:
|
| - break;
|
| - }
|
| -
|
| - return asBinary();
|
| - }
|
| -}
|
| -
|
| -class _HttpBodyFileUpload implements HttpBodyFileUpload {
|
| - final ContentType contentType;
|
| - final String filename;
|
| - final dynamic content;
|
| - _HttpBodyFileUpload(this.contentType, this.filename, this.content);
|
| -}
|
| -
|
| -class _HttpBody implements HttpBody {
|
| - final ContentType contentType;
|
| - final String type;
|
| - final dynamic body;
|
| -
|
| - _HttpBody(ContentType this.contentType,
|
| - String this.type,
|
| - dynamic this.body);
|
| -}
|
| -
|
| -class _HttpRequestBody extends _HttpBody implements HttpRequestBody {
|
| - final String method;
|
| - final Uri uri;
|
| - final HttpHeaders headers;
|
| - final HttpResponse response;
|
| -
|
| - _HttpRequestBody(HttpRequest request, HttpBody body)
|
| - : super(body.contentType, body.type, body.body),
|
| - method = request.method,
|
| - uri = request.uri,
|
| - headers = request.headers,
|
| - response = request.response;
|
| -}
|
| -
|
| -class _HttpClientResponseBody
|
| - extends _HttpBody implements HttpClientResponseBody {
|
| - final HttpClientResponse response;
|
| -
|
| - _HttpClientResponseBody(HttpClientResponse response, HttpBody body)
|
| - : super(body.contentType, body.type, body.body),
|
| - this.response = response;
|
| -
|
| - int get statusCode => response.statusCode;
|
| -
|
| - String get reasonPhrase => response.reasonPhrase;
|
| -
|
| - HttpHeaders get headers => response.headers;
|
| -}
|
|
|