MQTT test message memory optimisation

This commit is contained in:
Bogdan Pilyugin 2025-02-25 18:59:18 +02:00
parent a162ef8091
commit d254ff5c46

View File

@ -20,6 +20,7 @@
*/ */
#include <SysConfiguration.h> #include <SysConfiguration.h>
#include <SystemApplication.h> #include <SystemApplication.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "esp_log.h" #include "esp_log.h"
#include "Helpers.h" #include "Helpers.h"
@ -162,14 +163,16 @@ esp_err_t ExternalServiceMQTTSend(char *servname, char *data, int len, int idx)
} }
#define MAX_ERROR_JSON 256 #define MAX_ERROR_JSON 256
static char resp[256]; #define MAX_MQTT_PUBLICTEST_MESSAGE 1024
static char JSONMess[1024];
mqtt_app_err_t PublicTestMQTT(int idx) mqtt_app_err_t PublicTestMQTT(int idx)
{ {
char tmp[10]; char tmp[10];
char *data = (char*) malloc(MAX_MQTT_PUBLICTEST_MESSAGE);
if (data == NULL)
return ESP_ERR_NO_MEM;
static char resp[256];
struct jWriteControl jwc; struct jWriteControl jwc;
jwOpen(&jwc, JSONMess, 1024 - 64, JW_OBJECT, JW_COMPACT); jwOpen(&jwc, data, 1024 - 64, JW_OBJECT, JW_COMPACT);
jwObj_object(&jwc, "data"); jwObj_object(&jwc, "data");
time_t now; time_t now;
time(&now); time(&now);
@ -248,7 +251,7 @@ mqtt_app_err_t PublicTestMQTT(int idx)
jwEnd(&jwc); //close payload jwEnd(&jwc); //close payload
jwEnd(&jwc); //close data jwEnd(&jwc); //close data
//calculate sha from 'data' object //calculate sha from 'data' object
char *datap = strstr(JSONMess, "\"data\":"); char *datap = strstr(data, "\"data\":");
if (datap) if (datap)
{ {
datap += sizeof("\"data\":") - 1; datap += sizeof("\"data\":") - 1;
@ -262,13 +265,15 @@ mqtt_app_err_t PublicTestMQTT(int idx)
#endif #endif
jwObj_string(&jwc, "signature", (char*) sha_print); jwObj_string(&jwc, "signature", (char*) sha_print);
} }
else else{
return ESP_ERR_NOT_FOUND; free(data);
return ESP_ERR_NOT_FOUND;}
jwClose(&jwc); jwClose(&jwc);
mqtt_app_err_t merr = API_OK; mqtt_app_err_t merr = API_OK;
if (SysServiceMQTTSend(JSONMess, strlen(JSONMess), idx) != ESP_OK) if (SysServiceMQTTSend(data, strlen(data), idx) != ESP_OK)
merr = API_INTERNAL_ERR; merr = API_INTERNAL_ERR;
free(data);
return merr; return merr;
} }