|
21 | 21 | #include <regex> |
22 | 22 | #include <mutex> |
23 | 23 |
|
24 | | -#define RSCP2MQTT_VERSION "3.27" |
| 24 | +#define RSCP2MQTT_VERSION "3.28" |
25 | 25 |
|
26 | 26 | #define AES_KEY_SIZE 32 |
27 | 27 | #define AES_BLOCK_SIZE 32 |
@@ -881,8 +881,8 @@ bool updateRawData(char *topic, char *payload) { |
881 | 881 | return(false); |
882 | 882 | } |
883 | 883 |
|
884 | | -void mergeRawData(char *topic, char *payload) { |
885 | | - if (topic && payload && !updateRawData(topic, payload)) { |
| 884 | +void insertRawData(char *topic, char *payload) { |
| 885 | + if (topic && payload) { |
886 | 886 | RSCP_MQTT::mqtt_data_t v; |
887 | 887 | v.topic = strdup(topic); |
888 | 888 | v.payload = strdup(payload); |
@@ -2108,7 +2108,7 @@ void publishRaw(RscpProtocol *protocol, SRscpValue *response, char *topic) { |
2108 | 2108 | updateRawData(topic, payload_new); |
2109 | 2109 | } else if (!payload_old && payload_new && strcmp(payload_new, "")) { |
2110 | 2110 | publishImmediately(topic, payload_new, false); |
2111 | | - mergeRawData(topic, payload_new); |
| 2111 | + insertRawData(topic, payload_new); |
2112 | 2112 | } |
2113 | 2113 | if (payload_new) free(payload_new); |
2114 | 2114 | return; |
@@ -2136,7 +2136,7 @@ void handleRaw(RscpProtocol *protocol, SRscpValue *response, uint32_t *cache, in |
2136 | 2136 | } else { |
2137 | 2137 | cache[l + 1] = data[i].tag; |
2138 | 2138 | strcpy(topic, "raw"); |
2139 | | - for (int i = 0; i < RECURSION_MAX_LEVEL; i++) { |
| 2139 | + for (int i = 0; i <= l + 1; i++) { |
2140 | 2140 | if (cache[i]) { |
2141 | 2141 | if (strlen(topic) + strlen(tagName(RSCP_TAGS::RscpTagsOverview, cache[i])) + 2 < TOPIC_SIZE) { |
2142 | 2142 | strcat(topic, "/"); |
@@ -2193,7 +2193,6 @@ int handleResponseValue(RscpProtocol *protocol, SRscpValue *response) { |
2193 | 2193 | } |
2194 | 2194 |
|
2195 | 2195 | if (cfg.raw_mode) { |
2196 | | - for (int i = 0; i < RECURSION_MAX_LEVEL; i++) cache[i] = 0; |
2197 | 2196 | if (mosq) handleRaw(protocol, response, cache, -1); |
2198 | 2197 | } |
2199 | 2198 |
|
@@ -2547,7 +2546,6 @@ int handleResponseValue(RscpProtocol *protocol, SRscpValue *response) { |
2547 | 2546 | } |
2548 | 2547 | default: |
2549 | 2548 | if (response->dataType == RSCP::eTypeContainer) { |
2550 | | - for (int i = 0; i < RECURSION_MAX_LEVEL; i++) cache[i] = 0; |
2551 | 2549 | handleContainer(protocol, response, cache, -1); |
2552 | 2550 | } else storeResponseValue(RSCP_MQTT::RscpMqttCache, protocol, response, 0, 0); |
2553 | 2551 | break; |
|
0 commit comments