eclipse-threadx / netxduo

Eclipse ThreadX - NetXDuo is an advanced, industrial-grade TCP/IP network stack designed specifically for deeply embedded real-time and IoT applications
https://github.com/eclipse-threadx/rtos-docs/blob/main/rtos-docs/netx-duo/index.md
MIT License
230 stars 131 forks source link

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

Open EdouardMALOT opened 2 months ago

EdouardMALOT commented 2 months ago

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.

hwmaier commented 2 months ago

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.

EdouardMALOT commented 2 months ago

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