File indexing completed on 2025-09-17 08:38:23
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef BOOST_MQTT5_TYPES_HPP
0009 #define BOOST_MQTT5_TYPES_HPP
0010
0011 #include <boost/mqtt5/property_types.hpp>
0012
0013 #include <boost/system/error_code.hpp>
0014
0015 #include <cstdint>
0016 #include <string>
0017
0018 namespace boost::mqtt5 {
0019
0020
0021 using error_code = boost::system::error_code;
0022
0023
0024
0025
0026
0027 struct authority_path {
0028
0029 std::string host;
0030
0031
0032 std::string port;
0033
0034
0035 std::string path;
0036 };
0037
0038
0039
0040
0041
0042
0043
0044
0045 enum class qos_e : std::uint8_t {
0046
0047 at_most_once = 0b00,
0048
0049
0050 at_least_once = 0b01,
0051
0052
0053
0054 exactly_once = 0b10
0055 };
0056
0057
0058
0059
0060
0061
0062
0063 enum class retain_e : std::uint8_t {
0064
0065
0066 yes = 0b1,
0067
0068
0069
0070 no = 0b0
0071 };
0072
0073 enum class dup_e : std::uint8_t {
0074 yes = 0b1, no = 0b0
0075 };
0076
0077
0078
0079
0080 enum class auth_step_e {
0081
0082 client_initial,
0083
0084
0085
0086
0087 server_challenge,
0088
0089
0090
0091
0092 server_final
0093 };
0094
0095
0096
0097
0098
0099
0100
0101
0102 enum class no_local_e : std::uint8_t {
0103
0104 no = 0b0,
0105
0106
0107 yes = 0b1
0108 };
0109
0110
0111
0112
0113
0114
0115
0116 enum class retain_as_published_e : std::uint8_t {
0117
0118 dont = 0b0,
0119
0120
0121 retain = 0b1
0122 };
0123
0124
0125
0126
0127
0128
0129
0130 enum class retain_handling_e : std::uint8_t {
0131
0132 send = 0b00,
0133
0134
0135 new_subscription_only = 0b01,
0136
0137
0138 not_send = 0b10
0139 };
0140
0141
0142
0143
0144 struct subscribe_options {
0145
0146 qos_e max_qos = qos_e::exactly_once;
0147
0148
0149
0150 no_local_e no_local = no_local_e::yes;
0151
0152
0153 retain_as_published_e retain_as_published = retain_as_published_e::retain;
0154
0155
0156
0157 retain_handling_e retain_handling = retain_handling_e::new_subscription_only;
0158 };
0159
0160
0161
0162
0163
0164 struct subscribe_topic {
0165
0166 std::string topic_filter;
0167
0168
0169 subscribe_options sub_opts;
0170 };
0171
0172
0173
0174 class connect_props : public prop::properties<
0175 prop::session_expiry_interval_t,
0176 prop::receive_maximum_t,
0177 prop::maximum_packet_size_t,
0178 prop::topic_alias_maximum_t,
0179 prop::request_response_information_t,
0180 prop::request_problem_information_t,
0181 prop::user_property_t,
0182 prop::authentication_method_t,
0183 prop::authentication_data_t
0184 > {};
0185
0186 class connack_props : public prop::properties<
0187 prop::session_expiry_interval_t,
0188 prop::receive_maximum_t,
0189 prop::maximum_qos_t,
0190 prop::retain_available_t,
0191 prop::maximum_packet_size_t,
0192 prop::assigned_client_identifier_t,
0193 prop::topic_alias_maximum_t,
0194 prop::reason_string_t,
0195 prop::user_property_t,
0196 prop::wildcard_subscription_available_t,
0197 prop::subscription_identifier_available_t,
0198 prop::shared_subscription_available_t,
0199 prop::server_keep_alive_t,
0200 prop::response_information_t,
0201 prop::server_reference_t,
0202 prop::authentication_method_t,
0203 prop::authentication_data_t
0204 > {};
0205
0206 class publish_props : public prop::properties<
0207 prop::payload_format_indicator_t,
0208 prop::message_expiry_interval_t,
0209 prop::content_type_t,
0210 prop::response_topic_t,
0211 prop::correlation_data_t,
0212 prop::subscription_identifier_t,
0213 prop::topic_alias_t,
0214 prop::user_property_t
0215 > {};
0216
0217
0218 class puback_props : public prop::properties<
0219 prop::reason_string_t,
0220 prop::user_property_t
0221 > {};
0222
0223 class pubcomp_props : public prop::properties<
0224 prop::reason_string_t,
0225 prop::user_property_t
0226 > {};
0227
0228 class pubrec_props : public prop::properties<
0229 prop::reason_string_t,
0230 prop::user_property_t
0231 > {};
0232
0233 class pubrel_props : public prop::properties<
0234 prop::reason_string_t,
0235 prop::user_property_t
0236 > {};
0237
0238
0239 class subscribe_props : public prop::properties<
0240 prop::subscription_identifier_t,
0241 prop::user_property_t
0242 > {};
0243
0244 class suback_props : public prop::properties<
0245 prop::reason_string_t,
0246 prop::user_property_t
0247 > {};
0248
0249 class unsubscribe_props : public prop::properties<
0250 prop::user_property_t
0251 > {};
0252
0253 class unsuback_props : public prop::properties<
0254 prop::reason_string_t,
0255 prop::user_property_t
0256 > {};
0257
0258 class disconnect_props : public prop::properties<
0259 prop::session_expiry_interval_t,
0260 prop::reason_string_t,
0261 prop::user_property_t,
0262 prop::server_reference_t
0263 > {};
0264
0265 class auth_props : public prop::properties<
0266 prop::authentication_method_t,
0267 prop::authentication_data_t,
0268 prop::reason_string_t,
0269 prop::user_property_t
0270 > {};
0271
0272
0273 class will_props : public prop::properties<
0274 prop::will_delay_interval_t,
0275 prop::payload_format_indicator_t,
0276 prop::message_expiry_interval_t,
0277 prop::content_type_t,
0278 prop::response_topic_t,
0279 prop::correlation_data_t,
0280 prop::user_property_t
0281 >{};
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292 class will : public will_props {
0293 std::string _topic;
0294 std::string _message;
0295 qos_e _qos; retain_e _retain;
0296
0297 public:
0298
0299
0300
0301
0302
0303
0304
0305 will() = default;
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317 will(
0318 std::string topic, std::string message,
0319 qos_e qos = qos_e::at_most_once, retain_e retain = retain_e::no
0320 ) :
0321 _topic(std::move(topic)), _message(std::move(message)),
0322 _qos(qos), _retain(retain)
0323 {}
0324
0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336 will(
0337 std::string topic, std::string message,
0338 qos_e qos, retain_e retain, will_props props
0339 ) :
0340 will_props(std::move(props)),
0341 _topic(std::move(topic)), _message(std::move(message)),
0342 _qos(qos), _retain(retain)
0343 {}
0344
0345
0346 std::string_view topic() const {
0347 return _topic;
0348 }
0349
0350
0351 std::string_view message() const {
0352 return _message;
0353 }
0354
0355
0356 constexpr qos_e qos() const {
0357 return _qos;
0358 }
0359
0360
0361 constexpr retain_e retain() const {
0362 return _retain;
0363 }
0364 };
0365
0366
0367 }
0368
0369 #endif