Почему выложил топи c с PAHO mqtt, return-8 появился - PullRequest
2 голосов
/ 28 мая 2020
MQTTAsync_responseOptions sendOptions = MQTTAsync_responseOptions_initializer;
MQTTAsync_message pubMsg = MQTTAsync_message_initializer;
int rc = 0;
char msgSend[48] = {0};
json_object *pValue = NULL;
json_object *pObjectSerPro = NULL;
int waitCount = 0;

if (pLoopCount == NULL)
{
     printf("(%s) This is an empty data.\n", __FUNCTION__);
     return DEAL_ERROR;
}

while(!ConnectedFlag && ++waitCount<WAIT_COUNT);
if (waitCount >= WAIT_COUNT)
{
    printf("(%s) Failed to wait for the connection.\n", __FUNCTION__);
    return DEAL_ERROR;
}

/*
{
    "loop1_count": 1,
    "loop2_count": 2
}
*/

pObjectSerPro = json_object_new_object();

pValue = json_object_new_int(1);
json_object_object_add(pObjectSerPro, LOOP1_COUNT, pValue);
pValue = json_object_new_int(2);
json_object_object_add(pObjectSerPro, LOOP2_COUNT, pValue);


memset(msgSend, 0, 48);
sprintf(msgSend, "%s", json_object_to_json_string(pObjectSerPro));

json_object_put(pObjectSerPro);

sendOptions.onSuccess = onSend;
sendOptions.context = GlobalClient;
pubMsg.payload = msgSend;
pubMsg.payloadlen = strlen(pubMsg.payload);
pubMsg.qos = 1;
pubMsg.retained = 1;

if ((rc = MQTTAsync_sendMessage(GlobalClient, ORENA_SMARTFIRE_EC_RESPONSE_LOOP_REGISTER, &pubMsg, 
&sendOptions)) != MQTTASYNC_SUCCESS)
{
    printf("(%s) Failed to start sendMessage, return code %d\n", __FUNCTION__, rc);
    return DEAL_ERROR;
}
return DEAL_OK;

Я намерен инкапсулировать сообщение JSON ( {"loop1_count": 1, "loop2_count": 2} ) для публикации, мой вопрос: когда я изменил этот код с CHAR msgSend [48] = {0}; to CHAR msgSend [40] = {0} ;, Я обнаружил код ошибки возврата -8, но я посмотрел на данные и сказал, что проблема с возвратом -8 возникла из-за проблемы с версией, почему? (#define MQTTASYNC_BAD_STRUCTURE -8 - Код возврата: параметр структуры не имеет правильного идентификатора и номера версии)

1 Ответ

1 голос
/ 04 июня 2020

Предполагается, что длина строки превышает размер массива, происходит покрытие памяти и изменяется заголовок отправляемых данных. Ответ приходит от автора ПАОЗ , ссылка : https://github.com/eclipse/paho.mqtt.c/issues/902

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...