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 * Tidy up websocket javadocs
* Refactor accept, handshake ops * Refactor accept, handshake ops
* Use read buffer instead of buffered stream
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View File

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

View File

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

View File

@ -140,7 +140,8 @@ open(role_type role)
rd_.remain = 0; rd_.remain = 0;
rd_.cont = false; rd_.cont = false;
rd_.done = true; 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_.fh.fin = false;
rd_close_ = false; rd_close_ = false;
wr_close_ = false; wr_close_ = false;
@ -204,9 +205,6 @@ reset()
wr_.cont = false; wr_.cont = false;
wr_block_.reset(); wr_block_.reset();
ping_data_ = nullptr; // should be nullptr on close anyway ping_data_ = nullptr; // should be nullptr on close anyway
stream_.buffer().consume(
stream_.buffer().size());
} }
// Called before each write frame // Called before each write frame

File diff suppressed because it is too large Load Diff