@@ -107,7 +107,7 @@ enum mqtt_qos {
107107 MQTT_QOS_2_EXACTLY_ONCE = 0x02
108108};
109109
110- /** @brief MQTT CONNACK return codes. */
110+ /** @brief MQTT 3.1 CONNACK return codes. */
111111enum mqtt_conn_return_code {
112112 /** Connection accepted. */
113113 MQTT_CONNECTION_ACCEPTED = 0x00 ,
@@ -134,6 +134,32 @@ enum mqtt_conn_return_code {
134134 MQTT_NOT_AUTHORIZED = 0x05
135135};
136136
137+ /** @brief MQTT 5.0 CONNACK reason codes (MQTT 5.0, chapter 3.2.2.2). */
138+ enum mqtt_connack_reason_code {
139+ MQTT_CONNACK_SUCCESS = 0 ,
140+ MQTT_CONNACK_UNSPECIFIED_ERROR = 128 ,
141+ MQTT_CONNACK_MALFORMED_PACKET = 129 ,
142+ MQTT_CONNACK_PROTOCOL_ERROR = 130 ,
143+ MQTT_CONNACK_IMPL_SPECIFIC_ERROR = 131 ,
144+ MQTT_CONNACK_UNSUPPORTED_PROTO_ERROR = 132 ,
145+ MQTT_CONNACK_CLIENT_ID_NOT_VALID = 133 ,
146+ MQTT_CONNACK_BAD_USERNAME_OR_PASS = 134 ,
147+ MQTT_CONNACK_NOT_AUTHORIZED = 135 ,
148+ MQTT_CONNACK_SERVER_UNAVAILABLE = 136 ,
149+ MQTT_CONNACK_SERVER_BUSY = 137 ,
150+ MQTT_CONNACK_BANNED = 138 ,
151+ MQTT_CONNACK_BAD_AUTH_METHOD = 140 ,
152+ MQTT_CONNACK_TOPIC_NAME_INVALID = 144 ,
153+ MQTT_CONNACK_PACKET_TOO_LARGE = 149 ,
154+ MQTT_CONNACK_QUOTA_EXCEEDED = 151 ,
155+ MQTT_CONNACK_PAYLOAD_FORMAT_INVALID = 153 ,
156+ MQTT_CONNACK_RETAIN_NOT_SUPPORTED = 154 ,
157+ MQTT_CONNACK_QOS_NOT_SUPPORTED = 155 ,
158+ MQTT_CONNACK_USE_ANOTHER_SERVER = 156 ,
159+ MQTT_CONNACK_SERVER_MOVED = 157 ,
160+ MQTT_CONNACK_CONNECTION_RATE_EXCEEDED = 159 ,
161+ };
162+
137163/** @brief MQTT SUBACK return codes. */
138164enum mqtt_suback_return_code {
139165 /** Subscription with QoS 0 succeeded. */
@@ -209,8 +235,103 @@ struct mqtt_connack_param {
209235
210236 /** The appropriate non-zero Connect return code indicates if the Server
211237 * is unable to process a connection request for some reason.
238+ * MQTT 3.1 - Return codes specified in @ref mqtt_conn_return_code
239+ * MQTT 5.0 - Reason codes specified in @ref mqtt_connack_reason_code
212240 */
213- enum mqtt_conn_return_code return_code ;
241+ uint8_t return_code ;
242+
243+ #if defined(CONFIG_MQTT_VERSION_5_0 )
244+ struct {
245+ /** MQTT 5.0, chapter 3.2.2.3.10 User Property. */
246+ struct mqtt_utf8_pair user_prop [CONFIG_MQTT_USER_PROPERTIES_MAX ];
247+
248+ /** MQTT 5.0, chapter 3.2.2.3.7 Assigned Client Identifier. */
249+ struct mqtt_utf8 assigned_client_id ;
250+
251+ /** MQTT 5.0, chapter 3.2.2.3.9 Reason String. */
252+ struct mqtt_utf8 reason_string ;
253+
254+ /** MQTT 5.0, chapter 3.2.2.3.15 Response Information. */
255+ struct mqtt_utf8 response_information ;
256+
257+ /** MQTT 5.0, chapter 3.2.2.3.16 Server Reference. */
258+ struct mqtt_utf8 server_reference ;
259+
260+ /** MQTT 5.0, chapter 3.2.2.3.17 Authentication Method. */
261+ struct mqtt_utf8 auth_method ;
262+
263+ /** MQTT 5.0, chapter 3.2.2.3.18 Authentication Data. */
264+ struct mqtt_binstr auth_data ;
265+
266+ /** MQTT 5.0, chapter 3.2.2.3.2 Session Expiry Interval. */
267+ uint32_t session_expiry_interval ;
268+
269+ /** MQTT 5.0, chapter 3.2.2.3.6 Maximum Packet Size. */
270+ uint32_t maximum_packet_size ;
271+
272+ /** MQTT 5.0, chapter 3.3.2.3.3 Receive Maximum. */
273+ uint16_t receive_maximum ;
274+
275+ /** MQTT 5.0, chapter 3.2.2.3.8 Topic Alias Maximum. */
276+ uint16_t topic_alias_maximum ;
277+
278+ /** MQTT 5.0, chapter 3.2.2.3.14 Server Keep Alive. */
279+ uint16_t server_keep_alive ;
280+
281+ /** MQTT 5.0, chapter 3.2.2.3.4 Maximum QoS. */
282+ uint8_t maximum_qos ;
283+
284+ /** MQTT 5.0, chapter 3.2.2.3.5 Retain Available. */
285+ uint8_t retain_available ;
286+
287+ /** MQTT 5.0, chapter 3.2.2.3.11 Wildcard Subscription Available. */
288+ uint8_t wildcard_sub_available ;
289+
290+ /** MQTT 5.0, chapter 3.2.2.3.12 Subscription Identifiers Available. */
291+ uint8_t subscription_ids_available ;
292+
293+ /** MQTT 5.0, chapter 3.2.2.3.13 Shared Subscription Available. */
294+ uint8_t shared_sub_available ;
295+
296+ /** Flags indicating whether given property was present in received packet. */
297+ struct {
298+ /** Session Expiry Interval property was present. */
299+ bool has_session_expiry_interval ;
300+ /** Receive Maximum property was present. */
301+ bool has_receive_maximum ;
302+ /** Maximum QoS property was present. */
303+ bool has_maximum_qos ;
304+ /** Retain Available property was present. */
305+ bool has_retain_available ;
306+ /** Maximum Packet Size property was present. */
307+ bool has_maximum_packet_size ;
308+ /** Assigned Client Identifier property was present. */
309+ bool has_assigned_client_id ;
310+ /** Topic Alias Maximum property was present. */
311+ bool has_topic_alias_maximum ;
312+ /** Reason String property was present. */
313+ bool has_reason_string ;
314+ /** User Property property was present. */
315+ bool has_user_prop ;
316+ /** Wildcard Subscription Available property was present. */
317+ bool has_wildcard_sub_available ;
318+ /** Subscription Identifiers Available property was present. */
319+ bool has_subscription_ids_available ;
320+ /** Shared Subscription Available property was present. */
321+ bool has_shared_sub_available ;
322+ /** Server Keep Alive property was present. */
323+ bool has_server_keep_alive ;
324+ /** Response Information property was present. */
325+ bool has_response_information ;
326+ /** Server Reference property was present. */
327+ bool has_server_reference ;
328+ /** Authentication Method property was present. */
329+ bool has_auth_method ;
330+ /** Authentication Data property was present. */
331+ bool has_auth_data ;
332+ } rx ;
333+ } prop ;
334+ #endif /* CONFIG_MQTT_VERSION_5_0 */
214335};
215336
216337/** @brief Parameters for MQTT publish acknowledgment (PUBACK). */
0 commit comments