wolfMQTT/ChangeLog.md

505 lines
28 KiB
Markdown

## Release Notes
### v2.0.0 (03/20/2026)
Release 2.0.0 has been developed according to wolfSSL's development and QA
process (see link below) and successfully passed the quality criteria.
https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
* New Features
- Lightweight MQTT Broker — New built-in MQTT broker implementation (#457)
- MQTT v3.1.1 spec compliance checks (#462)
- Secure and non-secure port listening support (#465)
- WebSocket transport support (#466)
- wolfIP (embedded TCP/IP stack) support (#463)
- Retained messages, session persistence, graceful disconnect, QoS subscription updates (#465)
- libFuzzer-based broker fuzzing infrastructure (#474)
- wolfIP Integration — Added wolfIP support for both MQTT client and broker (#463)
- lastError Field — Preserve TLS error code via new lastError in the network context (#458)
* Bug Fixes
- Fix race condition in wm_SemLock (#475)
- Fix wildcard topic matching (#472)
- Fix LWT (Last Will and Testament) length checks and payload free issues (#472, #473)
- Fix subAck buffer size check and topic count validation (#472)
- Fix MqttPacket_Write failure return handling (#473)
- Fix MQTT-SN: null pointer dereference, non-blocking read, encode/decode issues (#473)
- Fix MqttDecode_Auth reason code issue (#473)
- Fix broker client connect status check (#472)
- Fix SN_Client_WaitType issues (#456)
- Fix curl transport: use internal loops for partial read/write handling (#459)
* Security Hardening
- Add overflow checks in network and socket IO (#467)
- Add checks for negative return values in MqttDecode_String calls (#467)
- Add encoding error checks (#467)
- Add remain_len validation check (#471)
- Static analysis fixes for MqttClient_Auth, MqttProps_Add, MqttDecode_SubscribeAck, MqttDecode_Props (#469)
- Static analysis fixes for SN_Decode_Register, SN_Decode_GWInfo, SN_Client_WillTopicUpdate, SN_Encode_Publish, SN_Encode_RegAck, SN_Client_Connect (#468)
- Add debug warning when using VERIFY_NONE (#475)
* CI / Testing
- Add CI workflows for codespell, multi-compiler, and sanitizer tests (#470)
- Add Coverity workflow schedule (#450, #451)
- Add WebSocket broker configurations to CI (#466)
- Expanded broker edge case testing (#465)
- Improved broker test execution speed (#465)
* Other
- Updated client certificates (#455)
- Added wolfSSL as submodule option (#452)
### v1.21.0 (12/03/2025)
Release 1.21.0 has been developed according to wolfSSL's development and QA
process (see link below) and successfully passed the quality criteria.
https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
* Add port for NETX use by @JacobBarthelmeh in #427
* Fix heap buffer overflow in MqttDecode_Num with bounds checking by @embhorn in #430
* Restore instructions for testing against OQS mosquitto integration. by @anhu in #432
* initial threadx test by @JacobBarthelmeh in #429
* Rename ML-KEM hybrids to match IETF Draft. by @anhu in #435
* Update expired test certs by @lealem47 in #441
* Pin to ESP-IDF v5.5, limit workflow push branches, line endings by @gojimmypi in #444
* Fix: MQTT v5 Property-Packet Protocol Validation and Decode Safety by @kaabia in #440
* Fix: Correct state transition check in MqttClient_Auth by @kaabia in #439
* fix: correct variable in MQTT property decode error checks by @kaabia in #445
* Add fflush to mqtt-sub example by @embhorn in #447
* Update license to GPLv3 by @embhorn in #448
### v1.20.0 (05/02/2025)
Release 1.20.0 has been developed according to wolfSSL's development and QA
process (see link below) and successfully passed the quality criteria.
https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
* OQS's Mosquitto is out of date. by @anhu in #417
* Add support for websocket by @embhorn in #418
* Add support for secure websockets by @embhorn in #419
* Add secure ws CI test by @embhorn in #421
* Update examples for latest Managed Components by @gojimmypi in #420
* Improve cmake duplicate component check by @gojimmypi in #422
### v1.19.2 (01/31/2025)
Release 1.19.2 has been developed according to wolfSSL's development and QA
process (see link below) and successfully passed the quality criteria.
https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
* Handle connection error in mqttsimple client by @embhorn in #407
* Fix stat reset for ping response by @embhorn in #414
### v1.19.1 (11/06/2024)
Release 1.19.1 has been developed according to wolfSSL's development and QA process (see link below) and successfully passed the quality criteria.
https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
* wolfssl 5.7.2 time_helper type adjustments for Espressif example by @gojimmypi in #404
* Fix Doxygen issues by @embhorn in #403
### v1.19.0 (3/22/2024)
Release 1.19.0 has been developed according to wolfSSL's development and QA process (see link below) and successfully passed the quality criteria.
https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
* Add stress test. by @philljj in #387
* Add cmake CI test and fix pthread detection by @embhorn in #389
* Initial wolfMQTT Espressif ESP32 template and AWS IoT examples by @gojimmypi in #388
* Add curl test dependencies by @lealem47 in #392
* Improving and fixing typos for STM32CUBE build by @lealem47 in #391
* Fix string prop OOB read by @embhorn in #394
* Fix some Helgrind thread errors with enable-tls, and enable-curl. by @philljj in #396
* Initial Espressif CI; limit Zepher CI by @gojimmypi in #390
* Fix double unlock and double lock in multithread example. by @philljj in #397
* Fix double lock of lockRecv. by @philljj in #398
### v1.18.0 (12/22/2023)
Release 1.18.0 has been developed according to wolfSSL's development and QA process (see link below) and successfully passed the quality criteria.
https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
* Add curl easy socket backend. by @philljj in #380
* WOLFMQTT_EXAMPLE_CERT allowing static or extern cert assignment by @gojimmypi in #354
* Tiny readme cleanup. by @philljj in #381
* Fix high coverity issues by @embhorn in #379
* Add broker check to scripts by @embhorn in #385
* Cmake build fixes by @embhorn in #384
### v1.17.1 (11/29/2023)
Release 1.17.1 has been developed according to wolfSSL's development and QA process (see link below) and successfully passed the quality criteria.
https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
* Include stdint.h in userio_template.h by @lealem47 in #371
* Improvements to multithread locking and tests. by @dgarske in #369
* Cleanup executable status on src files. by @philljj in #372
* Close socket on error in NetConnect by @embhorn in #375
* Fixes for non-blocking with larger payload and improvements to the test and examples by @dgarske in #373
* Add MQTT-SN CI tests by @embhorn in #376
* Fix Wild read in MqttProps_Free by @embhorn in #377
* Fix fuzzer issues in MqttDecode_Props by @embhorn in #378
### v1.17.0 (11/2/2023)
Release 1.17.0 has been developed according to wolfSSL's development and QA process (see link below) and successfully passed the quality criteria.
https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
* Fix for declaration after executable block by @lealem47 in #341
* Add QNX IDE, Makefile, and remove source code exec bit by @JacobBarthelmeh
in #317
* update for cmake after wolfssl added NAMESPACE by @JacobBarthelmeh in #343
* Add mutex protection to MqttClient_NetDisconnect by @embhorn in #342
* Add DTLS support to MQTT-SN client by @embhorn in #348
* Tie zephyr tests to a release by @julek-wolfssl in #350
* add documentation link to README by @gojimmypi in #355
* Possible patch for POSIX conditional wait issue by @dgarske in #356
* Fix publish with topic ID >=127 by @embhorn in #351
* Adding publish and subscribe atomic client examples by @embhorn in #347
* Allow disabling the posix conditional signal by @dgarske in #360
* Exclude CI tests with external brokers by @embhorn in #362
* Improvements for client property stack by @dgarske in #361
* Add mosquitto to CI tests by @embhorn in #365
* Fixes for non-blocking edge cases by @dgarske in #363
* Refactor MQTT-SN code by @embhorn in #366
### v1.16.0 (6/29/2023)
* Add testing for TLS mutual auth, and fsanitize gh test by @lealem47 in #321
* Add support for pkcs8 keys to mqtt client by @lealem47 in #322
* Fix null ptr deref in MqttClient_WaitType by @embhorn in #323
* Cleanup enum last entry to not have comma by @dgarske in #324
* Cleanup the AWS example by @dgarske in #326
* Fix for multi-threaded non-blocking use of sockRc, which could collide
between read and write by @dgarske in #328
* Add API to check if message is active (non-blocking only) by @dgarske in #329
* Fix configure warnings by @embhorn in #330
* Support MQTTv5 in AWS example by @embhorn in #332
* Zephyr port by @julek-wolfssl in #333
* Improve example headers and small sanitizer fixes by @lealem47 in #334
* Adding in STM32CubeIDE support by @lealem47 in #335
* Add dynamic property support by @embhorn in #336
### v1.15.1 (3/14/2023)
* Fix to protect read from client->write.len, which resolve edge case issue
when using multi-threading. (PR #318 and PR #319)
### v1.15.0 (12/30/2022)
* Fix for --with-libwolfssl-prefix config option #312
* Call disconn CB with MQTTv5 reason code #314
* Add github CIFuzz action by @DavidKorczynski #315
* Fix SN disconnect with sleep should not use CB #294
### v1.14.1 (8/31/2022)
* Fix cmake builds #307
* Fix for Vcpkg on Windows not getting wolfssl/options.h included #305
### v1.14.0 (7/25/2022)
* Support post-quantum KYBER_LEVEL1 and P256_KYBER_LEVEL1 with FALCON_LEVEL1
in wolfMQTT. by @anhu #300
* Add WOLFMQTT_USE_CB_ON_DISCONNECT for CB on client disconnect by @embhorn
in #302
* Fix to release connect ack props by @embhorn in #301
### v1.13.0 (5/4/2022)
* Fix windows build test by @lealem47 in #286
* Add async support for wolfMQTT by @dgarske in #285
* Allow message callback to set reason code for response by @embhorn in #287
* Porting WolfMQTT to NUCLEO F767ZI with TOPPERS OS by @nekoman2187 in #254
* Fixes for non-blocking state and large payload by @dgarske in #288
* Add CMake support build by @elms in #292
* Fix for improper reset of shared object by @dgarske in #291
* cmake: add example option and fixes for vcpkg by @elms in #293
* cmake: shared/static lib build and cleanup by @elms in #295
* Fix example msg cb print error @embhorn in #298
### v1.12 (2/23/2022)
* Allow MqttClient_WaitType to return MQTT_CODE_CONTINUE with MT (PR #283)
* Fix decoding user property and add example (PR #282)
* Fix issue with MqttClient_Publish_WriteOnly not waiting properly for ACK
(PR #281)
* Fix MQTTv5 disconnect with props (PR #279)
* Add new publish write only API for multi-threading (PR #277)
* Fix for multithreaded cancel (PR #276)
* MQTT-SN Add disconnect_cb when disconnect recv from broker; Fix PUB ACK
return status handling (PR #274)
* Enable TLS1.3 in examples (PR #273)
* Adding windows github actions build test (PR #272)
### v1.11 (1/7/2022)
* Return correct error code in SN_Client_Connect (PR #268)
* Removing unsupported TLS and SNI options in sn-client (PR #266)
* Fixes for multithreading with non-blocking (PR #252)
* Doxygen work removing depreciated command and fixing other warnings (PR #264)
* Fix overwriting TLS error in connect (PR #259)
* Add GitHub Actions (PR #256 #260 #263)
* Fix wm_Sem on Windows (PR #255 #261)
* Fix scripts for host without mosquitto (PR #257 #265)
* Trim whitespace and convert tab to spaces (PR #251)
* Refactor of write length (PR #250)
* Fixes for publish edge cases (PR #248)
* Remove unused sub_id element, add support for local test broker (PR #249)
* Fix to make sure MqttClient_DecodePacket called in all cases (PR #246)
* Known bug with multithread and without nonblocking enabled in this release.
### v1.10 (11/2/2021)
* Improve FALL_THROUGH macro logic for XC32. (PR #227)
* Fix potential NULL printf in MqttSocket_Connect with verbose debug enabled. (PR #229)
* Fix non-block chunked transfer. (PR #230)
* Fix QoS responses (PR #231, 240)
* Fix MQTTv5 property handling (PR #232, 233, 234, 236, 238, 241)
* Fix fuzzing test issues (PR #242)
### v1.9 (07/16/2021)
* Fixes for Sensor Network client (PR #204, 214, 219)
* Fixes for non-blocking (PR #205)
* Fixes for multithread (PR #207, 209, 211, 218)
* Fix for MQTTv5 publish response handling (PR #224, 220)
* Fix subscribe return code list (PR #210)
* Fix switch statement fallthrough on other toolchains (PR #225)
* Add HiveMQ Cloud capability with SNI feature (PR #222)
* Add ability to publish files from example client, fix chunked publish (PR# 223)
### v1.8 (02/19/2021)
* Fixes for non-blocking in WIN32 and large payload (PR #202)
* Make TLS IO callback functions public (PR #201)
* Bug fixes (PR #186, 188, 189, 193, 196, 199, 200)
* Update default test broker (PR #194)
* MQTT-SN fixes for multithread and register topic name (PR #185, 190)
* Fix multi-thread to use pthread mutex with condition (PR #183)
* Fix for WIN thread create macro (PR #182)
* Use options.h with Arduino build (PR #181)
* Use MqttClient_Ping_ex instead of MqttClient_Ping in examples (PR #179)
* Fixes for building with MinGW (PR #178)
* MQTT-SN support for multithread (PR #176)
* TLS mutual auth in client examples (PR #175)
* MQTT-SN feature enhancements (PR #173)
* Add runtime message option to client (PR #171)
### v1.7 (08/21/2020)
* 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)
### v1.6 (04/24/2020)
* 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)
### v1.4 (12/27/19)
* 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 `WOLFMQTT_DEBUG_CLIENT` is defined.
- Added thread logging when `WOLFMQTT_DEBUG_THREAD` is 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.c` with non-blocking and `errno.h` (PR #135)
* Fix to not return from `MqttClient_WaitMessage` if 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 `stat` from own struct, not shared `msg->stat`.
- Eliminated use of `client->msg` except for `MqttClient_WaitMessage`.
- 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_NONBLOCK` to 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)
### v1.3 (08/01/19)
* 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)
### v1.2 (11/07/18)
* Added MQTT Sensor Network (SN) client support (`--enable-sn` or `WOLFMQTT_SN`). (PR #96)
* Added MQTT v5.0 support with (`--enable-mqtt5` or `WOLFMQTT_V5`). (PR #87)
* Added property callback support (MQTT v5.0 only). Enabled with `--enable-propcb` or `WOLFMQTT_PROPERTY_CB`). (PR #87)
* Fix for Harmony NetConnect function incorrectly checking `EWOULDBLOCK`. Fixes issue #88. (PR #89)
* Fix to reset the TLS ctx and ssl pointers when they have been free'd. (PR #85)
* Add way to pass custom context to the wolfMQTT TLS verify callback example `mqtt_tls_verify_cb`. PR #94)
* Create nonblocking mqttclient example `./examples/nbclient/nbclient`. (PR #93)
* Add support for publishing in smaller chunks using new API `MqttClient_Publish_ex`. (PR #92)
* Added simplified Microchip Harmony wolfMQTT network callback example. (PR #83)
### v1.1 (06/21/18)
* 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)
### v1.0 (04/03/18)
* 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.
### v0.14 (11/22/17)
* 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`.
### v0.13 (05/10/17)
* 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).
### v0.12 (12/20/16)
* Fixes issue with read timeout in non-blocking mode with TLS enabled being treated 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.
### v0.11 (11/28/16)
* Fix for building MQTT client example without the wolfSSL headers present.
* Fix for Microchip Harmony IP check so it works with non 192 subnets.
### v0.10 (09/26/16)
* Enabled big endian support.
* Fixes for building with Visual Studio.
### v0.9 (08/22/16)
* Added Microchip Harmony support (see new readme in `IDE/Microchip-Harmony/README.md`).
* Added non-blocking mode `--enable-nonblock` or `WOLFMQTT_NONBLOCK`, which uses new `MQTT_CODE_CONTINUE` response code.
* Added `scripts/azureiothub.test`.
* Added `./commit-tests.sh` for testing all configurations.
* Added git pre-commit hook to run `commit-tests.sh`.
* Combined duplicate code in the examples into `examples/mqttexample.c`.
* Examples now use `MQTTCtx` structure as argument for tracking info/state.
### v0.8 (06/13/16)
* 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.
### v0.6 (03/18/2016)
* 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"`
### v0.5 (01/27/2016)
* Fixed build error when using older wolfSSL in firmware examples.
* Updated the get error string function in `mqtt_socket.c` from `wc_GetErrorString` to `wolfSSL_ERR_reason_error_string` so both wolfSSL and wolfCrypt error codes are resolved.
* Added `-n <str>` option so a custom topic name can be used.
* The mqttclient example now listens to stdin and will send a publish message with the data entered on the console when end-of-line (return) is detected (Linux only).
* Added keep-alive ping to the mqttclient and fwclient examples.
* Moved the TLS callback prior to the `client->tls.ctx` creation, allowing the callback function to implement its own client method cert verification.
* Enhanced `MqttClient_WaitMessage` so it will return if we get a message, not just on timeout
* Added make check/test scripts (scripts/client.test and scripts/firmware.test) to validate client TLS (with and without) plus QoS 0-2 levels and the firmware update example.
* Adjusted the example include paths for more flexibility.
* Added new `-T` option for using examples to test.
* Added new `-C` option to allow custom command timeout.
* Combined duplicate example code into new header `mqttexample.h`.
* Added a PRINTF helper macro to the examples for easier porting.
* Added better error trapping in examples so return code is populated for testing.
* Changed the example test functions to return int.
### v0.4 (12/30/2015)
* 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".
### v0.3 (11/18/2015)
* 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.
### v0.2 (11/06/2015)
* Fixes to handle receival of publish and QoS messages while performing packet writes/waits.
* Added support / tested with Windows.
* Added Visual Studio 2015 solution and projects.
* Added support / tested with FreeRTOS and Lwip.
* Fixes for compiler warnings.
### v0.1 (10/26/15)
* Initial release with support for MQTT v3.1.1, QoS 0-2, TLS and example client.