Fixed formatting for all files to comply with idf style formats

This commit is contained in:
David Cermak
2019-05-06 13:45:33 +02:00
parent e442c19f4e
commit 18b6f2c582
8 changed files with 489 additions and 460 deletions

4
include/mqtt_client.h Executable file → Normal file
View File

@@ -18,7 +18,7 @@
extern "C" { extern "C" {
#endif #endif
typedef struct esp_mqtt_client* esp_mqtt_client_handle_t; typedef struct esp_mqtt_client *esp_mqtt_client_handle_t;
/** /**
* @brief MQTT event types. * @brief MQTT event types.
@@ -77,7 +77,7 @@ typedef struct {
int session_present; /*!< MQTT session_present flag for connection event */ int session_present; /*!< MQTT session_present flag for connection event */
} esp_mqtt_event_t; } esp_mqtt_event_t;
typedef esp_mqtt_event_t* esp_mqtt_event_handle_t; typedef esp_mqtt_event_t *esp_mqtt_event_handle_t;
typedef esp_err_t (* mqtt_event_callback_t)(esp_mqtt_event_handle_t event); typedef esp_err_t (* mqtt_event_callback_t)(esp_mqtt_event_handle_t event);

View File

@@ -67,13 +67,13 @@
#endif #endif
#ifdef CONFIG_MQTT_USE_CORE_0 #ifdef CONFIG_MQTT_USE_CORE_0
#define MQTT_TASK_CORE 0 #define MQTT_TASK_CORE 0
#else #else
#ifdef CONFIG_MQTT_USE_CORE_1 #ifdef CONFIG_MQTT_USE_CORE_1
#define MQTT_TASK_CORE 1 #define MQTT_TASK_CORE 1
#else #else
#define MQTT_TASK_CORE 0 #define MQTT_TASK_CORE 0
#endif #endif
#endif #endif

View File

