forked from espressif/esp-mqtt
ADD: Get the response code from a failing connection.
This commit adds an event information "connect_return_code" that is written when the client state is MQTT_STATE_INIT, and the connection fails. This event info can then be written by the user app to find out the reason of the fail connection. Merges https://github.com/espressif/esp-mqtt/pull/100
This commit is contained in:
committed by
David Cermak
parent
430676cadb
commit
67042a1315
@ -37,7 +37,7 @@ typedef struct esp_mqtt_client *esp_mqtt_client_handle_t;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
MQTT_EVENT_ERROR = 0,
|
MQTT_EVENT_ERROR = 0, /*!< on error event, additional context: error handle from esp_tls (if supported) */
|
||||||
MQTT_EVENT_CONNECTED, /*!< connected event, additional context: session_present flag */
|
MQTT_EVENT_CONNECTED, /*!< connected event, additional context: session_present flag */
|
||||||
MQTT_EVENT_DISCONNECTED, /*!< disconnected event */
|
MQTT_EVENT_DISCONNECTED, /*!< disconnected event */
|
||||||
MQTT_EVENT_SUBSCRIBED, /*!< subscribed event, additional context: msg_id */
|
MQTT_EVENT_SUBSCRIBED, /*!< subscribed event, additional context: msg_id */
|
||||||
@ -57,8 +57,21 @@ typedef enum {
|
|||||||
and current data offset updating.
|
and current data offset updating.
|
||||||
*/
|
*/
|
||||||
MQTT_EVENT_BEFORE_CONNECT, /*!< The event occurs before connecting */
|
MQTT_EVENT_BEFORE_CONNECT, /*!< The event occurs before connecting */
|
||||||
|
MQTT_EVENT_CONNECTION_REFUSED, /*!< The event occurs if connection is refused by the broker, additional context: connect_return_code */
|
||||||
} esp_mqtt_event_id_t;
|
} esp_mqtt_event_id_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MQTT connection error codes propagated via ERROR event
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
MQTT_CONNECTION_ACCEPTED = 0, /*!< Connection accepted */
|
||||||
|
MQTT_CONNECTION_REFUSE_PROTOCOL, /*!< MQTT connection refused reason: Wrong protocol */
|
||||||
|
MQTT_CONNECTION_REFUSE_ID_REJECTED, /*!< MQTT connection refused reason: ID rejected */
|
||||||
|
MQTT_CONNECTION_REFUSE_SERVER_UNAVAILABLE, /*!< MQTT connection refused reason: Server unavailable */
|
||||||
|
MQTT_CONNECTION_REFUSE_BAD_USERNAME, /*!< MQTT connection refused reason: Wrong user */
|
||||||
|
MQTT_CONNECTION_REFUSE_NOT_AUTHORIZED /*!< MQTT connection refused reason: Wrong username or password */
|
||||||
|
} esp_mqtt_connect_return_code_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
MQTT_TRANSPORT_UNKNOWN = 0x0,
|
MQTT_TRANSPORT_UNKNOWN = 0x0,
|
||||||
MQTT_TRANSPORT_OVER_TCP, /*!< MQTT over TCP, using scheme: ``mqtt`` */
|
MQTT_TRANSPORT_OVER_TCP, /*!< MQTT over TCP, using scheme: ``mqtt`` */
|
||||||
@ -83,6 +96,7 @@ typedef struct {
|
|||||||
int msg_id; /*!< MQTT messaged id of message */
|
int msg_id; /*!< MQTT messaged id of message */
|
||||||
int session_present; /*!< MQTT session_present flag for connection event */
|
int session_present; /*!< MQTT session_present flag for connection event */
|
||||||
void* error_handle; /*!< esp-tls error handle referencing last error/flags captured in transports */
|
void* error_handle; /*!< esp-tls error handle referencing last error/flags captured in transports */
|
||||||
|
esp_mqtt_connect_return_code_t connect_return_code; /*!< MQTT connection return code. Only written on a connection */
|
||||||
} esp_mqtt_event_t;
|
} esp_mqtt_event_t;
|
||||||
|
|
||||||
typedef esp_mqtt_event_t *esp_mqtt_event_handle_t;
|
typedef esp_mqtt_event_t *esp_mqtt_event_handle_t;
|
||||||
|
@ -57,15 +57,6 @@ enum mqtt_message_type {
|
|||||||
MQTT_MSG_TYPE_DISCONNECT = 14
|
MQTT_MSG_TYPE_DISCONNECT = 14
|
||||||
};
|
};
|
||||||
|
|
||||||
enum mqtt_connect_return_code {
|
|
||||||
CONNECTION_ACCEPTED = 0,
|
|
||||||
CONNECTION_REFUSE_PROTOCOL,
|
|
||||||
CONNECTION_REFUSE_ID_REJECTED,
|
|
||||||
CONNECTION_REFUSE_SERVER_UNAVAILABLE,
|
|
||||||
CONNECTION_REFUSE_BAD_USERNAME,
|
|
||||||
CONNECTION_REFUSE_NOT_AUTHORIZED
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct mqtt_message {
|
typedef struct mqtt_message {
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
uint32_t length;
|
uint32_t length;
|
||||||
|
@ -317,27 +317,33 @@ static esp_err_t esp_mqtt_connect(esp_mqtt_client_handle_t client, int timeout_m
|
|||||||
}
|
}
|
||||||
client->mqtt_state.in_buffer_read_len = 0;
|
client->mqtt_state.in_buffer_read_len = 0;
|
||||||
connect_rsp_code = mqtt_get_connect_return_code(client->mqtt_state.in_buffer);
|
connect_rsp_code = mqtt_get_connect_return_code(client->mqtt_state.in_buffer);
|
||||||
switch (connect_rsp_code) {
|
if (connect_rsp_code == MQTT_CONNECTION_ACCEPTED) {
|
||||||
case CONNECTION_ACCEPTED:
|
|
||||||
ESP_LOGD(TAG, "Connected");
|
ESP_LOGD(TAG, "Connected");
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
case CONNECTION_REFUSE_PROTOCOL:
|
}
|
||||||
|
switch (connect_rsp_code) {
|
||||||
|
case MQTT_CONNECTION_REFUSE_PROTOCOL:
|
||||||
ESP_LOGW(TAG, "Connection refused, bad protocol");
|
ESP_LOGW(TAG, "Connection refused, bad protocol");
|
||||||
return ESP_FAIL;
|
break;
|
||||||
case CONNECTION_REFUSE_SERVER_UNAVAILABLE:
|
case MQTT_CONNECTION_REFUSE_SERVER_UNAVAILABLE:
|
||||||
ESP_LOGW(TAG, "Connection refused, server unavailable");
|
ESP_LOGW(TAG, "Connection refused, server unavailable");
|
||||||
return ESP_FAIL;
|
break;
|
||||||
case CONNECTION_REFUSE_BAD_USERNAME:
|
case MQTT_CONNECTION_REFUSE_BAD_USERNAME:
|
||||||
ESP_LOGW(TAG, "Connection refused, bad username or password");
|
ESP_LOGW(TAG, "Connection refused, bad username or password");
|
||||||
return ESP_FAIL;
|
break;
|
||||||
case CONNECTION_REFUSE_NOT_AUTHORIZED:
|
case MQTT_CONNECTION_REFUSE_NOT_AUTHORIZED:
|
||||||
ESP_LOGW(TAG, "Connection refused, not authorized");
|
ESP_LOGW(TAG, "Connection refused, not authorized");
|
||||||
return ESP_FAIL;
|
break;
|
||||||
default:
|
default:
|
||||||
ESP_LOGW(TAG, "Connection refused, Unknow reason");
|
ESP_LOGW(TAG, "Connection refused, Unknow reason");
|
||||||
return ESP_FAIL;
|
break;
|
||||||
}
|
}
|
||||||
return ESP_OK;
|
/* propagate event with connection refused error */
|
||||||
|
client->event.event_id = MQTT_EVENT_CONNECTION_REFUSED;
|
||||||
|
client->event.connect_return_code = connect_rsp_code;
|
||||||
|
esp_mqtt_dispatch_event_with_msgid(client);
|
||||||
|
|
||||||
|
return ESP_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static esp_err_t esp_mqtt_abort_connection(esp_mqtt_client_handle_t client)
|
static esp_err_t esp_mqtt_abort_connection(esp_mqtt_client_handle_t client)
|
||||||
|
Reference in New Issue
Block a user