netxduo icon indicating copy to clipboard operation
netxduo copied to clipboard

MQTT / nxd_mqtt_client_message_get() : Release packet if topic or message is bigger than destination buffer

Open EdouardMALOT opened this issue 1 year ago • 2 comments
trafficstars

When configuring the MQTT client to subscribe to a topic, we receive payloads of unknown size.

To read the MQTT message (and release the received TCP packet), we must use nxd_mqtt_client_message_get() with the buffer and buffer size as arguments.

If the received message (payload or topic) is larger than the user buffer, this function returns an error but does not release the TCP packet. This can cause an endless issue where the client cannot receive any more messages (nxd_mqtt_client_message_get() always responds with an error without releasing the TCP packet).

In this pull request, the received packet is released if the destination buffer is too small. This way, messages that are too large are rejected (the user is informed with the return value NXD_MQTT_INSUFFICIENT_BUFFER_SPACE), and the user can continue to receive smaller messages later.

EdouardMALOT avatar Apr 10 '24 08:04 EdouardMALOT

Hi @EdouardMALOT, Please refer to my previous PR https://github.com/eclipse-threadx/netxduo/pull/14 which is related and there is already some discussion how to deal with buffers and messages staying in the TX queue.

hwmaier avatar Apr 10 '24 08:04 hwmaier

This issue is also discussed with another approach here: #14

EdouardMALOT avatar Apr 10 '24 08:04 EdouardMALOT