Below you will find the wolfMQTT ChangeLog documenting the changes that took place with each release of wolfMQTT since the project’s beginning in 2015.
- Fix for publish with short topic name and example. (PR #169)
- Add MqttProps_ShutDown(). Fix MqttProp leaks(PR #167)
- Multithread fixes. (PR #166)
- Fix buffer overrun in strcpy(). Fix logic around getaddrinfo(). (PR #165)
- Fix MqttClient_WaitType for nonblock mode. (PR #164)
- Change anon union for ARMv6 error. (PR #163)
- Fix for publish large payload. (PR #162)
- Fixing LWT prop and allow null LWT. (PR #161)
- Fix for receive timeout in mqttsimple example. (PR #158)
- Fixes to improve buffer size checking when using a small tx or rx buffer. (PR #137)
- Fix for MQTT v5 issue with using wrong property free. (PR #152)
- Refactor of the thread locking to use binary semaphore, which resolves issue with thread synchronization. (PR #146)
- Improved multi-thread example exit (ctrl+c). Use internal pipe to wake "select()" and use semaphore signal to "wake" ping thread. (PR #146)
- Adjust multi-threading use case to use separate thread for ping keep-alive. (PR #146)
- Added simple standalone MQTT client example. (PR #138)
- Added include for "user_settings.h" when `WOLFMQTT_USER_SETTINGS` is defined. (PR #138)
- Added broker compatibility list (PR #145)
- Added protocol version API's. (PR #152)
- Added multithread example for Windows and Visual Studio. (PR #146)
- Made protocol level a run time option (PR #147)
- Remove obsolete "sched_yield" call. (PR #146)
- Remove deprecated call to `wolfSSL_set_using_nonblock()` (PR #148)
- Sync automake fixes from wolfSSL to wolfMQTT. (PR #150)
- Moved `MAX_PACKET_ID` to library. (PR #138)
- Fixes for non-blocking and multi-threading edge cases. (PR #130)
- Improved logic for processing objects from different threads.
- Improved network connect/read to handle runtime option for block/non-block.
- Improved examples to support adding random hex string to client_id and topic name when "-T" option is used.
- Fix for test scripts to check non-zero return code.
- Enabled the mqttclient, multithread and wiot examples when non-blocking is enabled.
- Added encode debug log messages when
- Added thread logging when
WOLFMQTT_DEBUG_THREADis defined with multi-threading support enabled.
- Fixes for Visual Studio project (PR #122)
- Improvements to catch use of socket file descriptor before its been created/opened.
- Improved handling for Windows socket want write.
- Added library references to wolfSSL project.
- Adjusted include to have IDE/WIN for user_settings.h.
- Fixes for Visual Studio conversion warning (PR #128)
- Fix visibility warnings in Cygwin (PR #127)
- Fix global declaration conflicts for CentOS (PR #133)
- Fix Microchip Harmony for
mqtt_socket.cwith non-blocking and
- Fix to not return from
MqttClient_WaitMessageif response from another thread (PR #129)
- Refactor of the multi-threading code to better handle edge case and state for non-blocking (PR #126)
- Fixes for multi-thread handling of ack's when processing.
- Refactor to use
statfrom own struct, not shared
- Eliminated use of
- Fixes to restore "state" after performing MqttClient operation.
- Refactor of publish read and write payload.
- Improvements to multithread example.
- Refactor of the SN code to support new object type and unique state for future multi-thread support.
- Added build option
TEST_NONBLOCKto force testing non-blocking edge cases.
- Fix for fwpush getting stuck in stop loop on Ctrl+c exit.
- Update Azure login and default broker (PR #131)
- Fix `fwpush` example to use filename option `-f`. (PR #117)
- Added multiple thread support using `--enable-mt` or `WOLFMQTT_MULTITHREAD`. (PR #115)
- Fix for `MQTT_DATA_TYPE_BINARY` data length encoded twice. (PR #112)
- Fix to clear local structures for subscribe and unsubscribe ACK's. (PR #112)
- Fix for `SN_Encode_Unsubscribe` using wrong data type for topic name ID. (PR #110)
- Add `WOLFSSL_USER_SETTINGS` to VS project files. (PR #109)
- Fixes for using RTCS in `mqttnet.c` socket example code. (PR #108)
- Fix MQTT-SN decode publish parsing and QoS2 response. (PR #107)
- Make MqttSocket_TlsSocket callbacks public. (PR #104)
- Improved the disconnect network error callback example. (PR #102)
- Add MQTT context information to socket callback examples. (PR #101)
- Initialize subscribe state to `MQTT_MSG_BEGIN`. (PR #99)
- Fix for Harmony possible circular include issue. (PR #98)
- Added MQTT Sensor Network (SN) client support (
- Added MQTT v5.0 support with (
- Added property callback support (MQTT v5.0 only). Enabled with
- Fix for Harmony NetConnect function incorrectly checking
EWOULDBLOCK. Fixes issue #88.
- Fix to reset the TLS ctx and ssl pointers when they have been free'd.
- Add way to pass custom context to the wolfMQTT TLS verify callback example
- Create nonblocking mqttclient example
- Add support for publishing in smaller chunks using new API
- Added simplified Microchip Harmony wolfMQTT network callback example.
Version 1.1.0 of wolfMQTT contains bug fixes and new features including:
- Fixed case when `use_tls` was requested but TLS feature not compiled in. (PR #57)
- Fixed non-blocking issue that caused out of buffer error if not all of packet were received. (PR #65)
- Fixed non-blocking mode issue that was sending multiple connect requests for examples. (PR #65)
- Fixed non-blocking issue with ping keep alive in examples. (PR #68)
- Fixed the Arduino example with `ENABLE_MQTT_TLS` defined (PR #78)
- Added support for FreeRTOS TCP in wolfMQTT. (PR #58)
- Added `README.md` section for building wolfMQTT. (PR #63)
- Added new option to enable verbose logging `./configure --enable-debug=verbose`. (PR #65)
- Added support for disconnect callback using `WOLFMQTT_DISCONNECT_CB` or `./configure --enable-discb`. (PR #69)
- Added `WOLFMQTT_LOCAL` to internal API's for hidden visibility. (PR #73)
- Added include for `wolfmqtt/options.h`. (PR #79)
- Added IBM Watson IoT example (see `./examples/wiot/wiot`). (PR #80)
- Updated the autoconf M4 files and added generation of `./configure` options to `wolfmqtt/options.h`. (PR #71)
- Improved the message callback to support a custom context per message. (PR #62)
- Improved the non-blocking unsubscribe handling in mqttclient example for timeout. (PR #65)
Version 1.0.0 of wolfMQTT contains bug fixes and new features including:
- Fixed `MqttClient_WaitMessage` to use provided `timeout_ms` arg. With TLS enabled it was using the `MqttClient_Init` `cmd_timeout_ms` arg. Thanks PeterL for that report.
- Fixed cast warnings when building with Visual Studio.
- Cleanup socket code to use existing `SOCK_CLOSE` for `NetDisconnect`.
- Cleanup to move the `sockRc` into the `MqttTls` struct, since it only applies when TLS is enabled.
- Added configure option to disable error strings for reduced code size (`./configure disable-errorstrings` or `#define WOLFMQTT_NO_ERROR_STRINGS`).
- Added support for ChibiOS.
Version 0.14.0 of wolfMQTT contains bug fixes and new features including:
- Fixed non-blocking connect to check for `EINPROGRESS` for all platforms (not just Harmony)
- Fixed buffer overflow position check on read/write
- Fixed typo on internal packet function `MqttDecode_ConnectAck`
- Fixed the socket close for Harmony to use `closesocket`
- Fixed non-blocking connect where `WOLFMQTT_NO_STDIO` is defined
- Fixed GCC 7's new fall-through check
- Added check for EAGAIN in non-blocking mode (was only EWOULDBLOCK)
- Added non-blocking support for write operations when `WOLFMQTT_NONBLOCK` is defined
- Added support for DH and setting the default minimum key bits
- Added support for keep-alive ping when using non-blocking mode
- Improvements to example TLS callback handling of return code failures
- Improvements and fixes to Visual Studio projects
- Enhancement to adjust wolfSSL options.h include based on `WOLFSSL_USER_SETTINGS`.
Version 0.13.0 of wolfMQTT contains bug fixes and new features including:
- Fixed issue with `msg->stat` in non-blocking.
- Fixed Arduino library build.
- Fixed examples with non-blocking (--enable-nonblock).
- Enhancement to pass network callback return codes through context when using TLS.
- Added option to disable the blocking timeouts for `select()` using `--disable-timeout` (or `WOLFMQTT_NO_TIMEOUT`).
- Added option to disable STDIN/fgets capture for examples using `--disable-stdincap` (or `WOLFMQTT_NO_STDIN_CAP`)
Refactor to use new `MQTT_CODE_STDIN_WAKE` return code for examples using STDIN to send publish messages (normal blocking mode only).
Version 0.12 of wolfMQTT contains bug fixes and new features including:
- Fixes issue with read timeout in non-blocking mode with TLS enabled being teated as socket error.
- Fixed issue with “msg->stat” not getting reset on failure or timeout.
- Fix to not link libwolfssl with ./configure --disable-tls.
- Added AWS IoT Example and test script.
Version 0.10 of wolfMQTT contains bug fixes and new features including:
- Enabled big endian support.
- Fixes for building with Visual Studio.
Version 0.8 of wolfMQTT contains bug fixes and new features including:
- Fixed stdin capture bug and improved signal (ctrl+c) handling.
- Added Azure IoT hub MQTT client example.
- Added support for MQX / RTCS.
- Added "--disable-tls" and "--disable-examples" configure options.
- Added comment about max packet size.
- Added example for how to load a client certificate to mqttclient example.
- Added return code for firmware and azure examples that are not compiled in due to older / incompatible version of wolfSSL.
- Moved the support for custom printf/line endings into the mqtt_types.h for use throughout the project.
- Updated README.md with information about the examples.
Version 0.6 of wolfMQTT contains bug fixes and new features including:
- Fixes to support MinGW compiler.
- Fixed bug with include of the wolfSSL include of options.h.
- Fix to properly handle negative return code from wc_SignatureGetSize.
- Added Arduino IDE example in `IDE/ARDUINO`. See `IDE/ARDUINOREADME.md` for details.
- Added example UART interface for wolfMQTT. See `examples/mqttuart.c`.
- Added the ability to pass additional arguments to the scripts. Example: `./scripts/client.test "-h localhost"`
Version 0.4 of wolfMQTT contains bug fixes and new features including:
- Fixed bug with subscribe not populating acknowledgment return code(s) properly.
- Fixed build error if using wolfSSL 3.7.1 or older due to missing signature.c/.h wrappers. This fix disables the firmware examples if the wolfSSL version isn't greater than 3.7.1.
- Fix to ensure `topic_name` pointer is reset when publish callback message is not new `msg_new = 0`.
- Fixes to suppress possible warning "Value stored to  is never read".
- Fixed firmware example to trap case where file isn't found.
- Fixed possible ./autogen.sh error with missing "config.rpath".
- Fixed Windows issue with SetConsoleCtrlHandler incorrectly reporting error.
- Fixed issue with Visual Studio 2015 wolfssl.lib reference.
- Fixed build errors with G++ (./configure CC=g++).
- Fixed "FirmwareHeader" to use WOLFMQTT_PACK macro.
- Added helper macro's and comments for topic names/filters.
- Added TLS certification verification reference implementation to examples.
- Updated the topic names in examples to use "wolfMQTT/example/".
- Added QoS level to example console output.
- Added memset to initialize some of the example stack variables.
- Removed the LWT from the firmware examples.
- Added retain flag "-r" option on the "fwpush" example.
- Updated the examples to use macros for all memory and string functions, so they are more portable.
- Added Visual Studio projects for "fwpush" and "fwclient".
Version 0.3 of wolfMQTT contains bug fixes and new features including:
- Fixes bug with first byte of payload being null'd if QoS level was 0.
- Fixed issue with stdint types (uint#_t) being used.
- Fixes for remaining length encoding/decoding for large packets.
- Added support for large payloads using new message callback flags `msg_done` and `msg_new` along with MqttMessage `buffer_pos` and `buffer_len`.
- Added example for secure firmware upgrade. Uses the MQTT client library to push a signed payload `fwpush` to a broker, then uses another client `fwclient` to receive the signed payload and verify its signature using a provided public key.
This is the first release of wolfMQTT.
Please see the README included in the wolfMQTT download for build instructions and API reference.