fix: MQTT PUBLISH 接收修复 — topic 过滤 + cmd/Method 双格式支持
问题: mqtt_data_manage() 的 PUBLISH 分支直接调用 manage_mqtt_recv_message(),
跳过了 mqtt_deserialize_publish() 的 topic 过滤, 且只支持旧 Method 格式.
修复:
- mqtt_data_manage: PUBLISH 改为走 mqtt_deserialize_publish 做 topic 匹配
- mqtt_deserialize_publish: topic 过滤已改用 g_iot_topic.topic_sub
- manage_mqtt_recv_message: 优先解析 cmd, 兼容旧 Method 字段
This commit is contained in:
@@ -396,7 +396,12 @@ void mqtt_data_manage(uint8_t id)
|
||||
case PUBLISH:
|
||||
MQTTDeserialize_publish(&dup, &qos, &retained, &packetid,
|
||||
&topicName, &payload, &payloadlen, MyBuf, len);
|
||||
manage_mqtt_recv_message((char *)payload, payloadlen);
|
||||
/* V1.01: 通过 mqtt_deserialize_publish 做 topic 过滤 */
|
||||
{
|
||||
char TmpBuf[128] = {0};
|
||||
memcpy(TmpBuf, topicName.lenstring.data, topicName.lenstring.len);
|
||||
mqtt_deserialize_publish(TmpBuf, (char *)payload, payloadlen);
|
||||
}
|
||||
reset_net_active_timeup();
|
||||
break;
|
||||
case SUBACK:
|
||||
@@ -1052,7 +1057,12 @@ void manage_mqtt_recv_message(char * msg, int length)
|
||||
}
|
||||
|
||||
reset_temp_guide();
|
||||
simple_parse_json(msg, DPG_API_KEY_METHOD, temp_guide);
|
||||
|
||||
// V1.01: 优先解析新协议 cmd 字段,兼容旧 Method 字段
|
||||
simple_parse_json(msg, "\"cmd\"", temp_guide);
|
||||
if(strlen(temp_guide) == 0) {
|
||||
simple_parse_json(msg, DPG_API_KEY_METHOD, temp_guide);
|
||||
}
|
||||
|
||||
if(strlen(temp_guide) == 0)
|
||||
{
|
||||
@@ -1060,9 +1070,16 @@ void manage_mqtt_recv_message(char * msg, int length)
|
||||
return;
|
||||
}
|
||||
PRINT("Rcv_Dis_LED_m:%s\n", temp_guide);
|
||||
|
||||
// 旧协议: Method = Heartbeat → 回复心跳
|
||||
if(strstr(temp_guide, "Heartbeat") != NULL)
|
||||
{
|
||||
dev_response_heartbeat(NULL);
|
||||
}
|
||||
// 新协议: 解析 cmd 并打印(后续可扩展命令处理)
|
||||
else if(strlen(temp_guide) > 0)
|
||||
{
|
||||
PRINT("MQTT cmd/method: %s, raw: %s\n", temp_guide, msg);
|
||||
}
|
||||
else {
|
||||
PRINT("Unknown MQTT method: %s\n", msg);
|
||||
|
||||
Reference in New Issue
Block a user