diff --git a/components/connectivity/mqttclient/common/error.h b/components/connectivity/mqttclient/common/error.h index 96f072ee..1e166f0d 100644 --- a/components/connectivity/mqttclient/common/error.h +++ b/components/connectivity/mqttclient/common/error.h @@ -2,7 +2,7 @@ * @Author: jiejie * @Github: https://github.com/jiejieTop * @Date: 2019-12-15 00:42:16 - * @LastEditTime: 2020-03-21 16:49:07 + * @LastEditTime: 2020-04-25 18:59:08 * @Description: the code belongs to jiejie, please keep the author information and source code according to the license. */ #ifndef _ERROR_H_ @@ -10,12 +10,12 @@ typedef enum mqtt_error { MQTT_SSL_CERT_ERROR = -0x001C, /* cetr parse failed */ - MQTT_SOCKET_FAILED = -0x001B, /* socket fd failed */ - MQTT_SOCKET_UNKNOWN_HOST = -0x001A, /* socket unknown host ip or domain */ - MQTT_SET_PUBLISH_DUP_FAILED = -0x0019, /* mqtt publish packet set udp bit failed */ + MQTT_SOCKET_FAILED_ERROR = -0x001B, /* socket fd failed */ + MQTT_SOCKET_UNKNOWN_HOST_ERROR = -0x001A, /* socket unknown host ip or domain */ + MQTT_SET_PUBLISH_DUP_FAILED_ERROR = -0x0019, /* mqtt publish packet set udp bit failed */ MQTT_CLEAN_SESSION_ERROR = -0x0018, /* mqtt clean session error */ - MQTT_ACK_NODE_IS_EXIST = -0x0017, /* mqtt ack list is exist ack node */ - MQTT_ACK_HANDLER_NUM_TOO_MUCH = -0x0016, /* mqtt ack handler number is too much */ + MQTT_ACK_NODE_IS_EXIST_ERROR = -0x0017, /* mqtt ack list is exist ack node */ + MQTT_ACK_HANDLER_NUM_TOO_MUCH_ERROR = -0x0016, /* mqtt ack handler number is too much */ MQTT_RESUBSCRIBE_ERROR = -0x0015, /* mqtt resubscribe error */ MQTT_SUBSCRIBE_ERROR = -0x0014, /* mqtt subscribe error */ MQTT_SEND_PACKET_ERROR = -0x0013, /* mqtt send a packet */ diff --git a/components/connectivity/mqttclient/mqttclient/mqttclient.c b/components/connectivity/mqttclient/mqttclient/mqttclient.c index 81f48156..1da99b7c 100644 --- a/components/connectivity/mqttclient/mqttclient/mqttclient.c +++ b/components/connectivity/mqttclient/mqttclient/mqttclient.c @@ -2,7 +2,7 @@ * @Author: jiejie * @Github: https://github.com/jiejieTop * @Date: 2019-12-09 21:31:25 - * @LastEditTime: 2020-04-23 15:12:36 + * @LastEditTime: 2020-04-25 18:58:14 * @Description: the code belongs to jiejie, please keep the author information and source code according to the license. */ #include "mqttclient.h" @@ -48,12 +48,12 @@ static int mqtt_set_publish_dup(mqtt_client_t* c, unsigned char dup) MQTTHeader header = {0}; if (NULL == c->write_buf) - RETURN_ERROR(MQTT_SET_PUBLISH_DUP_FAILED); + RETURN_ERROR(MQTT_SET_PUBLISH_DUP_FAILED_ERROR); header.byte = readChar(&read_data); /* read header */ if (header.bits.type != PUBLISH) - RETURN_ERROR(MQTT_SET_PUBLISH_DUP_FAILED); + RETURN_ERROR(MQTT_SET_PUBLISH_DUP_FAILED_ERROR); header.bits.dup = dup; writeChar(&write_data, header.byte); /* write header */ @@ -382,7 +382,7 @@ static int mqtt_ack_list_record(mqtt_client_t* c, int type, unsigned short packe /* Determine if the node already exists */ if (mqtt_ack_list_node_is_exist(c, type, packet_id)) - RETURN_ERROR(MQTT_ACK_NODE_IS_EXIST); + RETURN_ERROR(MQTT_ACK_NODE_IS_EXIST_ERROR); /* create a ack handler node */ ack_handler = mqtt_ack_handler_create(c, type, packet_id, payload_len, handler); @@ -552,7 +552,7 @@ static int mqtt_try_resubscribe(mqtt_client_t* c) msg_handler = LIST_ENTRY(curr, message_handlers_t, list); /* resubscribe topic */ - if ((rc = mqtt_subscribe(c, msg_handler->topic_filter, msg_handler->qos, msg_handler->handler)) == MQTT_ACK_HANDLER_NUM_TOO_MUCH) + if ((rc = mqtt_subscribe(c, msg_handler->topic_filter, msg_handler->qos, msg_handler->handler)) == MQTT_ACK_HANDLER_NUM_TOO_MUCH_ERROR) LOG_W("%s:%d %s()... mqtt ack handler num too much ...", __FILE__, __LINE__, __FUNCTION__); } @@ -571,7 +571,7 @@ static int mqtt_try_do_reconnect(mqtt_client_t* c) rc = mqtt_try_resubscribe(c); /* resubscribe */ } - LOG_I("%s:%d %s()... mqtt try connect result is %#x", __FILE__, __LINE__, __FUNCTION__, rc); + LOG_I("%s:%d %s()... mqtt try connect result is -0x%04x", __FILE__, __LINE__, __FUNCTION__, -rc); RETURN_ERROR(rc); } @@ -751,7 +751,7 @@ static int mqtt_publish_packet_handle(mqtt_client_t *c, platform_timer_t *timer) mqtt_deliver_message(c, &topic_name, &msg); else { /* record the received of a qos2 message and only processes it when the qos2 message is received for the first time */ - if ((rc = mqtt_ack_list_record(c, PUBREL, msg.id, len, NULL)) != MQTT_ACK_NODE_IS_EXIST) + if ((rc = mqtt_ack_list_record(c, PUBREL, msg.id, len, NULL)) != MQTT_ACK_NODE_IS_EXIST_ERROR) mqtt_deliver_message(c, &topic_name, &msg); } @@ -1269,9 +1269,9 @@ int mqtt_publish(mqtt_client_t* c, const char* topic_filter, mqtt_message_t* msg platform_mutex_lock(&c->write_lock); - if (msg->qos != QOS0) { + if (QOS0 != msg->qos) { if (mqtt_ack_handler_is_maximum(c)) { - rc = MQTT_ACK_HANDLER_NUM_TOO_MUCH; /* the recorded ack handler has reached the maximum */ + rc = MQTT_ACK_HANDLER_NUM_TOO_MUCH_ERROR; /* the recorded ack handler has reached the maximum */ goto exit; } msg->id = mqtt_get_next_packet_id(c); @@ -1302,6 +1302,13 @@ int mqtt_publish(mqtt_client_t* c, const char* topic_filter, mqtt_message_t* msg exit: platform_mutex_unlock(&c->write_lock); + if ((MQTT_ACK_HANDLER_NUM_TOO_MUCH_ERROR == rc) || (MQTT_MEM_NOT_ENOUGH_ERROR == rc)) { + LOG_W("%s:%d %s()... there is not enough memory space to record...", __FILE__, __LINE__, __FUNCTION__); + + /* record too much retransmitted data, may be disconnected, need to reconnect */ + mqtt_set_client_state(c, CLIENT_STATE_DISCONNECTED); + } + RETURN_ERROR(rc); } diff --git a/components/connectivity/mqttclient/platform/TencentOS-tiny/platform_net_socket.c b/components/connectivity/mqttclient/platform/TencentOS-tiny/platform_net_socket.c index 9c9e1971..4582dcd8 100644 --- a/components/connectivity/mqttclient/platform/TencentOS-tiny/platform_net_socket.c +++ b/components/connectivity/mqttclient/platform/TencentOS-tiny/platform_net_socket.c @@ -2,14 +2,14 @@ * @Author: jiejie * @Github: https://github.com/jiejieTop * @Date: 2020-01-10 23:45:59 - * @LastEditTime : 2020-01-13 02:48:53 + * @LastEditTime: 2020-04-25 18:59:28 * @Description: the code belongs to jiejie, please keep the author information and source code according to the license. */ #include "platform_net_socket.h" int platform_net_socket_connect(const char *host, const char *port, int proto) { - int fd, ret = MQTT_SOCKET_UNKNOWN_HOST; + int fd, ret = MQTT_SOCKET_UNKNOWN_HOST_ERROR; #ifdef MQTT_NETSOCKET_USE_AT fd = tos_sal_module_connect(host, port, TOS_SAL_PROTO_TCP); @@ -36,7 +36,7 @@ int platform_net_socket_connect(const char *host, const char *port, int proto) for (cur = addr_list; cur != NULL; cur = cur->ai_next) { fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); if (fd < 0) { - ret = MQTT_SOCKET_FAILED; + ret = MQTT_SOCKET_FAILED_ERROR; continue; }