@@ -175,6 +175,39 @@ enum mqtt_suback_return_code {
175175 MQTT_SUBACK_FAILURE = 0x80
176176};
177177
178+ /** @brief MQTT Disconnect reason codes (MQTT 5.0, chapter 3.14.2.1). */
179+ enum mqtt_disconnect_reason_code {
180+ MQTT_DISCONNECT_NORMAL = 0 ,
181+ MQTT_DISCONNECT_WITH_WILL_MSG = 4 ,
182+ MQTT_DISCONNECT_UNSPECIFIED_ERROR = 128 ,
183+ MQTT_DISCONNECT_MALFORMED_PACKET = 129 ,
184+ MQTT_DISCONNECT_PROTOCOL_ERROR = 130 ,
185+ MQTT_DISCONNECT_IMPL_SPECIFIC_ERROR = 131 ,
186+ MQTT_DISCONNECT_NOT_AUTHORIZED = 135 ,
187+ MQTT_DISCONNECT_SERVER_BUSY = 137 ,
188+ MQTT_DISCONNECT_SERVER_SHUTTING_DOWN = 139 ,
189+ MQTT_DISCONNECT_KEEP_ALIVE_TIMEOUT = 141 ,
190+ MQTT_DISCONNECT_SESSION_TAKE_OVER = 142 ,
191+ MQTT_DISCONNECT_TOPIC_FILTER_INVALID = 143 ,
192+ MQTT_DISCONNECT_TOPIC_NAME_INVALID = 144 ,
193+ MQTT_DISCONNECT_RECV_MAX_EXCEEDED = 147 ,
194+ MQTT_DISCONNECT_TOPIC_ALIAS_INVALID = 148 ,
195+ MQTT_DISCONNECT_PACKET_TOO_LARGE = 149 ,
196+ MQTT_DISCONNECT_MESSAGE_RATE_TOO_HIGH = 150 ,
197+ MQTT_DISCONNECT_QUOTA_EXCEEDED = 151 ,
198+ MQTT_DISCONNECT_ADMIN_ACTION = 152 ,
199+ MQTT_DISCONNECT_PAYLOAD_FORMAT_INVALID = 153 ,
200+ MQTT_DISCONNECT_RETAIN_NOT_SUPPORTED = 154 ,
201+ MQTT_DISCONNECT_QOS_NOT_SUPPORTED = 155 ,
202+ MQTT_DISCONNECT_USE_ANOTHER_SERVER = 156 ,
203+ MQTT_DISCONNECT_SERVER_MOVED = 157 ,
204+ MQTT_DISCONNECT_SHARED_SUB_NOT_SUPPORTED = 158 ,
205+ MQTT_DISCONNECT_CONNECTION_RATE_EXCEEDED = 159 ,
206+ MQTT_DISCONNECT_MAX_CONNECT_TIME = 160 ,
207+ MQTT_DISCONNECT_SUB_ID_NOT_SUPPORTED = 161 ,
208+ MQTT_DISCONNECT_WILDCARD_SUB_NOT_SUPPORTED = 162 ,
209+ };
210+
178211/** @brief Abstracts UTF-8 encoded strings. */
179212struct mqtt_utf8 {
180213 const uint8_t * utf8 ; /**< Pointer to UTF-8 string. */
@@ -534,6 +567,41 @@ struct mqtt_subscription_list {
534567#endif /* CONFIG_MQTT_VERSION_5_0 */
535568};
536569
570+ /** @brief Parameters for disconnect message. */
571+ struct mqtt_disconnect_param {
572+ #if defined(CONFIG_MQTT_VERSION_5_0 )
573+ /* MQTT 5.0 Disconnect reason code. */
574+ enum mqtt_disconnect_reason_code reason_code ;
575+
576+ /** MQTT 5.0 properties. */
577+ struct {
578+ /** MQTT 5.0, chapter 3.14.2.2.4 User Property. */
579+ struct mqtt_utf8_pair user_prop [CONFIG_MQTT_USER_PROPERTIES_MAX ];
580+
581+ /** MQTT 5.0, chapter 3.14.2.2.3 Reason String. */
582+ struct mqtt_utf8 reason_string ;
583+
584+ /** MQTT 5.0, chapter 3.14.2.2.5 Server Reference. */
585+ struct mqtt_utf8 server_reference ;
586+
587+ /** MQTT 5.0, chapter 3.14.2.2.2 Session Expiry Interval. */
588+ uint32_t session_expiry_interval ;
589+
590+ /** Flags indicating whether given property was present in received packet. */
591+ struct {
592+ /** Session Expiry Interval property was present. */
593+ bool has_session_expiry_interval ;
594+ /** Reason String property was present. */
595+ bool has_reason_string ;
596+ /** User Property property was present. */
597+ bool has_user_prop ;
598+ /** Server Reference property was present. */
599+ bool has_server_reference ;
600+ } rx ;
601+ } prop ;
602+ #endif /* CONFIG_MQTT_VERSION_5_0 */
603+ };
604+
537605/**
538606 * @brief Defines event parameters notified along with asynchronous events
539607 * to the application.
@@ -567,6 +635,11 @@ union mqtt_evt_param {
567635
568636 /** Parameters accompanying MQTT_EVT_UNSUBACK event. */
569637 struct mqtt_unsuback_param unsuback ;
638+
639+ #if defined(CONFIG_MQTT_VERSION_5_0 )
640+ /** Parameters accompanying MQTT_EVT_DISCONNECT event. */
641+ struct mqtt_disconnect_param disconnect ;
642+ #endif /* CONFIG_MQTT_VERSION_5_0 */
570643};
571644
572645/** @brief Defines MQTT asynchronous event notified to the application. */
@@ -1042,10 +1115,13 @@ int mqtt_ping(struct mqtt_client *client);
10421115 *
10431116 * @param[in] client Identifies client instance for which procedure is
10441117 * requested.
1118+ * @param[in] param Optional Disconnect parameters. May be NULL.
1119+ * Ignored if MQTT 3.1.1 is used.
10451120 *
10461121 * @return 0 or a negative error code (errno.h) indicating reason of failure.
10471122 */
1048- int mqtt_disconnect (struct mqtt_client * client );
1123+ int mqtt_disconnect (struct mqtt_client * client ,
1124+ const struct mqtt_disconnect_param * param );
10491125
10501126/**
10511127 * @brief API to abort MQTT connection. This will close the corresponding
0 commit comments