Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit30dac6f

Browse files
committed
Merge branch '0.9-devel' ofhttps://github.com/omalashenko/cpp-netlib into omalashenko-0.9-devel
2 parents1013faa +02d6e81 commit30dac6f

File tree

1 file changed

+26
-5
lines changed

1 file changed

+26
-5
lines changed

‎boost/network/protocol/http/server/async_connection.hpp‎

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,21 @@ namespace boost { namespace network { namespace http {
227227

228228
voidread(read_callback_function callback) {
229229
if (error_encountered)boost::throw_exception(boost::system::system_error(*error_encountered));
230+
if (new_start != read_buffer_.begin())
231+
{
232+
input_range input =boost::make_iterator_range(new_start, read_buffer_.end());
233+
thread_pool().post(
234+
boost::bind(
235+
callback
236+
, input
237+
,boost::system::error_code()
238+
,std::distance(new_start, data_end)
239+
, async_connection<Tag,Handler>::shared_from_this())
240+
);
241+
new_start = read_buffer_.begin();
242+
return;
243+
}
244+
230245
socket().async_read_some(
231246
asio::buffer(read_buffer_)
232247
, strand.wrap(
@@ -247,9 +262,13 @@ namespace boost { namespace network { namespace http {
247262

248263
voidwrap_read_handler(read_callback_function callback, boost::system::error_codeconst & ec, std::size_t bytes_transferred) {
249264
if (ec) error_encountered = in_place<boost::system::system_error>(ec);
265+
buffer_type::const_iterator data_start = read_buffer_.begin()
266+
,data_end = read_buffer_.begin();
267+
std::advance(data_end, bytes_transferred);
250268
thread_pool().post(
251269
boost::bind(
252270
callback
271+
,boost::make_iterator_range(data_start, data_end)
253272
, ec
254273
, bytes_transferred
255274
, async_connection<Tag,Handler>::shared_from_this()));
@@ -279,7 +298,7 @@ namespace boost { namespace network { namespace http {
279298
status_t status;
280299
request_parser_type parser;
281300
request request_;
282-
buffer_type::iterator new_start;
301+
buffer_type::iterator new_start, data_end;
283302
string_type partial_parsed;
284303
optional<boost::system::system_error> error_encountered;
285304
pending_actions_list pending_actions;
@@ -317,10 +336,12 @@ namespace boost { namespace network { namespace http {
317336
if (!ec) {
318337
logic::tribool parsed_ok;
319338
iterator_range<buffer_type::iterator> result_range, input_range;
339+
data_end = read_buffer_.begin();
340+
std::advance(data_end, bytes_transferred);
320341
switch (state) {
321342
case method:
322343
input_range =boost::make_iterator_range(
323-
new_start,read_buffer_.end());
344+
new_start,data_end);
324345
fusion::tie(parsed_ok, result_range) = parser.parse_until(
325346
request_parser_type::method_done, input_range);
326347
if (!parsed_ok) {
@@ -343,7 +364,7 @@ namespace boost { namespace network { namespace http {
343364
}
344365
case uri:
345366
input_range =boost::make_iterator_range(
346-
new_start,read_buffer_.end());
367+
new_start,data_end);
347368
fusion::tie(parsed_ok, result_range) = parser.parse_until(
348369
request_parser_type::uri_done,
349370
input_range);
@@ -367,7 +388,7 @@ namespace boost { namespace network { namespace http {
367388
}
368389
case version:
369390
input_range =boost::make_iterator_range(
370-
new_start,read_buffer_.end());
391+
new_start,data_end);
371392
fusion::tie(parsed_ok, result_range) = parser.parse_until(
372393
request_parser_type::version_done,
373394
input_range);
@@ -391,7 +412,7 @@ namespace boost { namespace network { namespace http {
391412
}
392413
case headers:
393414
input_range =boost::make_iterator_range(
394-
new_start,read_buffer_.end());
415+
new_start,data_end);
395416
fusion::tie(parsed_ok, result_range) = parser.parse_until(
396417
request_parser_type::headers_done,
397418
input_range);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp