@@ -118,7 +118,34 @@ namespace boost { namespace network { namespace http {
118
118
}
119
119
120
120
string_typeconst body ()const {
121
- return body_.get ();
121
+ string_type body;
122
+ string_type partial_parsed = body_.get ();
123
+
124
+ typename headers_range<basic_response<Tag> >::type transfer_encoding_range =headers ().equal_range (" Transfer-Encoding" );
125
+ if (!empty (transfer_encoding_range) &&boost::iequals (boost::begin (transfer_encoding_range)->second ," chunked" )) {
126
+ typename string_type::iterator begin = partial_parsed.begin ();
127
+ string_type crlf =" \r\n " ;
128
+ for (typename string_type::iterator iter =std::search (begin, partial_parsed.end (), crlf.begin (), crlf.end ());
129
+ iter != partial_parsed.end ();
130
+ iter =std::search (begin, partial_parsed.end (), crlf.begin (), crlf.end ())) {
131
+ string_typeline (begin, iter);
132
+ if (line.empty ())break ;
133
+ std::stringstreamstream (line);
134
+ int len;
135
+ stream >> std::hex >> len;
136
+ iter +=2 ;
137
+ if (!len)break ;
138
+ if (len <= partial_parsed.end () - iter) {
139
+ body.insert (body.end (), iter, iter + len);
140
+ iter += len;
141
+ }
142
+ begin = iter;
143
+ }
144
+ }else {
145
+ std::swap (body, partial_parsed);
146
+ }
147
+
148
+ return body;
122
149
}
123
150
124
151
void body (boost::shared_future<string_type>const & future)const {