Use read buffer instead of buffered stream

This commit is contained in:
Vinnie Falco
2017-07-27 15:40:10 -07:00
parent 70c1d361fd
commit 18a698f7f6
5 changed files with 1290 additions and 1176 deletions

View File

@ -11,6 +11,7 @@ WebSocket:
* Tidy up websocket javadocs
* Refactor accept, handshake ops
* Use read buffer instead of buffered stream
--------------------------------------------------------------------------------

View File

@ -119,11 +119,11 @@ operator()(Buffers const& buffers)
auto& d = *d_;
error_code ec;
boost::optional<typename
flat_buffer::mutable_buffers_type> mb;
static_buffer_base::mutable_buffers_type> mb;
auto const len = buffer_size(buffers);
try
{
mb.emplace(d.ws.stream_.buffer().prepare(len));
mb.emplace(d.ws.rd_.buf.prepare(len));
}
catch(std::length_error const&)
{
@ -132,7 +132,7 @@ operator()(Buffers const& buffers)
return d.ws.get_io_service().post(
bind_handler(std::move(*this), ec));
}
d.ws.stream_.buffer().commit(
d.ws.rd_.buf.commit(
buffer_copy(*mb, buffers));
(*this)(ec);
}
@ -263,11 +263,11 @@ operator()(Buffers const& buffers)
auto& d = *d_;
error_code ec;
boost::optional<typename
flat_buffer::mutable_buffers_type> mb;
static_buffer_base::mutable_buffers_type> mb;
auto const len = buffer_size(buffers);
try
{
mb.emplace(d.ws.stream_.buffer().prepare(len));
mb.emplace(d.ws.rd_.buf.prepare(len));
}
catch(std::length_error const&)
{
@ -276,7 +276,7 @@ operator()(Buffers const& buffers)
return d.ws.get_io_service().post(
bind_handler(std::move(*this), ec));
}
d.ws.stream_.buffer().commit(
d.ws.rd_.buf.commit(
buffer_copy(*mb, buffers));
(*this)(ec);
}
@ -294,7 +294,7 @@ operator()(error_code ec)
case 0:
d.step = 1;
return http::async_read(
d.ws.next_layer(), d.ws.stream_.buffer(),
d.ws.next_layer(), d.ws.rd_.buf,
d.p, std::move(*this));
case 1:
@ -437,8 +437,8 @@ accept(ConstBufferSequence const& buffers, error_code& ec)
reset();
using boost::asio::buffer_copy;
using boost::asio::buffer_size;
stream_.buffer().commit(buffer_copy(
stream_.buffer().prepare(
rd_.buf.commit(buffer_copy(
rd_.buf.prepare(
buffer_size(buffers)), buffers));
do_accept(&default_decorate_res, ec);
}
@ -463,8 +463,8 @@ accept_ex(ConstBufferSequence const& buffers,
reset();
using boost::asio::buffer_copy;
using boost::asio::buffer_size;
stream_.buffer().commit(buffer_copy(
stream_.buffer().prepare(
rd_.buf.commit(buffer_copy(
rd_.buf.prepare(
buffer_size(buffers)), buffers));
do_accept(decorator, ec);
}
@ -597,8 +597,8 @@ accept(http::request<Body,
reset();
using boost::asio::buffer_copy;
using boost::asio::buffer_size;
stream_.buffer().commit(buffer_copy(
stream_.buffer().prepare(
rd_.buf.commit(buffer_copy(
rd_.buf.prepare(
buffer_size(buffers)), buffers));
do_accept(req, &default_decorate_res, ec);
}
@ -625,8 +625,8 @@ accept_ex(http::request<Body,
reset();
using boost::asio::buffer_copy;
using boost::asio::buffer_size;
stream_.buffer().commit(buffer_copy(
stream_.buffer().prepare(
rd_.buf.commit(buffer_copy(
rd_.buf.prepare(
buffer_size(buffers)), buffers));
do_accept(req, decorator, ec);
}
@ -878,7 +878,7 @@ do_accept(
{
http::request_parser<http::empty_body> p;
http::read(next_layer(),
stream_.buffer(), p, ec);
rd_.buf, p, ec);
if(ec)
return;
do_accept(p.get(), decorator, ec);

View File

@ -148,7 +148,7 @@ operator()(error_code ec, bool again)
// read http response
d.state = 2;
http::async_read(d.ws.next_layer(),
d.ws.stream_.buffer(), d.res,
d.ws.rd_.buf, d.res,
std::move(*this));
return;
@ -413,7 +413,7 @@ do_handshake(
}
if(ec)
return;
http::read(next_layer(), stream_.buffer(), res, ec);
http::read(next_layer(), rd_.buf, res, ec);
if(ec)
return;
do_response(res, key, ec);
@ -421,8 +421,6 @@ do_handshake(
*res_p = std::move(res);
}
//------------------------------------------------------------------------------
} // websocket
} // beast
} // boost

View File

@ -140,7 +140,8 @@ open(role_type role)
rd_.remain = 0;
rd_.cont = false;
rd_.done = true;
rd_.buf.consume(rd_.buf.size());
// Can't clear this because accept uses it
//rd_.buf.consume(rd_.buf.size());
rd_.fh.fin = false;
rd_close_ = false;
wr_close_ = false;
@ -204,9 +205,6 @@ reset()
wr_.cont = false;
wr_block_.reset();
ping_data_ = nullptr; // should be nullptr on close anyway
stream_.buffer().consume(
stream_.buffer().size());
}
// Called before each write frame

File diff suppressed because it is too large Load Diff