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 _HttpBodyHandlerTransformer | 7 class _HttpBodyHandlerTransformer |
8 extends StreamEventTransformer<HttpRequest, HttpRequestBody> { | 8 extends StreamEventTransformer<HttpRequest, HttpRequestBody> { |
9 void handleData(HttpRequest request, EventSink<HttpRequestBody> sink) { | 9 void handleData(HttpRequest request, EventSink<HttpRequestBody> sink) { |
10 HttpBodyHandler.processRequest(request) | 10 HttpBodyHandler.processRequest(request) |
(...skipping 29 matching lines...) Expand all Loading... |
40 return stream.fold( | 40 return stream.fold( |
41 new _BufferList(), | 41 new _BufferList(), |
42 (buffer, data) { | 42 (buffer, data) { |
43 // TODO(ajohnsen): Add limit for POST data. | 43 // TODO(ajohnsen): Add limit for POST data. |
44 buffer.add(data); | 44 buffer.add(data); |
45 return buffer; | 45 return buffer; |
46 }) | 46 }) |
47 .then((list) { | 47 .then((list) { |
48 dynamic content = list.readBytes(); | 48 dynamic content = list.readBytes(); |
49 String type = "binary"; | 49 String type = "binary"; |
50 String mimeType = headers.contentType.toString(); | 50 ContentType contentType = headers.contentType; |
| 51 if (contentType == null) { |
| 52 return new _HttpBody(null, type, content); |
| 53 } |
51 String asText(Encoding defaultEncoding) { | 54 String asText(Encoding defaultEncoding) { |
52 var encoding; | 55 var encoding; |
53 var charset = headers.contentType.charset; | 56 var charset = contentType.charset; |
54 if (charset != null) encoding = Encoding.fromName(charset); | 57 if (charset != null) encoding = Encoding.fromName(charset); |
55 if (encoding == null) encoding = defaultEncoding; | 58 if (encoding == null) encoding = defaultEncoding; |
56 return _decodeString(content, encoding); | 59 return _decodeString(content, encoding); |
57 } | 60 } |
58 switch (headers.contentType.primaryType) { | 61 switch (contentType.primaryType) { |
59 case "text": | 62 case "text": |
60 type = "text"; | 63 type = "text"; |
61 content = asText(Encoding.ASCII); | 64 content = asText(Encoding.ASCII); |
62 break; | 65 break; |
63 | 66 |
64 case "application": | 67 case "application": |
65 switch (headers.contentType.subType) { | 68 switch (contentType.subType) { |
66 case "json": | 69 case "json": |
67 content = JSON.parse(asText(Encoding.UTF_8)); | 70 content = JSON.parse(asText(Encoding.UTF_8)); |
68 type = "json"; | 71 type = "json"; |
69 break; | 72 break; |
70 | 73 |
71 default: | 74 default: |
72 break; | 75 break; |
73 } | 76 } |
74 break; | 77 break; |
75 | 78 |
76 default: | 79 default: |
77 break; | 80 break; |
78 } | 81 } |
79 return new _HttpBody(mimeType, type, content); | 82 return new _HttpBody(contentType.mimeType, type, content); |
80 }); | 83 }); |
81 } | 84 } |
82 } | 85 } |
83 | 86 |
84 class _HttpBody implements HttpBody { | 87 class _HttpBody implements HttpBody { |
85 final String mimeType; | 88 final String mimeType; |
86 final String type; | 89 final String type; |
87 final dynamic body; | 90 final dynamic body; |
88 | 91 |
89 _HttpBody(String this.mimeType, | 92 _HttpBody(String this.mimeType, |
(...skipping 20 matching lines...) Expand all Loading... |
110 final int statusCode; | 113 final int statusCode; |
111 final String reasonPhrase; | 114 final String reasonPhrase; |
112 final HttpHeaders headers; | 115 final HttpHeaders headers; |
113 | 116 |
114 _HttpClientResponseBody(HttpClientResponse response, HttpBody body) | 117 _HttpClientResponseBody(HttpClientResponse response, HttpBody body) |
115 : super(body.mimeType, body.type, body.body), | 118 : super(body.mimeType, body.type, body.body), |
116 statusCode = response.statusCode, | 119 statusCode = response.statusCode, |
117 reasonPhrase = response.reasonPhrase, | 120 reasonPhrase = response.reasonPhrase, |
118 headers = response.headers; | 121 headers = response.headers; |
119 } | 122 } |
OLD | NEW |