diff --git a/ChangeLog.md b/ChangeLog.md new file mode 100644 index 000000000..cf5939ce4 --- /dev/null +++ b/ChangeLog.md @@ -0,0 +1,176 @@ + +## Release Notes + +### 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 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. + +### 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 ` 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. diff --git a/Makefile.am b/Makefile.am index cf09c0e52..3cc35a432 100644 --- a/Makefile.am +++ b/Makefile.am @@ -38,6 +38,7 @@ include scripts/include.am include IDE/include.am EXTRA_DIST+= README.md +EXTRA_DIST+= ChangeLog.md EXTRA_DIST+= LICENSE EXTRA_DIST+= wolfmqtt.sln EXTRA_DIST+= wolfmqtt.vcxproj diff --git a/README.md b/README.md index d9fdf6ffb..285e87f46 100644 --- a/README.md +++ b/README.md @@ -179,164 +179,3 @@ Unsupported features: * Multiple gateway handling The SN client was tested using the Eclipse Paho MQTT-SN Gateway (https://github.com/eclipse/paho.mqtt-sn.embedded-c) running locally and on a separate network node. Instructions for building and running the gateway are in the project README. - - -## Release Notes - -### 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 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. - -### 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 ` 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. diff --git a/configure.ac b/configure.ac index e77a776e7..52a39e36f 100644 --- a/configure.ac +++ b/configure.ac @@ -2,8 +2,8 @@ # Copyright (C) 2018 wolfSSL Inc. # All right reserved. -AC_COPYRIGHT([Copyright (C) 2014-2018 wolfSSL Inc.]) -AC_INIT([wolfmqtt],[1.2.0],[https://github.com/wolfssl/wolfMQTT/issues],[wolfmqtt],[http://www.wolfssl.com]) +AC_COPYRIGHT([Copyright (C) 2014-2019 wolfSSL Inc.]) +AC_INIT([wolfmqtt],[1.3.0],[https://github.com/wolfssl/wolfMQTT/issues],[wolfmqtt],[http://www.wolfssl.com]) AC_PREREQ([2.63]) AC_CONFIG_AUX_DIR([build-aux]) @@ -23,7 +23,7 @@ AC_ARG_PROGRAM AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS([src/config.h]) -WOLFMQTT_LIBRARY_VERSION=4:0:0 +WOLFMQTT_LIBRARY_VERSION=5:0:0 # | | | # +------+ | +---+ # | | | diff --git a/wolfmqtt/version.h b/wolfmqtt/version.h index e3e54c1f7..408124ac2 100644 --- a/wolfmqtt/version.h +++ b/wolfmqtt/version.h @@ -34,8 +34,8 @@ extern "C" { #endif -#define LIBWOLFMQTT_VERSION_STRING "1.2.0" -#define LIBWOLFMQTT_VERSION_HEX 0x01002000 +#define LIBWOLFMQTT_VERSION_STRING "1.3.0" +#define LIBWOLFMQTT_VERSION_HEX 0x01003000 #ifdef __cplusplus }