@@ -40,8 +40,7 @@ extern "C" {
/* Remaining Length */ /* Remaining Length */
enum mqtt_message_type enum mqtt_message_type {
{
MQTT_MSG_TYPE_CONNECT = 1, MQTT_MSG_TYPE_CONNECT = 1,
MQTT_MSG_TYPE_CONNACK = 2, MQTT_MSG_TYPE_CONNACK = 2,
MQTT_MSG_TYPE_PUBLISH = 3, MQTT_MSG_TYPE_PUBLISH = 3,
@@ -58,8 +57,7 @@ enum mqtt_message_type
MQTT_MSG_TYPE_DISCONNECT = 14 MQTT_MSG_TYPE_DISCONNECT = 14
}; };
enum mqtt_connect_return_code enum mqtt_connect_return_code {
{
CONNECTION_ACCEPTED = 0, CONNECTION_ACCEPTED = 0,
CONNECTION_REFUSE_PROTOCOL, CONNECTION_REFUSE_PROTOCOL,
CONNECTION_REFUSE_ID_REJECTED, CONNECTION_REFUSE_ID_REJECTED,
@@ -68,31 +66,28 @@ enum mqtt_connect_return_code
CONNECTION_REFUSE_NOT_AUTHORIZED CONNECTION_REFUSE_NOT_AUTHORIZED
}; };
typedef struct mqtt_message typedef struct mqtt_message {
{ uint8_t *data;
uint8_t* data;
uint32_t length; uint32_t length;
uint32_t fragmented_msg_total_length; /*!< total len of fragmented messages (zero for all other messages) */ uint32_t fragmented_msg_total_length; /*!< total len of fragmented messages (zero for all other messages) */
uint32_t fragmented_msg_data_offset; /*!< data offset of fragmented messages (zero for all other messages) */ uint32_t fragmented_msg_data_offset; /*!< data offset of fragmented messages (zero for all other messages) */
} mqtt_message_t; } mqtt_message_t;
typedef struct mqtt_connection typedef struct mqtt_connection {
{
mqtt_message_t message; mqtt_message_t message;
uint16_t message_id; uint16_t message_id;
uint8_t* buffer; uint8_t *buffer;
uint16_t buffer_length; uint16_t buffer_length;
} mqtt_connection_t; } mqtt_connection_t;
typedef struct mqtt_connect_info typedef struct mqtt_connect_info {
{ char *client_id;
char* client_id; char *username;
char* username; char *password;
char* password; char *will_topic;
char* will_topic; char *will_message;
char* will_message;
int keepalive; int keepalive;
int will_length; int will_length;
int will_qos; int will_qos;
@@ -102,33 +97,54 @@ typedef struct mqtt_connect_info
} mqtt_connect_info_t; } mqtt_connect_info_t;
static inline int mqtt_get_type(uint8_t* buffer) { return (buffer[0] & 0xf0) >> 4; } static inline int mqtt_get_type(uint8_t *buffer)
static inline int mqtt_get_connect_session_present(uint8_t* buffer) { return buffer[2] & 0x01; } {
static inline int mqtt_get_connect_return_code(uint8_t* buffer) { return buffer[3]; } return (buffer[0] & 0xf0) >> 4;
static inline int mqtt_get_dup(uint8_t* buffer) { return (buffer[0] & 0x08) >> 3; } }
static inline void mqtt_set_dup(uint8_t* buffer) { buffer[0] |= 0x08; } static inline int mqtt_get_connect_session_present(uint8_t *buffer)
static inline int mqtt_get_qos(uint8_t* buffer) { return (buffer[0] & 0x06) >> 1; } {
static inline int mqtt_get_retain(uint8_t* buffer) { return (buffer[0] & 0x01); } return buffer[2] & 0x01;
}
static inline int mqtt_get_connect_return_code(uint8_t *buffer)
{
return buffer[3];
}
static inline int mqtt_get_dup(uint8_t *buffer)
{
return (buffer[0] & 0x08) >> 3;
}
static inline void mqtt_set_dup(uint8_t *buffer)
{
buffer[0] |= 0x08;
}
static inline int mqtt_get_qos(uint8_t *buffer)
{
return (buffer[0] & 0x06) >> 1;
}
static inline int mqtt_get_retain(uint8_t *buffer)
{
return (buffer[0] & 0x01);
}
void mqtt_msg_init(mqtt_connection_t* connection, uint8_t* buffer, uint16_t buffer_length); void mqtt_msg_init(mqtt_connection_t *connection, uint8_t *buffer, uint16_t buffer_length);
bool mqtt_header_complete(uint8_t* buffer, uint16_t buffer_length); bool mqtt_header_complete(uint8_t *buffer, uint16_t buffer_length);
uint32_t mqtt_get_total_length(uint8_t* buffer, uint16_t length, int* fixed_size_len); uint32_t mqtt_get_total_length(uint8_t *buffer, uint16_t length, int *fixed_size_len);
char* mqtt_get_publish_topic(uint8_t* buffer, uint32_t* length); char *mqtt_get_publish_topic(uint8_t *buffer, uint32_t *length);
char* mqtt_get_publish_data(uint8_t* buffer, uint32_t* length); char *mqtt_get_publish_data(uint8_t *buffer, uint32_t *length);
uint16_t mqtt_get_id(uint8_t* buffer, uint16_t length); uint16_t mqtt_get_id(uint8_t *buffer, uint16_t length);
int mqtt_has_valid_msg_hdr(uint8_t* buffer, uint16_t length); int mqtt_has_valid_msg_hdr(uint8_t *buffer, uint16_t length);
mqtt_message_t* mqtt_msg_connect(mqtt_connection_t* connection, mqtt_connect_info_t* info); mqtt_message_t *mqtt_msg_connect(mqtt_connection_t *connection, mqtt_connect_info_t *info);
mqtt_message_t* mqtt_msg_publish(mqtt_connection_t* connection, const char* topic, const char* data, int data_length, int qos, int retain, uint16_t* message_id); mqtt_message_t *mqtt_msg_publish(mqtt_connection_t *connection, const char *topic, const char *data, int data_length, int qos, int retain, uint16_t *message_id);
mqtt_message_t* mqtt_msg_puback(mqtt_connection_t* connection, uint16_t message_id); mqtt_message_t *mqtt_msg_puback(mqtt_connection_t *connection, uint16_t message_id);
mqtt_message_t* mqtt_msg_pubrec(mqtt_connection_t* connection, uint16_t message_id); mqtt_message_t *mqtt_msg_pubrec(mqtt_connection_t *connection, uint16_t message_id);
mqtt_message_t* mqtt_msg_pubrel(mqtt_connection_t* connection, uint16_t message_id); mqtt_message_t *mqtt_msg_pubrel(mqtt_connection_t *connection, uint16_t message_id);
mqtt_message_t* mqtt_msg_pubcomp(mqtt_connection_t* connection, uint16_t message_id); mqtt_message_t *mqtt_msg_pubcomp(mqtt_connection_t *connection, uint16_t message_id);
mqtt_message_t* mqtt_msg_subscribe(mqtt_connection_t* connection, const char* topic, int qos, uint16_t* message_id); mqtt_message_t *mqtt_msg_subscribe(mqtt_connection_t *connection, const char *topic, int qos, uint16_t *message_id);
mqtt_message_t* mqtt_msg_unsubscribe(mqtt_connection_t* connection, const char* topic, uint16_t* message_id); mqtt_message_t *mqtt_msg_unsubscribe(mqtt_connection_t *connection, const char *topic, uint16_t *message_id);
mqtt_message_t* mqtt_msg_pingreq(mqtt_connection_t* connection); mqtt_message_t *mqtt_msg_pingreq(mqtt_connection_t *connection);
mqtt_message_t* mqtt_msg_pingresp(mqtt_connection_t* connection); mqtt_message_t *mqtt_msg_pingresp(mqtt_connection_t *connection);
mqtt_message_t* mqtt_msg_disconnect(mqtt_connection_t* connection); mqtt_message_t *mqtt_msg_disconnect(mqtt_connection_t *connection);
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -13,9 +13,9 @@ extern "C" {
struct outbox_item; struct outbox_item;
typedef struct outbox_list_t * outbox_handle_t; typedef struct outbox_list_t *outbox_handle_t;
typedef struct outbox_item * outbox_item_handle_t; typedef struct outbox_item *outbox_item_handle_t;
typedef struct outbox_message * outbox_message_handle_t; typedef struct outbox_message *outbox_message_handle_t;
typedef struct outbox_message { typedef struct outbox_message {
uint8_t *data; uint8_t *data;
@@ -37,7 +37,7 @@ outbox_handle_t outbox_init();
outbox_item_handle_t outbox_enqueue(outbox_handle_t outbox, outbox_message_handle_t message, int tick); outbox_item_handle_t outbox_enqueue(outbox_handle_t outbox, outbox_message_handle_t message, int tick);
outbox_item_handle_t outbox_dequeue(outbox_handle_t outbox, pending_state_t pending, int *tick); outbox_item_handle_t outbox_dequeue(outbox_handle_t outbox, pending_state_t pending, int *tick);
outbox_item_handle_t outbox_get(outbox_handle_t outbox, int msg_id); outbox_item_handle_t outbox_get(outbox_handle_t outbox, int msg_id);
uint8_t* outbox_item_get_data(outbox_item_handle_t item, size_t *len, uint16_t *msg_id, int *msg_type, int *qos); uint8_t *outbox_item_get_data(outbox_item_handle_t item, size_t *len, uint16_t *msg_id, int *msg_type, int *qos);
esp_err_t outbox_delete(outbox_handle_t outbox, int msg_id, int msg_type); esp_err_t outbox_delete(outbox_handle_t outbox, int msg_id, int msg_type);
esp_err_t outbox_delete_msgid(outbox_handle_t outbox, int msg_id); esp_err_t outbox_delete_msgid(outbox_handle_t outbox, int msg_id);
esp_err_t outbox_delete_msgtype(outbox_handle_t outbox, int msg_type); esp_err_t outbox_delete_msgtype(outbox_handle_t outbox, int msg_type);

View File

@@ -37,8 +37,7 @@
#define MQTT_MAX_FIXED_HEADER_SIZE 5 #define MQTT_MAX_FIXED_HEADER_SIZE 5
enum mqtt_connect_flag enum mqtt_connect_flag {
{
MQTT_CONNECT_FLAG_USERNAME = 1 << 7, MQTT_CONNECT_FLAG_USERNAME = 1 << 7,
MQTT_CONNECT_FLAG_PASSWORD = 1 << 6, MQTT_CONNECT_FLAG_PASSWORD = 1 << 6,
MQTT_CONNECT_FLAG_WILL_RETAIN = 1 << 5, MQTT_CONNECT_FLAG_WILL_RETAIN = 1 << 5,
@@ -46,8 +45,7 @@ enum mqtt_connect_flag
MQTT_CONNECT_FLAG_CLEAN_SESSION = 1 << 1 MQTT_CONNECT_FLAG_CLEAN_SESSION = 1 << 1
}; };
struct __attribute((__packed__)) mqtt_connect_variable_header struct __attribute((__packed__)) mqtt_connect_variable_header {
{
uint8_t lengthMsb; uint8_t lengthMsb;
uint8_t lengthLsb; uint8_t lengthLsb;
#if defined(MQTT_PROTOCOL_311) #if defined(MQTT_PROTOCOL_311)
@@ -61,10 +59,11 @@ struct __attribute((__packed__)) mqtt_connect_variable_header
uint8_t keepaliveLsb; uint8_t keepaliveLsb;
}; };
static int append_string(mqtt_connection_t* connection, const char* string, int len) static int append_string(mqtt_connection_t *connection, const char *string, int len)
{ {
if (connection->message.length + len + 2 > connection->buffer_length) if (connection->message.length + len + 2 > connection->buffer_length) {
return -1; return -1;
}
connection->buffer[connection->message.length++] = len >> 8; connection->buffer[connection->message.length++] = len >> 8;
connection->buffer[connection->message.length++] = len & 0xff; connection->buffer[connection->message.length++] = len & 0xff;
@@ -74,7 +73,7 @@ static int append_string(mqtt_connection_t* connection, const char* string, int
return len + 2; return len + 2;
} }
static uint16_t append_message_id(mqtt_connection_t* connection, uint16_t message_id) static uint16_t append_message_id(mqtt_connection_t *connection, uint16_t message_id)
{ {
// If message_id is zero then we should assign one, otherwise // If message_id is zero then we should assign one, otherwise
// we'll use the one supplied by the caller // we'll use the one supplied by the caller
@@ -82,8 +81,9 @@ static uint16_t append_message_id(mqtt_connection_t* connection, uint16_t messag
message_id = platform_random(65535); message_id = platform_random(65535);
} }
if (connection->message.length + 2 > connection->buffer_length) if (connection->message.length + 2 > connection->buffer_length) {
return 0; return 0;
}
connection->buffer[connection->message.length++] = message_id >> 8; connection->buffer[connection->message.length++] = message_id >> 8;
connection->buffer[connection->message.length++] = message_id & 0xff; connection->buffer[connection->message.length++] = message_id & 0xff;
@@ -91,20 +91,20 @@ static uint16_t append_message_id(mqtt_connection_t* connection, uint16_t messag
return message_id; return message_id;
} }
static int init_message(mqtt_connection_t* connection) static int init_message(mqtt_connection_t *connection)
{ {
connection->message.length = MQTT_MAX_FIXED_HEADER_SIZE; connection->message.length = MQTT_MAX_FIXED_HEADER_SIZE;
return MQTT_MAX_FIXED_HEADER_SIZE; return MQTT_MAX_FIXED_HEADER_SIZE;
} }
static mqtt_message_t* fail_message(mqtt_connection_t* connection) static mqtt_message_t *fail_message(mqtt_connection_t *connection)
{ {
connection->message.data = connection->buffer; connection->message.data = connection->buffer;
connection->message.length = 0; connection->message.length = 0;
return &connection->message; return &connection->message;
} }
static mqtt_message_t* fini_message(mqtt_connection_t* connection, int type, int dup, int qos, int retain) static mqtt_message_t *fini_message(mqtt_connection_t *connection, int type, int dup, int qos, int retain)
{ {
int message_length = connection->message.length - MQTT_MAX_FIXED_HEADER_SIZE; int message_length = connection->message.length - MQTT_MAX_FIXED_HEADER_SIZE;
int total_length = message_length; int total_length = message_length;
@@ -140,102 +140,101 @@ static mqtt_message_t* fini_message(mqtt_connection_t* connection, int type, int
// type byte // type byte
connection->buffer[offs++] = ((type & 0x0f) << 4) | ((dup & 1) << 3) | ((qos & 3) << 1) | (retain & 1); connection->buffer[offs++] = ((type & 0x0f) << 4) | ((dup & 1) << 3) | ((qos & 3) << 1) | (retain & 1);
// length bytes // length bytes
for (int j = 0; j<len_bytes; j++) { for (int j = 0; j < len_bytes; j++) {
connection->buffer[offs++] = encoded_lens[j]; connection->buffer[offs++] = encoded_lens[j];
} }
return &connection->message; return &connection->message;
} }
void mqtt_msg_init(mqtt_connection_t* connection, uint8_t* buffer, uint16_t buffer_length) void mqtt_msg_init(mqtt_connection_t *connection, uint8_t *buffer, uint16_t buffer_length)
{ {
memset(connection, 0, sizeof(mqtt_connection_t)); memset(connection, 0, sizeof(mqtt_connection_t));
connection->buffer = buffer; connection->buffer = buffer;
connection->buffer_length = buffer_length; connection->buffer_length = buffer_length;
} }
uint32_t mqtt_get_total_length(uint8_t* buffer, uint16_t length, int* fixed_size_len) uint32_t mqtt_get_total_length(uint8_t *buffer, uint16_t length, int *fixed_size_len)
{ {
int i; int i;
uint32_t totlen = 0; uint32_t totlen = 0;
for (i = 1; i < length; ++i) for (i = 1; i < length; ++i) {
{
totlen += (buffer[i] & 0x7f) << (7 * (i - 1)); totlen += (buffer[i] & 0x7f) << (7 * (i - 1));
if ((buffer[i] & 0x80) == 0) if ((buffer[i] & 0x80) == 0) {
{
++i; ++i;
break; break;
} }
} }
totlen += i; totlen += i;
if (fixed_size_len) *fixed_size_len = i; if (fixed_size_len) {
*fixed_size_len = i;
}
return totlen; return totlen;
} }
bool mqtt_header_complete(uint8_t* buffer, uint16_t buffer_length) bool mqtt_header_complete(uint8_t *buffer, uint16_t buffer_length)
{ {
uint16_t i; uint16_t i;
uint16_t topiclen; uint16_t topiclen;
for (i = 1; i < MQTT_MAX_FIXED_HEADER_SIZE; ++i) for (i = 1; i < MQTT_MAX_FIXED_HEADER_SIZE; ++i) {
{ if (i >= buffer_length) {
if(i >= buffer_length)
return false; return false;
if ((buffer[i] & 0x80) == 0) }
{ if ((buffer[i] & 0x80) == 0) {
++i; ++i;
break; break;
} }
} }
// i is now the length of the fixed header // i is now the length of the fixed header
if (i + 2 >= buffer_length) if (i + 2 >= buffer_length) {
return false; return false;
}
topiclen = buffer[i++] << 8; topiclen = buffer[i++] << 8;
topiclen |= buffer[i++]; topiclen |= buffer[i++];
i += topiclen; i += topiclen;
if (mqtt_get_qos(buffer) > 0) if (mqtt_get_qos(buffer) > 0) {
{
i += 2; i += 2;
} }
// i is now the length of the fixed + variable header // i is now the length of the fixed + variable header
return buffer_length >= i; return buffer_length >= i;
} }
char* mqtt_get_publish_topic(uint8_t* buffer, uint32_t* length) char *mqtt_get_publish_topic(uint8_t *buffer, uint32_t *length)
{ {
int i; int i;
int totlen = 0; int totlen = 0;
int topiclen; int topiclen;
for (i = 1; i < *length; ++i) for (i = 1; i < *length; ++i) {
{
totlen += (buffer[i] & 0x7f) << (7 * (i - 1)); totlen += (buffer[i] & 0x7f) << (7 * (i - 1));
if ((buffer[i] & 0x80) == 0) if ((buffer[i] & 0x80) == 0) {
{
++i; ++i;
break; break;
} }
} }
totlen += i; totlen += i;
if (i + 2 >= *length) if (i + 2 >= *length) {
return NULL; return NULL;
}
topiclen = buffer[i++] << 8; topiclen = buffer[i++] << 8;
topiclen |= buffer[i++]; topiclen |= buffer[i++];
if (i + topiclen > *length) if (i + topiclen > *length) {
return NULL; return NULL;
}
*length = topiclen; *length = topiclen;
return (char*)(buffer + i); return (char *)(buffer + i);
} }
char* mqtt_get_publish_data(uint8_t* buffer, uint32_t* length) char *mqtt_get_publish_data(uint8_t *buffer, uint32_t *length)
{ {
int i; int i;
int totlen = 0; int totlen = 0;
@@ -243,78 +242,79 @@ char* mqtt_get_publish_data(uint8_t* buffer, uint32_t* length)
int blength = *length; int blength = *length;
*length = 0; *length = 0;
for (i = 1; i < blength; ++i) for (i = 1; i < blength; ++i) {
{
totlen += (buffer[i] & 0x7f) << (7 * (i - 1)); totlen += (buffer[i] & 0x7f) << (7 * (i - 1));
if ((buffer[i] & 0x80) == 0) if ((buffer[i] & 0x80) == 0) {
{
++i; ++i;
break; break;
} }
} }
totlen += i; totlen += i;
if (i + 2 >= blength) if (i + 2 >= blength) {
return NULL; return NULL;
}
topiclen = buffer[i++] << 8; topiclen = buffer[i++] << 8;
topiclen |= buffer[i++]; topiclen |= buffer[i++];
if (i + topiclen >= blength) if (i + topiclen >= blength) {
return NULL; return NULL;
}
i += topiclen; i += topiclen;
if (mqtt_get_qos(buffer) > 0) if (mqtt_get_qos(buffer) > 0) {
{ if (i + 2 >= blength) {
if (i + 2 >= blength)
return NULL; return NULL;
}
i += 2; i += 2;
} }
if (totlen < i) if (totlen < i) {
return NULL; return NULL;
}
if (totlen <= blength) if (totlen <= blength) {
*length = totlen - i; *length = totlen - i;
else } else {
*length = blength - i; *length = blength - i;
return (char*)(buffer + i); }
return (char *)(buffer + i);
} }
uint16_t mqtt_get_id(uint8_t* buffer, uint16_t length) uint16_t mqtt_get_id(uint8_t *buffer, uint16_t length)
{ {
if (length < 1) if (length < 1) {
return 0; return 0;
}
switch (mqtt_get_type(buffer)) switch (mqtt_get_type(buffer)) {
{ case MQTT_MSG_TYPE_PUBLISH: {
case MQTT_MSG_TYPE_PUBLISH:
{
int i; int i;
int topiclen; int topiclen;
for (i = 1; i < length; ++i) for (i = 1; i < length; ++i) {
{ if ((buffer[i] & 0x80) == 0) {
if ((buffer[i] & 0x80) == 0)
{
++i; ++i;
break; break;
} }
} }
if (i + 2 >= length) if (i + 2 >= length) {
return 0; return 0;
}
topiclen = buffer[i++] << 8; topiclen = buffer[i++] << 8;
topiclen |= buffer[i++]; topiclen |= buffer[i++];
if (i + topiclen > length) if (i + topiclen > length) {
return 0; return 0;
}
i += topiclen; i += topiclen;
if (mqtt_get_qos(buffer) > 0) if (mqtt_get_qos(buffer) > 0) {
{ if (i + 2 > length) {
if (i + 2 > length)
return 0; return 0;
}
//i += 2; //i += 2;
} else { } else {
return 0; return 0;
@@ -329,30 +329,31 @@ uint16_t mqtt_get_id(uint8_t* buffer, uint16_t length)
case MQTT_MSG_TYPE_SUBACK: case MQTT_MSG_TYPE_SUBACK:
case MQTT_MSG_TYPE_UNSUBACK: case MQTT_MSG_TYPE_UNSUBACK:
case MQTT_MSG_TYPE_SUBSCRIBE: case MQTT_MSG_TYPE_SUBSCRIBE:
case MQTT_MSG_TYPE_UNSUBSCRIBE: case MQTT_MSG_TYPE_UNSUBSCRIBE: {
{
// This requires the remaining length to be encoded in 1 byte, // This requires the remaining length to be encoded in 1 byte,
// which it should be. // which it should be.
if (length >= 4 && (buffer[1] & 0x80) == 0) if (length >= 4 && (buffer[1] & 0x80) == 0) {
return (buffer[2] << 8) | buffer[3]; return (buffer[2] << 8) | buffer[3];
else } else {
return 0; return 0;
} }
}
default: default:
return 0; return 0;
} }
} }
mqtt_message_t* mqtt_msg_connect(mqtt_connection_t* connection, mqtt_connect_info_t* info) mqtt_message_t *mqtt_msg_connect(mqtt_connection_t *connection, mqtt_connect_info_t *info)
{ {
struct mqtt_connect_variable_header* variable_header; struct mqtt_connect_variable_header *variable_header;
init_message(connection); init_message(connection);
if (connection->message.length + sizeof(*variable_header) > connection->buffer_length) if (connection->message.length + sizeof(*variable_header) > connection->buffer_length) {
return fail_message(connection); return fail_message(connection);
variable_header = (void*)(connection->buffer + connection->message.length); }
variable_header = (void *)(connection->buffer + connection->message.length);
connection->message.length += sizeof(*variable_header); connection->message.length += sizeof(*variable_header);
variable_header->lengthMsb = 0; variable_header->lengthMsb = 0;
@@ -370,43 +371,46 @@ mqtt_message_t* mqtt_msg_connect(mqtt_connection_t* connection, mqtt_connect_inf
variable_header->keepaliveMsb = info->keepalive >> 8; variable_header->keepaliveMsb = info->keepalive >> 8;
variable_header->keepaliveLsb = info->keepalive & 0xff; variable_header->keepaliveLsb = info->keepalive & 0xff;
if (info->clean_session) if (info->clean_session) {
variable_header->flags |= MQTT_CONNECT_FLAG_CLEAN_SESSION; variable_header->flags |= MQTT_CONNECT_FLAG_CLEAN_SESSION;
}
if (info->client_id != NULL && info->client_id[0] != '\0') if (info->client_id != NULL && info->client_id[0] != '\0') {
{ if (append_string(connection, info->client_id, strlen(info->client_id)) < 0) {
if (append_string(connection, info->client_id, strlen(info->client_id)) < 0)
return fail_message(connection); return fail_message(connection);
} }
else } else {
return fail_message(connection); return fail_message(connection);
}
if (info->will_topic != NULL && info->will_topic[0] != '\0') if (info->will_topic != NULL && info->will_topic[0] != '\0') {
{ if (append_string(connection, info->will_topic, strlen(info->will_topic)) < 0) {
if (append_string(connection, info->will_topic, strlen(info->will_topic)) < 0)
return fail_message(connection); return fail_message(connection);
}
if (append_string(connection, info->will_message, info->will_length) < 0) if (append_string(connection, info->will_message, info->will_length) < 0) {
return fail_message(connection); return fail_message(connection);
}
variable_header->flags |= MQTT_CONNECT_FLAG_WILL; variable_header->flags |= MQTT_CONNECT_FLAG_WILL;
if (info->will_retain) if (info->will_retain) {
variable_header->flags |= MQTT_CONNECT_FLAG_WILL_RETAIN; variable_header->flags |= MQTT_CONNECT_FLAG_WILL_RETAIN;
}
variable_header->flags |= (info->will_qos & 3) << 3; variable_header->flags |= (info->will_qos & 3) << 3;
} }
if (info->username != NULL && info->username[0] != '\0') if (info->username != NULL && info->username[0] != '\0') {
{ if (append_string(connection, info->username, strlen(info->username)) < 0) {
if (append_string(connection, info->username, strlen(info->username)) < 0)
return fail_message(connection); return fail_message(connection);
}
variable_header->flags |= MQTT_CONNECT_FLAG_USERNAME; variable_header->flags |= MQTT_CONNECT_FLAG_USERNAME;
} }
if (info->password != NULL && info->password[0] != '\0') if (info->password != NULL && info->password[0] != '\0') {
{ if (append_string(connection, info->password, strlen(info->password)) < 0) {
if (append_string(connection, info->password, strlen(info->password)) < 0)
return fail_message(connection); return fail_message(connection);
}
variable_header->flags |= MQTT_CONNECT_FLAG_PASSWORD; variable_header->flags |= MQTT_CONNECT_FLAG_PASSWORD;
} }
@@ -414,23 +418,25 @@ mqtt_message_t* mqtt_msg_connect(mqtt_connection_t* connection, mqtt_connect_inf
return fini_message(connection, MQTT_MSG_TYPE_CONNECT, 0, 0, 0); return fini_message(connection, MQTT_MSG_TYPE_CONNECT, 0, 0, 0);
} }
mqtt_message_t* mqtt_msg_publish(mqtt_connection_t* connection, const char* topic, const char* data, int data_length, int qos, int retain, uint16_t* message_id) mqtt_message_t *mqtt_msg_publish(mqtt_connection_t *connection, const char *topic, const char *data, int data_length, int qos, int retain, uint16_t *message_id)
{ {
init_message(connection); init_message(connection);
if (topic == NULL || topic[0] == '\0') if (topic == NULL || topic[0] == '\0') {
return fail_message(connection);
if (append_string(connection, topic, strlen(topic)) < 0)
return fail_message(connection);
if (qos > 0)
{
if ((*message_id = append_message_id(connection, 0)) == 0)
return fail_message(connection); return fail_message(connection);
} }
else
if (append_string(connection, topic, strlen(topic)) < 0) {
return fail_message(connection);
}
if (qos > 0) {
if ((*message_id = append_message_id(connection, 0)) == 0) {
return fail_message(connection);
}
} else {
*message_id = 0; *message_id = 0;
}
if (connection->message.length + data_length > connection->buffer_length) { if (connection->message.length + data_length > connection->buffer_length) {
// Not enough size in buffer -> fragment this message // Not enough size in buffer -> fragment this message
@@ -446,87 +452,98 @@ mqtt_message_t* mqtt_msg_publish(mqtt_connection_t* connection, const char* topi
return fini_message(connection, MQTT_MSG_TYPE_PUBLISH, 0, qos, retain); return fini_message(connection, MQTT_MSG_TYPE_PUBLISH, 0, qos, retain);
} }
mqtt_message_t* mqtt_msg_puback(mqtt_connection_t* connection, uint16_t message_id) mqtt_message_t *mqtt_msg_puback(mqtt_connection_t *connection, uint16_t message_id)
{ {
init_message(connection); init_message(connection);
if (append_message_id(connection, message_id) == 0) if (append_message_id(connection, message_id) == 0) {
return fail_message(connection); return fail_message(connection);
}
return fini_message(connection, MQTT_MSG_TYPE_PUBACK, 0, 0, 0); return fini_message(connection, MQTT_MSG_TYPE_PUBACK, 0, 0, 0);
} }
mqtt_message_t* mqtt_msg_pubrec(mqtt_connection_t* connection, uint16_t message_id) mqtt_message_t *mqtt_msg_pubrec(mqtt_connection_t *connection, uint16_t message_id)
{ {
init_message(connection); init_message(connection);
if (append_message_id(connection, message_id) == 0) if (append_message_id(connection, message_id) == 0) {
return fail_message(connection); return fail_message(connection);
}
return fini_message(connection, MQTT_MSG_TYPE_PUBREC, 0, 0, 0); return fini_message(connection, MQTT_MSG_TYPE_PUBREC, 0, 0, 0);
} }
mqtt_message_t* mqtt_msg_pubrel(mqtt_connection_t* connection, uint16_t message_id) mqtt_message_t *mqtt_msg_pubrel(mqtt_connection_t *connection, uint16_t message_id)
{ {
init_message(connection); init_message(connection);
if (append_message_id(connection, message_id) == 0) if (append_message_id(connection, message_id) == 0) {
return fail_message(connection); return fail_message(connection);
}
return fini_message(connection, MQTT_MSG_TYPE_PUBREL, 0, 1, 0); return fini_message(connection, MQTT_MSG_TYPE_PUBREL, 0, 1, 0);
} }
mqtt_message_t* mqtt_msg_pubcomp(mqtt_connection_t* connection, uint16_t message_id) mqtt_message_t *mqtt_msg_pubcomp(mqtt_connection_t *connection, uint16_t message_id)
{ {
init_message(connection); init_message(connection);
if (append_message_id(connection, message_id) == 0) if (append_message_id(connection, message_id) == 0) {
return fail_message(connection); return fail_message(connection);
}
return fini_message(connection, MQTT_MSG_TYPE_PUBCOMP, 0, 0, 0); return fini_message(connection, MQTT_MSG_TYPE_PUBCOMP, 0, 0, 0);
} }
mqtt_message_t* mqtt_msg_subscribe(mqtt_connection_t* connection, const char* topic, int qos, uint16_t* message_id) mqtt_message_t *mqtt_msg_subscribe(mqtt_connection_t *connection, const char *topic, int qos, uint16_t *message_id)
{ {
init_message(connection); init_message(connection);
if (topic == NULL || topic[0] == '\0') if (topic == NULL || topic[0] == '\0') {
return fail_message(connection); return fail_message(connection);
}
if ((*message_id = append_message_id(connection, 0)) == 0) if ((*message_id = append_message_id(connection, 0)) == 0) {
return fail_message(connection); return fail_message(connection);
}
if (append_string(connection, topic, strlen(topic)) < 0) if (append_string(connection, topic, strlen(topic)) < 0) {
return fail_message(connection); return fail_message(connection);
}
if (connection->message.length + 1 > connection->buffer_length) if (connection->message.length + 1 > connection->buffer_length) {
return fail_message(connection); return fail_message(connection);
}
connection->buffer[connection->message.length++] = qos; connection->buffer[connection->message.length++] = qos;
return fini_message(connection, MQTT_MSG_TYPE_SUBSCRIBE, 0, 1, 0); return fini_message(connection, MQTT_MSG_TYPE_SUBSCRIBE, 0, 1, 0);
} }
mqtt_message_t* mqtt_msg_unsubscribe(mqtt_connection_t* connection, const char* topic, uint16_t* message_id) mqtt_message_t *mqtt_msg_unsubscribe(mqtt_connection_t *connection, const char *topic, uint16_t *message_id)
{ {
init_message(connection); init_message(connection);
if (topic == NULL || topic[0] == '\0') if (topic == NULL || topic[0] == '\0') {
return fail_message(connection); return fail_message(connection);
}
if ((*message_id = append_message_id(connection, 0)) == 0) if ((*message_id = append_message_id(connection, 0)) == 0) {
return fail_message(connection); return fail_message(connection);
}
if (append_string(connection, topic, strlen(topic)) < 0) if (append_string(connection, topic, strlen(topic)) < 0) {
return fail_message(connection); return fail_message(connection);
}
return fini_message(connection, MQTT_MSG_TYPE_UNSUBSCRIBE, 0, 1, 0); return fini_message(connection, MQTT_MSG_TYPE_UNSUBSCRIBE, 0, 1, 0);
} }
mqtt_message_t* mqtt_msg_pingreq(mqtt_connection_t* connection) mqtt_message_t *mqtt_msg_pingreq(mqtt_connection_t *connection)
{ {
init_message(connection); init_message(connection);
return fini_message(connection, MQTT_MSG_TYPE_PINGREQ, 0, 0, 0); return fini_message(connection, MQTT_MSG_TYPE_PINGREQ, 0, 0, 0);
} }
mqtt_message_t* mqtt_msg_pingresp(mqtt_connection_t* connection) mqtt_message_t *mqtt_msg_pingresp(mqtt_connection_t *connection)
{ {
init_message(connection); init_message(connection);
return fini_message(connection, MQTT_MSG_TYPE_PINGRESP, 0, 0, 0); return fini_message(connection, MQTT_MSG_TYPE_PINGRESP, 0, 0, 0);
} }
mqtt_message_t* mqtt_msg_disconnect(mqtt_connection_t* connection) mqtt_message_t *mqtt_msg_disconnect(mqtt_connection_t *connection)
{ {
init_message(connection); init_message(connection);
return fini_message(connection, MQTT_MSG_TYPE_DISCONNECT, 0, 0, 0); return fini_message(connection, MQTT_MSG_TYPE_DISCONNECT, 0, 0, 0);
@@ -536,15 +553,14 @@ mqtt_message_t* mqtt_msg_disconnect(mqtt_connection_t* connection)
* check flags: [MQTT-2.2.2-1], [MQTT-2.2.2-2] * check flags: [MQTT-2.2.2-1], [MQTT-2.2.2-2]
* returns 0 if flags are invalid, otherwise returns 1 * returns 0 if flags are invalid, otherwise returns 1
*/ */
int mqtt_has_valid_msg_hdr(uint8_t* buffer, uint16_t length) int mqtt_has_valid_msg_hdr(uint8_t *buffer, uint16_t length)
{ {
int qos, dup; int qos, dup;
if (length < 1) { if (length < 1) {
return 0; return 0;
} }
switch (mqtt_get_type(buffer)) switch (mqtt_get_type(buffer)) {
{
case MQTT_MSG_TYPE_CONNECT: case MQTT_MSG_TYPE_CONNECT:
case MQTT_MSG_TYPE_CONNACK: case MQTT_MSG_TYPE_CONNACK:
case MQTT_MSG_TYPE_PUBACK: case MQTT_MSG_TYPE_PUBACK:

View File

@@ -49,7 +49,7 @@ outbox_item_handle_t outbox_enqueue(outbox_handle_t outbox, outbox_message_handl
}); });
memcpy(item->buffer, message->data, message->len); memcpy(item->buffer, message->data, message->len);
if (message->remaining_data) { if (message->remaining_data) {
memcpy(item->buffer+message->len, message->remaining_data, message->remaining_len); memcpy(item->buffer + message->len, message->remaining_data, message->remaining_len);
} }
STAILQ_INSERT_TAIL(outbox, item, next); STAILQ_INSERT_TAIL(outbox, item, next);
ESP_LOGD(TAG, "ENQUEUE msgid=%d, msg_type=%d, len=%d, size=%d", message->msg_id, message->msg_type, message->len + message->remaining_len, outbox_get_size(outbox)); ESP_LOGD(TAG, "ENQUEUE msgid=%d, msg_type=%d, len=%d, size=%d", message->msg_id, message->msg_type, message->len + message->remaining_len, outbox_get_size(outbox));
@@ -81,14 +81,14 @@ outbox_item_handle_t outbox_dequeue(outbox_handle_t outbox, pending_state_t pend
return NULL; return NULL;
} }
uint8_t* outbox_item_get_data(outbox_item_handle_t item, size_t *len, uint16_t *msg_id, int *msg_type, int *qos) uint8_t *outbox_item_get_data(outbox_item_handle_t item, size_t *len, uint16_t *msg_id, int *msg_type, int *qos)
{ {
if (item) { if (item) {
*len = item->len; *len = item->len;
*msg_id = item->msg_id; *msg_id = item->msg_id;
*msg_type = item->msg_type; *msg_type = item->msg_type;
*qos = item->msg_qos; *qos = item->msg_qos;
return (uint8_t*)item->buffer; return (uint8_t *)item->buffer;
} }
return NULL; return NULL;
} }
@@ -97,7 +97,7 @@ esp_err_t outbox_delete(outbox_handle_t outbox, int msg_id, int msg_type)
{ {
outbox_item_handle_t item, tmp; outbox_item_handle_t item, tmp;
STAILQ_FOREACH_SAFE(item, outbox, next, tmp) { STAILQ_FOREACH_SAFE(item, outbox, next, tmp) {
if (item->msg_id == msg_id && (0xFF&(item->msg_type)) == msg_type) { if (item->msg_id == msg_id && (0xFF & (item->msg_type)) == msg_type) {
STAILQ_REMOVE(outbox, item, outbox_item, next); STAILQ_REMOVE(outbox, item, outbox_item, next);
free(item->buffer); free(item->buffer);
free(item); free(item);
@@ -174,7 +174,7 @@ int outbox_get_size(outbox_handle_t outbox)
esp_err_t outbox_cleanup(outbox_handle_t outbox, int max_size) esp_err_t outbox_cleanup(outbox_handle_t outbox, int max_size)
{ {
while(outbox_get_size(outbox) > max_size) { while (outbox_get_size(outbox) > max_size) {
outbox_item_handle_t item = outbox_dequeue(outbox, CONFIRMED, NULL); outbox_item_handle_t item = outbox_dequeue(outbox, CONFIRMED, NULL);
if (item == NULL) { if (item == NULL) {
return ESP_FAIL; return ESP_FAIL;

View File

@@ -21,14 +21,14 @@ char *platform_create_id_string()
int platform_random(int max) int platform_random(int max)
{ {
return esp_random()%max; return esp_random() % max;
} }
long long platform_tick_get_ms() long long platform_tick_get_ms()
{ {
struct timeval te; struct timeval te;
gettimeofday(&te, NULL); // get current time gettimeofday(&te, NULL); // get current time
long long milliseconds = te.tv_sec*1000LL + te.tv_usec/1000; // calculate milliseconds long long milliseconds = te.tv_sec * 1000LL + te.tv_usec / 1000; // calculate milliseconds
// printf("milliseconds: %lld\n", milliseconds); // printf("milliseconds: %lld\n", milliseconds);
return milliseconds; return milliseconds;
} }

View File

@@ -27,8 +27,7 @@
static const char *TAG = "MQTT_CLIENT"; static const char *TAG = "MQTT_CLIENT";
typedef struct mqtt_state typedef struct mqtt_state {
{
mqtt_connect_info_t *connect_info; mqtt_connect_info_t *connect_info;
uint8_t *in_buffer; uint8_t *in_buffer;
uint8_t *out_buffer; uint8_t *out_buffer;
@@ -491,7 +490,7 @@ esp_err_t esp_mqtt_client_set_uri(esp_mqtt_client_handle_t client, const char *u
} }
if (puri.field_data[UF_PORT].len) { if (puri.field_data[UF_PORT].len) {
client->config->port = strtol((const char*)(uri + puri.field_data[UF_PORT].off), NULL, 10); client->config->port = strtol((const char *)(uri + puri.field_data[UF_PORT].off), NULL, 10);
} }
char *user_info = create_string(uri + puri.field_data[UF_USERINFO].off, puri.field_data[UF_USERINFO].len); char *user_info = create_string(uri + puri.field_data[UF_USERINFO].off, puri.field_data[UF_USERINFO].len);
@@ -564,7 +563,7 @@ static esp_err_t deliver_publish(esp_mqtt_client_handle_t client)
// get payload // get payload
msg_data = mqtt_get_publish_data(msg_buf, &msg_data_len); msg_data = mqtt_get_publish_data(msg_buf, &msg_data_len);
if(msg_data_len > 0 && msg_data == NULL) { if (msg_data_len > 0 && msg_data == NULL) {
ESP_LOGE(TAG, "%s: mqtt_get_publish_data() failed", __func__); ESP_LOGE(TAG, "%s: mqtt_get_publish_data() failed", __func__);
return ESP_FAIL; return ESP_FAIL;
} }
@@ -589,7 +588,7 @@ post_data_event:
size_t buf_len = client->mqtt_state.in_buffer_length; size_t buf_len = client->mqtt_state.in_buffer_length;
esp_transport_handle_t transport = esp_transport_get_payload_transport_handle(client->transport); esp_transport_handle_t transport = esp_transport_get_payload_transport_handle(client->transport);
msg_data = (char*)client->mqtt_state.in_buffer; msg_data = (char *)client->mqtt_state.in_buffer;
msg_topic = NULL; msg_topic = NULL;
msg_topic_len = 0; msg_topic_len = 0;
msg_data_offset += msg_data_len; msg_data_offset += msg_data_len;
@@ -758,8 +757,8 @@ static int mqtt_message_receive(esp_mqtt_client_handle_t client, int read_poll_t
} }
} }
int topic_len = client->mqtt_state.in_buffer[fixed_header_len] << 8; int topic_len = client->mqtt_state.in_buffer[fixed_header_len] << 8;
topic_len |= client->mqtt_state.in_buffer[fixed_header_len+1]; topic_len |= client->mqtt_state.in_buffer[fixed_header_len + 1];
total_len = fixed_header_len + topic_len + (mqtt_get_qos(client->mqtt_state.in_buffer)>0?2:0); total_len = fixed_header_len + topic_len + (mqtt_get_qos(client->mqtt_state.in_buffer) > 0 ? 2 : 0);
ESP_LOGD(TAG, "%s: total len modified to %d as message longer than input buffer", __func__, total_len); ESP_LOGD(TAG, "%s: total len modified to %d as message longer than input buffer", __func__, total_len);
if (client->mqtt_state.in_buffer_length < total_len) { if (client->mqtt_state.in_buffer_length < total_len) {
ESP_LOGE(TAG, "%s: message is too big, insufficient buffer size", __func__); ESP_LOGE(TAG, "%s: message is too big, insufficient buffer size", __func__);
@@ -822,8 +821,7 @@ static esp_err_t mqtt_process_receive(esp_mqtt_client_handle_t client)
ESP_LOGD(TAG, "msg_type=%d, msg_id=%d", msg_type, msg_id); ESP_LOGD(TAG, "msg_type=%d, msg_id=%d", msg_type, msg_id);
switch (msg_type) switch (msg_type) {
{
case MQTT_MSG_TYPE_SUBACK: case MQTT_MSG_TYPE_SUBACK:
if (is_valid_mqtt_msg(client, MQTT_MSG_TYPE_SUBSCRIBE, msg_id)) { if (is_valid_mqtt_msg(client, MQTT_MSG_TYPE_SUBSCRIBE, msg_id)) {
ESP_LOGD(TAG, "Subscribe successful"); ESP_LOGD(TAG, "Subscribe successful");
@@ -846,8 +844,7 @@ static esp_err_t mqtt_process_receive(esp_mqtt_client_handle_t client)
} }
if (msg_qos == 1) { if (msg_qos == 1) {
client->mqtt_state.outbound_message = mqtt_msg_puback(&client->mqtt_state.mqtt_connection, msg_id); client->mqtt_state.outbound_message = mqtt_msg_puback(&client->mqtt_state.mqtt_connection, msg_id);
} } else if (msg_qos == 2) {
else if (msg_qos == 2) {
client->mqtt_state.outbound_message = mqtt_msg_pubrec(&client->mqtt_state.mqtt_connection, msg_id); client->mqtt_state.outbound_message = mqtt_msg_pubrec(&client->mqtt_state.mqtt_connection, msg_id);
} }
@@ -903,7 +900,7 @@ static esp_err_t mqtt_resend_queued(esp_mqtt_client_handle_t client, outbox_item
client->mqtt_state.outbound_message->data = outbox_item_get_data(item, &client->mqtt_state.outbound_message->length, &client->mqtt_state.pending_msg_id, client->mqtt_state.outbound_message->data = outbox_item_get_data(item, &client->mqtt_state.outbound_message->length, &client->mqtt_state.pending_msg_id,
&client->mqtt_state.pending_msg_type, &client->mqtt_state.pending_publish_qos); &client->mqtt_state.pending_msg_type, &client->mqtt_state.pending_publish_qos);
// set duplicate flag for QoS-2 message // set duplicate flag for QoS-2 message
if (client->mqtt_state.pending_msg_type == MQTT_MSG_TYPE_PUBLISH &&client->mqtt_state.pending_publish_qos==2) { if (client->mqtt_state.pending_msg_type == MQTT_MSG_TYPE_PUBLISH && client->mqtt_state.pending_publish_qos == 2) {
mqtt_set_dup(client->mqtt_state.outbound_message->data); mqtt_set_dup(client->mqtt_state.outbound_message->data);
} }
@@ -995,7 +992,7 @@ static void esp_mqtt_task(void *pv)
if (platform_tick_get_ms() - client->keepalive_tick > client->connect_info.keepalive * 1000 / 2) { if (platform_tick_get_ms() - client->keepalive_tick > client->connect_info.keepalive * 1000 / 2) {
//No ping resp from last ping => Disconnected //No ping resp from last ping => Disconnected
if(client->wait_for_ping_resp){ if (client->wait_for_ping_resp) {
ESP_LOGE(TAG, "No PING_RESP, disconnected"); ESP_LOGE(TAG, "No PING_RESP, disconnected");
esp_mqtt_abort_connection(client); esp_mqtt_abort_connection(client);
client->wait_for_ping_resp = false; client->wait_for_ping_resp = false;
@@ -1247,7 +1244,7 @@ int esp_mqtt_client_publish(esp_mqtt_client_handle_t client, const char *topic,
current_data += data_sent; current_data += data_sent;
if (remaining_len > 0) { if (remaining_len > 0) {
mqtt_connection_t* connection = &client->mqtt_state.mqtt_connection; mqtt_connection_t *connection = &client->mqtt_state.mqtt_connection;
ESP_LOGD(TAG, "Sending fragmented message, remains to send %d bytes of %d", remaining_len, len); ESP_LOGD(TAG, "Sending fragmented message, remains to send %d bytes of %d", remaining_len, len);
if (connection->message.fragmented_msg_data_offset) { if (connection->message.fragmented_msg_data_offset) {
// asked to enqueue oversized message (first time only) // asked to enqueue oversized message (first time only)
@@ -1255,7 +1252,7 @@ int esp_mqtt_client_publish(esp_mqtt_client_handle_t client, const char *topic,
connection->message.fragmented_msg_total_length = 0; connection->message.fragmented_msg_total_length = 0;
if (qos > 0) { if (qos > 0) {
// internally enqueue all big messages, as they dont fit 'pending msg' structure // internally enqueue all big messages, as they dont fit 'pending msg' structure
mqtt_enqueue_oversized(client, (uint8_t*)current_data, remaining_len); mqtt_enqueue_oversized(client, (uint8_t *)current_data, remaining_len);
} }
} }