打印

GD32W515 SDK中的mqtt5 BUG

[复制链接]
108|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创# #技术资源#
在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, &quot;Courier New&quot;, 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。所以可以判断它们之间没有包含关系。如下图所示





微信图片_2025-05-18_162822_404.png (180.98 KB )

微信图片_2025-05-18_162822_404.png

使用特权

评论回复
沙发
1218601815|  楼主 | 2025-5-18 16:51 | 只看该作者
第一次发帖,源代码没弄好。评论区粘一下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;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