From 04ee11ee531cce839a9a5a58b00a58d6979f5e7d Mon Sep 17 00:00:00 2001 From: dongheng Date: Mon, 18 Mar 2019 14:43:28 +0800 Subject: [PATCH] feat(mqtt): Add esp-mqtt Commit ID: 13018449 Add global "mqtt" to manage both "ESP-MQTT" and "IBM-MQTT". Using select the target MQTT to using like selecting SSL. --- components/mqtt/CMakeLists.txt | 12 + components/mqtt/Kconfig | 127 ++- components/mqtt/Makefile.projbuild | 2 + components/mqtt/component.mk | 26 +- components/mqtt/esp-mqtt/.editorconfig | 34 + components/mqtt/esp-mqtt/.gitignore | 36 + components/mqtt/esp-mqtt/.travis.yml | 59 ++ components/mqtt/esp-mqtt/LICENSE | 202 ++++ components/mqtt/esp-mqtt/README.md | 27 + .../examples/emitter-client/CMakeLists.txt | 19 + .../esp-mqtt/examples/emitter-client/Makefile | 13 + .../examples/emitter-client/README.md | 10 + .../emitter-client/generate-key-0.png | Bin 0 -> 239854 bytes .../emitter-client/generate-key-1.png | Bin 0 -> 62056 bytes .../emitter-client/main/Kconfig.projbuild | 22 + .../examples/emitter-client/main/app_main.c | 143 +++ .../examples/emitter-client/main/component.mk | 0 .../mqtt/esp-mqtt/include/mqtt_client.h | 121 +++ .../mqtt/esp-mqtt/include/mqtt_config.h | 81 ++ .../mqtt/esp-mqtt/lib/include/mqtt_msg.h | 135 +++ .../mqtt/esp-mqtt/lib/include/mqtt_outbox.h | 36 + .../mqtt/esp-mqtt/lib/include/platform.h | 14 + .../esp-mqtt/lib/include/platform_esp32_idf.h | 35 + components/mqtt/esp-mqtt/lib/mqtt_msg.c | 472 +++++++++ components/mqtt/esp-mqtt/lib/mqtt_outbox.c | 170 ++++ components/mqtt/esp-mqtt/lib/platform_idf.c | 41 + .../mqtt/esp-mqtt/modify_for_legacy_idf.sh | 27 + components/mqtt/esp-mqtt/mqtt_client.c | 892 ++++++++++++++++++ .../MQTTClient-C/src/FreeRTOS/MQTTFreeRTOS.c | 0 .../MQTTClient-C/src/FreeRTOS/MQTTFreeRTOS.h | 0 .../MQTTClient-C/src/MQTTClient.c | 0 .../MQTTClient-C/src/MQTTClient.h | 0 .../MQTTPacket/src/MQTTConnect.h | 0 .../MQTTPacket/src/MQTTConnectClient.c | 0 .../MQTTPacket/src/MQTTConnectServer.c | 0 .../MQTTPacket/src/MQTTDeserializePublish.c | 0 .../MQTTPacket/src/MQTTFormat.c | 0 .../MQTTPacket/src/MQTTFormat.h | 0 .../MQTTPacket/src/MQTTPacket.c | 0 .../MQTTPacket/src/MQTTPacket.h | 0 .../MQTTPacket/src/MQTTPublish.h | 0 .../MQTTPacket/src/MQTTSerializePublish.c | 0 .../MQTTPacket/src/MQTTSubscribe.h | 0 .../MQTTPacket/src/MQTTSubscribeClient.c | 0 .../MQTTPacket/src/MQTTSubscribeServer.c | 0 .../MQTTPacket/src/MQTTUnsubscribe.h | 0 .../MQTTPacket/src/MQTTUnsubscribeClient.c | 0 .../MQTTPacket/src/MQTTUnsubscribeServer.c | 0 .../MQTTPacket/src/StackTrace.h | 0 49 files changed, 2745 insertions(+), 11 deletions(-) create mode 100644 components/mqtt/esp-mqtt/.editorconfig create mode 100644 components/mqtt/esp-mqtt/.gitignore create mode 100644 components/mqtt/esp-mqtt/.travis.yml create mode 100644 components/mqtt/esp-mqtt/LICENSE create mode 100644 components/mqtt/esp-mqtt/README.md create mode 100644 components/mqtt/esp-mqtt/examples/emitter-client/CMakeLists.txt create mode 100644 components/mqtt/esp-mqtt/examples/emitter-client/Makefile create mode 100644 components/mqtt/esp-mqtt/examples/emitter-client/README.md create mode 100644 components/mqtt/esp-mqtt/examples/emitter-client/generate-key-0.png create mode 100644 components/mqtt/esp-mqtt/examples/emitter-client/generate-key-1.png create mode 100644 components/mqtt/esp-mqtt/examples/emitter-client/main/Kconfig.projbuild create mode 100755 components/mqtt/esp-mqtt/examples/emitter-client/main/app_main.c create mode 100644 components/mqtt/esp-mqtt/examples/emitter-client/main/component.mk create mode 100755 components/mqtt/esp-mqtt/include/mqtt_client.h create mode 100644 components/mqtt/esp-mqtt/include/mqtt_config.h create mode 100644 components/mqtt/esp-mqtt/lib/include/mqtt_msg.h create mode 100644 components/mqtt/esp-mqtt/lib/include/mqtt_outbox.h create mode 100644 components/mqtt/esp-mqtt/lib/include/platform.h create mode 100644 components/mqtt/esp-mqtt/lib/include/platform_esp32_idf.h create mode 100644 components/mqtt/esp-mqtt/lib/mqtt_msg.c create mode 100644 components/mqtt/esp-mqtt/lib/mqtt_outbox.c create mode 100644 components/mqtt/esp-mqtt/lib/platform_idf.c create mode 100755 components/mqtt/esp-mqtt/modify_for_legacy_idf.sh create mode 100644 components/mqtt/esp-mqtt/mqtt_client.c rename components/mqtt/{paho => ibm-mqtt}/MQTTClient-C/src/FreeRTOS/MQTTFreeRTOS.c (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTClient-C/src/FreeRTOS/MQTTFreeRTOS.h (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTClient-C/src/MQTTClient.c (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTClient-C/src/MQTTClient.h (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTConnect.h (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTConnectClient.c (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTConnectServer.c (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTDeserializePublish.c (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTFormat.c (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTFormat.h (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTPacket.c (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTPacket.h (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTPublish.h (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTSerializePublish.c (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTSubscribe.h (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTSubscribeClient.c (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTSubscribeServer.c (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTUnsubscribe.h (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTUnsubscribeClient.c (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/MQTTUnsubscribeServer.c (100%) rename components/mqtt/{paho => ibm-mqtt}/MQTTPacket/src/StackTrace.h (100%) diff --git a/components/mqtt/CMakeLists.txt b/components/mqtt/CMakeLists.txt index 659b15b1..aac0c123 100644 --- a/components/mqtt/CMakeLists.txt +++ b/components/mqtt/CMakeLists.txt @@ -1,3 +1,4 @@ +if(CONFIG_MQTT_USING_IBM) set(COMPONENT_ADD_INCLUDEDIRS paho/MQTTClient-C/src paho/MQTTClient-C/src/FreeRTOS @@ -9,7 +10,18 @@ set(COMPONENT_SRCDIRS paho/MQTTPacket/src) set(COMPONENT_REQUIRES freertos lwip ssl) +elif (CONFIG_MQTT_USING_ESP) +set(COMPONENT_ADD_INCLUDEDIRS esp-mqtt/include) +set(COMPONENT_PRIV_INCLUDEDIRS "esp-mqtt/lib/include") +set(COMPONENT_SRCS "esp-mqtt/mqtt_client.c" + "esp-mqtt/lib/mqtt_msg.c" + "esp-mqtt/lib/mqtt_outbox.c" + "esp-mqtt/lib/platform_esp32_idf.c") + +set(COMPONENT_REQUIRES lwip http_parser mbedtls tcp_transport) +endif() register_component() target_compile_options(${COMPONENT_NAME} PUBLIC -DMQTT_TASK) + diff --git a/components/mqtt/Kconfig b/components/mqtt/Kconfig index 0b32f64c..b06ad54f 100644 --- a/components/mqtt/Kconfig +++ b/components/mqtt/Kconfig @@ -1,4 +1,21 @@ -menu "MQTT(Paho)" +menu "MQTT" + +choice MQTT_LIBRARY_CHOOSE + prompt "Choose MQTT library" + default MQTT_USING_IBM + help + Choose the MQTT library which you want to use. + + Currently we support ESP-MQTT and IBM-MQTT(paho). + +config MQTT_USING_ESP + bool "ESP-MQTT" +config MQTT_USING_IBM + bool "IBM-MQTT(paho)" +endchoice + +menu "IBM-MQTT(paho)" + depends on MQTT_USING_IBM choice MQTT_VERSION prompt "MQTT version" @@ -133,4 +150,110 @@ config MQTT_PING_TIMEOUT If the ESP device does not receive any ping response within MQTT_PING_TIMEOUT, it will terminate the MQTT connection. -endmenu \ No newline at end of file +endmenu # IBM-MQTT(paho) + +menu "ESP-MQTT" + depends on MQTT_USING_ESP + +config MQTT_PROTOCOL_311 + bool "Enable MQTT protocol 3.1.1" + default y + help + If not, this library will use MQTT protocol 3.1 + +config MQTT_TRANSPORT_SSL + bool "Enable MQTT over SSL" + default y + help + Enable MQTT transport over SSL with mbedtls + +config MQTT_TRANSPORT_WEBSOCKET + bool "Enable MQTT over Websocket" + default y + help + Enable MQTT transport over Websocket. + +config MQTT_TRANSPORT_WEBSOCKET_SECURE + bool "Enable MQTT over Websocket Secure" + default y + depends on MQTT_TRANSPORT_WEBSOCKET + depends on MQTT_TRANSPORT_SSL + help + Enable MQTT transport over Websocket Secure. + +config MQTT_USE_CUSTOM_CONFIG + bool "MQTT Using custom configurations" + default n + help + Custom MQTT configurations. + +config MQTT_TCP_DEFAULT_PORT + int "Default MQTT over TCP port" + default 1883 + depends on MQTT_USE_CUSTOM_CONFIG + help + Default MQTT over TCP port + +config MQTT_SSL_DEFAULT_PORT + int "Default MQTT over SSL port" + default 8883 + depends on MQTT_USE_CUSTOM_CONFIG + depends on MQTT_TRANSPORT_SSL + help + Default MQTT over SSL port + +config MQTT_WS_DEFAULT_PORT + int "Default MQTT over Websocket port" + default 80 + depends on MQTT_USE_CUSTOM_CONFIG + depends on MQTT_TRANSPORT_WEBSOCKET + help + Default MQTT over Websocket port + +config MQTT_WSS_DEFAULT_PORT + int "Default MQTT over Websocket Secure port" + default 443 + depends on MQTT_USE_CUSTOM_CONFIG + depends on MQTT_TRANSPORT_WEBSOCKET + depends on MQTT_TRANSPORT_WEBSOCKET_SECURE + help + Default MQTT over Websocket Secure port + +config MQTT_BUFFER_SIZE + int "Default MQTT Buffer Size" + default 1024 + depends on MQTT_USE_CUSTOM_CONFIG + help + This buffer size using for both transmit and receive + +config MQTT_TASK_STACK_SIZE + int "MQTT task stack size" + default 6144 + depends on MQTT_USE_CUSTOM_CONFIG + help + MQTT task stack size + +config MQTT_TASK_CORE_SELECTION_ENABLED + bool "Enable MQTT task core selection" + default false + help + This will enable core selection + +choice MQTT_TASK_CORE_SELECTION + depends on MQTT_TASK_CORE_SELECTION_ENABLED + prompt "Core to use ?" + config MQTT_USE_CORE_0 + bool "Core 0" + config MQTT_USE_CORE_1 + bool "Core 1" + endchoice + +config MQTT_CUSTOM_OUTBOX + bool "Enable custom outbox implementation" + default n + help + Set to true if a specific implementation of message outbox is needed (e.g. persistant outbox in NVM or similar). + +endmenu # ESP-MQTT + +endmenu diff --git a/components/mqtt/Makefile.projbuild b/components/mqtt/Makefile.projbuild index 03de0cd5..5923a649 100644 --- a/components/mqtt/Makefile.projbuild +++ b/components/mqtt/Makefile.projbuild @@ -1 +1,3 @@ +ifdef CONFIG_MQTT_USING_IBM CPPFLAGS += -DMQTT_TASK -DMQTTCLIENT_PLATFORM_HEADER=MQTTFreeRTOS.h +endif diff --git a/components/mqtt/component.mk b/components/mqtt/component.mk index 7b0104a3..df82dbfe 100644 --- a/components/mqtt/component.mk +++ b/components/mqtt/component.mk @@ -1,12 +1,20 @@ -# -# Component Makefile -# -COMPONENT_ADD_INCLUDEDIRS += paho/MQTTClient-C/src \ - paho/MQTTClient-C/src/FreeRTOS \ - paho/MQTTPacket/src -COMPONENT_SRCDIRS += paho/MQTTClient-C/src \ - paho/MQTTClient-C/src/FreeRTOS \ - paho/MQTTPacket/src +ifdef CONFIG_MQTT_USING_IBM +COMPONENT_ADD_INCLUDEDIRS += ibm-mqtt/MQTTClient-C/src \ + ibm-mqtt/MQTTClient-C/src/FreeRTOS \ + ibm-mqtt/MQTTPacket/src + +COMPONENT_SRCDIRS += ibm-mqtt/MQTTClient-C/src \ + ibm-mqtt/MQTTClient-C/src/FreeRTOS \ + ibm-mqtt/MQTTPacket/src CFLAGS += -DMQTT_TASK +else +ifdef CONFIG_MQTT_USING_ESP +COMPONENT_SUBMODULES += esp-mqtt +COMPONENT_ADD_INCLUDEDIRS := esp-mqtt/include +COMPONENT_SRCDIRS := esp-mqtt esp-mqtt/lib +COMPONENT_PRIV_INCLUDEDIRS := esp-mqtt/lib/include +endif +endif + diff --git a/components/mqtt/esp-mqtt/.editorconfig b/components/mqtt/esp-mqtt/.editorconfig new file mode 100644 index 00000000..15977c64 --- /dev/null +++ b/components/mqtt/esp-mqtt/.editorconfig @@ -0,0 +1,34 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# http://editorconfig.org + +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[{*.md,*.rst}] +trim_trailing_whitespace = false + +[{Makefile,*.mk,*.bat}] +indent_style = tab +indent_size = 2 + +[*/freertos/**] +indent_style = tab +indent_size = 4 + +[{*/freertos/**.S,**/FreeRTOSConfig.h}] +indent_style = space +indent_size = 4 + +[*.pem] +insert_final_newline = false + +[*.py] +max_line_length = 119 diff --git a/components/mqtt/esp-mqtt/.gitignore b/components/mqtt/esp-mqtt/.gitignore new file mode 100644 index 00000000..2c4b72c7 --- /dev/null +++ b/components/mqtt/esp-mqtt/.gitignore @@ -0,0 +1,36 @@ +# Object files +*.o +*.ko +*.obj +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +build +examples/**/build +examples/**/sdkconfig* diff --git a/components/mqtt/esp-mqtt/.travis.yml b/components/mqtt/esp-mqtt/.travis.yml new file mode 100644 index 00000000..0b8a4599 --- /dev/null +++ b/components/mqtt/esp-mqtt/.travis.yml @@ -0,0 +1,59 @@ +sudo: false +language: bash +os: + - linux + +addons: + apt: + packages: + - gperf + - python + - python-serial + +before_install: + # Save path to the git respository + - PROJECT_PATH=$(pwd) + - CI_COMMIT_SHA=$(git rev-parse HEAD) + +install: + # Install ESP32 toochain following steps as desribed + # in http://esp-idf.readthedocs.io/en/latest/linux-setup.html + # + # Get required packages - already done above, see addons: apt: packages: + # - sudo apt-get install git wget make libncurses-dev flex bison gperf python python-serial + # Prepare directory for the toolchain + - mkdir -p ~/esp + - cd ~/esp + # Download binary toolchain for the ESP32 + - wget https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz + - tar -xzf xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz + # Get ESP-IDF from github + - git clone --recursive https://github.com/espressif/esp-idf.git + # Set the path to ESP-IDF directory + - export IDF_PATH=~/esp/esp-idf + - python -m pip install --user -r $IDF_PATH/requirements.txt + # Setup build tool: xtensa-esp32-elf and idf.py + - export PATH=$PATH:$HOME/esp/xtensa-esp32-elf/bin:$IDF_PATH/tools + +script: + # Legacy build with IDF < 3.2 + - cd $IDF_PATH && git checkout --recurse-submodules v3.1 + - cd $PROJECT_PATH + - ./modify_for_legacy_idf.sh || true + - cd $PROJECT_PATH/examples/tcp + - make defconfig + - make -j4 + # Master build with latest IDF + - cd $IDF_PATH && git checkout --recurse-submodules master + - cd $IDF_PATH/components/mqtt/esp-mqtt + - git remote add local $PROJECT_PATH/.git + - git fetch local + - git checkout $CI_COMMIT_SHA + - cd $IDF_PATH/examples/protocols/mqtt/tcp + - idf.py build + - cd $IDF_PATH/examples/protocols/mqtt/ssl + - idf.py build + - cd $IDF_PATH/examples/protocols/mqtt/ws + - idf.py build + - cd $IDF_PATH/examples/protocols/mqtt/wss + - idf.py build \ No newline at end of file diff --git a/components/mqtt/esp-mqtt/LICENSE b/components/mqtt/esp-mqtt/LICENSE new file mode 100644 index 00000000..a623b53f --- /dev/null +++ b/components/mqtt/esp-mqtt/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2016 Tuan PM + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/components/mqtt/esp-mqtt/README.md b/components/mqtt/esp-mqtt/README.md new file mode 100644 index 00000000..abe48220 --- /dev/null +++ b/components/mqtt/esp-mqtt/README.md @@ -0,0 +1,27 @@ +[![](https://travis-ci.org/tuanpmt/espmqtt.svg?branch=master)](https://travis-ci.org/tuanpmt/espmqtt) +[![](http://hits.dwyl.io/tuanpmt/espmqtt.svg)](http://hits.dwyl.io/tuanpmt/espmqtt) +[![Twitter Follow](https://img.shields.io/twitter/follow/tuanpmt.svg?style=social&label=Follow)](https://twitter.com/tuanpmt) +![GitHub contributors](https://img.shields.io/github/contributors/tuanpmt/espmqtt.svg) + +# ESP32 MQTT Library + +## Features + +- Based on: https://github.com/tuanpmt/esp_mqtt +- Support MQTT over TCP, SSL with mbedtls, MQTT over Websocket, MQTT over Websocket Secure +- Easy to setup with URI +- Multiple instances (Multiple clients in one application) +- Support subscribing, publishing, authentication, will messages, keep alive pings and all 3 QoS levels (it should be a fully functional client). + +## How to use + +[ESP-MQTT](https://github.com/espressif/esp-mqtt) is a standard [ESP-IDF](https://github.com/espressif/esp-idf) component. +Please refer to instructions in [ESP-IDF](https://github.com/espressif/esp-idf) + +## Documentation +Please refer to the standard [ESP-IDF](https://github.com/espressif/esp-idf) documentation here https://github.com/espressif/esp-idf/blob/master/docs/en/api-reference/protocols/mqtt.rst + +## License +- MQTT Package - [Stephen Robinson - contiki-mqtt](https://github.com/esar/contiki-mqtt) +- Others [@tuanpmt](https://twitter.com/tuanpmt) +Apache License diff --git a/components/mqtt/esp-mqtt/examples/emitter-client/CMakeLists.txt b/components/mqtt/esp-mqtt/examples/emitter-client/CMakeLists.txt new file mode 100644 index 00000000..0dd1242c --- /dev/null +++ b/components/mqtt/esp-mqtt/examples/emitter-client/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 3.5) + +get_filename_component(DEV_ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) + +set(PROJECT_ROOT "${DEV_ROOT}/") + +set(SUBMODULE_ROOT "${DEV_ROOT}/../../../") + +set(PROJECT_NAME "mqtt_ssl") + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) + +set(MAIN_SRCS ${PROJECT_ROOT}/main/app_main.c) + +set(EXTRA_COMPONENT_DIRS "${EXTRA_COMPONENT_DIRS} ${SUBMODULE_ROOT}") +set(BUILD_COMPONENTS "${BUILD_COMPONENTS} espmqtt") + +project(${PROJECT_NAME}) + diff --git a/components/mqtt/esp-mqtt/examples/emitter-client/Makefile b/components/mqtt/esp-mqtt/examples/emitter-client/Makefile new file mode 100644 index 00000000..5b1d2977 --- /dev/null +++ b/components/mqtt/esp-mqtt/examples/emitter-client/Makefile @@ -0,0 +1,13 @@ +# +# This is a project Makefile. It is assumed the directory this Makefile resides in is a +# project subdirectory. +# +# +# This is a project Makefile. It is assumed the directory this Makefile resides in is a +# project subdirectory. +# +PROJECT_NAME := emitter_client +EXTRA_COMPONENT_DIRS += $(PROJECT_PATH)/../../../ + +include $(IDF_PATH)/make/project.mk + diff --git a/components/mqtt/esp-mqtt/examples/emitter-client/README.md b/components/mqtt/esp-mqtt/examples/emitter-client/README.md new file mode 100644 index 00000000..a9aabae7 --- /dev/null +++ b/components/mqtt/esp-mqtt/examples/emitter-client/README.md @@ -0,0 +1,10 @@ +# ESPMQTT Emitter client + +## Before you run this Example +- Register an account from https://emitter.io/ +- Login and create channel key, grant access for the channel `/topic/` as the images bellow +- `make menuconfig` provide Wi-Fi information and CHANNEL_KEY to `MQTT Application example` +- `make flash monitor` + +![](generate-key-0.png) +![](generate-key-1.png) diff --git a/components/mqtt/esp-mqtt/examples/emitter-client/generate-key-0.png b/components/mqtt/esp-mqtt/examples/emitter-client/generate-key-0.png new file mode 100644 index 0000000000000000000000000000000000000000..b43b5edec96101176219a227205e74aabb9fa0a1 GIT binary patch literal 239854 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 z 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 +#include +#include +#include +#include "esp_wifi.h" +#include "esp_system.h" +#include "nvs_flash.h" +#include "esp_event_loop.h" + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/semphr.h" +#include "freertos/queue.h" +#include "freertos/event_groups.h" + +#include "lwip/sockets.h" +#include "lwip/dns.h" +#include "lwip/netdb.h" + +#include "esp_log.h" +#include "mqtt_client.h" + +static const char *TAG = "MQTTS_SAMPLE"; + +static EventGroupHandle_t wifi_event_group; +const static int CONNECTED_BIT = BIT0; + + + +static esp_err_t wifi_event_handler(void *ctx, system_event_t *event) +{ + switch (event->event_id) { + case SYSTEM_EVENT_STA_START: + esp_wifi_connect(); + break; + case SYSTEM_EVENT_STA_GOT_IP: + xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); + + break; + case SYSTEM_EVENT_STA_DISCONNECTED: + esp_wifi_connect(); + xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); + break; + default: + break; + } + return ESP_OK; +} + +static void wifi_init(void) +{ + tcpip_adapter_init(); + wifi_event_group = xEventGroupCreate(); + ESP_ERROR_CHECK(esp_event_loop_init(wifi_event_handler, NULL)); + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + ESP_ERROR_CHECK(esp_wifi_init(&cfg)); + ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); + wifi_config_t wifi_config = { + .sta = { + .ssid = CONFIG_WIFI_SSID, + .password = CONFIG_WIFI_PASSWORD, + }, + }; + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); + ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config)); + ESP_LOGI(TAG, "start the WIFI SSID:[%s] password:[%s]", CONFIG_WIFI_SSID, "******"); + ESP_ERROR_CHECK(esp_wifi_start()); + ESP_LOGI(TAG, "Waiting for wifi"); + xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, false, true, portMAX_DELAY); +} + +static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event) +{ + esp_mqtt_client_handle_t client = event->client; + int msg_id; + // your_context_t *context = event->context; + switch (event->event_id) { + case MQTT_EVENT_CONNECTED: + ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED"); + msg_id = esp_mqtt_client_subscribe(client, CONFIG_EMITTER_CHANNEL_KEY"/topic/", 0); + ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); + + break; + case MQTT_EVENT_DISCONNECTED: + ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED"); + break; + + case MQTT_EVENT_SUBSCRIBED: + ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id); + msg_id = esp_mqtt_client_publish(client, CONFIG_EMITTER_CHANNEL_KEY"/topic/", "data", 0, 0, 0); + ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id); + break; + case MQTT_EVENT_UNSUBSCRIBED: + ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id); + break; + case MQTT_EVENT_PUBLISHED: + ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id); + break; + case MQTT_EVENT_DATA: + ESP_LOGI(TAG, "MQTT_EVENT_DATA"); + printf("TOPIC=%.*s\r\n", event->topic_len, event->topic); + printf("DATA=%.*s\r\n", event->data_len, event->data); + break; + case MQTT_EVENT_ERROR: + ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); + break; + } + return ESP_OK; +} + +static void mqtt_app_start(void) +{ + const esp_mqtt_client_config_t mqtt_cfg = { + .uri = "mqtts://api.emitter.io:443", // for mqtt over ssl + // .uri = "mqtt://api.emitter.io:8080", //for mqtt over tcp + // .uri = "ws://api.emitter.io:8080", //for mqtt over websocket + // .uri = "wss://api.emitter.io:443", //for mqtt over websocket secure + .event_handle = mqtt_event_handler, + }; + + ESP_LOGI(TAG, "[APP] Free memory: %d bytes", esp_get_free_heap_size()); + esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg); + esp_mqtt_client_start(client); +} + +void app_main() +{ + ESP_LOGI(TAG, "[APP] Startup.."); + ESP_LOGI(TAG, "[APP] Free memory: %d bytes", esp_get_free_heap_size()); + ESP_LOGI(TAG, "[APP] IDF version: %s", esp_get_idf_version()); + + esp_log_level_set("*", ESP_LOG_INFO); + esp_log_level_set("MQTT_CLIENT", ESP_LOG_VERBOSE); + esp_log_level_set("TRANSPORT_TCP", ESP_LOG_VERBOSE); + esp_log_level_set("TRANSPORT_SSL", ESP_LOG_VERBOSE); + esp_log_level_set("TRANSPORT", ESP_LOG_VERBOSE); + esp_log_level_set("OUTBOX", ESP_LOG_VERBOSE); + + nvs_flash_init(); + wifi_init(); + mqtt_app_start(); + +} diff --git a/components/mqtt/esp-mqtt/examples/emitter-client/main/component.mk b/components/mqtt/esp-mqtt/examples/emitter-client/main/component.mk new file mode 100644 index 00000000..e69de29b diff --git a/components/mqtt/esp-mqtt/include/mqtt_client.h b/components/mqtt/esp-mqtt/include/mqtt_client.h new file mode 100755 index 00000000..630ba172 --- /dev/null +++ b/components/mqtt/esp-mqtt/include/mqtt_client.h @@ -0,0 +1,121 @@ +/* + * This file is subject to the terms and conditions defined in + * file 'LICENSE', which is part of this source code package. + * Tuan PM + */ + +#ifndef _MQTT_CLIENT_H_ +#define _MQTT_CLIENT_H_ + +#include +#include +#include +#include "esp_err.h" + +#include "mqtt_config.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct esp_mqtt_client* esp_mqtt_client_handle_t; + +/** + * @brief MQTT event types. + * + * User event handler receives context data in `esp_mqtt_event_t` structure with + * - `user_context` - user data from `esp_mqtt_client_config_t` + * - `client` - mqtt client handle + * - various other data depending on event type + * + */ +typedef enum { + MQTT_EVENT_ERROR = 0, + MQTT_EVENT_CONNECTED, /*!< connected event, additional context: session_present flag */ + MQTT_EVENT_DISCONNECTED, /*!< disconnected event */ + MQTT_EVENT_SUBSCRIBED, /*!< subscribed event, additional context: msg_id */ + MQTT_EVENT_UNSUBSCRIBED, /*!< unsubscribed event */ + MQTT_EVENT_PUBLISHED, /*!< published event, additional context: msg_id */ + MQTT_EVENT_DATA, /*!< data event, additional context: + - msg_id message id + - topic pointer to the received topic + - topic_len length of the topic + - data pointer to the received data + - data_len length of the data for this event + - current_data_offset offset of the current data for this event + - total_data_len total length of the data received + */ +} esp_mqtt_event_id_t; + +typedef enum { + MQTT_TRANSPORT_UNKNOWN = 0x0, + MQTT_TRANSPORT_OVER_TCP, /*!< MQTT over TCP, using scheme: ``mqtt`` */ + MQTT_TRANSPORT_OVER_SSL, /*!< MQTT over SSL, using scheme: ``mqtts`` */ + MQTT_TRANSPORT_OVER_WS, /*!< MQTT over Websocket, using scheme:: ``ws`` */ + MQTT_TRANSPORT_OVER_WSS /*!< MQTT over Websocket Secure, using scheme: ``wss`` */ +} esp_mqtt_transport_t; + +/** + * MQTT event configuration structure + */ +typedef struct { + esp_mqtt_event_id_t event_id; /*!< MQTT event type */ + esp_mqtt_client_handle_t client; /*!< MQTT client handle for this event */ + void *user_context; /*!< User context passed from MQTT client config */ + char *data; /*!< Data asociated with this event */ + int data_len; /*!< Lenght of the data for this event */ + int total_data_len; /*!< Total length of the data (longer data are supplied with multiple events) */ + int current_data_offset; /*!< Actual offset for the data asociated with this event */ + char *topic; /*!< Topic asociated with this event */ + int topic_len; /*!< Length of the topic for this event asociated with this event */ + int msg_id; /*!< MQTT messaged id of message */ + int session_present; /*!< MQTT session_present flag for connection event */ +} esp_mqtt_event_t; + +typedef esp_mqtt_event_t* esp_mqtt_event_handle_t; + +typedef esp_err_t (* mqtt_event_callback_t)(esp_mqtt_event_handle_t event); + +/** + * MQTT client configuration structure + */ +typedef struct { + mqtt_event_callback_t event_handle; /*!< handle for MQTT events */ + const char *host; /*!< MQTT server domain (ipv4 as string) */ + const char *uri; /*!< Complete MQTT broker URI */ + uint32_t port; /*!< MQTT server port */ + const char *client_id; /*!< default client id is ``ESP32_%CHIPID%`` where %CHIPID% are last 3 bytes of MAC address in hex format */ + const char *username; /*!< MQTT username */ + const char *password; /*!< MQTT password */ + const char *lwt_topic; /*!< LWT (Last Will and Testament) message topic (NULL by default) */ + const char *lwt_msg; /*!< LWT message (NULL by default) */ + int lwt_qos; /*!< LWT message qos */ + int lwt_retain; /*!< LWT retained message flag */ + int lwt_msg_len; /*!< LWT message length */ + int disable_clean_session; /*!< mqtt clean session, default clean_session is true */ + int keepalive; /*!< mqtt keepalive, default is 120 seconds */ + bool disable_auto_reconnect; /*!< this mqtt client will reconnect to server (when errors/disconnect). Set disable_auto_reconnect=true to disable */ + void *user_context; /*!< pass user context to this option, then can receive that context in ``event->user_context`` */ + int task_prio; /*!< MQTT task priority, default is 5, can be changed in ``make menuconfig`` */ + int task_stack; /*!< MQTT task stack size, default is 6144 bytes, can be changed in ``make menuconfig`` */ + int buffer_size; /*!< size of MQTT send/receive buffer, default is 1024 */ + const char *cert_pem; /*!< Pointer to certificate data in PEM format for server verify (with SSL), default is NULL, not required to verify the server */ + const char *client_cert_pem; /*!< Pointer to certificate data in PEM format for SSL mutual authentication, default is NULL, not required if mutual authentication is not needed. If it is not NULL, also `client_key_pem` has to be provided. */ + const char *client_key_pem; /*!< Pointer to private key data in PEM format for SSL mutual authentication, default is NULL, not required if mutual authentication is not needed. If it is not NULL, also `client_cert_pem` has to be provided. */ + esp_mqtt_transport_t transport; /*!< overrides URI transport */ +} esp_mqtt_client_config_t; + +esp_mqtt_client_handle_t esp_mqtt_client_init(const esp_mqtt_client_config_t *config); +esp_err_t esp_mqtt_client_set_uri(esp_mqtt_client_handle_t client, const char *uri); +esp_err_t esp_mqtt_client_start(esp_mqtt_client_handle_t client); +esp_err_t esp_mqtt_client_stop(esp_mqtt_client_handle_t client); +esp_err_t esp_mqtt_client_subscribe(esp_mqtt_client_handle_t client, const char *topic, int qos); +esp_err_t esp_mqtt_client_unsubscribe(esp_mqtt_client_handle_t client, const char *topic); +int esp_mqtt_client_publish(esp_mqtt_client_handle_t client, const char *topic, const char *data, int len, int qos, int retain); +esp_err_t esp_mqtt_client_destroy(esp_mqtt_client_handle_t client); + +#ifdef __cplusplus +} +#endif //__cplusplus + +#endif diff --git a/components/mqtt/esp-mqtt/include/mqtt_config.h b/components/mqtt/esp-mqtt/include/mqtt_config.h new file mode 100644 index 00000000..c0b4ab75 --- /dev/null +++ b/components/mqtt/esp-mqtt/include/mqtt_config.h @@ -0,0 +1,81 @@ +/* + * This file is subject to the terms and conditions defined in + * file 'LICENSE', which is part of this source code package. + * Tuan PM + */ +#ifndef _MQTT_CONFIG_H_ +#define _MQTT_CONFIG_H_ + +#include "sdkconfig.h" + +#define MQTT_PROTOCOL_311 CONFIG_MQTT_PROTOCOL_311 +#define MQTT_RECONNECT_TIMEOUT_MS (10*1000) + +#if CONFIG_MQTT_BUFFER_SIZE +#define MQTT_BUFFER_SIZE_BYTE CONFIG_MQTT_BUFFER_SIZE +#else +#define MQTT_BUFFER_SIZE_BYTE 1024 +#endif + +#define MQTT_MAX_HOST_LEN 64 +#define MQTT_MAX_CLIENT_LEN 32 +#define MQTT_MAX_USERNAME_LEN 32 +#define MQTT_MAX_PASSWORD_LEN 65 +#define MQTT_MAX_LWT_TOPIC 32 +#define MQTT_MAX_LWT_MSG 128 +#define MQTT_TASK_PRIORITY 5 + +#if CONFIG_MQTT_TASK_STACK_SIZE +#define MQTT_TASK_STACK CONFIG_MQTT_TASK_STACK_SIZE +#else +#define MQTT_TASK_STACK (6*1024) +#endif + +#define MQTT_KEEPALIVE_TICK (120) +#define MQTT_CMD_QUEUE_SIZE (10) +#define MQTT_NETWORK_TIMEOUT_MS (10000) + +#ifdef CONFIG_MQTT_TCP_DEFAULT_PORT +#define MQTT_TCP_DEFAULT_PORT CONFIG_MQTT_TCP_DEFAULT_PORT +#else +#define MQTT_TCP_DEFAULT_PORT 1883 +#endif + +#ifdef CONFIG_MQTT_SSL_DEFAULT_PORT +#define MQTT_SSL_DEFAULT_PORT CONFIG_MQTT_SSL_DEFAULT_PORT +#else +#define MQTT_SSL_DEFAULT_PORT 8883 +#endif + +#ifdef CONFIG_MQTT_WS_DEFAULT_PORT +#define MQTT_WS_DEFAULT_PORT CONFIG_MQTT_WS_DEFAULT_PORT +#else +#define MQTT_WS_DEFAULT_PORT 80 +#endif + +#ifdef MQTT_WSS_DEFAULT_PORT +#define MQTT_WSS_DEFAULT_PORT CONFIG_MQTT_WSS_DEFAULT_PORT +#else +#define MQTT_WSS_DEFAULT_PORT 443 +#endif + +#define MQTT_CORE_SELECTION_ENABLED CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED + +#ifdef CONFIG_MQTT_USE_CORE_0 + #define MQTT_TASK_CORE 0 +#else + #ifdef CONFIG_MQTT_USE_CORE_1 + #define MQTT_TASK_CORE 1 + #else + #define MQTT_TASK_CORE 0 + #endif +#endif + + +#define MQTT_ENABLE_SSL CONFIG_MQTT_TRANSPORT_SSL +#define MQTT_ENABLE_WS CONFIG_MQTT_TRANSPORT_WEBSOCKET +#define MQTT_ENABLE_WSS CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE + +#define OUTBOX_EXPIRED_TIMEOUT_MS (30*1000) +#define OUTBOX_MAX_SIZE (4*1024) +#endif diff --git a/components/mqtt/esp-mqtt/lib/include/mqtt_msg.h b/components/mqtt/esp-mqtt/lib/include/mqtt_msg.h new file mode 100644 index 00000000..049c738c --- /dev/null +++ b/components/mqtt/esp-mqtt/lib/include/mqtt_msg.h @@ -0,0 +1,135 @@ +#ifndef MQTT_MSG_H +#define MQTT_MSG_H +#include "mqtt_config.h" +#ifdef __cplusplus +extern "C" { +#endif + +/* +* Copyright (c) 2014, Stephen Robinson +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* 3. Neither the name of the copyright holder nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* +*/ +/* 7 6 5 4 3 2 1 0 */ +/*| --- Message Type---- | DUP Flag | QoS Level | Retain | */ +/* Remaining Length */ + + +enum mqtt_message_type +{ + MQTT_MSG_TYPE_CONNECT = 1, + MQTT_MSG_TYPE_CONNACK = 2, + MQTT_MSG_TYPE_PUBLISH = 3, + MQTT_MSG_TYPE_PUBACK = 4, + MQTT_MSG_TYPE_PUBREC = 5, + MQTT_MSG_TYPE_PUBREL = 6, + MQTT_MSG_TYPE_PUBCOMP = 7, + MQTT_MSG_TYPE_SUBSCRIBE = 8, + MQTT_MSG_TYPE_SUBACK = 9, + MQTT_MSG_TYPE_UNSUBSCRIBE = 10, + MQTT_MSG_TYPE_UNSUBACK = 11, + MQTT_MSG_TYPE_PINGREQ = 12, + MQTT_MSG_TYPE_PINGRESP = 13, + MQTT_MSG_TYPE_DISCONNECT = 14 +}; + +enum mqtt_connect_return_code +{ + CONNECTION_ACCEPTED = 0, + CONNECTION_REFUSE_PROTOCOL, + CONNECTION_REFUSE_ID_REJECTED, + CONNECTION_REFUSE_SERVER_UNAVAILABLE, + CONNECTION_REFUSE_BAD_USERNAME, + CONNECTION_REFUSE_NOT_AUTHORIZED +}; + +typedef struct mqtt_message +{ + uint8_t* data; + uint32_t length; + +} mqtt_message_t; + +typedef struct mqtt_connection +{ + mqtt_message_t message; + + uint16_t message_id; + uint8_t* buffer; + uint16_t buffer_length; + +} mqtt_connection_t; + +typedef struct mqtt_connect_info +{ + char* client_id; + char* username; + char* password; + char* will_topic; + char* will_message; + int keepalive; + int will_length; + int will_qos; + int will_retain; + int clean_session; + +} mqtt_connect_info_t; + + +static inline int mqtt_get_type(uint8_t* buffer) { return (buffer[0] & 0xf0) >> 4; } +static inline int mqtt_get_connect_session_present(uint8_t* buffer) { return buffer[2] & 0x01; } +static inline int mqtt_get_connect_return_code(uint8_t* buffer) { return buffer[3]; } +static inline int mqtt_get_dup(uint8_t* buffer) { return (buffer[0] & 0x08) >> 3; } +static inline int mqtt_get_qos(uint8_t* buffer) { return (buffer[0] & 0x06) >> 1; } +static inline int mqtt_get_retain(uint8_t* buffer) { return (buffer[0] & 0x01); } + +void mqtt_msg_init(mqtt_connection_t* connection, uint8_t* buffer, uint16_t buffer_length); +uint32_t mqtt_get_total_length(uint8_t* buffer, uint16_t length); +const char* mqtt_get_publish_topic(uint8_t* buffer, uint32_t* length); +const char* mqtt_get_publish_data(uint8_t* buffer, uint32_t* length); +uint16_t mqtt_get_id(uint8_t* buffer, uint16_t length); + +mqtt_message_t* mqtt_msg_connect(mqtt_connection_t* connection, mqtt_connect_info_t* info); +mqtt_message_t* mqtt_msg_publish(mqtt_connection_t* connection, const char* topic, const char* data, int data_length, int qos, int retain, uint16_t* message_id); +mqtt_message_t* mqtt_msg_puback(mqtt_connection_t* connection, uint16_t message_id); +mqtt_message_t* mqtt_msg_pubrec(mqtt_connection_t* connection, uint16_t message_id); +mqtt_message_t* mqtt_msg_pubrel(mqtt_connection_t* connection, uint16_t message_id); +mqtt_message_t* mqtt_msg_pubcomp(mqtt_connection_t* connection, uint16_t message_id); +mqtt_message_t* mqtt_msg_subscribe(mqtt_connection_t* connection, const char* topic, int qos, uint16_t* message_id); +mqtt_message_t* mqtt_msg_unsubscribe(mqtt_connection_t* connection, const char* topic, uint16_t* message_id); +mqtt_message_t* mqtt_msg_pingreq(mqtt_connection_t* connection); +mqtt_message_t* mqtt_msg_pingresp(mqtt_connection_t* connection); +mqtt_message_t* mqtt_msg_disconnect(mqtt_connection_t* connection); + + +#ifdef __cplusplus +} +#endif + +#endif /* MQTT_MSG_H */ + diff --git a/components/mqtt/esp-mqtt/lib/include/mqtt_outbox.h b/components/mqtt/esp-mqtt/lib/include/mqtt_outbox.h new file mode 100644 index 00000000..a87b4662 --- /dev/null +++ b/components/mqtt/esp-mqtt/lib/include/mqtt_outbox.h @@ -0,0 +1,36 @@ +/* + * This file is subject to the terms and conditions defined in + * file 'LICENSE', which is part of this source code package. + * Tuan PM + */ +#ifndef _MQTT_OUTOBX_H_ +#define _MQTT_OUTOBX_H_ +#include "platform.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct outbox_item; + +typedef struct outbox_list_t * outbox_handle_t; +typedef struct outbox_item * outbox_item_handle_t; + +outbox_handle_t outbox_init(); +outbox_item_handle_t outbox_enqueue(outbox_handle_t outbox, uint8_t *data, int len, int msg_id, int msg_type, int tick); +outbox_item_handle_t outbox_dequeue(outbox_handle_t outbox); +outbox_item_handle_t outbox_get(outbox_handle_t outbox, int msg_id); +esp_err_t outbox_delete(outbox_handle_t outbox, int msg_id, int msg_type); +esp_err_t outbox_delete_msgid(outbox_handle_t outbox, int msg_id); +esp_err_t outbox_delete_msgtype(outbox_handle_t outbox, int msg_type); +esp_err_t outbox_delete_expired(outbox_handle_t outbox, int current_tick, int timeout); + +esp_err_t outbox_set_pending(outbox_handle_t outbox, int msg_id); +int outbox_get_size(outbox_handle_t outbox); +esp_err_t outbox_cleanup(outbox_handle_t outbox, int max_size); +void outbox_destroy(outbox_handle_t outbox); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/components/mqtt/esp-mqtt/lib/include/platform.h b/components/mqtt/esp-mqtt/lib/include/platform.h new file mode 100644 index 00000000..b3358b9f --- /dev/null +++ b/components/mqtt/esp-mqtt/lib/include/platform.h @@ -0,0 +1,14 @@ +/* + * This file is subject to the terms and conditions defined in + * file 'LICENSE', which is part of this source code package. + * Tuan PM + */ +#ifndef _PLATFORM_H__ +#define _PLATFORM_H__ + +//Support ESP32 +#ifdef ESP_PLATFORM +#include "platform_esp32_idf.h" +#endif + +#endif diff --git a/components/mqtt/esp-mqtt/lib/include/platform_esp32_idf.h b/components/mqtt/esp-mqtt/lib/include/platform_esp32_idf.h new file mode 100644 index 00000000..553a57d7 --- /dev/null +++ b/components/mqtt/esp-mqtt/lib/include/platform_esp32_idf.h @@ -0,0 +1,35 @@ +/* + * This file is subject to the terms and conditions defined in + * file 'LICENSE', which is part of this source code package. + * Tuan PM + */ +#ifndef _ESP_PLATFORM_H__ +#define _ESP_PLATFORM_H__ + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/semphr.h" +#include "freertos/queue.h" +#include "freertos/event_groups.h" + +#include "lwip/err.h" +#include "lwip/sockets.h" +#include "lwip/sys.h" +#include "lwip/netdb.h" +#include "lwip/dns.h" + +#include "rom/queue.h" +#include "esp_err.h" +#include "esp_log.h" +#include "esp_system.h" + +char *platform_create_id_string(); +int platform_random(int max); +long long platform_tick_get_ms(); +void ms_to_timeval(int timeout_ms, struct timeval *tv); + +#define ESP_MEM_CHECK(TAG, a, action) if (!(a)) { \ + ESP_LOGE(TAG,"%s:%d (%s): %s", __FILE__, __LINE__, __FUNCTION__, "Memory exhausted"); \ + action; \ + } +#endif diff --git a/components/mqtt/esp-mqtt/lib/mqtt_msg.c b/components/mqtt/esp-mqtt/lib/mqtt_msg.c new file mode 100644 index 00000000..eb978472 --- /dev/null +++ b/components/mqtt/esp-mqtt/lib/mqtt_msg.c @@ -0,0 +1,472 @@ +/* +* Copyright (c) 2014, Stephen Robinson +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* 3. Neither the name of the copyright holder nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* +*/ +#include +#include +#include "mqtt_msg.h" +#include "mqtt_config.h" +#include "platform.h" + +#define MQTT_MAX_FIXED_HEADER_SIZE 3 + +enum mqtt_connect_flag +{ + MQTT_CONNECT_FLAG_USERNAME = 1 << 7, + MQTT_CONNECT_FLAG_PASSWORD = 1 << 6, + MQTT_CONNECT_FLAG_WILL_RETAIN = 1 << 5, + MQTT_CONNECT_FLAG_WILL = 1 << 2, + MQTT_CONNECT_FLAG_CLEAN_SESSION = 1 << 1 +}; + +struct __attribute((__packed__)) mqtt_connect_variable_header +{ + uint8_t lengthMsb; + uint8_t lengthLsb; +#if defined(MQTT_PROTOCOL_311) + uint8_t magic[4]; +#else + uint8_t magic[6]; +#endif + uint8_t version; + uint8_t flags; + uint8_t keepaliveMsb; + uint8_t keepaliveLsb; +}; + +static int append_string(mqtt_connection_t* connection, const char* string, int len) +{ + if (connection->message.length + len + 2 > connection->buffer_length) + return -1; + + connection->buffer[connection->message.length++] = len >> 8; + connection->buffer[connection->message.length++] = len & 0xff; + memcpy(connection->buffer + connection->message.length, string, len); + connection->message.length += len; + + return len + 2; +} + +static uint16_t append_message_id(mqtt_connection_t* connection, uint16_t message_id) +{ + // If message_id is zero then we should assign one, otherwise + // we'll use the one supplied by the caller + while (message_id == 0) { + message_id = platform_random(65535); + } + + if (connection->message.length + 2 > connection->buffer_length) + return 0; + + connection->buffer[connection->message.length++] = message_id >> 8; + connection->buffer[connection->message.length++] = message_id & 0xff; + + return message_id; +} + +static int init_message(mqtt_connection_t* connection) +{ + connection->message.length = MQTT_MAX_FIXED_HEADER_SIZE; + return MQTT_MAX_FIXED_HEADER_SIZE; +} + +static mqtt_message_t* fail_message(mqtt_connection_t* connection) +{ + connection->message.data = connection->buffer; + connection->message.length = 0; + return &connection->message; +} + +static mqtt_message_t* fini_message(mqtt_connection_t* connection, int type, int dup, int qos, int retain) +{ + int remaining_length = connection->message.length - MQTT_MAX_FIXED_HEADER_SIZE; + + if (remaining_length > 127) + { + connection->buffer[0] = ((type & 0x0f) << 4) | ((dup & 1) << 3) | ((qos & 3) << 1) | (retain & 1); + connection->buffer[1] = 0x80 | (remaining_length % 128); + connection->buffer[2] = remaining_length / 128; + connection->message.length = remaining_length + 3; + connection->message.data = connection->buffer; + } + else + { + connection->buffer[1] = ((type & 0x0f) << 4) | ((dup & 1) << 3) | ((qos & 3) << 1) | (retain & 1); + connection->buffer[2] = remaining_length; + connection->message.length = remaining_length + 2; + connection->message.data = connection->buffer + 1; + } + + return &connection->message; +} + +void mqtt_msg_init(mqtt_connection_t* connection, uint8_t* buffer, uint16_t buffer_length) +{ + memset(connection, 0, sizeof(mqtt_connection_t)); + connection->buffer = buffer; + connection->buffer_length = buffer_length; +} + +uint32_t mqtt_get_total_length(uint8_t* buffer, uint16_t length) +{ + int i; + uint32_t totlen = 0; + + for (i = 1; i < length; ++i) + { + totlen += (buffer[i] & 0x7f) << (7 * (i - 1)); + if ((buffer[i] & 0x80) == 0) + { + ++i; + break; + } + } + totlen += i; + + return totlen; +} + +const char* mqtt_get_publish_topic(uint8_t* buffer, uint32_t* length) +{ + int i; + int totlen = 0; + int topiclen; + + for (i = 1; i < *length; ++i) + { + totlen += (buffer[i] & 0x7f) << (7 * (i - 1)); + if ((buffer[i] & 0x80) == 0) + { + ++i; + break; + } + } + totlen += i; + + if (i + 2 >= *length) + return NULL; + topiclen = buffer[i++] << 8; + topiclen |= buffer[i++]; + + if (i + topiclen > *length) + return NULL; + + *length = topiclen; + return (const char*)(buffer + i); +} + +const char* mqtt_get_publish_data(uint8_t* buffer, uint32_t* length) +{ + int i; + int totlen = 0; + int topiclen; + int blength = *length; + *length = 0; + + for (i = 1; i < blength; ++i) + { + totlen += (buffer[i] & 0x7f) << (7 * (i - 1)); + if ((buffer[i] & 0x80) == 0) + { + ++i; + break; + } + } + totlen += i; + + if (i + 2 >= blength) + return NULL; + topiclen = buffer[i++] << 8; + topiclen |= buffer[i++]; + + if (i + topiclen >= blength) + return NULL; + + i += topiclen; + + if (mqtt_get_qos(buffer) > 0) + { + if (i + 2 >= blength) + return NULL; + i += 2; + } + + if (totlen < i) + return NULL; + + if (totlen <= blength) + *length = totlen - i; + else + *length = blength - i; + return (const char*)(buffer + i); +} + +uint16_t mqtt_get_id(uint8_t* buffer, uint16_t length) +{ + if (length < 1) + return 0; + + switch (mqtt_get_type(buffer)) + { + case MQTT_MSG_TYPE_PUBLISH: + { + int i; + int topiclen; + + for (i = 1; i < length; ++i) + { + if ((buffer[i] & 0x80) == 0) + { + ++i; + break; + } + } + + if (i + 2 >= length) + return 0; + topiclen = buffer[i++] << 8; + topiclen |= buffer[i++]; + + if (i + topiclen >= length) + return 0; + i += topiclen; + + if (mqtt_get_qos(buffer) > 0) + { + if (i + 2 >= length) + return 0; + //i += 2; + } else { + return 0; + } + + return (buffer[i] << 8) | buffer[i + 1]; + } + case MQTT_MSG_TYPE_PUBACK: + case MQTT_MSG_TYPE_PUBREC: + case MQTT_MSG_TYPE_PUBREL: + case MQTT_MSG_TYPE_PUBCOMP: + case MQTT_MSG_TYPE_SUBACK: + case MQTT_MSG_TYPE_UNSUBACK: + case MQTT_MSG_TYPE_SUBSCRIBE: + { + // This requires the remaining length to be encoded in 1 byte, + // which it should be. + if (length >= 4 && (buffer[1] & 0x80) == 0) + return (buffer[2] << 8) | buffer[3]; + else + return 0; + } + + default: + return 0; + } +} + +mqtt_message_t* mqtt_msg_connect(mqtt_connection_t* connection, mqtt_connect_info_t* info) +{ + struct mqtt_connect_variable_header* variable_header; + + init_message(connection); + + if (connection->message.length + sizeof(*variable_header) > connection->buffer_length) + return fail_message(connection); + variable_header = (void*)(connection->buffer + connection->message.length); + connection->message.length += sizeof(*variable_header); + + variable_header->lengthMsb = 0; +#if defined(CONFIG_MQTT_PROTOCOL_311) + variable_header->lengthLsb = 4; + memcpy(variable_header->magic, "MQTT", 4); + variable_header->version = 4; +#else + variable_header->lengthLsb = 6; + memcpy(variable_header->magic, "MQIsdp", 6); + variable_header->version = 3; +#endif + + variable_header->flags = 0; + variable_header->keepaliveMsb = info->keepalive >> 8; + variable_header->keepaliveLsb = info->keepalive & 0xff; + + if (info->clean_session) + variable_header->flags |= MQTT_CONNECT_FLAG_CLEAN_SESSION; + + if (info->client_id != NULL && info->client_id[0] != '\0') + { + if (append_string(connection, info->client_id, strlen(info->client_id)) < 0) + return fail_message(connection); + } + else + return fail_message(connection); + + if (info->will_topic != NULL && info->will_topic[0] != '\0') + { + if (append_string(connection, info->will_topic, strlen(info->will_topic)) < 0) + return fail_message(connection); + + if (append_string(connection, info->will_message, info->will_length) < 0) + return fail_message(connection); + + variable_header->flags |= MQTT_CONNECT_FLAG_WILL; + if (info->will_retain) + variable_header->flags |= MQTT_CONNECT_FLAG_WILL_RETAIN; + variable_header->flags |= (info->will_qos & 3) << 3; + } + + if (info->username != NULL && info->username[0] != '\0') + { + if (append_string(connection, info->username, strlen(info->username)) < 0) + return fail_message(connection); + + variable_header->flags |= MQTT_CONNECT_FLAG_USERNAME; + } + + if (info->password != NULL && info->password[0] != '\0') + { + if (append_string(connection, info->password, strlen(info->password)) < 0) + return fail_message(connection); + + variable_header->flags |= MQTT_CONNECT_FLAG_PASSWORD; + } + + return fini_message(connection, MQTT_MSG_TYPE_CONNECT, 0, 0, 0); +} + +mqtt_message_t* mqtt_msg_publish(mqtt_connection_t* connection, const char* topic, const char* data, int data_length, int qos, int retain, uint16_t* message_id) +{ + init_message(connection); + + if (topic == NULL || topic[0] == '\0') + return fail_message(connection); + + if (append_string(connection, topic, strlen(topic)) < 0) + return fail_message(connection); + + if (qos > 0) + { + if ((*message_id = append_message_id(connection, 0)) == 0) + return fail_message(connection); + } + else + *message_id = 0; + + if (connection->message.length + data_length > connection->buffer_length) + return fail_message(connection); + memcpy(connection->buffer + connection->message.length, data, data_length); + connection->message.length += data_length; + + return fini_message(connection, MQTT_MSG_TYPE_PUBLISH, 0, qos, retain); +} + +mqtt_message_t* mqtt_msg_puback(mqtt_connection_t* connection, uint16_t message_id) +{ + init_message(connection); + if (append_message_id(connection, message_id) == 0) + return fail_message(connection); + return fini_message(connection, MQTT_MSG_TYPE_PUBACK, 0, 0, 0); +} + +mqtt_message_t* mqtt_msg_pubrec(mqtt_connection_t* connection, uint16_t message_id) +{ + init_message(connection); + if (append_message_id(connection, message_id) == 0) + return fail_message(connection); + return fini_message(connection, MQTT_MSG_TYPE_PUBREC, 0, 0, 0); +} + +mqtt_message_t* mqtt_msg_pubrel(mqtt_connection_t* connection, uint16_t message_id) +{ + init_message(connection); + if (append_message_id(connection, message_id) == 0) + return fail_message(connection); + return fini_message(connection, MQTT_MSG_TYPE_PUBREL, 0, 1, 0); +} + +mqtt_message_t* mqtt_msg_pubcomp(mqtt_connection_t* connection, uint16_t message_id) +{ + init_message(connection); + if (append_message_id(connection, message_id) == 0) + return fail_message(connection); + return fini_message(connection, MQTT_MSG_TYPE_PUBCOMP, 0, 0, 0); +} + +mqtt_message_t* mqtt_msg_subscribe(mqtt_connection_t* connection, const char* topic, int qos, uint16_t* message_id) +{ + init_message(connection); + + if (topic == NULL || topic[0] == '\0') + return fail_message(connection); + + if ((*message_id = append_message_id(connection, 0)) == 0) + return fail_message(connection); + + if (append_string(connection, topic, strlen(topic)) < 0) + return fail_message(connection); + + if (connection->message.length + 1 > connection->buffer_length) + return fail_message(connection); + connection->buffer[connection->message.length++] = qos; + + return fini_message(connection, MQTT_MSG_TYPE_SUBSCRIBE, 0, 1, 0); +} + +mqtt_message_t* mqtt_msg_unsubscribe(mqtt_connection_t* connection, const char* topic, uint16_t* message_id) +{ + init_message(connection); + + if (topic == NULL || topic[0] == '\0') + return fail_message(connection); + + if ((*message_id = append_message_id(connection, 0)) == 0) + return fail_message(connection); + + if (append_string(connection, topic, strlen(topic)) < 0) + return fail_message(connection); + + return fini_message(connection, MQTT_MSG_TYPE_UNSUBSCRIBE, 0, 1, 0); +} + +mqtt_message_t* mqtt_msg_pingreq(mqtt_connection_t* connection) +{ + init_message(connection); + return fini_message(connection, MQTT_MSG_TYPE_PINGREQ, 0, 0, 0); +} + +mqtt_message_t* mqtt_msg_pingresp(mqtt_connection_t* connection) +{ + init_message(connection); + return fini_message(connection, MQTT_MSG_TYPE_PINGRESP, 0, 0, 0); +} + +mqtt_message_t* mqtt_msg_disconnect(mqtt_connection_t* connection) +{ + init_message(connection); + return fini_message(connection, MQTT_MSG_TYPE_DISCONNECT, 0, 0, 0); +} diff --git a/components/mqtt/esp-mqtt/lib/mqtt_outbox.c b/components/mqtt/esp-mqtt/lib/mqtt_outbox.c new file mode 100644 index 00000000..300e6987 --- /dev/null +++ b/components/mqtt/esp-mqtt/lib/mqtt_outbox.c @@ -0,0 +1,170 @@ +#include "mqtt_outbox.h" +#include +#include +#include "rom/queue.h" +#include "esp_log.h" + +#ifndef CONFIG_MQTT_CUSTOM_OUTBOX + + +static const char *TAG = "OUTBOX"; + +typedef struct outbox_item { + char *buffer; + int len; + int msg_id; + int msg_type; + int tick; + int retry_count; + bool pending; + STAILQ_ENTRY(outbox_item) next; +} outbox_item_t; + +STAILQ_HEAD(outbox_list_t, outbox_item); + + +outbox_handle_t outbox_init() +{ + outbox_handle_t outbox = calloc(1, sizeof(struct outbox_list_t)); + ESP_MEM_CHECK(TAG, outbox, return NULL); + STAILQ_INIT(outbox); + return outbox; +} + +outbox_item_handle_t outbox_enqueue(outbox_handle_t outbox, uint8_t *data, int len, int msg_id, int msg_type, int tick) +{ + outbox_item_handle_t item = calloc(1, sizeof(outbox_item_t)); + ESP_MEM_CHECK(TAG, item, return NULL); + item->msg_id = msg_id; + item->msg_type = msg_type; + item->tick = tick; + item->len = len; + item->buffer = malloc(len); + ESP_MEM_CHECK(TAG, item->buffer, { + free(item); + return NULL; + }); + memcpy(item->buffer, data, len); + STAILQ_INSERT_TAIL(outbox, item, next); + ESP_LOGD(TAG, "ENQUEUE msgid=%d, msg_type=%d, len=%d, size=%d", msg_id, msg_type, len, outbox_get_size(outbox)); + return item; +} + +outbox_item_handle_t outbox_get(outbox_handle_t outbox, int msg_id) +{ + outbox_item_handle_t item; + STAILQ_FOREACH(item, outbox, next) { + if (item->msg_id == msg_id) { + return item; + } + } + return NULL; +} + +outbox_item_handle_t outbox_dequeue(outbox_handle_t outbox) +{ + outbox_item_handle_t item; + STAILQ_FOREACH(item, outbox, next) { + if (!item->pending) { + return item; + } + } + return NULL; +} +esp_err_t outbox_delete(outbox_handle_t outbox, int msg_id, int msg_type) +{ + outbox_item_handle_t item, tmp; + STAILQ_FOREACH_SAFE(item, outbox, next, tmp) { + if (item->msg_id == msg_id && item->msg_type == msg_type) { + STAILQ_REMOVE(outbox, item, outbox_item, next); + free(item->buffer); + free(item); + ESP_LOGD(TAG, "DELETED msgid=%d, msg_type=%d, remain size=%d", msg_id, msg_type, outbox_get_size(outbox)); + return ESP_OK; + } + + } + return ESP_FAIL; +} +esp_err_t outbox_delete_msgid(outbox_handle_t outbox, int msg_id) +{ + outbox_item_handle_t item, tmp; + STAILQ_FOREACH_SAFE(item, outbox, next, tmp) { + if (item->msg_id == msg_id) { + STAILQ_REMOVE(outbox, item, outbox_item, next); + free(item->buffer); + free(item); + } + + } + return ESP_OK; +} +esp_err_t outbox_set_pending(outbox_handle_t outbox, int msg_id) +{ + outbox_item_handle_t item = outbox_get(outbox, msg_id); + if (item) { + item->pending = true; + return ESP_OK; + } + return ESP_FAIL; +} + +esp_err_t outbox_delete_msgtype(outbox_handle_t outbox, int msg_type) +{ + outbox_item_handle_t item, tmp; + STAILQ_FOREACH_SAFE(item, outbox, next, tmp) { + if (item->msg_type == msg_type) { + STAILQ_REMOVE(outbox, item, outbox_item, next); + free(item->buffer); + free(item); + } + + } + return ESP_OK; +} + +esp_err_t outbox_delete_expired(outbox_handle_t outbox, int current_tick, int timeout) +{ + outbox_item_handle_t item, tmp; + STAILQ_FOREACH_SAFE(item, outbox, next, tmp) { + if (current_tick - item->tick > timeout) { + STAILQ_REMOVE(outbox, item, outbox_item, next); + free(item->buffer); + free(item); + } + + } + return ESP_OK; +} + +int outbox_get_size(outbox_handle_t outbox) +{ + int siz = 0; + outbox_item_handle_t item; + STAILQ_FOREACH(item, outbox, next) { + siz += item->len; + } + return siz; +} + +esp_err_t outbox_cleanup(outbox_handle_t outbox, int max_size) +{ + while(outbox_get_size(outbox) > max_size) { + outbox_item_handle_t item = outbox_dequeue(outbox); + if (item == NULL) { + return ESP_FAIL; + } + STAILQ_REMOVE(outbox, item, outbox_item, next); + free(item->buffer); + free(item); + } + return ESP_OK; +} + +void outbox_destroy(outbox_handle_t outbox) +{ + outbox_cleanup(outbox, 0); + free(outbox); +} + +#endif /* CONFIG_MQTT_CUSTOM_OUTBOX */ \ No newline at end of file diff --git a/components/mqtt/esp-mqtt/lib/platform_idf.c b/components/mqtt/esp-mqtt/lib/platform_idf.c new file mode 100644 index 00000000..d640e023 --- /dev/null +++ b/components/mqtt/esp-mqtt/lib/platform_idf.c @@ -0,0 +1,41 @@ +#include "platform.h" + +#ifdef ESP_PLATFORM +#include "esp_system.h" +#include "esp_log.h" +#include + +static const char *TAG = "PLATFORM"; + +#define MAX_ID_STRING (32) + +char *platform_create_id_string() +{ + uint8_t mac[6]; + char *id_string = calloc(1, MAX_ID_STRING); + ESP_MEM_CHECK(TAG, id_string, return NULL); + esp_read_mac(mac, ESP_MAC_WIFI_STA); + sprintf(id_string, "ESP32_%02x%02X%02X", mac[3], mac[4], mac[5]); + return id_string; +} + +int platform_random(int max) +{ + return esp_random()%max; +} + +long long platform_tick_get_ms() +{ + struct timeval te; + gettimeofday(&te, NULL); // get current time + long long milliseconds = te.tv_sec*1000LL + te.tv_usec/1000; // calculate milliseconds + // printf("milliseconds: %lld\n", milliseconds); + return milliseconds; +} + +void ms_to_timeval(int timeout_ms, struct timeval *tv) +{ + tv->tv_sec = timeout_ms / 1000; + tv->tv_usec = (timeout_ms - (tv->tv_sec * 1000)) * 1000; +} +#endif diff --git a/components/mqtt/esp-mqtt/modify_for_legacy_idf.sh b/components/mqtt/esp-mqtt/modify_for_legacy_idf.sh new file mode 100755 index 00000000..6c430746 --- /dev/null +++ b/components/mqtt/esp-mqtt/modify_for_legacy_idf.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# This snipped prepares environment for using esp-mqtt repository separately from idf -- legacy use before IDFv3.2 +# +esp_mqtt_path=`pwd` +mkdir -p ${esp_mqtt_path}/examples +pushd +cd $IDF_PATH +former_commit_id=`git rev-parse HEAD` +git checkout master + +for example in tcp; do + cp -r $IDF_PATH/examples/protocols/mqtt/${example} ${esp_mqtt_path}/examples + echo 'EXTRA_COMPONENT_DIRS += $(PROJECT_PATH)/../../../' > ${esp_mqtt_path}/examples/${example}/Makefile + cat $IDF_PATH/examples/protocols/mqtt/${example}/Makefile >> ${esp_mqtt_path}/examples/${example}/Makefile + echo "CONFIG_MQTT_TRANSPORT_SSL=" >> ${esp_mqtt_path}/examples/${example}/sdkconfig.defaults + echo "CONFIG_MQTT_TRANSPORT_WEBSOCKET=" >> ${esp_mqtt_path}/examples/${example}/sdkconfig.defaults +done + +cp -r $IDF_PATH/components/tcp_transport ${esp_mqtt_path}/.. +rm ${esp_mqtt_path}/../tcp_transport/transport_ssl.c +echo -e "#include \"esp_transport.h\"\nvoid esp_transport_ws_set_path(esp_transport_handle_t t, const char *path) {}" > ${esp_mqtt_path}/../tcp_transport/transport_ws.c + +cp $IDF_PATH/components/mqtt/Kconfig ${esp_mqtt_path} +sed 's/esp-mqtt/\./g' $IDF_PATH/components/mqtt/component.mk > ${esp_mqtt_path}/component.mk +git checkout $former_commit_id +popd \ No newline at end of file diff --git a/components/mqtt/esp-mqtt/mqtt_client.c b/components/mqtt/esp-mqtt/mqtt_client.c new file mode 100644 index 00000000..7ee01261 --- /dev/null +++ b/components/mqtt/esp-mqtt/mqtt_client.c @@ -0,0 +1,892 @@ +#include +#include "platform.h" + +#include "mqtt_client.h" +#include "mqtt_msg.h" +#include "esp_transport.h" +#include "esp_transport_tcp.h" +#include "esp_transport_ssl.h" +#include "esp_transport_ws.h" +#include "platform.h" +#include "mqtt_outbox.h" + +/* using uri parser */ +#include "http_parser.h" + +static const char *TAG = "MQTT_CLIENT"; + +typedef struct mqtt_state +{ + mqtt_connect_info_t *connect_info; + uint8_t *in_buffer; + uint8_t *out_buffer; + int in_buffer_length; + int out_buffer_length; + uint32_t message_length; + uint32_t message_length_read; + mqtt_message_t *outbound_message; + mqtt_connection_t mqtt_connection; + uint16_t pending_msg_id; + int pending_msg_type; + int pending_publish_qos; + int pending_msg_count; +} mqtt_state_t; + +typedef struct { + mqtt_event_callback_t event_handle; + int task_stack; + int task_prio; + char *uri; + char *host; + char *path; + char *scheme; + int port; + bool auto_reconnect; + void *user_context; + int network_timeout_ms; +} mqtt_config_storage_t; + +typedef enum { + MQTT_STATE_ERROR = -1, + MQTT_STATE_UNKNOWN = 0, + MQTT_STATE_INIT, + MQTT_STATE_CONNECTED, + MQTT_STATE_WAIT_TIMEOUT, +} mqtt_client_state_t; + +struct esp_mqtt_client { + esp_transport_list_handle_t transport_list; + esp_transport_handle_t transport; + mqtt_config_storage_t *config; + mqtt_state_t mqtt_state; + mqtt_connect_info_t connect_info; + mqtt_client_state_t state; + long long keepalive_tick; + long long reconnect_tick; + int wait_timeout_ms; + int auto_reconnect; + esp_mqtt_event_t event; + bool run; + bool wait_for_ping_resp; + outbox_handle_t outbox; + EventGroupHandle_t status_bits; +}; + +const static int STOPPED_BIT = BIT0; + +static esp_err_t esp_mqtt_dispatch_event(esp_mqtt_client_handle_t client); +static esp_err_t esp_mqtt_set_config(esp_mqtt_client_handle_t client, const esp_mqtt_client_config_t *config); +static esp_err_t esp_mqtt_destroy_config(esp_mqtt_client_handle_t client); +static esp_err_t esp_mqtt_connect(esp_mqtt_client_handle_t client, int timeout_ms); +static esp_err_t esp_mqtt_abort_connection(esp_mqtt_client_handle_t client); +static esp_err_t esp_mqtt_client_ping(esp_mqtt_client_handle_t client); +static char *create_string(const char *ptr, int len); + +static esp_err_t esp_mqtt_set_config(esp_mqtt_client_handle_t client, const esp_mqtt_client_config_t *config) +{ + //Copy user configurations to client context + esp_err_t err = ESP_OK; + mqtt_config_storage_t *cfg = calloc(1, sizeof(mqtt_config_storage_t)); + ESP_MEM_CHECK(TAG, cfg, return ESP_ERR_NO_MEM); + + client->config = cfg; + + cfg->task_prio = config->task_prio; + if (cfg->task_prio <= 0) { + cfg->task_prio = MQTT_TASK_PRIORITY; + } + + cfg->task_stack = config->task_stack; + if (cfg->task_stack == 0) { + cfg->task_stack = MQTT_TASK_STACK; + } + err = ESP_ERR_NO_MEM; + if (config->host) { + cfg->host = strdup(config->host); + ESP_MEM_CHECK(TAG, cfg->host, goto _mqtt_set_config_failed); + } + cfg->port = config->port; + + if (config->username) { + client->connect_info.username = strdup(config->username); + ESP_MEM_CHECK(TAG, client->connect_info.username, goto _mqtt_set_config_failed); + } + + if (config->password) { + client->connect_info.password = strdup(config->password); + ESP_MEM_CHECK(TAG, client->connect_info.password, goto _mqtt_set_config_failed); + } + + if (config->client_id) { + client->connect_info.client_id = strdup(config->client_id); + } else { + client->connect_info.client_id = platform_create_id_string(); + } + ESP_MEM_CHECK(TAG, client->connect_info.client_id, goto _mqtt_set_config_failed); + ESP_LOGD(TAG, "MQTT client_id=%s", client->connect_info.client_id); + + if (config->uri) { + cfg->uri = strdup(config->uri); + ESP_MEM_CHECK(TAG, cfg->uri, goto _mqtt_set_config_failed); + } + + if (config->lwt_topic) { + client->connect_info.will_topic = strdup(config->lwt_topic); + ESP_MEM_CHECK(TAG, client->connect_info.will_topic, goto _mqtt_set_config_failed); + } + + if (config->lwt_msg_len) { + client->connect_info.will_message = malloc(config->lwt_msg_len); + ESP_MEM_CHECK(TAG, client->connect_info.will_message, goto _mqtt_set_config_failed); + memcpy(client->connect_info.will_message, config->lwt_msg, config->lwt_msg_len); + client->connect_info.will_length = config->lwt_msg_len; + } else if (config->lwt_msg) { + client->connect_info.will_message = strdup(config->lwt_msg); + ESP_MEM_CHECK(TAG, client->connect_info.will_message, goto _mqtt_set_config_failed); + client->connect_info.will_length = strlen(config->lwt_msg); + } + + client->connect_info.will_qos = config->lwt_qos; + client->connect_info.will_retain = config->lwt_retain; + + client->connect_info.clean_session = 1; + if (config->disable_clean_session) { + client->connect_info.clean_session = false; + } + client->connect_info.keepalive = config->keepalive; + if (client->connect_info.keepalive == 0) { + client->connect_info.keepalive = MQTT_KEEPALIVE_TICK; + } + cfg->network_timeout_ms = MQTT_NETWORK_TIMEOUT_MS; + cfg->user_context = config->user_context; + cfg->event_handle = config->event_handle; + cfg->auto_reconnect = true; + if (config->disable_auto_reconnect) { + cfg->auto_reconnect = false; + } + + + return err; +_mqtt_set_config_failed: + esp_mqtt_destroy_config(client); + return err; +} + +static esp_err_t esp_mqtt_destroy_config(esp_mqtt_client_handle_t client) +{ + mqtt_config_storage_t *cfg = client->config; + free(cfg->host); + free(cfg->uri); + free(cfg->path); + free(cfg->scheme); + free(client->connect_info.will_topic); + free(client->connect_info.will_message); + free(client->connect_info.client_id); + free(client->connect_info.username); + free(client->connect_info.password); + free(client->config); + return ESP_OK; +} + +static esp_err_t esp_mqtt_connect(esp_mqtt_client_handle_t client, int timeout_ms) +{ + int write_len, read_len, connect_rsp_code; + client->wait_for_ping_resp = false; + mqtt_msg_init(&client->mqtt_state.mqtt_connection, + client->mqtt_state.out_buffer, + client->mqtt_state.out_buffer_length); + client->mqtt_state.outbound_message = mqtt_msg_connect(&client->mqtt_state.mqtt_connection, + client->mqtt_state.connect_info); + client->mqtt_state.pending_msg_type = mqtt_get_type(client->mqtt_state.outbound_message->data); + client->mqtt_state.pending_msg_id = mqtt_get_id(client->mqtt_state.outbound_message->data, + client->mqtt_state.outbound_message->length); + ESP_LOGI(TAG, "Sending MQTT CONNECT message, type: %d, id: %04X", + client->mqtt_state.pending_msg_type, + client->mqtt_state.pending_msg_id); + + write_len = esp_transport_write(client->transport, + (char *)client->mqtt_state.outbound_message->data, + client->mqtt_state.outbound_message->length, + client->config->network_timeout_ms); + if (write_len < 0) { + ESP_LOGE(TAG, "Writing failed, errno= %d", errno); + return ESP_FAIL; + } + read_len = esp_transport_read(client->transport, + (char *)client->mqtt_state.in_buffer, + client->mqtt_state.in_buffer_length, + client->config->network_timeout_ms); + if (read_len < 0) { + ESP_LOGE(TAG, "Error network response"); + return ESP_FAIL; + } + + if (mqtt_get_type(client->mqtt_state.in_buffer) != MQTT_MSG_TYPE_CONNACK) { + ESP_LOGE(TAG, "Invalid MSG_TYPE response: %d, read_len: %d", mqtt_get_type(client->mqtt_state.in_buffer), read_len); + return ESP_FAIL; + } + connect_rsp_code = mqtt_get_connect_return_code(client->mqtt_state.in_buffer); + switch (connect_rsp_code) { + case CONNECTION_ACCEPTED: + ESP_LOGD(TAG, "Connected"); + return ESP_OK; + case CONNECTION_REFUSE_PROTOCOL: + ESP_LOGW(TAG, "Connection refused, bad protocol"); + return ESP_FAIL; + case CONNECTION_REFUSE_SERVER_UNAVAILABLE: + ESP_LOGW(TAG, "Connection refused, server unavailable"); + return ESP_FAIL; + case CONNECTION_REFUSE_BAD_USERNAME: + ESP_LOGW(TAG, "Connection refused, bad username or password"); + return ESP_FAIL; + case CONNECTION_REFUSE_NOT_AUTHORIZED: + ESP_LOGW(TAG, "Connection refused, not authorized"); + return ESP_FAIL; + default: + ESP_LOGW(TAG, "Connection refused, Unknow reason"); + return ESP_FAIL; + } + return ESP_OK; +} + +static esp_err_t esp_mqtt_abort_connection(esp_mqtt_client_handle_t client) +{ + esp_transport_close(client->transport); + client->wait_timeout_ms = MQTT_RECONNECT_TIMEOUT_MS; + client->reconnect_tick = platform_tick_get_ms(); + client->state = MQTT_STATE_WAIT_TIMEOUT; + ESP_LOGI(TAG, "Reconnect after %d ms", client->wait_timeout_ms); + client->event.event_id = MQTT_EVENT_DISCONNECTED; + client->wait_for_ping_resp = false; + esp_mqtt_dispatch_event(client); + return ESP_OK; +} + +esp_mqtt_client_handle_t esp_mqtt_client_init(const esp_mqtt_client_config_t *config) +{ + esp_mqtt_client_handle_t client = calloc(1, sizeof(struct esp_mqtt_client)); + ESP_MEM_CHECK(TAG, client, return NULL); + + esp_mqtt_set_config(client, config); + + client->transport_list = esp_transport_list_init(); + ESP_MEM_CHECK(TAG, client->transport_list, goto _mqtt_init_failed); + + esp_transport_handle_t tcp = esp_transport_tcp_init(); + ESP_MEM_CHECK(TAG, tcp, goto _mqtt_init_failed); + esp_transport_set_default_port(tcp, MQTT_TCP_DEFAULT_PORT); + esp_transport_list_add(client->transport_list, tcp, "mqtt"); + if (config->transport == MQTT_TRANSPORT_OVER_TCP) { + client->config->scheme = create_string("mqtt", 4); + ESP_MEM_CHECK(TAG, client->config->scheme, goto _mqtt_init_failed); + } + +#if MQTT_ENABLE_WS + esp_transport_handle_t ws = esp_transport_ws_init(tcp); + ESP_MEM_CHECK(TAG, ws, goto _mqtt_init_failed); + esp_transport_set_default_port(ws, MQTT_WS_DEFAULT_PORT); + esp_transport_list_add(client->transport_list, ws, "ws"); + if (config->transport == MQTT_TRANSPORT_OVER_WS) { + client->config->scheme = create_string("ws", 2); + ESP_MEM_CHECK(TAG, client->config->scheme, goto _mqtt_init_failed); + } +#endif + +#if MQTT_ENABLE_SSL + esp_transport_handle_t ssl = esp_transport_ssl_init(); + ESP_MEM_CHECK(TAG, ssl, goto _mqtt_init_failed); + esp_transport_set_default_port(ssl, MQTT_SSL_DEFAULT_PORT); + if (config->cert_pem) { + esp_transport_ssl_set_cert_data(ssl, config->cert_pem, strlen(config->cert_pem)); + } + if (config->client_cert_pem) { + esp_transport_ssl_set_client_cert_data(ssl, config->client_cert_pem, strlen(config->client_cert_pem)); + } + if (config->client_key_pem) { + esp_transport_ssl_set_client_key_data(ssl, config->client_key_pem, strlen(config->client_key_pem)); + } + esp_transport_list_add(client->transport_list, ssl, "mqtts"); + if (config->transport == MQTT_TRANSPORT_OVER_SSL) { + client->config->scheme = create_string("mqtts", 5); + ESP_MEM_CHECK(TAG, client->config->scheme, goto _mqtt_init_failed); + } +#endif + +#if MQTT_ENABLE_WSS + esp_transport_handle_t wss = esp_transport_ws_init(ssl); + ESP_MEM_CHECK(TAG, wss, goto _mqtt_init_failed); + esp_transport_set_default_port(wss, MQTT_WSS_DEFAULT_PORT); + esp_transport_list_add(client->transport_list, wss, "wss"); + if (config->transport == MQTT_TRANSPORT_OVER_WSS) { + client->config->scheme = create_string("wss", 3); + ESP_MEM_CHECK(TAG, client->config->scheme, goto _mqtt_init_failed); + } +#endif + if (client->config->uri) { + if (esp_mqtt_client_set_uri(client, client->config->uri) != ESP_OK) { + goto _mqtt_init_failed; + } + } + + if (client->config->scheme == NULL) { + client->config->scheme = create_string("mqtt", 4); + ESP_MEM_CHECK(TAG, client->config->scheme, goto _mqtt_init_failed); + } + + client->keepalive_tick = platform_tick_get_ms(); + client->reconnect_tick = platform_tick_get_ms(); + client->wait_for_ping_resp = false; + int buffer_size = config->buffer_size; + if (buffer_size <= 0) { + buffer_size = MQTT_BUFFER_SIZE_BYTE; + } + + client->mqtt_state.in_buffer = (uint8_t *)malloc(buffer_size); + ESP_MEM_CHECK(TAG, client->mqtt_state.in_buffer, goto _mqtt_init_failed); + client->mqtt_state.in_buffer_length = buffer_size; + client->mqtt_state.out_buffer = (uint8_t *)malloc(buffer_size); + ESP_MEM_CHECK(TAG, client->mqtt_state.out_buffer, goto _mqtt_init_failed); + + client->mqtt_state.out_buffer_length = buffer_size; + client->mqtt_state.connect_info = &client->connect_info; + client->outbox = outbox_init(); + ESP_MEM_CHECK(TAG, client->outbox, goto _mqtt_init_failed); + client->status_bits = xEventGroupCreate(); + ESP_MEM_CHECK(TAG, client->status_bits, goto _mqtt_init_failed); + return client; +_mqtt_init_failed: + esp_mqtt_client_destroy(client); + return NULL; +} + +esp_err_t esp_mqtt_client_destroy(esp_mqtt_client_handle_t client) +{ + esp_mqtt_client_stop(client); + esp_mqtt_destroy_config(client); + esp_transport_list_destroy(client->transport_list); + outbox_destroy(client->outbox); + vEventGroupDelete(client->status_bits); + free(client->mqtt_state.in_buffer); + free(client->mqtt_state.out_buffer); + free(client); + return ESP_OK; +} + +static char *create_string(const char *ptr, int len) +{ + char *ret; + if (len <= 0) { + return NULL; + } + ret = calloc(1, len + 1); + ESP_MEM_CHECK(TAG, ret, return NULL); + memcpy(ret, ptr, len); + return ret; +} + +esp_err_t esp_mqtt_client_set_uri(esp_mqtt_client_handle_t client, const char *uri) +{ + struct http_parser_url puri; + http_parser_url_init(&puri); + int parser_status = http_parser_parse_url(uri, strlen(uri), 0, &puri); + if (parser_status != 0) { + ESP_LOGE(TAG, "Error parse uri = %s", uri); + return ESP_FAIL; + } + + if (client->config->scheme == NULL) { + client->config->scheme = create_string(uri + puri.field_data[UF_SCHEMA].off, puri.field_data[UF_SCHEMA].len); + } + + if (client->config->host == NULL) { + client->config->host = create_string(uri + puri.field_data[UF_HOST].off, puri.field_data[UF_HOST].len); + } + + if (client->config->path == NULL) { + client->config->path = create_string(uri + puri.field_data[UF_PATH].off, puri.field_data[UF_PATH].len); + } + if (client->config->path) { + esp_transport_handle_t trans = esp_transport_list_get_transport(client->transport_list, "ws"); + if (trans) { + esp_transport_ws_set_path(trans, client->config->path); + } + trans = esp_transport_list_get_transport(client->transport_list, "wss"); + if (trans) { + esp_transport_ws_set_path(trans, client->config->path); + } + } + + if (puri.field_data[UF_PORT].len) { + client->config->port = strtol((const char*)(uri + puri.field_data[UF_PORT].off), NULL, 10); + } + + char *user_info = create_string(uri + puri.field_data[UF_USERINFO].off, puri.field_data[UF_USERINFO].len); + if (user_info) { + char *pass = strchr(user_info, ':'); + if (pass) { + pass[0] = 0; //terminal username + pass ++; + client->connect_info.password = strdup(pass); + } + client->connect_info.username = strdup(user_info); + + free(user_info); + } + + return ESP_OK; +} + +static esp_err_t mqtt_write_data(esp_mqtt_client_handle_t client) +{ + int write_len = esp_transport_write(client->transport, + (char *)client->mqtt_state.outbound_message->data, + client->mqtt_state.outbound_message->length, + client->config->network_timeout_ms); + // client->mqtt_state.pending_msg_type = mqtt_get_type(client->mqtt_state.outbound_message->data); + if (write_len <= 0) { + ESP_LOGE(TAG, "Error write data or timeout, written len = %d", write_len); + return ESP_FAIL; + } + /* we've just sent a mqtt control packet, update keepalive counter + * [MQTT-3.1.2-23] + */ + client->keepalive_tick = platform_tick_get_ms(); + return ESP_OK; +} + +static esp_err_t esp_mqtt_dispatch_event(esp_mqtt_client_handle_t client) +{ + client->event.msg_id = mqtt_get_id(client->mqtt_state.in_buffer, client->mqtt_state.in_buffer_length); + client->event.user_context = client->config->user_context; + client->event.client = client; + + if (client->config->event_handle) { + return client->config->event_handle(&client->event); + } + return ESP_FAIL; +} + + +typedef struct { + char *path; + char *buffer; + esp_transport_handle_t parent; +} transport_ws_t; + +static void deliver_publish(esp_mqtt_client_handle_t client, uint8_t *message, int length) +{ + const char *mqtt_topic, *mqtt_data; + uint32_t mqtt_topic_length, mqtt_data_length; + uint32_t mqtt_len, mqtt_offset = 0, total_mqtt_len = 0; + int len_read; + esp_transport_handle_t transport = client->transport; + + do + { + if (total_mqtt_len == 0) { + mqtt_topic_length = length; + mqtt_topic = mqtt_get_publish_topic(message, &mqtt_topic_length); + mqtt_data_length = length; + mqtt_data = mqtt_get_publish_data(message, &mqtt_data_length); + total_mqtt_len = client->mqtt_state.message_length - client->mqtt_state.message_length_read + mqtt_data_length; + mqtt_len = mqtt_data_length; + /* any further reading only the underlying payload */ + transport = esp_transport_get_payload_transport_handle(transport); + } else { + mqtt_len = len_read; + mqtt_data = (const char*)client->mqtt_state.in_buffer; + mqtt_topic = NULL; + mqtt_topic_length = 0; + } + + ESP_LOGD(TAG, "Get data len= %d, topic len=%d", mqtt_len, mqtt_topic_length); + client->event.event_id = MQTT_EVENT_DATA; + client->event.data = (char *)mqtt_data; + client->event.data_len = mqtt_len; + client->event.total_data_len = total_mqtt_len; + client->event.current_data_offset = mqtt_offset; + client->event.topic = (char *)mqtt_topic; + client->event.topic_len = mqtt_topic_length; + esp_mqtt_dispatch_event(client); + + mqtt_offset += mqtt_len; + if (client->mqtt_state.message_length_read >= client->mqtt_state.message_length) { + break; + } + + len_read = esp_transport_read(transport, + (char *)client->mqtt_state.in_buffer, + client->mqtt_state.message_length - client->mqtt_state.message_length_read > client->mqtt_state.in_buffer_length ? + client->mqtt_state.in_buffer_length : client->mqtt_state.message_length - client->mqtt_state.message_length_read, + client->config->network_timeout_ms); + if (len_read <= 0) { + ESP_LOGE(TAG, "Read error or timeout: %d", errno); + break; + } + client->mqtt_state.message_length_read += len_read; + } while (1); + + +} + +static bool is_valid_mqtt_msg(esp_mqtt_client_handle_t client, int msg_type, int msg_id) +{ + ESP_LOGD(TAG, "pending_id=%d, pending_msg_count = %d", client->mqtt_state.pending_msg_id, client->mqtt_state.pending_msg_count); + if (client->mqtt_state.pending_msg_count == 0) { + return false; + } + if (outbox_delete(client->outbox, msg_id, msg_type) == ESP_OK) { + client->mqtt_state.pending_msg_count --; + return true; + } + if (client->mqtt_state.pending_msg_type == msg_type && client->mqtt_state.pending_msg_id == msg_id) { + client->mqtt_state.pending_msg_count --; + return true; + } + + return false; +} + +static void mqtt_enqueue(esp_mqtt_client_handle_t client) +{ + ESP_LOGD(TAG, "mqtt_enqueue id: %d, type=%d successful", + client->mqtt_state.pending_msg_id, client->mqtt_state.pending_msg_type); + //lock mutex + if (client->mqtt_state.pending_msg_count > 0) { + //Copy to queue buffer + outbox_enqueue(client->outbox, + client->mqtt_state.outbound_message->data, + client->mqtt_state.outbound_message->length, + client->mqtt_state.pending_msg_id, + client->mqtt_state.pending_msg_type, + platform_tick_get_ms()); + } + //unlock +} + +static esp_err_t mqtt_process_receive(esp_mqtt_client_handle_t client) +{ + int read_len; + uint8_t msg_type; + uint8_t msg_qos; + uint16_t msg_id; + + read_len = esp_transport_read(client->transport, (char *)client->mqtt_state.in_buffer, client->mqtt_state.in_buffer_length, 1000); + + if (read_len < 0) { + ESP_LOGE(TAG, "Read error or end of stream"); + return ESP_FAIL; + } + + if (read_len == 0) { + return ESP_OK; + } + + msg_type = mqtt_get_type(client->mqtt_state.in_buffer); + msg_qos = mqtt_get_qos(client->mqtt_state.in_buffer); + msg_id = mqtt_get_id(client->mqtt_state.in_buffer, client->mqtt_state.in_buffer_length); + + ESP_LOGD(TAG, "msg_type=%d, msg_id=%d", msg_type, msg_id); + switch (msg_type) + { + case MQTT_MSG_TYPE_SUBACK: + if (is_valid_mqtt_msg(client, MQTT_MSG_TYPE_SUBSCRIBE, msg_id)) { + ESP_LOGD(TAG, "Subscribe successful"); + client->event.event_id = MQTT_EVENT_SUBSCRIBED; + esp_mqtt_dispatch_event(client); + } + break; + case MQTT_MSG_TYPE_UNSUBACK: + if (is_valid_mqtt_msg(client, MQTT_MSG_TYPE_UNSUBSCRIBE, msg_id)) { + ESP_LOGD(TAG, "UnSubscribe successful"); + client->event.event_id = MQTT_EVENT_UNSUBSCRIBED; + esp_mqtt_dispatch_event(client); + } + break; + case MQTT_MSG_TYPE_PUBLISH: + if (msg_qos == 1) { + client->mqtt_state.outbound_message = mqtt_msg_puback(&client->mqtt_state.mqtt_connection, msg_id); + } + else if (msg_qos == 2) { + client->mqtt_state.outbound_message = mqtt_msg_pubrec(&client->mqtt_state.mqtt_connection, msg_id); + } + + if (msg_qos == 1 || msg_qos == 2) { + ESP_LOGD(TAG, "Queue response QoS: %d", msg_qos); + + if (mqtt_write_data(client) != ESP_OK) { + ESP_LOGE(TAG, "Error write qos msg repsonse, qos = %d", msg_qos); + // TODO: Shoule reconnect? + // return ESP_FAIL; + } + } + client->mqtt_state.message_length_read = read_len; + client->mqtt_state.message_length = mqtt_get_total_length(client->mqtt_state.in_buffer, client->mqtt_state.message_length_read); + ESP_LOGI(TAG, "deliver_publish, message_length_read=%d, message_length=%d", read_len, client->mqtt_state.message_length); + + deliver_publish(client, client->mqtt_state.in_buffer, client->mqtt_state.message_length_read); + break; + case MQTT_MSG_TYPE_PUBACK: + if (is_valid_mqtt_msg(client, MQTT_MSG_TYPE_PUBLISH, msg_id)) { + ESP_LOGD(TAG, "received MQTT_MSG_TYPE_PUBACK, finish QoS1 publish"); + client->event.event_id = MQTT_EVENT_PUBLISHED; + esp_mqtt_dispatch_event(client); + } + + break; + case MQTT_MSG_TYPE_PUBREC: + ESP_LOGD(TAG, "received MQTT_MSG_TYPE_PUBREC"); + client->mqtt_state.outbound_message = mqtt_msg_pubrel(&client->mqtt_state.mqtt_connection, msg_id); + mqtt_write_data(client); + break; + case MQTT_MSG_TYPE_PUBREL: + ESP_LOGD(TAG, "received MQTT_MSG_TYPE_PUBREL"); + client->mqtt_state.outbound_message = mqtt_msg_pubcomp(&client->mqtt_state.mqtt_connection, msg_id); + mqtt_write_data(client); + + break; + case MQTT_MSG_TYPE_PUBCOMP: + ESP_LOGD(TAG, "received MQTT_MSG_TYPE_PUBCOMP"); + if (is_valid_mqtt_msg(client, MQTT_MSG_TYPE_PUBLISH, msg_id)) { + ESP_LOGD(TAG, "Receive MQTT_MSG_TYPE_PUBCOMP, finish QoS2 publish"); + client->event.event_id = MQTT_EVENT_PUBLISHED; + esp_mqtt_dispatch_event(client); + } + break; + case MQTT_MSG_TYPE_PINGRESP: + ESP_LOGD(TAG, "MQTT_MSG_TYPE_PINGRESP"); + client->wait_for_ping_resp = false; + break; + } + + return ESP_OK; +} + +static void esp_mqtt_task(void *pv) +{ + esp_mqtt_client_handle_t client = (esp_mqtt_client_handle_t) pv; + client->run = true; + + //get transport by scheme + client->transport = esp_transport_list_get_transport(client->transport_list, client->config->scheme); + + if (client->transport == NULL) { + ESP_LOGE(TAG, "There are no transports valid, stop mqtt client, config scheme = %s", client->config->scheme); + client->run = false; + } + //default port + if (client->config->port == 0) { + client->config->port = esp_transport_get_default_port(client->transport); + } + + client->state = MQTT_STATE_INIT; + xEventGroupClearBits(client->status_bits, STOPPED_BIT); + while (client->run) { + + switch ((int)client->state) { + case MQTT_STATE_INIT: + if (client->transport == NULL) { + ESP_LOGE(TAG, "There are no transport"); + client->run = false; + } + + if (esp_transport_connect(client->transport, + client->config->host, + client->config->port, + client->config->network_timeout_ms) < 0) { + ESP_LOGE(TAG, "Error transport connect"); + esp_mqtt_abort_connection(client); + break; + } + ESP_LOGD(TAG, "Transport connected to %s://%s:%d", client->config->scheme, client->config->host, client->config->port); + if (esp_mqtt_connect(client, client->config->network_timeout_ms) != ESP_OK) { + ESP_LOGI(TAG, "Error MQTT Connected"); + esp_mqtt_abort_connection(client); + break; + } + client->event.event_id = MQTT_EVENT_CONNECTED; + client->event.session_present = mqtt_get_connect_session_present(client->mqtt_state.in_buffer); + client->state = MQTT_STATE_CONNECTED; + esp_mqtt_dispatch_event(client); + + break; + case MQTT_STATE_CONNECTED: + // receive and process data + if (mqtt_process_receive(client) == ESP_FAIL) { + esp_mqtt_abort_connection(client); + break; + } + + if (platform_tick_get_ms() - client->keepalive_tick > client->connect_info.keepalive * 1000 / 2) { + //No ping resp from last ping => Disconnected + if(client->wait_for_ping_resp){ + ESP_LOGE(TAG, "No PING_RESP, disconnected"); + esp_mqtt_abort_connection(client); + client->wait_for_ping_resp = false; + break; + } + if (esp_mqtt_client_ping(client) == ESP_FAIL) { + ESP_LOGE(TAG, "Can't send ping, disconnected"); + esp_mqtt_abort_connection(client); + break; + } else { + client->wait_for_ping_resp = true; + } + ESP_LOGD(TAG, "PING sent"); + } + + //Delete mesaage after 30 senconds + outbox_delete_expired(client->outbox, platform_tick_get_ms(), OUTBOX_EXPIRED_TIMEOUT_MS); + // + outbox_cleanup(client->outbox, OUTBOX_MAX_SIZE); + break; + case MQTT_STATE_WAIT_TIMEOUT: + + if (!client->config->auto_reconnect) { + client->run = false; + break; + } + if (platform_tick_get_ms() - client->reconnect_tick > client->wait_timeout_ms) { + client->state = MQTT_STATE_INIT; + client->reconnect_tick = platform_tick_get_ms(); + ESP_LOGD(TAG, "Reconnecting..."); + } + vTaskDelay(client->wait_timeout_ms / 2 / portTICK_RATE_MS); + break; + } + } + esp_transport_close(client->transport); + xEventGroupSetBits(client->status_bits, STOPPED_BIT); + + vTaskDelete(NULL); +} + +esp_err_t esp_mqtt_client_start(esp_mqtt_client_handle_t client) +{ + if (client->state >= MQTT_STATE_INIT) { + ESP_LOGE(TAG, "Client has started"); + return ESP_FAIL; + } +#if MQTT_CORE_SELECTION_ENABLED + ESP_LOGD(TAG, "Core selection enabled on %u", MQTT_TASK_CORE); + if (xTaskCreatePinnedToCore(esp_mqtt_task, "mqtt_task", client->config->task_stack, client, client->config->task_prio, NULL, MQTT_TASK_CORE) != pdTRUE) { + ESP_LOGE(TAG, "Error create mqtt task"); + return ESP_FAIL; + } +#else + ESP_LOGD(TAG, "Core selection disabled"); + if (xTaskCreate(esp_mqtt_task, "mqtt_task", client->config->task_stack, client, client->config->task_prio, NULL) != pdTRUE) { + ESP_LOGE(TAG, "Error create mqtt task"); + return ESP_FAIL; + } +#endif + return ESP_OK; +} + +esp_err_t esp_mqtt_client_stop(esp_mqtt_client_handle_t client) +{ + if (client->run) { + client->run = false; + xEventGroupWaitBits(client->status_bits, STOPPED_BIT, false, true, portMAX_DELAY); + client->state = MQTT_STATE_UNKNOWN; + return ESP_OK; + } else { + ESP_LOGW(TAG, "Client asked to stop, but was not started"); + return ESP_FAIL; + } +} + +static esp_err_t esp_mqtt_client_ping(esp_mqtt_client_handle_t client) +{ + client->mqtt_state.outbound_message = mqtt_msg_pingreq(&client->mqtt_state.mqtt_connection); + + if (mqtt_write_data(client) != ESP_OK) { + ESP_LOGE(TAG, "Error sending ping"); + return ESP_FAIL; + } + ESP_LOGD(TAG, "Sent PING successful"); + return ESP_OK; +} + +int esp_mqtt_client_subscribe(esp_mqtt_client_handle_t client, const char *topic, int qos) +{ + if (client->state != MQTT_STATE_CONNECTED) { + ESP_LOGE(TAG, "Client has not connected"); + return -1; + } + mqtt_enqueue(client); //move pending msg to outbox (if have) + client->mqtt_state.outbound_message = mqtt_msg_subscribe(&client->mqtt_state.mqtt_connection, + topic, qos, + &client->mqtt_state.pending_msg_id); + + client->mqtt_state.pending_msg_type = mqtt_get_type(client->mqtt_state.outbound_message->data); + client->mqtt_state.pending_msg_count ++; + + if (mqtt_write_data(client) != ESP_OK) { + ESP_LOGE(TAG, "Error to subscribe topic=%s, qos=%d", topic, qos); + return -1; + } + + ESP_LOGD(TAG, "Sent subscribe topic=%s, id: %d, type=%d successful", topic, client->mqtt_state.pending_msg_id, client->mqtt_state.pending_msg_type); + return client->mqtt_state.pending_msg_id; +} + +int esp_mqtt_client_unsubscribe(esp_mqtt_client_handle_t client, const char *topic) +{ + if (client->state != MQTT_STATE_CONNECTED) { + ESP_LOGE(TAG, "Client has not connected"); + return -1; + } + mqtt_enqueue(client); + client->mqtt_state.outbound_message = mqtt_msg_unsubscribe(&client->mqtt_state.mqtt_connection, + topic, + &client->mqtt_state.pending_msg_id); + ESP_LOGD(TAG, "unsubscribe, topic\"%s\", id: %d", topic, client->mqtt_state.pending_msg_id); + + client->mqtt_state.pending_msg_type = mqtt_get_type(client->mqtt_state.outbound_message->data); + client->mqtt_state.pending_msg_count ++; + + if (mqtt_write_data(client) != ESP_OK) { + ESP_LOGE(TAG, "Error to unsubscribe topic=%s", topic); + return -1; + } + + ESP_LOGD(TAG, "Sent Unsubscribe topic=%s, id: %d, successful", topic, client->mqtt_state.pending_msg_id); + return client->mqtt_state.pending_msg_id; +} + +int esp_mqtt_client_publish(esp_mqtt_client_handle_t client, const char *topic, const char *data, int len, int qos, int retain) +{ + uint16_t pending_msg_id = 0; + if (client->state != MQTT_STATE_CONNECTED) { + ESP_LOGE(TAG, "Client has not connected"); + return -1; + } + if (len <= 0) { + len = strlen(data); + } + + mqtt_message_t *publish_msg = mqtt_msg_publish(&client->mqtt_state.mqtt_connection, + topic, data, len, + qos, retain, + &pending_msg_id); + + /* We have to set as pending all the qos>0 messages) */ + if (qos > 0) { + mqtt_enqueue(client); + client->mqtt_state.outbound_message = publish_msg; + client->mqtt_state.pending_msg_type = mqtt_get_type(client->mqtt_state.outbound_message->data); + client->mqtt_state.pending_msg_id = pending_msg_id; + client->mqtt_state.pending_msg_count ++; + } else { + client->mqtt_state.outbound_message = publish_msg; + } + + if (mqtt_write_data(client) != ESP_OK) { + ESP_LOGE(TAG, "Error to public data to topic=%s, qos=%d", topic, qos); + return -1; + } + return pending_msg_id; +} + + diff --git a/components/mqtt/paho/MQTTClient-C/src/FreeRTOS/MQTTFreeRTOS.c b/components/mqtt/ibm-mqtt/MQTTClient-C/src/FreeRTOS/MQTTFreeRTOS.c similarity index 100% rename from components/mqtt/paho/MQTTClient-C/src/FreeRTOS/MQTTFreeRTOS.c rename to components/mqtt/ibm-mqtt/MQTTClient-C/src/FreeRTOS/MQTTFreeRTOS.c diff --git a/components/mqtt/paho/MQTTClient-C/src/FreeRTOS/MQTTFreeRTOS.h b/components/mqtt/ibm-mqtt/MQTTClient-C/src/FreeRTOS/MQTTFreeRTOS.h similarity index 100% rename from components/mqtt/paho/MQTTClient-C/src/FreeRTOS/MQTTFreeRTOS.h rename to components/mqtt/ibm-mqtt/MQTTClient-C/src/FreeRTOS/MQTTFreeRTOS.h diff --git a/components/mqtt/paho/MQTTClient-C/src/MQTTClient.c b/components/mqtt/ibm-mqtt/MQTTClient-C/src/MQTTClient.c similarity index 100% rename from components/mqtt/paho/MQTTClient-C/src/MQTTClient.c rename to components/mqtt/ibm-mqtt/MQTTClient-C/src/MQTTClient.c diff --git a/components/mqtt/paho/MQTTClient-C/src/MQTTClient.h b/components/mqtt/ibm-mqtt/MQTTClient-C/src/MQTTClient.h similarity index 100% rename from components/mqtt/paho/MQTTClient-C/src/MQTTClient.h rename to components/mqtt/ibm-mqtt/MQTTClient-C/src/MQTTClient.h diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTConnect.h b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTConnect.h similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTConnect.h rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTConnect.h diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTConnectClient.c b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTConnectClient.c similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTConnectClient.c rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTConnectClient.c diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTConnectServer.c b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTConnectServer.c similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTConnectServer.c rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTConnectServer.c diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTDeserializePublish.c b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTDeserializePublish.c similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTDeserializePublish.c rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTDeserializePublish.c diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTFormat.c b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTFormat.c similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTFormat.c rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTFormat.c diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTFormat.h b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTFormat.h similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTFormat.h rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTFormat.h diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTPacket.c b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTPacket.c similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTPacket.c rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTPacket.c diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTPacket.h b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTPacket.h similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTPacket.h rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTPacket.h diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTPublish.h b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTPublish.h similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTPublish.h rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTPublish.h diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTSerializePublish.c b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTSerializePublish.c similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTSerializePublish.c rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTSerializePublish.c diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTSubscribe.h b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTSubscribe.h similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTSubscribe.h rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTSubscribe.h diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTSubscribeClient.c b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTSubscribeClient.c similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTSubscribeClient.c rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTSubscribeClient.c diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTSubscribeServer.c b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTSubscribeServer.c similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTSubscribeServer.c rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTSubscribeServer.c diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTUnsubscribe.h b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTUnsubscribe.h similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTUnsubscribe.h rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTUnsubscribe.h diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTUnsubscribeClient.c b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTUnsubscribeClient.c similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTUnsubscribeClient.c rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTUnsubscribeClient.c diff --git a/components/mqtt/paho/MQTTPacket/src/MQTTUnsubscribeServer.c b/components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTUnsubscribeServer.c similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/MQTTUnsubscribeServer.c rename to components/mqtt/ibm-mqtt/MQTTPacket/src/MQTTUnsubscribeServer.c diff --git a/components/mqtt/paho/MQTTPacket/src/StackTrace.h b/components/mqtt/ibm-mqtt/MQTTPacket/src/StackTrace.h similarity index 100% rename from components/mqtt/paho/MQTTPacket/src/StackTrace.h rename to components/mqtt/ibm-mqtt/MQTTPacket/src/StackTrace.h