2022-05-20 11:55:28 +08:00
/*
* SPDX - FileCopyrightText : 2022 Espressif Systems ( Shanghai ) CO LTD
*
* SPDX - License - Identifier : Apache - 2.0
*/
# ifndef _MQTT5_CLIENT_H_
# define _MQTT5_CLIENT_H_
# include "mqtt_client.h"
# ifdef __cplusplus
extern " C " {
# endif
typedef struct esp_mqtt_client * esp_mqtt5_client_handle_t ;
/**
* MQTT5 protocol error reason code , more details refer to MQTT5 protocol document section 2.4
*/
enum mqtt5_error_reason_code {
2023-08-17 14:58:49 +02:00
MQTT5_UNSPECIFIED_ERROR = 0x80 ,
MQTT5_MALFORMED_PACKET = 0x81 ,
MQTT5_PROTOCOL_ERROR = 0x82 ,
MQTT5_IMPLEMENT_SPECIFIC_ERROR = 0x83 ,
MQTT5_UNSUPPORTED_PROTOCOL_VER = 0x84 ,
MQTT5_INVAILD_CLIENT_ID __attribute__ ( ( deprecated ) ) = 0x85 ,
MQTT5_INVALID_CLIENT_ID = 0x85 ,
MQTT5_BAD_USERNAME_OR_PWD = 0x86 ,
MQTT5_NOT_AUTHORIZED = 0x87 ,
MQTT5_SERVER_UNAVAILABLE = 0x88 ,
MQTT5_SERVER_BUSY = 0x89 ,
MQTT5_BANNED = 0x8A ,
MQTT5_SERVER_SHUTTING_DOWN = 0x8B ,
MQTT5_BAD_AUTH_METHOD = 0x8C ,
MQTT5_KEEP_ALIVE_TIMEOUT = 0x8D ,
MQTT5_SESSION_TAKEN_OVER = 0x8E ,
MQTT5_TOPIC_FILTER_INVAILD __attribute__ ( ( deprecated ) ) = 0x8F ,
MQTT5_TOPIC_FILTER_INVALID = 0x8F ,
MQTT5_TOPIC_NAME_INVAILD __attribute__ ( ( deprecated ) ) = 0x90 ,
MQTT5_TOPIC_NAME_INVALID = 0x90 ,
MQTT5_PACKET_IDENTIFIER_IN_USE = 0x91 ,
MQTT5_PACKET_IDENTIFIER_NOT_FOUND = 0x92 ,
MQTT5_RECEIVE_MAXIMUM_EXCEEDED = 0x93 ,
MQTT5_TOPIC_ALIAS_INVAILD __attribute__ ( ( deprecated ) ) = 0x94 ,
MQTT5_TOPIC_ALIAS_INVALID = 0x94 ,
MQTT5_PACKET_TOO_LARGE = 0x95 ,
MQTT5_MESSAGE_RATE_TOO_HIGH = 0x96 ,
MQTT5_QUOTA_EXCEEDED = 0x97 ,
MQTT5_ADMINISTRATIVE_ACTION = 0x98 ,
MQTT5_PAYLOAD_FORMAT_INVAILD __attribute__ ( ( deprecated ) ) = 0x99 ,
MQTT5_PAYLOAD_FORMAT_INVALID = 0x99 ,
MQTT5_RETAIN_NOT_SUPPORT = 0x9A ,
MQTT5_QOS_NOT_SUPPORT = 0x9B ,
MQTT5_USE_ANOTHER_SERVER = 0x9C ,
MQTT5_SERVER_MOVED = 0x9D ,
MQTT5_SHARED_SUBSCR_NOT_SUPPORTED = 0x9E ,
MQTT5_CONNECTION_RATE_EXCEEDED = 0x9F ,
MQTT5_MAXIMUM_CONNECT_TIME = 0xA0 ,
MQTT5_SUBSCRIBE_IDENTIFIER_NOT_SUPPORT = 0xA1 ,
MQTT5_WILDCARD_SUBSCRIBE_NOT_SUPPORT = 0xA2 ,
2022-05-20 11:55:28 +08:00
} ;
/**
* MQTT5 user property handle
*/
typedef struct mqtt5_user_property_list_t * mqtt5_user_property_handle_t ;
/**
* MQTT5 protocol connect properties and will properties configuration , more details refer to MQTT5 protocol document section 3.1 .2 .11 and 3.3 .2 .3
*/
typedef struct {
2023-08-17 14:58:49 +02:00
uint32_t session_expiry_interval ; /*!< The interval time of session expiry */
2022-05-20 11:55:28 +08:00
uint32_t maximum_packet_size ; /*!< The maximum packet size that we can receive */
uint16_t receive_maximum ; /*!< The maximum pakcket count that we process concurrently */
uint16_t topic_alias_maximum ; /*!< The maximum topic alias that we support */
bool request_resp_info ; /*!< This value to request Server to return Response information */
bool request_problem_info ; /*!< This value to indicate whether the reason string or user properties are sent in case of failures */
mqtt5_user_property_handle_t user_property ; /*!< The handle for user property, call function esp_mqtt5_client_set_user_property to set it */
uint32_t will_delay_interval ; /*!< The time interval that server delays publishing will message */
uint32_t message_expiry_interval ; /*!< The time interval that message expiry */
bool payload_format_indicator ; /*!< This value is to indicator will message payload format */
const char * content_type ; /*!< This value is to indicator will message content type, use a MIME content type string */
const char * response_topic ; /*!< Topic name for a response message */
const char * correlation_data ; /*!< Binary data for receiver to match the response message */
uint16_t correlation_data_len ; /*!< The length of correlation data */
mqtt5_user_property_handle_t will_user_property ; /*!< The handle for will message user property, call function esp_mqtt5_client_set_user_property to set it */
} esp_mqtt5_connection_property_config_t ;
/**
* MQTT5 protocol publish properties configuration , more details refer to MQTT5 protocol document section 3.3 .2 .3
*/
typedef struct {
bool payload_format_indicator ; /*!< This value is to indicator publish message payload format */
uint32_t message_expiry_interval ; /*!< The time interval that message expiry */
uint16_t topic_alias ; /*!< An interger value to identify the topic instead of using topic name string */
const char * response_topic ; /*!< Topic name for a response message */
const char * correlation_data ; /*!< Binary data for receiver to match the response message */
uint16_t correlation_data_len ; /*!< The length of correlation data */
const char * content_type ; /*!< This value is to indicator publish message content type, use a MIME content type string */
mqtt5_user_property_handle_t user_property ; /*!< The handle for user property, call function esp_mqtt5_client_set_user_property to set it */
} esp_mqtt5_publish_property_config_t ;
/**
* MQTT5 protocol subscribe properties configuration , more details refer to MQTT5 protocol document section 3.8 .2 .1
*/
typedef struct {
uint16_t subscribe_id ; /*!< A variable byte represents the identifier of the subscription */
bool no_local_flag ; /*!< Subscription Option to allow that server publish message that client sent */
bool retain_as_published_flag ; /*!< Subscription Option to keep the retain flag as published option */
uint8_t retain_handle ; /*!< Subscription Option to handle retain option */
bool is_share_subscribe ; /*!< Whether subscribe is a shared subscription */
const char * share_name ; /*!< The name of shared subscription which is a part of $share/{share_name}/{topic} */
mqtt5_user_property_handle_t user_property ; /*!< The handle for user property, call function esp_mqtt5_client_set_user_property to set it */
} esp_mqtt5_subscribe_property_config_t ;
/**
* MQTT5 protocol unsubscribe properties configuration , more details refer to MQTT5 protocol document section 3.10 .2 .1
*/
typedef struct {
bool is_share_subscribe ; /*!< Whether subscribe is a shared subscription */
const char * share_name ; /*!< The name of shared subscription which is a part of $share/{share_name}/{topic} */
mqtt5_user_property_handle_t user_property ; /*!< The handle for user property, call function esp_mqtt5_client_set_user_property to set it */
} esp_mqtt5_unsubscribe_property_config_t ;
/**
* MQTT5 protocol disconnect properties configuration , more details refer to MQTT5 protocol document section 3.14 .2 .2
*/
typedef struct {
uint32_t session_expiry_interval ; /*!< The interval time of session expiry */
uint8_t disconnect_reason ; /*!< The reason that connection disconnet, refer to mqtt5_error_reason_code */
mqtt5_user_property_handle_t user_property ; /*!< The handle for user property, call function esp_mqtt5_client_set_user_property to set it */
} esp_mqtt5_disconnect_property_config_t ;
/**
* MQTT5 protocol for event properties
*/
typedef struct {
bool payload_format_indicator ; /*!< Payload format of the message */
char * response_topic ; /*!< Response topic of the message */
int response_topic_len ; /*!< Response topic length of the message */
char * correlation_data ; /*!< Correlation data of the message */
uint16_t correlation_data_len ; /*!< Correlation data length of the message */
char * content_type ; /*!< Content type of the message */
int content_type_len ; /*!< Content type length of the message */
2023-02-09 18:44:47 +00:00
uint16_t subscribe_id ; /*!< Subscription identifier of the message */
2022-05-20 11:55:28 +08:00
mqtt5_user_property_handle_t user_property ; /*!< The handle for user property, call function esp_mqtt5_client_delete_user_property to free the memory */
} esp_mqtt5_event_property_t ;
/**
* MQTT5 protocol for user property
*/
typedef struct {
const char * key ; /*!< Item key name */
const char * value ; /*!< Item value string */
} esp_mqtt5_user_property_item_t ;
/**
* @ brief Set MQTT5 client connect property configuration
*
* @ param client mqtt client handle
* @ param connect_property connect property
*
* @ return ESP_ERR_NO_MEM if failed to allocate
* ESP_ERR_INVALID_ARG on wrong initialization
* ESP_FAIL on fail
* ESP_OK on success
*/
esp_err_t esp_mqtt5_client_set_connect_property ( esp_mqtt5_client_handle_t client , const esp_mqtt5_connection_property_config_t * connect_property ) ;
/**
* @ brief Set MQTT5 client publish property configuration
*
* This API will not store the publish property , it is one - time configuration .
* Before call ` esp_mqtt_client_publish ` to publish data , call this API to set publish property if have
*
* @ param client mqtt client handle
* @ param property publish property
*
* @ return ESP_ERR_INVALID_ARG on wrong initialization
* ESP_FAIL on fail
* ESP_OK on success
*/
esp_err_t esp_mqtt5_client_set_publish_property ( esp_mqtt5_client_handle_t client , const esp_mqtt5_publish_property_config_t * property ) ;
/**
* @ brief Set MQTT5 client subscribe property configuration
*
* This API will not store the subscribe property , it is one - time configuration .
* Before call ` esp_mqtt_client_subscribe ` to subscribe topic , call this API to set subscribe property if have
*
* @ param client mqtt client handle
* @ param property subscribe property
*
* @ return ESP_ERR_INVALID_ARG on wrong initialization
* ESP_FAIL on fail
* ESP_OK on success
*/
esp_err_t esp_mqtt5_client_set_subscribe_property ( esp_mqtt5_client_handle_t client , const esp_mqtt5_subscribe_property_config_t * property ) ;
/**
* @ brief Set MQTT5 client unsubscribe property configuration
*
* This API will not store the unsubscribe property , it is one - time configuration .
* Before call ` esp_mqtt_client_unsubscribe ` to unsubscribe topic , call this API to set unsubscribe property if have
*
* @ param client mqtt client handle
* @ param property unsubscribe property
*
* @ return ESP_ERR_INVALID_ARG on wrong initialization
* ESP_FAIL on fail
* ESP_OK on success
*/
esp_err_t esp_mqtt5_client_set_unsubscribe_property ( esp_mqtt5_client_handle_t client , const esp_mqtt5_unsubscribe_property_config_t * property ) ;
/**
* @ brief Set MQTT5 client disconnect property configuration
*
* This API will not store the disconnect property , it is one - time configuration .
* Before call ` esp_mqtt_client_disconnect ` to disconnect connection , call this API to set disconnect property if have
*
* @ param client mqtt client handle
* @ param property disconnect property
*
* @ return ESP_ERR_NO_MEM if failed to allocate
* ESP_ERR_INVALID_ARG on wrong initialization
* ESP_FAIL on fail
* ESP_OK on success
*/
esp_err_t esp_mqtt5_client_set_disconnect_property ( esp_mqtt5_client_handle_t client , const esp_mqtt5_disconnect_property_config_t * property ) ;
/**
* @ brief Set MQTT5 client user property configuration
*
* This API will allocate memory for user_property , please DO NOT forget ` call esp_mqtt5_client_delete_user_property `
* after you use it .
* Before publish data , subscribe topic , unsubscribe , etc , call this API to set user property if have
*
* @ param user_property user_property handle
* @ param item array of user property data ( eg . { { " var " , " val " } , { " other " , " 2 " } } )
* @ param item_num number of items in user property data
*
* @ return ESP_ERR_NO_MEM if failed to allocate
* ESP_FAIL on fail
* ESP_OK on success
*/
esp_err_t esp_mqtt5_client_set_user_property ( mqtt5_user_property_handle_t * user_property , esp_mqtt5_user_property_item_t item [ ] , uint8_t item_num ) ;
/**
* @ brief Get MQTT5 client user property
*
* @ param user_property user_property handle
* @ param item point that store user property data
* @ param item_num number of items in user property data
*
* This API can use with ` esp_mqtt5_client_get_user_property_count ` to get list count of user property .
* And malloc number of count item array memory to store the user property data .
* Please DO NOT forget the item memory , key and value point in item memory when get user property data successfully .
*
* @ return ESP_ERR_NO_MEM if failed to allocate
* ESP_FAIL on fail
* ESP_OK on success
*/
esp_err_t esp_mqtt5_client_get_user_property ( mqtt5_user_property_handle_t user_property , esp_mqtt5_user_property_item_t * item , uint8_t * item_num ) ;
/**
* @ brief Get MQTT5 client user property list count
*
* @ param user_property user_property handle
* @ return user property list count
*/
uint8_t esp_mqtt5_client_get_user_property_count ( mqtt5_user_property_handle_t user_property ) ;
/**
* @ brief Free the user property list
*
* @ param user_property user_property handle
2023-08-17 14:58:49 +02:00
*
2022-05-20 11:55:28 +08:00
* This API will free the memory in user property list and free user_property itself
*/
void esp_mqtt5_client_delete_user_property ( mqtt5_user_property_handle_t user_property ) ;
# ifdef __cplusplus
}
# endif //__cplusplus
# endif