7#if !defined(ASYNC_MQTT_PACKET_V3_1_1_PUBREC_HPP)
8#define ASYNC_MQTT_PACKET_V3_1_1_PUBREC_HPP
13#include <boost/numeric/conversion/cast.hpp>
15#include <async_mqtt/exception.hpp>
16#include <async_mqtt/buffer.hpp>
18#include <async_mqtt/util/move.hpp>
19#include <async_mqtt/util/static_vector.hpp>
20#include <async_mqtt/util/endian_convert.hpp>
22#include <async_mqtt/packet/packet_id_type.hpp>
23#include <async_mqtt/packet/fixed_header.hpp>
25namespace async_mqtt::v3_1_1 {
27namespace as = boost::asio;
38template <std::
size_t PacketIdBytes>
41 using packet_id_t =
typename packet_id_type<PacketIdBytes>::type;
52 all_[0] =
static_cast<char>(make_fixed_header(control_packet_type::pubrec, 0b0000));
62 "v3_1_1::pubrec_packet fixed_header doesn't exist"
65 all_.push_back(buf.front());
67 auto cpt_opt = get_control_packet_type_with_check(
static_cast<std::uint8_t
>(all_.back()));
71 "v3_1_1::pubrec_packet fixed_header is invalid"
79 "v3_1_1::pubrec_packet remaining_length doesn't exist"
82 all_.push_back(buf.front());
84 if (
static_cast<std::uint8_t
>(all_.back()) != PacketIdBytes) {
87 "v3_1_1::pubrec_packet remaining_length is invalid"
92 if (buf.size() != PacketIdBytes) {
95 "v3_1_1::pubrec_packet variable header doesn't match its length"
98 std::copy(buf.begin(), buf.end(), std::back_inserter(all_));
101 constexpr control_packet_type type()
const {
102 return control_packet_type::pubrec;
111 std::vector<as::const_buffer>
ret;
113 ret.emplace_back(as::buffer(all_.data(), all_.size()));
145template <std::
size_t PacketIdBytes>
149 "pid:" <<
v.packet_id() <<
Definition packet_variant.hpp:49
buffer that has string_view interface This class provides string_view interface. This class hold stri...
Definition buffer.hpp:30
MQTT PUBREC packet (v3.1.1)
Definition v3_1_1_pubrec.hpp:39
packet_id_t packet_id() const
Get packet_id.
Definition v3_1_1_pubrec.hpp:137
std::size_t size() const
Get packet size.
Definition v3_1_1_pubrec.hpp:121
std::vector< as::const_buffer > const_buffer_sequence() const
Create const buffer sequence it is for boost asio APIs.
Definition v3_1_1_pubrec.hpp:110
basic_pubrec_packet(packet_id_t packet_id)
constructor
Definition v3_1_1_pubrec.hpp:47
static constexpr std::size_t num_of_const_buffer_sequence()
Get number of element of const_buffer_sequence.
Definition v3_1_1_pubrec.hpp:129