Skip to content

Commit cb3591a

Browse files
committed
[nrf fromtree] net: mqtt: Add MQTT 5.0 support for CONNACK
Add support for CONNACK message specified in MQTT 5.0, along with property decoders required to decode MQTT properties. Decoded properties are provided to the application within mqtt_connack_param structure, accompanying the CONNACK event. Signed-off-by: Robert Lubos <[email protected]> (cherry picked from commit 6038676)
1 parent 0b35979 commit cb3591a

File tree

3 files changed

+577
-25
lines changed

3 files changed

+577
-25
lines changed

include/zephyr/net/mqtt.h

Lines changed: 123 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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. */
111111
enum 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. */
138164
enum 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

Comments
 (0)