async_mqtt 9.0.1
Loading...
Searching...
No Matches
v5_pubrel.hpp
1// Copyright Takatoshi Kondo 2022
2//
3// Distributed under the Boost Software License, Version 1.0.
4// (See accompanying file LICENSE_1_0.txt or copy at
5// http://www.boost.org/LICENSE_1_0.txt)
6
7#if !defined(ASYNC_MQTT_PACKET_V5_PUBREL_HPP)
8#define ASYNC_MQTT_PACKET_V5_PUBREL_HPP
9
10#include <async_mqtt/buffer_to_packet_variant.hpp>
11#include <async_mqtt/error.hpp>
12
13#include <async_mqtt/packet/control_packet_type.hpp>
14#include <async_mqtt/packet/packet_id_type.hpp>
15#include <async_mqtt/packet/property_variant.hpp>
16
17#include <async_mqtt/util/buffer.hpp>
18#include <async_mqtt/util/static_vector.hpp>
19
30namespace async_mqtt::v5 {
31
32namespace as = boost::asio;
33
55template <std::size_t PacketIdBytes>
57public:
58
69 pubrel_reason_code reason_code,
71 );
72
79 );
80
89 pubrel_reason_code reason_code
90 );
91
96 static constexpr control_packet_type type() {
98 }
99
105 std::vector<as::const_buffer> const_buffer_sequence() const;
106
111 std::size_t size() const;
112
117 std::size_t num_of_const_buffer_sequence() const;
118
124
130
135 properties const& props() const;
136
143 friend
144 inline std::ostream& operator<<(std::ostream& o, basic_pubrel_packet<PacketIdBytes> const& v) {
145 o <<
146 "v5::pubrel{" <<
147 "pid:" << v.packet_id();
148 if (v.reason_code_) {
149 o << ",rc:" << *v.reason_code_;
150 }
151 if (!v.props().empty()) {
152 o << ",ps:" << v.props();
153 };
154 o << "}";
155 return o;
156 }
157
158private:
159 explicit basic_pubrel_packet(
161 std::optional<pubrel_reason_code> reason_code,
163 );
164
165private:
166
167 template <std::size_t PacketIdBytesArg>
170
171#if defined(ASYNC_MQTT_UNIT_TEST_FOR_PACKET)
172 friend struct ::ut_packet::v5_pubrel;
173 friend struct ::ut_packet::v5_pubrel_pid4;
174 friend struct ::ut_packet::v5_pubrel_pid_only;
175 friend struct ::ut_packet::v5_pubrel_pid_rc;
176 friend struct ::ut_packet::v5_pubrel_prop_len_last;
177 friend struct ::ut_packet::v5_pubrel_error;
178#endif // defined(ASYNC_MQTT_UNIT_TEST_FOR_PACKET)
179
180 // private constructor for internal use
181 explicit basic_pubrel_packet(buffer buf, error_code& ec);
182
183private:
184 std::uint8_t fixed_header_;
185 std::size_t remaining_length_;
186 static_vector<char, 4> remaining_length_buf_;
187 static_vector<char, PacketIdBytes> packet_id_;
188
189 std::optional<pubrel_reason_code> reason_code_;
190
191 std::size_t property_length_ = 0;
192 static_vector<char, 4> property_length_buf_;
193 properties props_;
194};
195
208template <std::size_t PacketIdBytes>
210
223template <std::size_t PacketIdBytes>
225
237
238} // namespace async_mqtt::v5
239
240#if !defined(ASYNC_MQTT_SEPARATE_COMPILATION)
241#include <async_mqtt/packet/impl/v5_pubrel.ipp>
242#endif // !defined(ASYNC_MQTT_SEPARATE_COMPILATION)
243
244#endif // ASYNC_MQTT_PACKET_V5_PUBREL_HPP
The varaint type of all packets and system_error.
Definition packet_variant_fwd.hpp:37
buffer that has string_view interface and shared ownership This class is only for advanced usecase su...
Definition buffer.hpp:46
MQTT PUBREL packet (v5)
Definition v5_pubrel.hpp:56
std::size_t num_of_const_buffer_sequence() const
Get number of element of const_buffer_sequence.
std::size_t size() const
Get packet size.
friend std::ostream & operator<<(std::ostream &o, basic_pubrel_packet< PacketIdBytes > const &v)
stream output operator
Definition v5_pubrel.hpp:144
bool operator==(basic_pubrel_packet< PacketIdBytes > const &lhs, basic_pubrel_packet< PacketIdBytes > const &rhs)
equal operator
properties const & props() const
Get properties.
basic_pubrel_packet(typename basic_packet_id_type< PacketIdBytes >::type packet_id)
constructor
basic_packet_id_type< PacketIdBytes >::type packet_id() const
Get packet_id.
pubrel_reason_code code() const
Get reason code.
basic_pubrel_packet(typename basic_packet_id_type< PacketIdBytes >::type packet_id, pubrel_reason_code reason_code)
constructor
bool operator<(basic_pubrel_packet< PacketIdBytes > const &lhs, basic_pubrel_packet< PacketIdBytes > const &rhs)
less than operator
basic_pubrel_packet(typename basic_packet_id_type< PacketIdBytes >::type packet_id, pubrel_reason_code reason_code, properties props)
constructor
std::vector< as::const_buffer > const_buffer_sequence() const
Create const buffer sequence it is for boost asio APIs.
static constexpr control_packet_type type()
Get MQTT control packet type.
Definition v5_pubrel.hpp:96
sys::error_code error_code
sys is a namespace alias of boost::sytem.
Definition error.hpp:56
protocol_version
MQTT protocol version.
Definition protocol_version.hpp:29
basic_packet_variant< PacketIdBytes > buffer_to_basic_packet_variant(buffer buf, protocol_version ver, error_code &ec)
create basic_packet_variant from the buffer
control_packet_type
MQTT control packet type.
Definition control_packet_type.hpp:26
std::vector< property_variant > properties
property variant collection type
Definition property_variant.hpp:224
pubrel_reason_code
pubrel reason code It is reported as PUBREC response via PUBREL packet
Definition error.hpp:881
packet idenfitifer type class template
Definition packet_id_type.hpp:25