Ver Fonte

修改 umqtt.c 文件中的链表查询方法, 兼容 mdk 非 gnc 选项时候的情况

caochunchen há 5 anos atrás
pai
commit
3e5a9c271f
1 ficheiros alterados com 30 adições e 13 exclusões
  1. 30 13
      src/umqtt.c

+ 30 - 13
src/umqtt.c

@@ -178,6 +178,11 @@ static int add_one_qos2_msg(struct umqtt_client *client, struct umqtt_pkgs_publi
         LOG_E(" add qos2 message failed! input params is valid! ");
     }
 
+    if (_ret == UMQTT_OK)
+    {
+        rt_list_insert_after(&client->qos2_msg_list, &msg->next_list);
+    }
+
 _exit:
     if (_ret == UMQTT_MEM_FULL)
     {
@@ -196,14 +201,15 @@ static int qos2_publish_delete(struct umqtt_client *client, int packet_id)
 {
     int _ret = UMQTT_OK, tmp_ret = 0;
     struct umqtt_qos2_msg *p_msg = RT_NULL;
-    struct umqtt_qos2_msg *p_msg_tmp = RT_NULL;
+    rt_list_t *node = RT_NULL;
     struct umqtt_pkgs_publish publish_msg = { 0 };
     /* call publish, delete packet id delete */
 
     if ((tmp_ret == rt_list_isempty(&client->qos2_msg_list)) == 0)
     {
-        rt_list_for_each_entry_safe(p_msg, p_msg_tmp, &client->qos2_msg_list, next_list)
+        rt_list_for_each(node, &client->qos2_msg_list)
         {
+            p_msg = rt_list_entry(node, struct umqtt_qos2_msg, next_list);
             if (p_msg->packet_id == packet_id)
             {
                 LOG_D(" qos2, deliver message! topic nme: %s ", p_msg->topic_name);
@@ -565,9 +571,10 @@ static void umqtt_deliver_message(struct umqtt_client *client,
     RT_ASSERT(msg);
 
     struct subtop_recv_handler *p_subtop = RT_NULL;
-    rt_list_for_each_entry(p_subtop, &client->sub_recv_list, next_list)
+    rt_list_t *node = RT_NULL;
+    rt_list_for_each(node, &client->sub_recv_list)
     {
-        
+        p_subtop = rt_list_entry(node, struct subtop_recv_handler, next_list);
         if ((p_subtop->topicfilter)
          && (topicname_is_matched(p_subtop->topicfilter, (char *)topic_name, len)))
         {
@@ -1099,9 +1106,9 @@ int umqtt_delete(struct umqtt_client *client)
 {   
     int _ret = 0, _cnt = 0;
     struct subtop_recv_handler *p_subtop = RT_NULL;
-    struct subtop_recv_handler *p_temp = RT_NULL;
     struct umqtt_qos2_msg *p_msg = RT_NULL;
-    struct umqtt_qos2_msg *p_msg_tmp = RT_NULL;
+    rt_list_t *node = RT_NULL;
+    rt_list_t *node_tmp = RT_NULL;
     if (client == RT_NULL)
         return _ret;
     if (client->task_handle)
@@ -1139,8 +1146,9 @@ int umqtt_delete(struct umqtt_client *client)
     }
     if ((_ret = rt_list_isempty(&client->sub_recv_list)) == 0)
     {
-        rt_list_for_each_entry_safe(p_subtop, p_temp, &client->sub_recv_list, next_list)
+        rt_list_for_each_safe(node, node_tmp, &client->sub_recv_list)
         {
+            p_subtop = rt_list_entry(node, struct subtop_recv_handler, next_list);
             if (p_subtop->topicfilter) {        // const char *, cannot free!
                 rt_free(p_subtop->topicfilter);
                 p_subtop->topicfilter = RT_NULL;
@@ -1153,8 +1161,9 @@ int umqtt_delete(struct umqtt_client *client)
 
     if ((_ret == rt_list_isempty(&client->qos2_msg_list)) == 0)
     {
-        rt_list_for_each_entry_safe(p_msg, p_msg_tmp, &client->qos2_msg_list, next_list)
+        rt_list_for_each_safe(node, node_tmp, &client->qos2_msg_list)
         {
+            p_msg = rt_list_entry(node, struct umqtt_qos2_msg, next_list);
             if (p_msg->topic_name) { rt_free(p_msg->topic_name); p_msg->topic_name = RT_NULL; }
             if (p_msg->payload) { rt_free(p_msg->payload); p_msg->payload = RT_NULL; }
             rt_list_remove(&(p_msg->next_list));
@@ -1320,6 +1329,7 @@ int umqtt_start(struct umqtt_client *client)
 {
     int _ret = 0, _length = 0;
     struct subtop_recv_handler *p_subtop = RT_NULL;
+    rt_list_t *node = RT_NULL;
     struct umqtt_msg encode_msg = { 0 };
     struct umqtt_msg_ack msg_ack = { 0 };
     if (client == RT_NULL) {
@@ -1352,8 +1362,9 @@ int umqtt_start(struct umqtt_client *client)
     /* will message topic to send & recv */
     if (0 == rt_list_isempty(&client->sub_recv_list))
     {
-        rt_list_for_each_entry(p_subtop, &client->sub_recv_list, next_list)
+        rt_list_for_each(node, &client->sub_recv_list)
         {
+            p_subtop = rt_list_entry(node, struct subtop_recv_handler, next_list);
             rt_memset(&encode_msg, 0, sizeof(encode_msg));
             encode_msg.header.bits.qos = UMQTT_QOS1;
             encode_msg.msg.subscribe.packet_id = get_next_packetID(client);
@@ -1646,6 +1657,7 @@ int umqtt_subscribe(struct umqtt_client *client, const char *topic, enum umqtt_q
     int _length = 0;
     int _cnt = 0;
     struct subtop_recv_handler *p_subtop = RT_NULL;
+    rt_list_t *node = RT_NULL;
     struct umqtt_msg encode_msg = { 0 };
     struct umqtt_msg_ack msg_ack = { 0 };
 
@@ -1657,8 +1669,9 @@ int umqtt_subscribe(struct umqtt_client *client, const char *topic, enum umqtt_q
     if (_cnt == 0) 
     {
         _cnt = 0;
-        rt_list_for_each_entry(p_subtop, &client->sub_recv_list, next_list) 
+        rt_list_for_each(node, &client->sub_recv_list)
         {    
+            p_subtop = rt_list_entry(node, struct subtop_recv_handler, next_list);
             if (p_subtop->topicfilter 
             && (rt_strncmp(p_subtop->topicfilter, topic, rt_strlen(topic)) == 0)) 
             {
@@ -1760,7 +1773,8 @@ int umqtt_unsubscribe(struct umqtt_client *client, const char *topic)
 {
     int _ret = 0, _cnt = 0, _length = 0;
     struct subtop_recv_handler *p_subtop = RT_NULL;
-    struct subtop_recv_handler *p_temp = RT_NULL;
+    rt_list_t *node = RT_NULL;
+    rt_list_t *node_tmp = RT_NULL;
     struct umqtt_msg encode_msg = { 0 };
     struct umqtt_msg_ack msg_ack = { 0 };
 
@@ -1770,8 +1784,9 @@ int umqtt_unsubscribe(struct umqtt_client *client, const char *topic)
 
     if (_cnt > 0)
     {
-        rt_list_for_each_entry_safe(p_subtop, p_temp, &client->sub_recv_list, next_list) 
+        rt_list_for_each_safe(node, node_tmp, &client->sub_recv_list)
         {
+            p_subtop = rt_list_entry(node, struct subtop_recv_handler, next_list);
             _cnt--;
             if (p_subtop->topicfilter
             && (rt_strncmp(p_subtop->topicfilter, topic, strlen(topic)) == 0)) 
@@ -1914,6 +1929,7 @@ exit:
 int umqtt_control(struct umqtt_client *client, enum umqtt_cmd cmd, void *params)
 {
     struct subtop_recv_handler *p_subtop = RT_NULL;
+    rt_list_t *node = RT_NULL;
     char *topic = RT_NULL;
     int _ret = 0;
     RT_ASSERT(client);
@@ -1924,8 +1940,9 @@ int umqtt_control(struct umqtt_client *client, enum umqtt_cmd cmd, void *params)
             RT_ASSERT(params);
             if (0 == rt_list_isempty(&client->sub_recv_list))       /* has list item */
             {
-                rt_list_for_each_entry(p_subtop, &client->sub_recv_list, next_list)
+                rt_list_for_each(node, &client->sub_recv_list)
                 {
+                    p_subtop = rt_list_entry(node, struct subtop_recv_handler, next_list);
                     topic = ((struct subtop_recv_handler *)params)->topicfilter;
                     if ((p_subtop->topicfilter != RT_NULL)
                      && (rt_strncmp(p_subtop->topicfilter, topic, rt_strlen(topic)) == 0))