forked from boostorg/beast
@@ -4,6 +4,7 @@ Version 158:
|
|||||||
* Tidy up websocket docs
|
* Tidy up websocket docs
|
||||||
* Examples set reuse_address(true)
|
* Examples set reuse_address(true)
|
||||||
* Advanced servers support clean shutdown via SIGINT or SIGTERM
|
* Advanced servers support clean shutdown via SIGINT or SIGTERM
|
||||||
|
* DynamicBuffer input areas are not mutable
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@@ -156,7 +156,9 @@ to update to the latest Boost release.
|
|||||||
* [link beast.ref.boost__beast__websocket__stream.control_callback `websocket::stream::control_callback`]
|
* [link beast.ref.boost__beast__websocket__stream.control_callback `websocket::stream::control_callback`]
|
||||||
now copies or moves the function object.
|
now copies or moves the function object.
|
||||||
|
|
||||||
|
* ([issue 1014]) DynamicBuffer input areas are not mutable.
|
||||||
|
Actions required: do not attempt to write to input areas of dynamic
|
||||||
|
buffers.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -84,7 +84,7 @@ public:
|
|||||||
using allocator_type = Allocator;
|
using allocator_type = Allocator;
|
||||||
|
|
||||||
/// The type used to represent the input sequence as a list of buffers.
|
/// The type used to represent the input sequence as a list of buffers.
|
||||||
using const_buffers_type = boost::asio::mutable_buffer;
|
using const_buffers_type = boost::asio::const_buffer;
|
||||||
|
|
||||||
/// The type used to represent the output sequence as a list of buffers.
|
/// The type used to represent the output sequence as a list of buffers.
|
||||||
using mutable_buffers_type = boost::asio::mutable_buffer;
|
using mutable_buffers_type = boost::asio::mutable_buffer;
|
||||||
|
@@ -52,7 +52,7 @@ public:
|
|||||||
|
|
||||||
This buffer sequence is guaranteed to have length 1.
|
This buffer sequence is guaranteed to have length 1.
|
||||||
*/
|
*/
|
||||||
using const_buffers_type = boost::asio::mutable_buffer;
|
using const_buffers_type = boost::asio::const_buffer;
|
||||||
|
|
||||||
/** The type used to represent the output sequence as a list of buffers.
|
/** The type used to represent the output sequence as a list of buffers.
|
||||||
|
|
||||||
|
@@ -132,7 +132,7 @@ class basic_multi_buffer<Allocator>::const_buffers_type
|
|||||||
const_buffers_type(basic_multi_buffer const& b);
|
const_buffers_type(basic_multi_buffer const& b);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
using value_type = boost::asio::mutable_buffer;
|
using value_type = boost::asio::const_buffer;
|
||||||
|
|
||||||
class const_iterator;
|
class const_iterator;
|
||||||
|
|
||||||
|
@@ -35,9 +35,30 @@ static_buffer_base::
|
|||||||
data() const ->
|
data() const ->
|
||||||
const_buffers_type
|
const_buffers_type
|
||||||
{
|
{
|
||||||
using boost::asio::mutable_buffer;
|
using boost::asio::const_buffer;
|
||||||
const_buffers_type result;
|
const_buffers_type result;
|
||||||
if(in_off_ + in_size_ <= capacity_)
|
if(in_off_ + in_size_ <= capacity_)
|
||||||
|
{
|
||||||
|
result[0] = const_buffer{begin_ + in_off_, in_size_};
|
||||||
|
result[1] = const_buffer{begin_, 0};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result[0] = const_buffer{begin_ + in_off_, capacity_ - in_off_};
|
||||||
|
result[1] = const_buffer{begin_, in_size_ - (capacity_ - in_off_)};
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
auto
|
||||||
|
static_buffer_base::
|
||||||
|
mutable_data() ->
|
||||||
|
mutable_buffers_type
|
||||||
|
{
|
||||||
|
using boost::asio::mutable_buffer;
|
||||||
|
mutable_buffers_type result;
|
||||||
|
if(in_off_ + in_size_ <= capacity_)
|
||||||
{
|
{
|
||||||
result[0] = mutable_buffer{begin_ + in_off_, in_size_};
|
result[0] = mutable_buffer{begin_ + in_off_, in_size_};
|
||||||
result[1] = mutable_buffer{begin_, 0};
|
result[1] = mutable_buffer{begin_, 0};
|
||||||
|
@@ -52,7 +52,7 @@ class static_buffer_base
|
|||||||
public:
|
public:
|
||||||
/// The type used to represent the input sequence as a list of buffers.
|
/// The type used to represent the input sequence as a list of buffers.
|
||||||
using const_buffers_type =
|
using const_buffers_type =
|
||||||
std::array<boost::asio::mutable_buffer, 2>;
|
std::array<boost::asio::const_buffer, 2>;
|
||||||
|
|
||||||
/// The type used to represent the output sequence as a list of buffers.
|
/// The type used to represent the output sequence as a list of buffers.
|
||||||
using mutable_buffers_type =
|
using mutable_buffers_type =
|
||||||
@@ -94,6 +94,11 @@ public:
|
|||||||
const_buffers_type
|
const_buffers_type
|
||||||
data() const;
|
data() const;
|
||||||
|
|
||||||
|
/** Get a mutable list of buffers that represent the input sequence.
|
||||||
|
*/
|
||||||
|
mutable_buffers_type
|
||||||
|
mutable_data();
|
||||||
|
|
||||||
/** Get a list of buffers that represent the output sequence, with the given size.
|
/** Get a list of buffers that represent the output sequence, with the given size.
|
||||||
|
|
||||||
@param size The number of bytes to request.
|
@param size The number of bytes to request.
|
||||||
|
@@ -228,7 +228,7 @@ operator()(
|
|||||||
d.ws.rd_close_ = true;
|
d.ws.rd_close_ = true;
|
||||||
auto const mb = buffers_prefix(
|
auto const mb = buffers_prefix(
|
||||||
clamp(d.ws.rd_fh_.len),
|
clamp(d.ws.rd_fh_.len),
|
||||||
d.ws.rd_buf_.data());
|
d.ws.rd_buf_.mutable_data());
|
||||||
if(d.ws.rd_fh_.len > 0 && d.ws.rd_fh_.mask)
|
if(d.ws.rd_fh_.len > 0 && d.ws.rd_fh_.mask)
|
||||||
detail::mask_inplace(mb, d.ws.rd_key_);
|
detail::mask_inplace(mb, d.ws.rd_key_);
|
||||||
detail::read_close(d.ws.cr_, mb, d.ev);
|
detail::read_close(d.ws.cr_, mb, d.ev);
|
||||||
@@ -370,7 +370,7 @@ close(close_reason const& cr, error_code& ec)
|
|||||||
rd_close_ = true;
|
rd_close_ = true;
|
||||||
auto const mb = buffers_prefix(
|
auto const mb = buffers_prefix(
|
||||||
clamp(rd_fh_.len),
|
clamp(rd_fh_.len),
|
||||||
rd_buf_.data());
|
rd_buf_.mutable_data());
|
||||||
if(rd_fh_.len > 0 && rd_fh_.mask)
|
if(rd_fh_.len > 0 && rd_fh_.mask)
|
||||||
detail::mask_inplace(mb, rd_key_);
|
detail::mask_inplace(mb, rd_key_);
|
||||||
detail::read_close(cr_, mb, result);
|
detail::read_close(cr_, mb, result);
|
||||||
|
@@ -253,7 +253,7 @@ operator()(
|
|||||||
if(ws_.rd_fh_.len > 0 && ws_.rd_fh_.mask)
|
if(ws_.rd_fh_.len > 0 && ws_.rd_fh_.mask)
|
||||||
detail::mask_inplace(buffers_prefix(
|
detail::mask_inplace(buffers_prefix(
|
||||||
clamp(ws_.rd_fh_.len),
|
clamp(ws_.rd_fh_.len),
|
||||||
ws_.rd_buf_.data()),
|
ws_.rd_buf_.mutable_data()),
|
||||||
ws_.rd_key_);
|
ws_.rd_key_);
|
||||||
if(detail::is_control(ws_.rd_fh_.op))
|
if(detail::is_control(ws_.rd_fh_.op))
|
||||||
{
|
{
|
||||||
@@ -440,7 +440,7 @@ operator()(
|
|||||||
ws_.rd_buf_.commit(bytes_transferred);
|
ws_.rd_buf_.commit(bytes_transferred);
|
||||||
if(ws_.rd_fh_.mask)
|
if(ws_.rd_fh_.mask)
|
||||||
detail::mask_inplace(buffers_prefix(clamp(
|
detail::mask_inplace(buffers_prefix(clamp(
|
||||||
ws_.rd_remain_), ws_.rd_buf_.data()),
|
ws_.rd_remain_), ws_.rd_buf_.mutable_data()),
|
||||||
ws_.rd_key_);
|
ws_.rd_key_);
|
||||||
}
|
}
|
||||||
if(ws_.rd_buf_.size() > 0)
|
if(ws_.rd_buf_.size() > 0)
|
||||||
@@ -528,7 +528,7 @@ operator()(
|
|||||||
if(ws_.rd_fh_.mask)
|
if(ws_.rd_fh_.mask)
|
||||||
detail::mask_inplace(
|
detail::mask_inplace(
|
||||||
buffers_prefix(clamp(ws_.rd_remain_),
|
buffers_prefix(clamp(ws_.rd_remain_),
|
||||||
ws_.rd_buf_.data()), ws_.rd_key_);
|
ws_.rd_buf_.mutable_data()), ws_.rd_key_);
|
||||||
did_read_ = true;
|
did_read_ = true;
|
||||||
}
|
}
|
||||||
zlib::z_params zs;
|
zlib::z_params zs;
|
||||||
@@ -1049,7 +1049,7 @@ loop:
|
|||||||
// of the buffer holding payload data.
|
// of the buffer holding payload data.
|
||||||
if(rd_fh_.len > 0 && rd_fh_.mask)
|
if(rd_fh_.len > 0 && rd_fh_.mask)
|
||||||
detail::mask_inplace(buffers_prefix(
|
detail::mask_inplace(buffers_prefix(
|
||||||
clamp(rd_fh_.len), rd_buf_.data()),
|
clamp(rd_fh_.len), rd_buf_.mutable_data()),
|
||||||
rd_key_);
|
rd_key_);
|
||||||
if(detail::is_control(rd_fh_.op))
|
if(detail::is_control(rd_fh_.op))
|
||||||
{
|
{
|
||||||
@@ -1151,7 +1151,7 @@ loop:
|
|||||||
if(rd_fh_.mask)
|
if(rd_fh_.mask)
|
||||||
detail::mask_inplace(
|
detail::mask_inplace(
|
||||||
buffers_prefix(clamp(rd_remain_),
|
buffers_prefix(clamp(rd_remain_),
|
||||||
rd_buf_.data()), rd_key_);
|
rd_buf_.mutable_data()), rd_key_);
|
||||||
}
|
}
|
||||||
if(rd_buf_.size() > 0)
|
if(rd_buf_.size() > 0)
|
||||||
{
|
{
|
||||||
@@ -1258,7 +1258,7 @@ loop:
|
|||||||
if(rd_fh_.mask)
|
if(rd_fh_.mask)
|
||||||
detail::mask_inplace(
|
detail::mask_inplace(
|
||||||
buffers_prefix(clamp(rd_remain_),
|
buffers_prefix(clamp(rd_remain_),
|
||||||
rd_buf_.data()), rd_key_);
|
rd_buf_.mutable_data()), rd_key_);
|
||||||
auto const in = buffers_prefix(
|
auto const in = buffers_prefix(
|
||||||
clamp(rd_remain_), buffers_front(
|
clamp(rd_remain_), buffers_front(
|
||||||
rd_buf_.data()));
|
rd_buf_.data()));
|
||||||
|
Reference in New Issue
Block a user