Index: sdk/lib/io/http_multipart_form_data_impl.dart |
diff --git a/sdk/lib/io/http_multipart_form_data_impl.dart b/sdk/lib/io/http_multipart_form_data_impl.dart |
deleted file mode 100644 |
index 8531a9522d7e4d5c838d2a35517e559303cab148..0000000000000000000000000000000000000000 |
--- a/sdk/lib/io/http_multipart_form_data_impl.dart |
+++ /dev/null |
@@ -1,139 +0,0 @@ |
-// 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. |
- |
-part of dart.io; |
- |
- |
-class _HttpMultipartFormData extends Stream implements HttpMultipartFormData { |
- final ContentType contentType; |
- final HeaderValue contentDisposition; |
- final HeaderValue contentTransferEncoding; |
- |
- final MimeMultipart _mimeMultipart; |
- |
- bool _isText = false; |
- |
- Stream _stream; |
- |
- _HttpMultipartFormData(ContentType this.contentType, |
- HeaderValue this.contentDisposition, |
- HeaderValue this.contentTransferEncoding, |
- MimeMultipart this._mimeMultipart) { |
- _stream = _mimeMultipart; |
- if (contentTransferEncoding != null) { |
- // TODO(ajohnsen): Support BASE64, etc. |
- throw new HttpException("Unsupported contentTransferEncoding: " |
- "${contentTransferEncoding.value}"); |
- } |
- |
- if (contentType == null || |
- contentType.primaryType == 'text' || |
- contentType.mimeType == 'application/json') { |
- _isText = true; |
- StringBuffer buffer = new StringBuffer(); |
- Encoding encoding; |
- if (contentType != null) { |
- encoding = Encoding.fromName(contentType.charset); |
- } |
- if (encoding == null) encoding = Encoding.ISO_8859_1; |
- _stream = _stream |
- .transform(new StringDecoder(encoding)) |
- .expand((data) { |
- buffer.write(data); |
- var out = _decodeHttpEntityString(buffer.toString()); |
- if (out != null) { |
- buffer.clear(); |
- return [out]; |
- } |
- return const []; |
- }); |
- } |
- } |
- |
- bool get isText => _isText; |
- bool get isBinary => !_isText; |
- |
- static HttpMultipartFormData parse(MimeMultipart multipart) { |
- var type; |
- var encoding; |
- var disposition; |
- var remaining = new Map<String, String>(); |
- for (String key in multipart.headers.keys) { |
- switch (key) { |
- case HttpHeaders.CONTENT_TYPE: |
- type = ContentType.parse(multipart.headers[key]); |
- break; |
- |
- case 'content-transfer-encoding': |
- encoding = HeaderValue.parse(multipart.headers[key]); |
- break; |
- |
- case 'content-disposition': |
- disposition = HeaderValue.parse(multipart.headers[key]); |
- break; |
- |
- default: |
- remaining[key] = multipart.headers[key]; |
- break; |
- } |
- } |
- if (disposition == null) { |
- throw new HttpException( |
- "Mime Multipart doesn't contain a Content-Disposition header value"); |
- } |
- return new _HttpMultipartFormData(type, disposition, encoding, multipart); |
- } |
- |
- StreamSubscription listen(void onData(data), |
- {void onDone(), |
- void onError(error), |
- bool cancelOnError}) { |
- return _stream.listen(onData, |
- onDone: onDone, |
- onError: onError, |
- cancelOnError: cancelOnError); |
- } |
- |
- String value(String name) { |
- return _mimeMultipart.headers[name]; |
- } |
- |
- // Decode a string with HTTP entities. Returns null if the string ends in the |
- // middle of a http entity. |
- static String _decodeHttpEntityString(String input) { |
- int amp = input.lastIndexOf('&'); |
- if (amp < 0) return input; |
- int end = input.lastIndexOf(';'); |
- if (end < amp) return null; |
- |
- var buffer = new StringBuffer(); |
- int offset = 0; |
- |
- parse(amp, end) { |
- switch (input[amp + 1]) { |
- case '#': |
- if (input[amp + 2] == 'x') { |
- buffer.writeCharCode( |
- int.parse(input.substring(amp + 3, end), radix: 16)); |
- } else { |
- buffer.writeCharCode(int.parse(input.substring(amp + 2, end))); |
- } |
- break; |
- |
- default: |
- throw new HttpException('Unhandled HTTP entity token'); |
- } |
- } |
- |
- while ((amp = input.indexOf('&', offset)) >= 0) { |
- buffer.write(input.substring(offset, amp)); |
- int end = input.indexOf(';', amp); |
- parse(amp, end); |
- offset = end + 1; |
- } |
- buffer.write(input.substring(offset)); |
- return buffer.toString(); |
- } |
-} |
- |