GD32W515 SDK中的mqtt5 BUG
#申请原创# #技术资源#在GD32W51x_RELEASE_V1.0.4的SDK包中,路径GD32W515\GD32W51x_RELEASE_V1.0.4\NSPE\WIFI_IOT\network\lwip-2.1.2\apps\mqtt下面有一个mqtt5.c。其中的mqtt5_publish_property_append_padding中函数如下图所示
<div style="color: rgb(204, 204, 204); background-color: rgb(31, 31, 31); font-family: Consolas, "Courier New", monospace; font-size: 14px; line-height: 19px; white-space: pre; --darkreader-inline-color: var(--darkreader-text-cccccc, #c8c3bc); --darkreader-inline-bgcolor: var(--darkreader-background-1f1f1f, #17191a);" data-darkreader-inline-color="" data-darkreader-inline-bgcolor=""><div><span style="color: rgb(86, 156, 214); --darkreader-inline-color: var(--darkreader-text-569cd6, #60a4d8);" data-darkreader-inline-color="">void</span> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">mqtt5_publish_property_append_padding</span>(<span style="color: rgb(86, 156, 214); --darkreader-inline-color: var(--darkreader-text-569cd6, #60a4d8);" data-darkreader-inline-color="">struct</span> <span style="color: rgb(78, 201, 176); --darkreader-inline-color: var(--darkreader-text-4ec9b0, #5ccdb6);" data-darkreader-inline-color="">mqtt_ringbuf_t</span> <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">*</span><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">rb</span>, <span style="color: rgb(78, 201, 176); --darkreader-inline-color: var(--darkreader-text-4ec9b0, #5ccdb6);" data-darkreader-inline-color="">u16_t</span> <span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property_len</span>, <span style="color: rgb(86, 156, 214); --darkreader-inline-color: var(--darkreader-text-569cd6, #60a4d8);" data-darkreader-inline-color="">const</span> <span style="color: rgb(86, 156, 214); --darkreader-inline-color: var(--darkreader-text-569cd6, #60a4d8);" data-darkreader-inline-color="">char</span> <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">*</span><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">resp_info</span>, <span style="color: rgb(86, 156, 214); --darkreader-inline-color: var(--darkreader-text-569cd6, #60a4d8);" data-darkreader-inline-color="">const</span> <span style="color: rgb(78, 201, 176); --darkreader-inline-color: var(--darkreader-text-4ec9b0, #5ccdb6);" data-darkreader-inline-color="">mqtt5_publish_property_config_t</span> <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">*</span><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>)</div><div>{</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">mqtt5_property_head_len_padding</span>(rb, property_len);</div><div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">if</span> (property <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">==</span> <span style="color: rgb(86, 156, 214); --darkreader-inline-color: var(--darkreader-text-569cd6, #60a4d8);" data-darkreader-inline-color="">NULL</span>) {</div><div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">return</span>;</div><div> }</div>
<div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">if</span> (<span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">payload_format_indicator</span>) {</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">mqtt5_property_append</span>(rb, MQTT5_PROPERTY_PAYLOAD_FORMAT_INDICATOR, <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">1</span>, <span style="color: rgb(86, 156, 214); --darkreader-inline-color: var(--darkreader-text-569cd6, #60a4d8);" data-darkreader-inline-color="">NULL</span>, <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">1</span>);</div><div> }</div><div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">if</span> (<span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">message_expiry_interval</span>) {</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">mqtt5_property_append</span>(rb, MQTT5_PROPERTY_MESSAGE_EXPIRY_INTERVAL, <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">4</span>, <span style="color: rgb(86, 156, 214); --darkreader-inline-color: var(--darkreader-text-569cd6, #60a4d8);" data-darkreader-inline-color="">NULL</span>, <span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">message_expiry_interval</span>);</div><div> }</div><div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">if</span> (<span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">topic_alias</span>) {</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">mqtt5_property_append</span>(rb, MQTT5_PROPERTY_TOPIC_ALIAS, <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">2</span>, <span style="color: rgb(86, 156, 214); --darkreader-inline-color: var(--darkreader-text-569cd6, #60a4d8);" data-darkreader-inline-color="">NULL</span>, <span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">topic_alias</span>);</div><div> }</div><div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">if</span> (<span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">response_topic</span>) {</div><div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">if</span> (resp_info <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">&&</span> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">strlen</span>(resp_info)) {</div><div> <span style="color: rgb(86, 156, 214); --darkreader-inline-color: var(--darkreader-text-569cd6, #60a4d8);" data-darkreader-inline-color="">uint16_t</span> response_topic_size <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">=</span> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">strlen</span>(<span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">response_topic</span>) <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">+</span> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">strlen</span>(resp_info) <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">+</span> <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">1</span>;</div><div> <span style="color: rgb(86, 156, 214); --darkreader-inline-color: var(--darkreader-text-569cd6, #60a4d8);" data-darkreader-inline-color="">char</span> <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">*</span>response_topic <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">=</span> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">calloc</span>(<span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">1</span>, response_topic_size);</div><div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">if</span> (<span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">!</span>response_topic) {</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">LWIP_DEBUGF</span>(MQTT_DEBUG_WARN, (<span style="color: rgb(206, 145, 120); --darkreader-inline-color: var(--darkreader-text-ce9178, #cf947b);" data-darkreader-inline-color="">"Failed to calloc </span><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">%d</span><span style="color: rgb(206, 145, 120); --darkreader-inline-color: var(--darkreader-text-ce9178, #cf947b);" data-darkreader-inline-color=""> memory"</span>, response_topic_size));</div><div> }</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">snprintf</span>(response_topic, response_topic_size, <span style="color: rgb(206, 145, 120); --darkreader-inline-color: var(--darkreader-text-ce9178, #cf947b);" data-darkreader-inline-color="">"</span><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">%s</span><span style="color: rgb(206, 145, 120); --darkreader-inline-color: var(--darkreader-text-ce9178, #cf947b);" data-darkreader-inline-color="">/</span><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">%s</span><span style="color: rgb(206, 145, 120); --darkreader-inline-color: var(--darkreader-text-ce9178, #cf947b);" data-darkreader-inline-color="">"</span>, <span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">response_topic</span>, resp_info);</div><div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">if</span> (<span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">mqtt5_property_append</span>(rb, MQTT5_PROPERTY_RESPONSE_TOPIC, <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">2</span>, response_topic, response_topic_size) <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">==</span> <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">-</span><span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">1</span>) {</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">LWIP_ASSERT</span>(<span style="color: rgb(206, 145, 120); --darkreader-inline-color: var(--darkreader-text-ce9178, #cf947b);" data-darkreader-inline-color="">"response_topic fail</span><span style="color: rgb(215, 186, 125); --darkreader-inline-color: var(--darkreader-text-d7ba7d, #d7ba7d);" data-darkreader-inline-color="">\n\r</span><span style="color: rgb(206, 145, 120); --darkreader-inline-color: var(--darkreader-text-ce9178, #cf947b);" data-darkreader-inline-color="">"</span>, <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">0</span>);</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">sys_mfree</span>(response_topic);</div><div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">return</span>;</div><div> }</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">sys_mfree</span>(response_topic);</div><div> } <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">else</span> {</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">mqtt5_property_append</span>(rb, MQTT5_PROPERTY_RESPONSE_TOPIC, <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">2</span>, <span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">response_topic</span>, <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">strlen</span>(<span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">response_topic</span>));</div><div> }</div>
<div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">if</span> (<span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">correlation_data</span> <span style="color: rgb(212, 212, 212); --darkreader-inline-color: var(--darkreader-text-d4d4d4, #cdc8c2);" data-darkreader-inline-color="">&&</span> <span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">correlation_data_len</span>) {</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">mqtt5_property_append</span>(rb, MQTT5_PROPERTY_CORRELATION_DATA, <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">2</span>, <span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">correlation_data</span>, <span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">correlation_data_len</span>);</div><div> }</div><div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">if</span> (<span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">user_property</span>) {</div><div> <span style="color: rgb(78, 201, 176); --darkreader-inline-color: var(--darkreader-text-4ec9b0, #5ccdb6);" data-darkreader-inline-color="">mqtt5_user_property_item_t</span> item;</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">STAILQ_FOREACH</span>(item, <span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">user_property</span>, next) {</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">mqtt5_property_append</span>(rb, MQTT5_PROPERTY_USER_PROPERTY, <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">2</span>, <span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">item</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">key</span>, <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">strlen</span>(<span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">item</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">key</span>));</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">mqtt5_property_append</span>(rb, <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">0</span>, <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">2</span>, <span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">item</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">value</span>, <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">strlen</span>(<span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">item</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">value</span>));</div><div> }</div><div> }</div><div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">if</span> (<span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">content_type</span>) {</div><div> <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">mqtt5_property_append</span>(rb, MQTT5_PROPERTY_CONTENT_TYPE, <span style="color: rgb(181, 206, 168); --darkreader-inline-color: var(--darkreader-text-b5cea8, #afcaa1);" data-darkreader-inline-color="">2</span>, <span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">content_type</span>, <span style="color: rgb(220, 220, 170); --darkreader-inline-color: var(--darkreader-text-dcdcaa, #d8d89f);" data-darkreader-inline-color="">strlen</span>(<span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">property</span>-><span style="color: rgb(156, 220, 254); --darkreader-inline-color: var(--darkreader-text-9cdcfe, #87d5fe);" data-darkreader-inline-color="">content_type</span>));</div><div> }</div><div> }</div><div> <span style="color: rgb(197, 134, 192); --darkreader-inline-color: var(--darkreader-text-c586c0, #c688c1);" data-darkreader-inline-color="">return</span>;</div><div>}</div></div>根据函数名,我们可以知道该函数与推送主题相关。在if (property->response_topic)后面的花括号中包含了相关数据(correlation_data)、用户属性(user_property)、连接类型(content_type)的内容。然而查看官方文档可知,在推送主题中,相关数据、用户属性、连接类型与相应主题不存在从属关系。所以涉及到相关操作时会因为报文错误被服务器踢出。如下图所示,将相关内容删除(红框内的内容),然后复制到下面(黄框内的内容)即可修复该BUG。
我们知道connect指令中的遗嘱属性(Will Properties)与遗嘱属性的内容类型(Content Type)有包含关系。所以他们的标题分别为3.1.3.2和3.1.3.2.5如下图所示
而推送主题中的响应主题(Response Topic)、相关数据(correlation_data)、用户属性(user_property)、连接类型(content_type)的标题分别为3.3.2.3.5、3.3.2.3.6、3.3.2.3.7、3.3.2.3.9。所以可以判断它们之间没有包含关系。如下图所示
第一次发帖,源代码没弄好。评论区粘一下void mqtt5_publish_property_append_padding(struct mqtt_ringbuf_t *rb, u16_t property_len, const char *resp_info, const mqtt5_publish_property_config_t *property)
{
mqtt5_property_head_len_padding(rb, property_len);
if (property == NULL) {
return;
}
if (property->payload_format_indicator) {
mqtt5_property_append(rb, MQTT5_PROPERTY_PAYLOAD_FORMAT_INDICATOR, 1, NULL, 1);
}
if (property->message_expiry_interval) {
mqtt5_property_append(rb, MQTT5_PROPERTY_MESSAGE_EXPIRY_INTERVAL, 4, NULL, property->message_expiry_interval);
}
if (property->topic_alias) {
mqtt5_property_append(rb, MQTT5_PROPERTY_TOPIC_ALIAS, 2, NULL, property->topic_alias);
}
if (property->response_topic) {
if (resp_info && strlen(resp_info)) {
uint16_t response_topic_size = strlen(property->response_topic) + strlen(resp_info) + 1;
char *response_topic = calloc(1, response_topic_size);
if (!response_topic) {
LWIP_DEBUGF(MQTT_DEBUG_WARN, ("Failed to calloc %d memory", response_topic_size));
}
snprintf(response_topic, response_topic_size, "%s/%s", property->response_topic, resp_info);
if (mqtt5_property_append(rb, MQTT5_PROPERTY_RESPONSE_TOPIC, 2, response_topic, response_topic_size) == -1) {
LWIP_ASSERT("response_topic fail\n\r", 0);
sys_mfree(response_topic);
return;
}
sys_mfree(response_topic);
} else {
mqtt5_property_append(rb, MQTT5_PROPERTY_RESPONSE_TOPIC, 2, property->response_topic, strlen(property->response_topic));
}
if (property->correlation_data && property->correlation_data_len) {
mqtt5_property_append(rb, MQTT5_PROPERTY_CORRELATION_DATA, 2, property->correlation_data, property->correlation_data_len);
}
if (property->user_property) {
mqtt5_user_property_item_t item;
STAILQ_FOREACH(item, property->user_property, next) {
mqtt5_property_append(rb, MQTT5_PROPERTY_USER_PROPERTY, 2, item->key, strlen(item->key));
mqtt5_property_append(rb, 0, 2, item->value, strlen(item->value));
}
}
if (property->content_type) {
mqtt5_property_append(rb, MQTT5_PROPERTY_CONTENT_TYPE, 2, property->content_type, strlen(property->content_type));
}
}
return;
} 官方SDK有Bug? @一下FAE 可能原厂也没有仔细测试吧 看来原厂的Demo没有仔细进行可靠性测试啊 可能是MQTT5协议的某些特性在SDK中未完全支持或存在实现错误 原厂给奖励没 表情发不了 表情发不了 希望原厂能看到
页:
[1]