From 07e2add9960fb3ab7333acd84fb2c697f3efc6a6 Mon Sep 17 00:00:00 2001 From: Khoi Hoang <57012152+khoih-prog@users.noreply.github.com> Date: Tue, 30 Aug 2022 22:59:23 -0400 Subject: [PATCH] v1.9.0 to fix bug and optimize code ### Releases v1.9.0 1. Fix long timeout if using `IPAddress`. Check [setTimeout() hasn't any effect #38](https://github.com/khoih-prog/AsyncHTTPRequest_Generic/issues/38) 2. Optimize code 3. Display only successful responseText in examples 4. Improve debug messages by adding functions to display error messages instead of `cryptic error number` 5. Remove support to STM32 using **LAN8720** due to problem with new STM32 core v2.3.0 5. Update `Packages' Patches` --- CONTRIBUTING.md | 2 +- README.md | 157 ++-------- changelog.md | 10 + .../AsyncCustomHeader_STM32.ino | 29 +- .../AsyncDweetGet_STM32.ino | 37 ++- .../AsyncDweetPost_STM32.ino | 37 ++- .../AsyncHTTPMultiRequests_ESP.ino | 26 +- .../AsyncHTTPRequest_ESP.ino | 30 +- .../AsyncHTTPRequest_ESP8266_Ethernet.ino | 32 +- .../AsyncHTTPRequest_ESP_Multi.ino | 36 ++- .../AsyncHTTPRequest_ESP_WiFiManager.ino | 32 +- .../AsyncHTTPRequest_STM32.ino | 38 ++- .../AsyncSimpleGET_STM32.ino | 37 ++- .../AsyncWebClientRepeating_STM32.ino | 38 ++- .../AsyncHTTPMultiRequests_WT32_ETH01.ino | 24 +- .../AsyncHTTPRequest_WT32_ETH01.ino | 34 +- .../multiFileProject/multiFileProject.ino | 4 +- keywords.txt | 1 + library.json | 10 +- library.properties | 4 +- platformio/platformio.ini | 4 +- src/AsyncHTTPRequest_Debug_Generic.h | 3 +- src/AsyncHTTPRequest_Generic.h | 3 +- src/AsyncHTTPRequest_Generic.hpp | 42 ++- src/AsyncHTTPRequest_Impl_Generic.h | 292 +++++++++++------- 25 files changed, 524 insertions(+), 438 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 72e3a6a..2771142 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,7 +29,7 @@ Please ensure to specify the following: Arduino IDE version: 1.8.19 ESP32 Core Version 2.0.4 OS: Ubuntu 20.04 LTS -Linux xy-Inspiron-3593 5.15.0-41-generic #44~20.04.1-Ubuntu SMP Fri Jun 24 13:27:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux +Linux xy-Inspiron-3593 5.15.0-46-generic #49~20.04.1-Ubuntu SMP Thu Aug 4 19:15:44 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux Context: I encountered an endless loop while trying to connect to Local WiFi. diff --git a/README.md b/README.md index b50e939..2abf003 100644 --- a/README.md +++ b/README.md @@ -56,13 +56,6 @@ * [4. AsyncDweetPost_STM32](examples/AsyncDweetPost_STM32) * [5. AsyncSimpleGET_STM32](examples/AsyncSimpleGET_STM32) * [6. AsyncWebClientRepeating_STM32](examples/AsyncWebClientRepeating_STM32) - * [For STM32 using LAN8720](#for-stm32-using-lan8720) - * [1. AsyncHTTPRequest_STM32_LAN8720](examples/STM32_LAN8720/AsyncHTTPRequest_STM32_LAN8720) - * [2. AsyncCustomHeader_STM32_LAN8720](examples/STM32_LAN8720/AsyncCustomHeader_STM32_LAN8720) - * [3. AsyncDweetGet_STM32_LAN8720](examples/STM32_LAN8720/AsyncDweetGet_STM32_LAN8720) - * [4. AsyncDweetPost_STM32_LAN8720](examples/STM32_LAN8720/AsyncDweetPost_STM32_LAN8720) - * [5. AsyncSimpleGET_STM32_LAN8720](examples/STM32_LAN8720/AsyncSimpleGET_STM32_LAN8720) - * [6. AsyncWebClientRepeating_STM32_LAN8720](examples/STM32_LAN8720/AsyncWebClientRepeating_STM32_LAN8720) * [For WT32_ETH01](#for-wt32_eth01) * [1. AsyncHTTPRequest_WT32_ETH01](examples/WT32_ETH01/AsyncHTTPRequest_WT32_ETH01) * [2. AsyncHTTPMultiRequests_WT32_ETH01](examples/WT32_ETH01/AsyncHTTPMultiRequests_WT32_ETH01) @@ -77,14 +70,12 @@ * [3. AsyncHTTPRequest_ESP_WiFiManager running on ESP32_DEV](#3-asynchttprequest_esp_wifimanager-running-on-esp32_dev) * [4. AsyncHTTPRequest_ESP running on ESP8266_NODEMCU](#4-asynchttprequest_esp-running-on-esp8266_nodemcu) * [5. AsyncWebClientRepeating_STM32 running on STM32F7 Nucleo-144 NUCLEO_F767ZI using built-in LAN8742A](#5-asyncwebclientrepeating_stm32-running-on-stm32f7-nucleo-144-nucleo_f767zi-using-built-in-lan8742a) - * [6. AsyncWebClientRepeating_STM32_LAN8720 running on STM32F4 BLACK_F407VE using LAN8720](#6-asyncwebclientrepeating_stm32_lan8720-running-on-stm32f4-black_f407ve-using-lan8720) - * [7. AsyncHTTPMultiRequests_WT32_ETH01 on ESP32_DEV with ETH_PHY_LAN8720](#7-asynchttpmultirequests_wt32_eth01-on-esp32_dev-with-eth_phy_lan8720) - * [8. AsyncHTTPRequest_WT32_ETH01 on ESP32_DEV with ETH_PHY_LAN8720](#8-asynchttprequest_wt32_eth01-on-esp32_dev-with-eth_phy_lan8720) - * [9. AsyncHTTPRequest_ESP_WiFiManager running on ESP32C3_DEV](#9-asynchttprequest_esp_wifimanager-running-on-ESP32C3_DEV) **New** - * [10. AsyncHTTPRequest_ESP_WiFiManager running on ESP32S3_DEV](#10-asynchttprequest_esp_wifimanager-running-on-ESP32S3_DEV) **New** - * [11. AsyncHTTPRequest_ESP_Multi running on ESP32_DEV](#11-AsyncHTTPRequest_ESP_Multi-running-on-ESP32_DEV) **New** - * [12. AsyncHTTPRequest_ESP8266_Ethernet running on ESP8266_NODEMCU_ESP12E using ESP8266_W5500 Ethernet](#12-AsyncHTTPRequest_ESP8266_Ethernet-running-on-ESP8266_NODEMCU_ESP12E-using-ESP8266_W5500-Ethernet) **New** - * [13. AsyncHTTPRequest_ESP8266_Ethernet running on ESP8266_NODEMCU_ESP12E using ESP8266_ENC28J60 Ethernet](#13-AsyncHTTPRequest_ESP8266_Ethernet-running-on-ESP8266_NODEMCU_ESP12E-using-ESP8266_ENC28J60-Ethernet) **New** + * [6. AsyncHTTPRequest_WT32_ETH01 on ESP32_DEV with ETH_PHY_LAN8720](#6-asynchttprequest_wt32_eth01-on-esp32_dev-with-eth_phy_lan8720) + * [7. AsyncHTTPRequest_ESP_WiFiManager running on ESP32C3_DEV](#7-asynchttprequest_esp_wifimanager-running-on-ESP32C3_DEV) **New** + * [8. AsyncHTTPRequest_ESP_WiFiManager running on ESP32S3_DEV](#8-asynchttprequest_esp_wifimanager-running-on-ESP32S3_DEV) **New** + * [9. AsyncHTTPRequest_ESP_Multi running on ESP32_DEV](#9-AsyncHTTPRequest_ESP_Multi-running-on-ESP32_DEV) **New** + * [10. AsyncHTTPRequest_ESP8266_Ethernet running on ESP8266_NODEMCU_ESP12E using ESP8266_W5500 Ethernet](#10-AsyncHTTPRequest_ESP8266_Ethernet-running-on-ESP8266_NODEMCU_ESP12E-using-ESP8266_W5500-Ethernet) **New** + * [11. AsyncHTTPRequest_ESP8266_Ethernet running on ESP8266_NODEMCU_ESP12E using ESP8266_ENC28J60 Ethernet](#11-AsyncHTTPRequest_ESP8266_Ethernet-running-on-ESP8266_NODEMCU_ESP12E-using-ESP8266_ENC28J60-Ethernet) **New** * [Debug](#debug) * [Troubleshooting](#troubleshooting) * [Issues](#issues) @@ -166,6 +157,8 @@ This library is based on, modified from: #### 4. STM32 boards using Ethernet LAN8720 +Support for LAN8720 has been **removed** from STM32 core v2.3.0 + 1. **Nucleo-144 (F429ZI, NUCLEO_F746NG, NUCLEO_F746ZG, NUCLEO_F756ZG)** 2. **Discovery (DISCO_F746NG)** 3. **STM32F4 boards (BLACK_F407VE, BLACK_F407VG, BLACK_F407ZE, BLACK_F407ZG, BLACK_F407VE_Mini, DIYMORE_F407VGT, FK407M1)** @@ -187,7 +180,7 @@ This library is based on, modified from: 8. [`STM32Ethernet library v1.3.0+`](https://github.com/stm32duino/STM32Ethernet) for STM32 using built-in Ethernet LAN8742A on (Nucleo-144, Discovery). [![GitHub release](https://img.shields.io/github/release/stm32duino/STM32Ethernet.svg)](https://github.com/stm32duino/STM32Ethernet/releases/latest) 9. [`LwIP library v2.1.2+`](https://github.com/stm32duino/LwIP) for STM32 using built-in Ethernet LAN8742A on (Nucleo-144, Discovery). [![GitHub release](https://img.shields.io/github/release/stm32duino/LwIP.svg)](https://github.com/stm32duino/LwIP/releases/latest) 10. [`STM32AsyncTCP library v1.0.1+`](https://github.com/khoih-prog/STM32AsyncTCP) for built-in Ethernet on (Nucleo-144, Discovery). To install manually for Arduino IDE. -11. [`ESPAsync_WiFiManager library v1.12.2+`](https://github.com/khoih-prog/ESPAsync_WiFiManager) for ESP32/ESP8266 using some examples. [![GitHub release](https://img.shields.io/github/release/khoih-prog/ESPAsync_WiFiManager.svg)](https://github.com/khoih-prog/ESPAsync_WiFiManager/releases) +11. [`ESPAsync_WiFiManager library v1.13.0+`](https://github.com/khoih-prog/ESPAsync_WiFiManager) for ESP32/ESP8266 using some examples. [![GitHub release](https://img.shields.io/github/release/khoih-prog/ESPAsync_WiFiManager.svg)](https://github.com/khoih-prog/ESPAsync_WiFiManager/releases) 12. [`LittleFS_esp32 v1.0.6+`](https://github.com/lorol/LITTLEFS) for ESP32-based boards using LittleFS **only with ESP32 core v1.0.5-**. To install, check [![arduino-library-badge](https://www.ardu-badge.com/badge/LittleFS_esp32.svg?)](https://www.ardu-badge.com/LittleFS_esp32). 13. [`WebServer_WT32_ETH01 library v1.5.0+`](https://github.com/khoih-prog/WebServer_WT32_ETH01) if necessary to use WT32_ETH01 boards. To install, check [![arduino-library-badge](https://www.ardu-badge.com/badge/WebServer_WT32_ETH01.svg?)](https://www.ardu-badge.com/WebServer_WT32_ETH01) @@ -467,15 +460,6 @@ https://github.com/khoih-prog/AsyncHTTPRequest_Generic/blob/e3dd512e7aa9e60c8504 5. [AsyncSimpleGET_STM32](examples/AsyncSimpleGET_STM32) 6. [AsyncWebClientRepeating_STM32](examples/AsyncWebClientRepeating_STM32) -#### For STM32 using LAN8720 - - 1. [AsyncHTTPRequest_STM32_LAN8720](examples/STM32_LAN8720/AsyncHTTPRequest_STM32_LAN8720) - 2. [AsyncCustomHeader_STM32_LAN8720](examples/STM32_LAN8720/AsyncCustomHeader_STM32_LAN8720) - 3. [AsyncDweetGet_STM32_LAN8720](examples/STM32_LAN8720/AsyncDweetGet_STM32_LAN8720) - 4. [AsyncDweetPost_STM32_LAN8720](examples/STM32_LAN8720/AsyncDweetPost_STM32_LAN8720) - 5. [AsyncSimpleGET_STM32_LAN8720](examples/STM32_LAN8720/AsyncSimpleGET_STM32_LAN8720) - 6. [AsyncWebClientRepeating_STM32_LAN8720](examples/STM32_LAN8720/AsyncWebClientRepeating_STM32_LAN8720) - #### For WT32_ETH01 1. [AsyncHTTPRequest_WT32_ETH01](examples/WT32_ETH01/AsyncHTTPRequest_WT32_ETH01) @@ -513,7 +497,7 @@ https://github.com/khoih-prog/AsyncHTTPRequest_Generic/blob/98733a6c4a1906ff53f6 ``` Start AsyncHTTPRequest_STM32 on NUCLEO_F767ZI -AsyncHTTPRequest_Generic v1.8.2 +AsyncHTTPRequest_Generic v1.9.0 AsyncHTTPRequest @ IP : 192.168.2.178 ************************************** @@ -558,7 +542,7 @@ week_number: 15 ``` Starting AsyncHTTPRequest_ESP_WiFiManager using LittleFS on ESP8266_NODEMCU -AsyncHTTPRequest_Generic v1.8.2 +AsyncHTTPRequest_Generic v1.9.0 Stored: SSID = HueNet1, Pass = 12345678 Got stored Credentials. Timeout 120s ConnectMultiWiFi in setup @@ -590,7 +574,7 @@ HHHHHH ``` Starting AsyncHTTPRequest_ESP_WiFiManager using SPIFFS on ESP32_DEV -AsyncHTTPRequest_Generic v1.8.2 +AsyncHTTPRequest_Generic v1.9.0 Stored: SSID = HueNet1, Pass = 12345678 Got stored Credentials. Timeout 120s ConnectMultiWiFi in setup @@ -640,7 +624,7 @@ HHHHHHHHH HHHHHHHHHH HHHHHHHHHH ``` Starting AsyncHTTPRequest_ESP using ESP8266_NODEMCU -AsyncHTTPRequest_Generic v1.8.2 +AsyncHTTPRequest_Generic v1.9.0 Connecting to WiFi SSID: HueNet1 ........... HTTP WebServer is @ IP : 192.168.2.81 @@ -672,7 +656,7 @@ HHHHHHHHH HHHHHHHHHH HHHHHHHHHH H ``` Start AsyncWebClientRepeating_STM32 on NUCLEO_F767ZI -AsyncHTTPRequest_Generic v1.8.2 +AsyncHTTPRequest_Generic v1.9.0 AsyncHTTPRequest @ IP : 192.168.2.72 ************************************** @@ -718,96 +702,15 @@ AsyncHTTPRequest @ IP : 192.168.2.72 ;; ;; ;; ;;` ;;;;. `;;;: ,;;;;;, ;; ;;, ;;;; ``` ---- - -#### 6. [AsyncWebClientRepeating_STM32_LAN8720](examples/STM32_LAN8720/AsyncWebClientRepeating_STM32_LAN8720) running on STM32F4 BLACK_F407VE using LAN8720 - - -``` -Start AsyncWebClientRepeating_STM32_LAN8720 on BLACK_F407VE -AsyncHTTPRequest_Generic v1.8.2 -AsyncHTTPRequest @ IP : 192.168.2.150 - - -************************************** - - `:;;;,` .:;;:. - .;;;;;;;;;;;` :;;;;;;;;;;: TM - `;;;;;;;;;;;;;;;` :;;;;;;;;;;;;;;; - :;;;;;;;;;;;;;;;;;; `;;;;;;;;;;;;;;;;;; - ;;;;;;;;;;;;;;;;;;;;; .;;;;;;;;;;;;;;;;;;;; - ;;;;;;;;:` `;;;;;;;;; ,;;;;;;;;.` .;;;;;;;; - .;;;;;;, :;;;;;;; .;;;;;;; ;;;;;;; - ;;;;;; ;;;;;;; ;;;;;;, ;;;;;;. - ,;;;;; ;;;;;;.;;;;;;` ;;;;;; - ;;;;;. ;;;;;;;;;;;` ``` ;;;;;` - ;;;;; ;;;;;;;;;, ;;; .;;;;; -`;;;;: `;;;;;;;; ;;; ;;;;; -,;;;;` `,,,,,,,, ;;;;;;; .,,;;;,,, ;;;;; -:;;;;` .;;;;;;;; ;;;;;, :;;;;;;;; ;;;;; -:;;;;` .;;;;;;;; `;;;;;; :;;;;;;;; ;;;;; -.;;;;. ;;;;;;;. ;;; ;;;;; - ;;;;; ;;;;;;;;; ;;; ;;;;; - ;;;;; .;;;;;;;;;; ;;; ;;;;;, - ;;;;;; `;;;;;;;;;;;; ;;;;; - `;;;;;, .;;;;;; ;;;;;;; ;;;;;; - ;;;;;;: :;;;;;;. ;;;;;;; ;;;;;; - ;;;;;;;` .;;;;;;;, ;;;;;;;; ;;;;;;;: - ;;;;;;;;;:,:;;;;;;;;;: ;;;;;;;;;;:,;;;;;;;;;; - `;;;;;;;;;;;;;;;;;;;. ;;;;;;;;;;;;;;;;;;;; - ;;;;;;;;;;;;;;;;; :;;;;;;;;;;;;;;;;: - ,;;;;;;;;;;;;;, ;;;;;;;;;;;;;; - .;;;;;;;;;` ,;;;;;;;;: - - - - - ;;; ;;;;;` ;;;;: .;; ;; ,;;;;;, ;;. `;, ;;;; - ;;; ;;:;;; ;;;;;; .;; ;; ,;;;;;: ;;; `;, ;;;:;; - ,;:; ;; ;; ;; ;; .;; ;; ,;, ;;;,`;, ;; ;; - ;; ;: ;; ;; ;; ;; .;; ;; ,;, ;;;;`;, ;; ;;. - ;: ;; ;;;;;: ;; ;; .;; ;; ,;, ;;`;;;, ;; ;;` - ,;;;;; ;;`;; ;; ;; .;; ;; ,;, ;; ;;;, ;; ;; - ;; ,;, ;; .;; ;;;;;: ;;;;;: ,;;;;;: ;; ;;, ;;;;;; - ;; ;; ;; ;;` ;;;;. `;;;: ,;;;;;, ;; ;;, ;;;; - -************************************** -``` --- -#### 7. [AsyncHTTPMultiRequests_WT32_ETH01](examples/WT32_ETH01/AsyncHTTPMultiRequests_WT32_ETH01) on ESP32_DEV with ETH_PHY_LAN8720 +#### 6. [AsyncHTTPRequest_WT32_ETH01](examples/WT32_ETH01/AsyncHTTPRequest_WT32_ETH01) on ESP32_DEV with ETH_PHY_LAN8720 ``` Starting AsyncHTTPRequest_WT32_ETH01 on ESP32_DEV with ETH_PHY_LAN8720 WebServer_WT32_ETH01 v1.5.0 -AsyncHTTPRequest_Generic v1.8.2 -ETH MAC: A8:03:2A:A1:61:73, IPv4: 192.168.2.232, FULL_DUPLEX, 100Mbps -AsyncHTTPRequest @ IP : 192.168.2.232 - - -***************Current*************** -{"lat":-24.32,"lon":-46.9983,"timezone":"America/Sao_Paulo","timezone_offset":-10800,"current":{"dt":1625887856,"sunrise":1625910700,"sunset":1625949281,"temp":290.45,"feels_like":290.51,"pressure":1022,"humidity":87,"dew_point":288.27,"uvi":0,"clouds":97,"visibility":10000,"wind_speed":1.3,"wind_deg":3,"wind_gust":1.77,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}]}} -************************************** -HHHHHH -***************Minutely*************** -{"lat":-24.32,"lon":-46.9983,"timezone":"America/Sao_Paulo","timezone_offset":-10800,"minutely":[{"dt":1625887920,"precipitation":0},{"dt":1625887980,"precipitation":0},{"dt":1625888040,"precipitation":0},{"dt":1625888100,"precipitation":0},{"dt":1625888160,"precipitation":0},{"dt":1625888220,"precipitation":0},{"dt":1625888280,"precipitation":0},{"dt":1625888340,"precipitation":0},{"dt":1625888400,"precipitation":0},{"dt":1625888460,"precipitation":0},{"dt":1625888520,"precipitation":0},{"dt":1625888580,"precipitation":0},{"dt":1625888640,"precipitation":0},{"dt":1625888700,"precipitation":0},{"dt":1625888760,"precipitation":0},{"dt":1625888820,"precipitation":0},{"dt":1625888880,"precipitation":0},{"dt":1625888940,"precipitation":0},{"dt":1625889000,"precipitation":0},{"dt":1625889060,"precipitation":0},{"dt":1625889120,"precipitation":0},{"dt":1625889180,"precipitation":0},{"dt":1625889240,"precipitation":0},{"dt":1625889300,"precipitation":0},{"dt":1625889360,"precipitation":0},{"dt":1625889420,"precipitation":0},{"dt":1625889480,"precipitation":0},{"dt":1625889540,"precipitation":0},{"dt":1625889600,"precipitation":0},{"dt":1625889660,"precipitation":0},{"dt":1625889720,"precipitation":0},{"dt":1625889780,"precipitation":0},{"dt":1625889840,"precipitation":0},{"dt":1625889900,"precipitation":0},{"dt":1625889960,"precipitation":0},{"dt":1625890020,"precipitation":0},{"dt":1625890080,"precipitation":0},{"dt":1625890140,"precipitation":0},{"dt":1625890200,"precipitation":0},{"dt":1625890260,"precipitation":0},{"dt":1625890320,"precipitation":0},{"dt":1625890380,"precipitation":0},{"dt":1625890440,"precipitation":0},{"dt":1625890500,"precipitation":0},{"dt":1625890560,"precipitation":0},{"dt":1625890620,"precipitation":0},{"dt":1625890680,"precipitation":0},{"dt":1625890740,"precipitation":0},{"dt":1625890800,"precipitation":0},{"dt":1625890860,"precipitation":0},{"dt":1625890920,"precipitation":0},{"dt":1625890980,"precipitation":0},{"dt":1625891040,"precipitation":0},{"dt":1625891100,"precipitation":0},{"dt":1625891160,"precipitation":0},{"dt":1625891220,"precipitation":0},{"dt":1625891280,"precipitation":0},{"dt":1625891340,"precipitation":0},{"dt":1625891400,"precipitation":0},{"dt":1625891460,"precipitation":0},{"dt":1625891520,"precipitation":0}]} -************************************** -HHHH HH -***************Daily*************** -{"lat":-24.32,"lon":-46.9983,"timezone":"America/Sao_Paulo","timezone_offset":-10800,"daily":[{"dt":1625929200,"sunrise":1625910700,"sunset":1625949281,"moonrise":1625912640,"moonset":1625951340,"moon_phase":0.02,"temp":{"day":295.51,"min":288.03,"max":295.54,"night":289.23,"eve":290.52,"morn":288.14},"feels_like":{"day":295.42,"night":289.24,"eve":290.69,"morn":288.1},"pressure":1021,"humidity":62,"dew_point":287.26,"wind_speed":2.25,"wind_deg":151,"wind_gust":2.36,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],"clouds":0,"pop":0.01,"uvi":4.97},{"dt":1626015600,"sunrise":1625997092,"sunset":1626035705,"moonrise":1626001860,"moonset":1626041220,"moon_phase":0.05,"temp":{"day":295.33,"min":288.28,"max":295.45,"night":290.23,"eve":290.91,"morn":288.28},"feels_like":{"day":295.27,"night":290.5,"eve":291.22,"morn":288.07},"pressure":1021,"humidity":64,"dew_point":287.51,"wind_speed":2.46,"wind_deg":173,"wind_gust":2.85,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],"clouds":0,"pop":0,"uvi":5.01},{"dt":1626102000,"sunrise":1626083482,"sunset":1626122130,"moonrise":1626090900,"moonset":1626131100,"moon_phase":0.08,"temp":{"day":295.54,"min":289.16,"max":295.58,"night":290.41,"eve":291.33,"morn":289.32},"feels_like":{"day":295.61,"night":290.7,"eve":291.66,"morn":289.45},"pressure":1022,"humidity":68,"dew_point":288.68,"wind_speed":2.3,"wind_deg":115,"wind_gust":2.47,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],"clouds":0,"pop":0.01,"uvi":5.02},{"dt":1626188400,"sunrise":1626169871,"sunset":1626208556,"moonrise":1626179700,"moonset":1626220980,"moon_phase":0.12,"temp":{"day":297.47,"min":288.79,"max":297.47,"night":291.03,"eve":291.51,"morn":288.79},"feels_like":{"day":297.42,"night":291.09,"eve":291.75,"morn":288.73},"pressure":1020,"humidity":56,"dew_point":287.21,"wind_speed":2.26,"wind_deg":6,"wind_gust":2.64,"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],"clouds":7,"pop":0,"uvi":5.16},{"dt":1626274800,"sunrise":1626256259,"sunset":1626294981,"moonrise":1626268380,"moonset":1626310860,"moon_phase":0.15,"temp":{"day":300.56,"min":291.14,"max":300.56,"night":292.56,"eve":293.32,"morn":291.14},"feels_like":{"day":300.44,"night":292.31,"eve":293.3,"morn":290.64},"pressure":1017,"humidity":42,"dew_point":285.41,"wind_speed":2.21,"wind_deg":9,"wind_gust":2.64,"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],"clouds":99,"pop":0,"uvi":1.57},{"dt":1626361200,"sunrise":1626342645,"sunset":1626381407,"moonrise":1626356940,"moonset":1626400740,"moon_phase":0.19,"temp":{"day":303.08,"min":291.35,"max":303.08,"night":294.83,"eve":295.82,"morn":291.35},"feels_like":{"day":302.65,"night":294.54,"eve":295.79,"morn":290.77},"pressure":1012,"humidity":39,"dew_point":286.19,"wind_speed":2.6,"wind_deg":343,"wind_gust":5.27,"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"clouds":40,"pop":0,"uvi":2},{"dt":1626447600,"sunrise":1626429031,"sunset":1626467833,"moonrise":1626445440,"moonset":1626490680,"moon_phase":0.22,"temp":{"day":292.5,"min":289.95,"max":294.21,"night":289.95,"eve":290.68,"morn":291.26},"feels_like":{"day":292.84,"night":290.14,"eve":290.92,"morn":291.4},"pressure":1021,"humidity":90,"dew_point":290.28,"wind_speed":4.17,"wind_deg":265,"wind_gust":7.18,"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10d"}],"clouds":100,"pop":0.76,"rain":4.13,"uvi":2},{"dt":1626534000,"sunrise":1626515415,"sunset":1626554260,"moonrise":1626534060,"moonset":0,"moon_phase":0.25,"temp":{"day":288.1,"min":287.9,"max":289.38,"night":288.96,"eve":288.71,"morn":288.22},"feels_like":{"day":288.16,"night":289.05,"eve":288.78,"morn":288.24},"pressure":1025,"humidity":96,"dew_point":287.06,"wind_speed":3.79,"wind_deg":144,"wind_gust":6.59,"weather":[{"id":501,"main":"Rain","description":"moderate rain","icon":"10d"}],"clouds":100,"pop":1,"rain":32.28,"uvi":2}]} -************************************** -H -``` - ---- - -#### 8. [AsyncHTTPRequest_WT32_ETH01](examples/WT32_ETH01/AsyncHTTPRequest_WT32_ETH01) on ESP32_DEV with ETH_PHY_LAN8720 - -``` -Starting AsyncHTTPRequest_WT32_ETH01 on ESP32_DEV with ETH_PHY_LAN8720 -WebServer_WT32_ETH01 v1.5.0 -AsyncHTTPRequest_Generic v1.8.2 +AsyncHTTPRequest_Generic v1.9.0 ETH MAC: A8:03:2A:A1:61:73, IPv4: 192.168.2.232, FULL_DUPLEX, 100Mbps AsyncHTTPRequest @ IP : 192.168.2.232 @@ -832,12 +735,12 @@ week_number: 15 --- -#### 9. [AsyncHTTPRequest_ESP_WiFiManager](examples/AsyncHTTPRequest_ESP_WiFiManager) running on ESP32C3_DEV +#### 7. [AsyncHTTPRequest_ESP_WiFiManager](examples/AsyncHTTPRequest_ESP_WiFiManager) running on ESP32C3_DEV ``` Starting AsyncHTTPRequest_ESP_WiFiManager using LittleFS on ESP32C3_DEV -ESPAsync_WiFiManager v1.12.2 -AsyncHTTPRequest_Generic v1.8.2 +ESPAsync_WiFiManager v1.13.0 +AsyncHTTPRequest_Generic v1.9.0 Stored: SSID = HueNet1, Pass = password Got stored Credentials. Timeout 120s ConnectMultiWiFi in setup @@ -882,13 +785,13 @@ week_number: 15 --- -#### 10. [AsyncHTTPRequest_ESP_WiFiManager](examples/AsyncHTTPRequest_ESP_WiFiManager) running on ESP32S3_DEV +#### 8. [AsyncHTTPRequest_ESP_WiFiManager](examples/AsyncHTTPRequest_ESP_WiFiManager) running on ESP32S3_DEV ``` Starting AsyncHTTPRequest_ESP_WiFiManager using LittleFS on ESP32S3_DEV -ESPAsync_WiFiManager v1.12.2 -AsyncHTTPRequest_Generic v1.8.2 +ESPAsync_WiFiManager v1.13.0 +AsyncHTTPRequest_Generic v1.9.0 Stored: SSID = HueNet1, Pass = password Got stored Credentials. Timeout 120s ConnectMultiWiFi in setup @@ -934,13 +837,13 @@ week_number: 15 --- -#### 11. [AsyncHTTPRequest_ESP_Multi](examples/AsyncHTTPRequest_ESP_Multi) running on ESP32_DEV +#### 9. [AsyncHTTPRequest_ESP_Multi](examples/AsyncHTTPRequest_ESP_Multi) running on ESP32_DEV The terminal output of [AsyncHTTPRequest_ESP_Multi example](examples/AsyncHTTPRequest_ESP_Multi) running on `ESP32_DEV` to demonstrate how to send requests to multiple addresses and receive responses from them. ``` Starting AsyncHTTPRequest_ESP_Multi using ESP32_DEV -AsyncHTTPRequest_Generic v1.8.2 +AsyncHTTPRequest_Generic v1.9.0 Connecting to WiFi SSID: HueNet1 ....... AsyncHTTPSRequest @ IP : 192.168.2.88 @@ -995,13 +898,13 @@ HHH --- -#### 12. [AsyncHTTPRequest_ESP8266_Ethernet](examples/AsyncHTTPRequest_ESP8266_Ethernet) running on ESP8266_NODEMCU_ESP12E using ESP8266_W5500 Ethernet +#### 10. [AsyncHTTPRequest_ESP8266_Ethernet](examples/AsyncHTTPRequest_ESP8266_Ethernet) running on ESP8266_NODEMCU_ESP12E using ESP8266_W5500 Ethernet The terminal output of [AsyncHTTPRequest_ESP8266_Ethernet example](examples/AsyncHTTPRequest_ESP8266_Ethernet) running on `ESP8266_NODEMCU_ESP12E` to demonstrate how to use ESP8266_W5500 Ethernet Async feature. ``` Starting AsyncHTTPRequest_ESP8266_Ethernet on ESP8266_NODEMCU_ESP12E using ESP8266_W5500 Ethernet -AsyncHTTPRequest_Generic v1.8.2 +AsyncHTTPRequest_Generic v1.9.0 Connecting ethernet.. Ethernet IP address: 192.168.2.187 @@ -1045,13 +948,13 @@ HH --- -#### 13. [AsyncHTTPRequest_ESP8266_Ethernet](examples/AsyncHTTPRequest_ESP8266_Ethernet) running on ESP8266_NODEMCU_ESP12E using ESP8266_ENC28J60 Ethernet +#### 11. [AsyncHTTPRequest_ESP8266_Ethernet](examples/AsyncHTTPRequest_ESP8266_Ethernet) running on ESP8266_NODEMCU_ESP12E using ESP8266_ENC28J60 Ethernet The terminal output of [AsyncHTTPRequest_ESP8266_Ethernet example](examples/AsyncHTTPRequest_ESP8266_Ethernet) running on `ESP8266_NODEMCU_ESP12E` to demonstrate how to use ESP8266_ENC28J60 Ethernet Async feature. ``` Starting AsyncHTTPRequest_ESP8266_Ethernet on ESP8266_NODEMCU_ESP12E using ESP8266_ENC28J60 Ethernet -AsyncHTTPRequest_Generic v1.8.2 +AsyncHTTPRequest_Generic v1.9.0 Connecting to network : .......................................................... Ethernet IP address: 192.168.2.187 @@ -1152,6 +1055,8 @@ Submit issues to: [AsyncHTTPRequest_Generic issues](https://github.com/khoih-pro 15. Add example [AsyncHTTPRequest_ESP_Multi](https://github.com/khoih-prog/AsyncHTTPRequest_Generic/tree/master/examples/AsyncHTTPRequest_ESP_Multi) to demonstrate how to send requests to multiple addresses and receive responses from them. 16. Add support to ESP8266 using **W5x00** with [**lwIP_w5100**](https://github.com/esp8266/Arduino/tree/master/libraries/lwIP_w5100) or [**lwIP_w5500**](https://github.com/esp8266/Arduino/tree/master/libraries/lwIP_w5500) library 17. Add support to ESP8266 using **ENC28J60** with [**lwIP_enc28j60**](https://github.com/esp8266/Arduino/tree/master/libraries/lwIP_enc28j60) library +18. Fix long timeout if using `IPAddress`. +19. Remove support to STM32 using **LAN8720** due to problem with new STM32 core v2.3.0 --- @@ -1169,6 +1074,7 @@ This library is based on, modified, bug-fixed and improved from: 6. Thanks to [andrewk123](https://github.com/andrewk123) to report [**Http GET polling causes crash when host disconnected #22**](https://github.com/khoih-prog/AsyncHTTPRequest_Generic/issues/22) leading to new release v1.4.0 to fix bug. 7. Thanks to [DavidAntonin](https://github.com/DavidAntonin) to report [Cannot send requests to different addresses #4](https://github.com/khoih-prog/AsyncHTTPSRequest_Generic/issues/4) leading to new release v1.7.1 to demonstrate how to send requests to multiple addresses and receive responses from them. 8. Thanks to [per1234](https://github.com/per1234) to make PR [Remove unavailable items from depends field of library.properties](https://github.com/khoih-prog/AsyncHTTPRequest_Generic/pull/35) leading to v1.8.2 +9. Thanks to [miwied](https://github.com/miwied) to report [setTimeout() hasn't any effect #38](https://github.com/khoih-prog/AsyncHTTPRequest_Generic/issues/38) leading to new release v1.9.0 @@ -1182,6 +1088,7 @@ This library is based on, modified, bug-fixed and improved from: +
DavidAntonin
DavidAntonin

per1234
per1234

miwied
miwied

diff --git a/changelog.md b/changelog.md index 69aa46a..6a95c92 100644 --- a/changelog.md +++ b/changelog.md @@ -12,6 +12,7 @@ ## Table of Contents * [Changelog](#changelog) + * [Releases v1.9.0](#releases-v190) * [Releases v1.8.2](#releases-v182) * [Releases v1.8.1](#releases-v181) * [Releases v1.8.0](#releases-v180) @@ -39,6 +40,15 @@ ## Changelog +### Releases v1.9.0 + +1. Fix long timeout if using `IPAddress`. Check [setTimeout() hasn't any effect #38](https://github.com/khoih-prog/AsyncHTTPRequest_Generic/issues/38) +2. Optimize code +3. Display only successful responseText in examples +4. Improve debug messages by adding functions to display error messages instead of `cryptic error number` +5. Remove support to STM32 using **LAN8720** due to problem with new STM32 core v2.3.0 +5. Update `Packages' Patches` + ### Releases v1.8.2 1. Fix library.properties to remove unavailable items from depends. Check [Remove unavailable items from depends field of library.properties #35](https://github.com/khoih-prog/AsyncHTTPRequest_Generic/pull/35) diff --git a/examples/AsyncCustomHeader_STM32/AsyncCustomHeader_STM32.ino b/examples/AsyncCustomHeader_STM32/AsyncCustomHeader_STM32.ino index cb477bb..4b20a16 100644 --- a/examples/AsyncCustomHeader_STM32/AsyncCustomHeader_STM32.ino +++ b/examples/AsyncCustomHeader_STM32/AsyncCustomHeader_STM32.ino @@ -24,8 +24,8 @@ //char GET_ServerAddress[] = "192.168.2.110/"; char GET_ServerAddress[] = "http://worldtimeapi.org/api/timezone/America/Toronto.txt"; -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.7.0" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1007000 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 // 600s = 10 minutes to not flooding, 60s in testing #define HTTP_REQUEST_INTERVAL_MS 60000 //600000 @@ -68,26 +68,35 @@ void sendRequest(void) } } -void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) +void requestCB(void *optParm, AsyncHTTPRequest *request, int readyState) { (void) optParm; - + if (readyState == readyStateDone) { - Serial.println("\n**************************************"); - Serial.println(request->responseText()); - Serial.println("**************************************"); + Serial.println(); + AHTTP_LOGDEBUG(F("**************************************")); + AHTTP_LOGDEBUG1(F("Response Code = "), request->responseHTTPString()); - request->setDebug(false); + if (request->responseHTTPcode() == 200) + { + Serial.println(F("**************************************")); + Serial.println(request->responseText()); + Serial.println(F("**************************************")); + } + else + { + AHTTP_LOGERROR(F("Response error")); + } } } void setup(void) { Serial.begin(115200); - while (!Serial); + while (!Serial && millis() < 5000); - Serial.println("\nStart AsyncCustomHeader_STM32 on " + String(BOARD_NAME)); + Serial.print("\nStart AsyncCustomHeader_STM32 on "); Serial.println(BOARD_NAME); Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION); #if defined(ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN) diff --git a/examples/AsyncDweetGet_STM32/AsyncDweetGet_STM32.ino b/examples/AsyncDweetGet_STM32/AsyncDweetGet_STM32.ino index 5148926..ab4ed4e 100644 --- a/examples/AsyncDweetGet_STM32/AsyncDweetGet_STM32.ino +++ b/examples/AsyncDweetGet_STM32/AsyncDweetGet_STM32.ino @@ -35,8 +35,8 @@ const char GET_ServerAddress[] = "dweet.io"; // use your own thing name here String dweetName = "/dweet/for/currentSecond?second="; -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.7.0" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1007000 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 // 600s = 10 minutes to not flooding, 60s in testing #define HTTP_REQUEST_INTERVAL_MS 60000 //600000 @@ -119,25 +119,36 @@ void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) if (readyState == readyStateDone) { - String responseText = request->responseText(); - - Serial.println("\n**************************************"); - //Serial.println(request->responseText()); - Serial.println(responseText); - Serial.println("**************************************"); + Serial.println(); + AHTTP_LOGDEBUG(F("**************************************")); + AHTTP_LOGDEBUG1(F("Response Code = "), request->responseHTTPString()); - parseResponse(responseText); + if (request->responseHTTPcode() == 200) + { + String responseText = request->responseText(); - request->setDebug(false); + Serial.println("\n**************************************"); + //Serial.println(request->responseText()); + Serial.println(responseText); + Serial.println("**************************************"); + + parseResponse(responseText); + + request->setDebug(false); + } + else + { + AHTTP_LOGERROR(F("Response error")); + } } } void setup(void) { Serial.begin(115200); - while (!Serial); - - Serial.println("\nStart AsyncDweetGET_STM32 on " + String(BOARD_NAME)); + while (!Serial && millis() < 5000); + + Serial.print("\nStart AsyncDweetGET_STM32 on "); Serial.println(BOARD_NAME); Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION); #if defined(ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN) diff --git a/examples/AsyncDweetPost_STM32/AsyncDweetPost_STM32.ino b/examples/AsyncDweetPost_STM32/AsyncDweetPost_STM32.ino index c7703ba..36054cc 100644 --- a/examples/AsyncDweetPost_STM32/AsyncDweetPost_STM32.ino +++ b/examples/AsyncDweetPost_STM32/AsyncDweetPost_STM32.ino @@ -29,8 +29,8 @@ const char POST_ServerAddress[] = "dweet.io"; // use your own thing name here String dweetName = "/dweet/for/pinA0-Read?"; -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.7.0" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1007000 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 // 600s = 10 minutes to not flooding, 60s in testing #define HTTP_REQUEST_INTERVAL_MS 60000 //600000 @@ -116,25 +116,36 @@ void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) if (readyState == readyStateDone) { - String responseText = request->responseText(); - - Serial.println("\n**************************************"); - //Serial.println(request->responseText()); - Serial.println(responseText); - Serial.println("**************************************"); + Serial.println(); + AHTTP_LOGDEBUG(F("**************************************")); + AHTTP_LOGDEBUG1(F("Response Code = "), request->responseHTTPString()); - parseResponse(responseText); + if (request->responseHTTPcode() == 200) + { + String responseText = request->responseText(); - request->setDebug(false); + Serial.println("\n**************************************"); + //Serial.println(request->responseText()); + Serial.println(responseText); + Serial.println("**************************************"); + + parseResponse(responseText); + + request->setDebug(false); + } + else + { + AHTTP_LOGERROR(F("Response error")); + } } } void setup(void) { Serial.begin(115200); - while (!Serial); - - Serial.println("\nStart AsyncDweetPOST_STM32 on " + String(BOARD_NAME)); + while (!Serial && millis() < 5000); + + Serial.print("\nStart AsyncDweetPOST_STM32 on "); Serial.println(BOARD_NAME); Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION); #if defined(ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN) diff --git a/examples/AsyncHTTPMultiRequests_ESP/AsyncHTTPMultiRequests_ESP.ino b/examples/AsyncHTTPMultiRequests_ESP/AsyncHTTPMultiRequests_ESP.ino index 708507e..d5cc8d6 100644 --- a/examples/AsyncHTTPMultiRequests_ESP/AsyncHTTPMultiRequests_ESP.ino +++ b/examples/AsyncHTTPMultiRequests_ESP/AsyncHTTPMultiRequests_ESP.ino @@ -44,12 +44,12 @@ #error This code is intended to run on the ESP8266 or ESP32 platform! Please check your Tools->Board setting. #endif -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.7.0" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1007000 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 // Level from 0-4 #define ASYNC_HTTP_DEBUG_PORT Serial -#define _ASYNC_HTTP_LOGLEVEL_ 1 +#define _ASYNC_HTTP_LOGLEVEL_ 4 // 300s = 5 minutes to not flooding #define HTTP_REQUEST_INTERVAL 60 //300 @@ -68,10 +68,8 @@ const char* password = "your_pass"; #include #endif -#include // https://github.com/khoih-prog/AsyncHTTPRequest_Generic - // To be included only in main(), .ino with setup() to avoid `Multiple Definitions` Linker Error -#include // https://github.com/khoih-prog/AsyncHTTPRequest_Generic +#include // https://github.com/khoih-prog/AsyncHTTPRequest_Generic #include @@ -150,9 +148,15 @@ void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) if (readyState == readyStateDone) { - Serial.print(F("\n***************")); Serial.print(requestName[ requestIndex ]); Serial.println(F("***************")); - Serial.println(request->responseText()); - Serial.println(F("**************************************")); + AHTTP_LOGDEBUG(F("\n**************************************")); + AHTTP_LOGDEBUG1(F("Response Code = "), request->responseHTTPString()); + + if (request->responseHTTPcode() == 200) + { + Serial.print(F("\n***************")); Serial.print(requestName[ requestIndex ]); Serial.println(F("***************")); + Serial.println(request->responseText()); + Serial.println(F("**************************************")); + } #if 1 // Bypass hourly @@ -163,7 +167,7 @@ void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) #else // hourly too long, not display anyway. Not enough heap. requestIndex = (requestIndex + 1) % NUM_REQUESTS; - #endif +#endif request->setDebug(false); } @@ -173,7 +177,7 @@ void setup() { // put your setup code here, to run once: Serial.begin(115200); - while (!Serial); + while (!Serial && millis() < 5000); delay(200); diff --git a/examples/AsyncHTTPRequest_ESP/AsyncHTTPRequest_ESP.ino b/examples/AsyncHTTPRequest_ESP/AsyncHTTPRequest_ESP.ino index 771d693..64b0b60 100644 --- a/examples/AsyncHTTPRequest_ESP/AsyncHTTPRequest_ESP.ino +++ b/examples/AsyncHTTPRequest_ESP/AsyncHTTPRequest_ESP.ino @@ -46,7 +46,7 @@ // Level from 0-4 #define ASYNC_HTTP_DEBUG_PORT Serial -#define _ASYNC_HTTP_LOGLEVEL_ 1 +#define _ASYNC_HTTP_LOGLEVEL_ 1 // 300s = 5 minutes to not flooding #define HTTP_REQUEST_INTERVAL 60 //300 @@ -65,8 +65,8 @@ const char* password = "your_pass"; #include #endif -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.7.0" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1007000 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 // To be included only in main(), .ino with setup() to avoid `Multiple Definitions` Linker Error #include // https://github.com/khoih-prog/AsyncHTTPRequest_Generic @@ -122,17 +122,21 @@ void sendRequest() } } -void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) +void requestCB(void *optParm, AsyncHTTPRequest *request, int readyState) { (void) optParm; - - if (readyState == readyStateDone) + + if (readyState == readyStateDone) { - Serial.println(F("\n**************************************")); - Serial.println(request->responseText()); - Serial.println(F("**************************************")); - - request->setDebug(false); + AHTTP_LOGDEBUG(F("\n**************************************")); + AHTTP_LOGDEBUG1(F("Response Code = "), request->responseHTTPString()); + + if (request->responseHTTPcode() == 200) + { + Serial.println(F("\n**************************************")); + Serial.println(request->responseText()); + Serial.println(F("**************************************")); + } } } @@ -140,9 +144,7 @@ void setup() { // put your setup code here, to run once: Serial.begin(115200); - while (!Serial); - - delay(200); + while (!Serial && millis() < 5000); Serial.print(F("\nStarting AsyncHTTPRequest_ESP using ")); Serial.println(ARDUINO_BOARD); Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION); diff --git a/examples/AsyncHTTPRequest_ESP8266_Ethernet/AsyncHTTPRequest_ESP8266_Ethernet.ino b/examples/AsyncHTTPRequest_ESP8266_Ethernet/AsyncHTTPRequest_ESP8266_Ethernet.ino index 71c186a..1fdd5d6 100644 --- a/examples/AsyncHTTPRequest_ESP8266_Ethernet/AsyncHTTPRequest_ESP8266_Ethernet.ino +++ b/examples/AsyncHTTPRequest_ESP8266_Ethernet/AsyncHTTPRequest_ESP8266_Ethernet.ino @@ -93,14 +93,10 @@ using TCPClient = WiFiClient; - - - - ////////////////////////////////////////////////////////// -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.7.1" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1007001 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 // To be included only in main(), .ino with setup() to avoid `Multiple Definitions` Linker Error #include // https://github.com/khoih-prog/AsyncHTTPRequest_Generic @@ -156,17 +152,21 @@ void sendRequest() } } -void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) +void requestCB(void *optParm, AsyncHTTPRequest *request, int readyState) { (void) optParm; - - if (readyState == readyStateDone) + + if (readyState == readyStateDone) { - Serial.println(F("\n**************************************")); - Serial.println(request->responseText()); - Serial.println(F("**************************************")); - - request->setDebug(false); + AHTTP_LOGDEBUG(F("\n**************************************")); + AHTTP_LOGDEBUG1(F("Response Code = "), request->responseHTTPString()); + + if (request->responseHTTPcode() == 200) + { + Serial.println(F("\n**************************************")); + Serial.println(request->responseText()); + Serial.println(F("**************************************")); + } } } @@ -211,8 +211,8 @@ void setup() delay(200); - Serial.print(F("\nStarting AsyncHTTPRequest_ESP8266_Ethernet on ")); Serial.print(ARDUINO_BOARD); - Serial.print(F(" using ")); Serial.println(SHIELD_TYPE); + Serial.print("\nStart AsyncHTTPRequest_ESP8266_Ethernet on "); Serial.print(ARDUINO_BOARD); + Serial.print(" using "); Serial.println(SHIELD_TYPE); Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION); initEthernet(); diff --git a/examples/AsyncHTTPRequest_ESP_Multi/AsyncHTTPRequest_ESP_Multi.ino b/examples/AsyncHTTPRequest_ESP_Multi/AsyncHTTPRequest_ESP_Multi.ino index 363155e..77778b3 100644 --- a/examples/AsyncHTTPRequest_ESP_Multi/AsyncHTTPRequest_ESP_Multi.ino +++ b/examples/AsyncHTTPRequest_ESP_Multi/AsyncHTTPRequest_ESP_Multi.ino @@ -126,9 +126,19 @@ void requestCB0(void* optParm, AsyncHTTPRequest* thisRequest, int readyState) if (readyState == readyStateDone) { - Serial.println("\n**************************************"); - Serial.println(thisRequest->responseText()); - Serial.println("**************************************"); + AHTTP_LOGERROR(F("\n**************************************")); + AHTTP_LOGERROR1(F("Response Code = "), request->responseHTTPString()); + + if (request->responseHTTPcode() == 200) + { + Serial.println(F("\n**************************************")); + Serial.println(request->responseText()); + Serial.println(F("**************************************")); + } + else + { + AHTTP_LOGERROR(F("Response error")); + } thisRequest->setDebug(false); readySend[0] = true; @@ -141,9 +151,19 @@ void requestCB1(void* optParm, AsyncHTTPRequest* thisRequest, int readyState) if (readyState == readyStateDone) { - Serial.println("\n**************************************"); - Serial.println(thisRequest->responseText()); - Serial.println("**************************************"); + AHTTP_LOGERROR(F("\n**************************************")); + AHTTP_LOGERROR1(F("Response Code = "), request->responseHTTPString()); + + if (request->responseHTTPcode() == 200) + { + Serial.println(F("\n**************************************")); + Serial.println(request->responseText()); + Serial.println(F("**************************************")); + } + else + { + AHTTP_LOGERROR(F("Response error")); + } thisRequest->setDebug(false); readySend[1] = true; @@ -154,9 +174,9 @@ void setup() { // put your setup code here, to run once: Serial.begin(115200); - while (!Serial); + while (!Serial && millis() < 5000); - Serial.println("\nStarting AsyncHTTPRequest_ESP_Multi using " + String(ARDUINO_BOARD)); + Serial.print("\nStart AsyncHTTPRequest_ESP_Multi on "); Serial.println(ARDUINO_BOARD); Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION); WiFi.mode(WIFI_STA); diff --git a/examples/AsyncHTTPRequest_ESP_WiFiManager/AsyncHTTPRequest_ESP_WiFiManager.ino b/examples/AsyncHTTPRequest_ESP_WiFiManager/AsyncHTTPRequest_ESP_WiFiManager.ino index 28df898..9e25c02 100644 --- a/examples/AsyncHTTPRequest_ESP_WiFiManager/AsyncHTTPRequest_ESP_WiFiManager.ino +++ b/examples/AsyncHTTPRequest_ESP_WiFiManager/AsyncHTTPRequest_ESP_WiFiManager.ino @@ -46,11 +46,11 @@ #error This code is intended to run on the ESP8266 or ESP32 platform! Please check your Tools->Board setting. #endif -#define ESP_ASYNC_WIFIMANAGER_VERSION_MIN_TARGET "ESPAsync_WiFiManager v1.12.1" -#define ESP_ASYNC_WIFIMANAGER_VERSION_MIN 1012001 +#define ESP_ASYNC_WIFIMANAGER_VERSION_MIN_TARGET "ESPAsync_WiFiManager v1.13.0" +#define ESP_ASYNC_WIFIMANAGER_VERSION_MIN 1013000 -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.7.0" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1007000 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 // Level from 0-4 #define ASYNC_HTTP_DEBUG_PORT Serial @@ -556,17 +556,21 @@ void sendRequest() } } -void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) +void requestCB(void *optParm, AsyncHTTPRequest *request, int readyState) { (void) optParm; - - if (readyState == readyStateDone) + + if (readyState == readyStateDone) { - Serial.println(F("\n**************************************")); - Serial.println(request->responseText()); - Serial.println(F("**************************************")); - - request->setDebug(false); + AHTTP_LOGDEBUG(F("\n**************************************")); + AHTTP_LOGDEBUG1(F("Response Code = "), request->responseHTTPString()); + + if (request->responseHTTPcode() == 200) + { + Serial.println(F("\n**************************************")); + Serial.println(request->responseText()); + Serial.println(F("**************************************")); + } } } @@ -574,7 +578,7 @@ void setup() { // put your setup code here, to run once: Serial.begin(115200); - while (!Serial); + while (!Serial && millis() < 5000); delay(200); @@ -634,7 +638,7 @@ void setup() #if ( USING_ESP32_S2 || USING_ESP32_C3 ) ESPAsync_WiFiManager ESPAsync_wifiManager(&webServer, NULL, "AutoConnectAP"); #else - DNSServer dnsServer; + AsyncDNSServer dnsServer; ESPAsync_WiFiManager ESPAsync_wifiManager(&webServer, &dnsServer, "AutoConnectAP"); #endif diff --git a/examples/AsyncHTTPRequest_STM32/AsyncHTTPRequest_STM32.ino b/examples/AsyncHTTPRequest_STM32/AsyncHTTPRequest_STM32.ino index 5ca77fb..3a167aa 100644 --- a/examples/AsyncHTTPRequest_STM32/AsyncHTTPRequest_STM32.ino +++ b/examples/AsyncHTTPRequest_STM32/AsyncHTTPRequest_STM32.ino @@ -42,8 +42,8 @@ #include "defines.h" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.7.0" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1007000 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 // 600s = 10 minutes to not flooding, 60s in testing #define HTTP_REQUEST_INTERVAL_MS 60000 //600000 @@ -55,12 +55,12 @@ AsyncHTTPRequest request; -void sendRequest(void); +void sendRequest(); // Repeat forever, millis() resolution Ticker sendHTTPRequest(sendRequest, HTTP_REQUEST_INTERVAL_MS, 0, MILLIS); -void sendRequest(void) +void sendRequest() { static bool requestOpenResult; @@ -85,26 +85,30 @@ void sendRequest(void) } } -void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) +void requestCB(void *optParm, AsyncHTTPRequest *request, int readyState) { (void) optParm; - - if (readyState == readyStateDone) + + if (readyState == readyStateDone) { - Serial.println("\n**************************************"); - Serial.println(request->responseText()); - Serial.println("**************************************"); - - request->setDebug(false); + AHTTP_LOGDEBUG(F("\n**************************************")); + AHTTP_LOGDEBUG1(F("Response Code = "), request->responseHTTPString()); + + if (request->responseHTTPcode() == 200) + { + Serial.println(F("\n**************************************")); + Serial.println(request->responseText()); + Serial.println(F("**************************************")); + } } } -void setup(void) +void setup() { Serial.begin(115200); - while (!Serial); - - Serial.println("\nStart AsyncHTTPRequest_STM32 on " + String(BOARD_NAME)); + while (!Serial && millis() < 5000); + + Serial.print("\nStart AsyncHTTPRequest_STM32 on "); Serial.println(BOARD_NAME); Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION); #if defined(ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN) @@ -138,7 +142,7 @@ void setup(void) sendRequest(); } -void loop(void) +void loop() { sendHTTPRequest.update(); } diff --git a/examples/AsyncSimpleGET_STM32/AsyncSimpleGET_STM32.ino b/examples/AsyncSimpleGET_STM32/AsyncSimpleGET_STM32.ino index 27aa599..6e0d1b9 100644 --- a/examples/AsyncSimpleGET_STM32/AsyncSimpleGET_STM32.ino +++ b/examples/AsyncSimpleGET_STM32/AsyncSimpleGET_STM32.ino @@ -24,8 +24,8 @@ //char GET_ServerAddress[] = "ipv4bot.whatismyipaddress.com/"; char GET_ServerAddress[] = "http://worldtimeapi.org/api/timezone/America/Toronto.txt"; -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.7.0" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1007000 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 // 600s = 10 minutes to not flooding, 60s in testing #define HTTP_REQUEST_INTERVAL_MS 60000 //600000 @@ -37,12 +37,12 @@ char GET_ServerAddress[] = "http://worldtimeapi.org/api/timezone/America/Toro AsyncHTTPRequest request; -void sendRequest(void); +void sendRequest(); // Repeat forever, millis() resolution Ticker sendHTTPRequest(sendRequest, HTTP_REQUEST_INTERVAL_MS, 0, MILLIS); -void sendRequest(void) +void sendRequest() { static bool requestOpenResult; @@ -66,26 +66,30 @@ void sendRequest(void) } } -void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) +void requestCB(void *optParm, AsyncHTTPRequest *request, int readyState) { (void) optParm; - + if (readyState == readyStateDone) { - Serial.println("\n**************************************"); - Serial.println(request->responseText()); - Serial.println("**************************************"); + AHTTP_LOGDEBUG(F("\n**************************************")); + AHTTP_LOGDEBUG1(F("Response Code = "), request->responseHTTPString()); - request->setDebug(false); + if (request->responseHTTPcode() == 200) + { + Serial.println(F("\n**************************************")); + Serial.println(request->responseText()); + Serial.println(F("**************************************")); + } } } -void setup(void) +void setup() { Serial.begin(115200); - while (!Serial); - - Serial.println("\nStart AsyncSimpleGET_STM32 on " + String(BOARD_NAME)); + while (!Serial && millis() < 5000); + + Serial.print("\nStart AsyncSimpleGET_STM32 on "); Serial.println(BOARD_NAME); Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION); #if defined(ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN) @@ -105,8 +109,7 @@ void setup(void) // Use DHCP dynamic IP and random mac Ethernet.begin(mac[index]); - Serial.print(F("AsyncHTTPRequest @ IP : ")); - Serial.println(Ethernet.localIP()); + Serial.print(F("AsyncHTTPRequest @ IP : ")); Serial.println(Ethernet.localIP()); Serial.println(); request.setDebug(false); @@ -119,7 +122,7 @@ void setup(void) sendRequest(); } -void loop(void) +void loop() { sendHTTPRequest.update(); } diff --git a/examples/AsyncWebClientRepeating_STM32/AsyncWebClientRepeating_STM32.ino b/examples/AsyncWebClientRepeating_STM32/AsyncWebClientRepeating_STM32.ino index d289c89..4e58a65 100644 --- a/examples/AsyncWebClientRepeating_STM32/AsyncWebClientRepeating_STM32.ino +++ b/examples/AsyncWebClientRepeating_STM32/AsyncWebClientRepeating_STM32.ino @@ -21,13 +21,13 @@ #include "defines.h" // Select a test server address -const char GET_ServerAddress[] = "arduino.cc"; +const char GET_ServerAddress[] = "arduino.tips"; // GET location String GET_Location = "/asciilogo.txt"; -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.7.0" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1007000 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 // 600s = 10 minutes to not flooding, 60s in testing #define HTTP_REQUEST_INTERVAL_MS 60000 //600000 @@ -39,12 +39,12 @@ String GET_Location = "/asciilogo.txt"; AsyncHTTPRequest request; -void sendRequest(void); +void sendRequest(); // Repeat forever, millis() resolution Ticker sendHTTPRequest(sendRequest, HTTP_REQUEST_INTERVAL_MS, 0, MILLIS); -void sendRequest(void) +void sendRequest() { static bool requestOpenResult; @@ -68,26 +68,30 @@ void sendRequest(void) } } -void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) +void requestCB(void *optParm, AsyncHTTPRequest *request, int readyState) { (void) optParm; - + if (readyState == readyStateDone) - { - Serial.println("\n**************************************"); - Serial.println(request->responseText()); - Serial.println("**************************************"); - - request->setDebug(false); + { + AHTTP_LOGDEBUG(F("\n**************************************")); + AHTTP_LOGDEBUG1(F("Response Code = "), request->responseHTTPString()); + + if (request->responseHTTPcode() == 200) + { + Serial.println(F("\n**************************************")); + Serial.println(request->responseText()); + Serial.println(F("**************************************")); + } } } -void setup(void) +void setup() { Serial.begin(115200); - while (!Serial); + while (!Serial && millis() < 5000); - Serial.println("\nStart AsyncWebClientRepeating_STM32 on " + String(BOARD_NAME)); + Serial.print("\nStart AsyncWebClientRepeating_STM32 on "); Serial.println(BOARD_NAME); Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION); #if defined(ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN) @@ -119,7 +123,7 @@ void setup(void) sendRequest(); } -void loop(void) +void loop() { sendHTTPRequest.update(); } diff --git a/examples/WT32_ETH01/AsyncHTTPMultiRequests_WT32_ETH01/AsyncHTTPMultiRequests_WT32_ETH01.ino b/examples/WT32_ETH01/AsyncHTTPMultiRequests_WT32_ETH01/AsyncHTTPMultiRequests_WT32_ETH01.ino index 354f508..c32a249 100644 --- a/examples/WT32_ETH01/AsyncHTTPMultiRequests_WT32_ETH01/AsyncHTTPMultiRequests_WT32_ETH01.ino +++ b/examples/WT32_ETH01/AsyncHTTPMultiRequests_WT32_ETH01/AsyncHTTPMultiRequests_WT32_ETH01.ino @@ -57,8 +57,8 @@ #include // https://github.com/khoih-prog/WebServer_WT32_ETH01 -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.7.0" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1007000 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 // To be included only in main(), .ino with setup() to avoid `Multiple Definitions` Linker Error #include // https://github.com/khoih-prog/AsyncHTTPRequest_Generic @@ -152,9 +152,15 @@ void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) if (readyState == readyStateDone) { - Serial.print("\n***************"); Serial.print(requestName[ requestIndex ]); Serial.println("***************"); - Serial.println(request->responseText()); - Serial.println("**************************************"); + AHTTP_LOGDEBUG(F("\n**************************************")); + AHTTP_LOGDEBUG1(F("Response Code = "), request->responseHTTPString()); + + if (request->responseHTTPcode() == 200) + { + Serial.print(F("\n***************")); Serial.print(requestName[ requestIndex ]); Serial.println(F("***************")); + Serial.println(request->responseText()); + Serial.println(F("**************************************")); + } #if 1 // Bypass hourly @@ -165,7 +171,7 @@ void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) #else // hourly too long, not display anyway. Not enough heap. requestIndex = (requestIndex + 1) % NUM_REQUESTS; - #endif +#endif request->setDebug(false); } @@ -176,12 +182,12 @@ void setup() { // put your setup code here, to run once: Serial.begin(115200); - while (!Serial); + while (!Serial && millis() < 5000); delay(200); - Serial.print("\nStarting AsyncHTTPRequest_WT32_ETH01 on " + String(ARDUINO_BOARD)); - Serial.println(" with " + String(SHIELD_TYPE)); + Serial.print("\nStart AsyncHTTPMultiRequests_WT32_ETH01 on "); Serial.print(ARDUINO_BOARD); + Serial.print(" with "); Serial.println(SHIELD_TYPE); Serial.println(WEBSERVER_WT32_ETH01_VERSION); Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION); diff --git a/examples/WT32_ETH01/AsyncHTTPRequest_WT32_ETH01/AsyncHTTPRequest_WT32_ETH01.ino b/examples/WT32_ETH01/AsyncHTTPRequest_WT32_ETH01/AsyncHTTPRequest_WT32_ETH01.ino index 89966b7..7670ac4 100644 --- a/examples/WT32_ETH01/AsyncHTTPRequest_WT32_ETH01/AsyncHTTPRequest_WT32_ETH01.ino +++ b/examples/WT32_ETH01/AsyncHTTPRequest_WT32_ETH01/AsyncHTTPRequest_WT32_ETH01.ino @@ -57,8 +57,8 @@ #include // https://github.com/khoih-prog/WebServer_WT32_ETH01 -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.7.0" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1007000 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 // To be included only in main(), .ino with setup() to avoid `Multiple Definitions` Linker Error #include // https://github.com/khoih-prog/AsyncHTTPRequest_Generic @@ -126,17 +126,21 @@ void sendRequest() } } -void requestCB(void* optParm, AsyncHTTPRequest* request, int readyState) +void requestCB(void *optParm, AsyncHTTPRequest *request, int readyState) { (void) optParm; - - if (readyState == readyStateDone) + + if (readyState == readyStateDone) { - Serial.println("\n**************************************"); - Serial.println(request->responseText()); - Serial.println("**************************************"); - - request->setDebug(false); + AHTTP_LOGDEBUG(F("\n**************************************")); + AHTTP_LOGDEBUG1(F("Response Code = "), request->responseHTTPString()); + + if (request->responseHTTPcode() == 200) + { + Serial.println(F("\n**************************************")); + Serial.println(request->responseText()); + Serial.println(F("**************************************")); + } } } @@ -144,10 +148,12 @@ void setup() { // put your setup code here, to run once: Serial.begin(115200); - while (!Serial); - - Serial.print("\nStarting AsyncHTTPRequest_WT32_ETH01 on " + String(ARDUINO_BOARD)); - Serial.println(" with " + String(SHIELD_TYPE)); + while (!Serial && millis() < 5000); + + delay(200); + + Serial.print("\nStart AsyncHTTPRequest_WT32_ETH01 on "); Serial.print(ARDUINO_BOARD); + Serial.print(" with "); Serial.println(SHIELD_TYPE); Serial.println(WEBSERVER_WT32_ETH01_VERSION); Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION); diff --git a/examples/multiFileProject/multiFileProject.ino b/examples/multiFileProject/multiFileProject.ino index 108c14b..b137b79 100644 --- a/examples/multiFileProject/multiFileProject.ino +++ b/examples/multiFileProject/multiFileProject.ino @@ -19,8 +19,8 @@ #error This code is intended to run on the ESP8266, ESP32 or STM32 platform! Please check your Tools->Board setting. #endif -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.8.2" -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1008002 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN_TARGET "AsyncHTTPRequest_Generic v1.9.0" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MIN 1009000 #include "multiFileProject.h" diff --git a/keywords.txt b/keywords.txt index a8b0325..68c1ea1 100644 --- a/keywords.txt +++ b/keywords.txt @@ -31,6 +31,7 @@ onData KEYWORD2 available KEYWORD2 responseLength KEYWORD2 responseHTTPcode KEYWORD2 +responseHTTPString KEYWORD2 responseRead KEYWORD2 elapsedTime KEYWORD2 version KEYWORD2 diff --git a/library.json b/library.json index 7d59c44..42d4673 100644 --- a/library.json +++ b/library.json @@ -1,8 +1,8 @@ { "name":"AsyncHTTPRequest_Generic", - "version": "1.8.2", - "description":"Simple Async HTTP Request library, supporting GET, POST, PUT, PATCH, DELETE and HEAD, on top of AsyncTCP libraries, such as AsyncTCP, ESPAsyncTCP, AsyncTCP_STM32, etc.. for ESP32 (including ESP32_S2, ESP32_S3 and ESP32_C3), WT32_ETH01 (ESP32 + LAN8720), ESP8266 (WiFi, W5x00 or ENC28J60) and currently STM32 with LAN8720 or built-in LAN8742A Ethernet.", - "keywords":"communication, async, tcp, http, ESP8266, ESP32, ESP32-S2, ESP32-S3, ESP32-C3, wt32-eth01, stm32, ethernet, wifi, lan8742a, lan8720, f407ve, nucleo-144, stm32f7, W5x00, ENC28J60", + "version": "1.9.0", + "description":"Simple Async HTTP Request library, supporting GET, POST, PUT, PATCH, DELETE and HEAD, on top of AsyncTCP libraries, such as AsyncTCP, ESPAsyncTCP, AsyncTCP_STM32, etc.. for ESP32 (including ESP32_S2, ESP32_S3 and ESP32_C3), WT32_ETH01 (ESP32 + LAN8720), ESP8266 (WiFi, W5x00 or ENC28J60) and currently STM32 with built-in LAN8742A Ethernet.", + "keywords":"communication, async, tcp, http, ESP8266, ESP32, ESP32-S2, ESP32-S3, ESP32-C3, wt32-eth01, stm32, ethernet, wifi, lan8742a, nucleo-144, stm32f7, W5x00, ENC28J60", "authors": [ { "name": "Bob Lemaire", @@ -45,7 +45,7 @@ { "owner": "khoih-prog", "name": "ESPAsync_WiFiManager", - "version": ">=1.12.2", + "version": ">=1.13.0", "platforms": ["espressif8266", "espressif32"] }, { @@ -63,7 +63,7 @@ { "owner": "khoih-prog", "name": "WebServer_WT32_ETH01", - "version": ">=1.4.1", + "version": ">=1.5.0", "platforms": ["espressif32"] }, { diff --git a/library.properties b/library.properties index fbe55e9..6648d6e 100644 --- a/library.properties +++ b/library.properties @@ -1,10 +1,10 @@ name=AsyncHTTPRequest_Generic -version=1.8.2 +version=1.9.0 author=Bob Lemaire,Khoi Hoang maintainer=Khoi Hoang icense=GPLv3 sentence=Simple Async HTTP Request library, supporting GET, POST, PUT, PATCH, DELETE and HEAD, on top of AsyncTCP libraries, such as AsyncTCP, ESPAsyncTCP, AsyncTCP_STM32, etc.. for ESP32 (including ESP32_S2, ESP32_S3 and ESP32_C3), WT32_ETH01 (ESP32 + LAN8720), ESP8266 (WiFi, W5x00 or ENC28J60) and currently STM32 with LAN8720 or built-in LAN8742A Ethernet. -paragraph=This AsyncHTTPRequest_Generic Library, supporting GET, POST, PUT, PATCH, DELETE and HEAD, for ESP32 (including ESP32-S2), ESP8266 (WiFi, W5x00 or ENC28J60) and STM32 with LAN8720 or built-in LAN8742A Ethernet, such as Nucleo-144 F767ZI, F407VE, etc. +paragraph=This AsyncHTTPRequest_Generic Library, supporting GET, POST, PUT, PATCH, DELETE and HEAD, for ESP32 (including ESP32-S2), ESP8266 (WiFi, W5x00 or ENC28J60) and STM32 built-in LAN8742A Ethernet, such as Nucleo-144 F767ZI, etc. category=Communication,AsyncTCP,AsyncHTTP url=https://github.com/khoih-prog/AsyncHTTPRequest_Generic architectures=* diff --git a/platformio/platformio.ini b/platformio/platformio.ini index c4e1169..42a531f 100644 --- a/platformio/platformio.ini +++ b/platformio/platformio.ini @@ -43,7 +43,7 @@ lib_deps = ; https://github.com/khoih-prog/STM32AsyncTCP.git ; STM32duino LwIP@>=2.1.2 ; STM32duino STM32Ethernet@>=1.3.0 -; ESPAsync_WiFiManager@>=1.12.2 +; ESPAsync_WiFiManager@>=1.13.0 ; LittleFS_esp32@>=1.0.6 ; WebServer_WT32_ETH01@>=1.5.0 @@ -54,7 +54,7 @@ lib_deps = ; https://github.com/khoih-prog/STM32AsyncTCP.git ; stm32duino/STM32duino LwIP@>=2.1.2 ; stm32duino/STM32duino STM32Ethernet@>=1.3.0 - khoih-prog/ESPAsync_WiFiManager@>=1.12.2 + khoih-prog/ESPAsync_WiFiManager@>=1.13.0 ; lorol/LittleFS_esp32@>=1.0.6 ; khoih-prog/WebServer_WT32_ETH01@>=1.5.0 diff --git a/src/AsyncHTTPRequest_Debug_Generic.h b/src/AsyncHTTPRequest_Debug_Generic.h index 2015d9e..3380f20 100644 --- a/src/AsyncHTTPRequest_Debug_Generic.h +++ b/src/AsyncHTTPRequest_Debug_Generic.h @@ -17,7 +17,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . - Version: 1.8.2 + Version: 1.9.0 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -28,6 +28,7 @@ 1.8.0 K Hoang 13/04/2022 Add support to ESP8266 using W5x00 with lwip_W5100 or lwip_W5500 library 1.8.1 K Hoang 13/04/2022 Add support to ESP8266 using ENC28J60 with lwip_enc28j60 library 1.8.2 K Hoang 10/08/2022 Fix library.properties to remove unavailable items from depends + 1.9.0 K Hoang 30/08/2022 Fix bug. Improve debug messages. Optimize code. *****************************************************************************************************************************/ #pragma once diff --git a/src/AsyncHTTPRequest_Generic.h b/src/AsyncHTTPRequest_Generic.h index 294184d..6ff6ec8 100644 --- a/src/AsyncHTTPRequest_Generic.h +++ b/src/AsyncHTTPRequest_Generic.h @@ -17,7 +17,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . - Version: 1.8.2 + Version: 1.9.0 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -28,6 +28,7 @@ 1.8.0 K Hoang 13/04/2022 Add support to ESP8266 using W5x00 with lwip_W5100 or lwip_W5500 library 1.8.1 K Hoang 13/04/2022 Add support to ESP8266 using ENC28J60 with lwip_enc28j60 library 1.8.2 K Hoang 10/08/2022 Fix library.properties to remove unavailable items from depends + 1.9.0 K Hoang 30/08/2022 Fix bug. Improve debug messages. Optimize code. *****************************************************************************************************************************/ #pragma once diff --git a/src/AsyncHTTPRequest_Generic.hpp b/src/AsyncHTTPRequest_Generic.hpp index 438e34b..b8ac987 100644 --- a/src/AsyncHTTPRequest_Generic.hpp +++ b/src/AsyncHTTPRequest_Generic.hpp @@ -17,7 +17,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . - Version: 1.8.2 + Version: 1.9.0 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -28,6 +28,7 @@ 1.8.0 K Hoang 13/04/2022 Add support to ESP8266 using W5x00 with lwip_W5100 or lwip_W5500 library 1.8.1 K Hoang 13/04/2022 Add support to ESP8266 using ENC28J60 with lwip_enc28j60 library 1.8.2 K Hoang 10/08/2022 Fix library.properties to remove unavailable items from depends + 1.9.0 K Hoang 30/08/2022 Fix bug. Improve debug messages. Optimize code. *****************************************************************************************************************************/ #pragma once @@ -35,13 +36,13 @@ #ifndef ASYNC_HTTP_REQUEST_GENERIC_HPP #define ASYNC_HTTP_REQUEST_GENERIC_HPP -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION "AsyncHTTPRequest_Generic v1.8.2" +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION "AsyncHTTPRequest_Generic v1.9.0" #define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MAJOR 1 -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MINOR 8 -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_PATCH 2 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_MINOR 9 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_PATCH 0 -#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_INT 1008002 +#define ASYNC_HTTP_REQUEST_GENERIC_VERSION_INT 1009000 #include @@ -251,30 +252,26 @@ class AsyncHTTPRequest } }; - struct URL - { - char* scheme; - char* user; - char* pwd; - char* host; - int port; - char* path; - char* query; - char* fragment; + struct URL + { + char *buffer; + char *scheme; + char *host; + int port; + char *path; + char *query; - URL(): scheme(nullptr), user(nullptr), pwd(nullptr), host(nullptr), - port(80), path(nullptr), query(nullptr), fragment(nullptr) + URL(): buffer(nullptr), scheme(nullptr), host(nullptr), + port(80), path(nullptr), query(nullptr) {}; - - ~URL() + + ~URL() { + SAFE_DELETE_ARRAY(buffer) SAFE_DELETE_ARRAY(scheme) - SAFE_DELETE_ARRAY(user) - SAFE_DELETE_ARRAY(pwd) SAFE_DELETE_ARRAY(host) SAFE_DELETE_ARRAY(path) SAFE_DELETE_ARRAY(query) - SAFE_DELETE_ARRAY(fragment) } }; @@ -333,6 +330,7 @@ class AsyncHTTPRequest size_t available(); // response available size_t responseLength(); // indicated response length or sum of chunks to date int responseHTTPcode(); // HTTP response code or (negative) error code + String responseHTTPString(); String responseText(); // response (whole* or partial* as string) char* responseLongText(); // response long (whole* or partial* as string) diff --git a/src/AsyncHTTPRequest_Impl_Generic.h b/src/AsyncHTTPRequest_Impl_Generic.h index 415929d..87181b2 100644 --- a/src/AsyncHTTPRequest_Impl_Generic.h +++ b/src/AsyncHTTPRequest_Impl_Generic.h @@ -17,7 +17,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . - Version: 1.8.2 + Version: 1.9.0 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -28,6 +28,7 @@ 1.8.0 K Hoang 13/04/2022 Add support to ESP8266 using W5x00 with lwip_W5100 or lwip_W5500 library 1.8.1 K Hoang 13/04/2022 Add support to ESP8266 using ENC28J60 with lwip_enc28j60 library 1.8.2 K Hoang 10/08/2022 Fix library.properties to remove unavailable items from depends + 1.9.0 K Hoang 30/08/2022 Fix bug. Improve debug messages. Optimize code. *****************************************************************************************************************************/ #pragma once @@ -302,14 +303,14 @@ String xbuf::readString(int endPos) if ( ! result.reserve(endPos + 1)) { // KH, to remove - AHTTP_LOGDEBUG1("xbuf::readString: can't reserve size = ", endPos + 1); + //AHTTP_LOGERROR1(F("xbuf::readString: can't reserve size ="), endPos + 1); /////// return result; } // KH, to remove - AHTTP_LOGDEBUG1("xbuf::readString: Reserved size = ", endPos + 1); + //AHTTP_LOGDEBUG1(F("xbuf::readString: Reserved size ="), endPos + 1); /////// if (endPos > _used) @@ -384,10 +385,14 @@ void xbuf::addSeg() _tail->next = (xseg*) new uint32_t[_segSize / 4 + 1]; if (_tail->next == NULL) - AHTTP_LOGERROR("xbuf::addSeg: error new 1"); - - // KH, Must check NULL here - _tail = _tail->next; + { + AHTTP_LOGERROR(F("xbuf::addSeg: error new 1")); + } + else + { + // KH, Must check NULL here + _tail = _tail->next; + } } else { @@ -395,7 +400,7 @@ void xbuf::addSeg() _tail = _head = (xseg*) new uint32_t[_segSize / 4 + 1]; if (_tail == NULL) - AHTTP_LOGERROR("xbuf::addSeg: error new 2"); + AHTTP_LOGERROR(F("xbuf::addSeg: error new 2")); } // KH, Must check NULL here @@ -467,7 +472,7 @@ void AsyncHTTPRequest::setDebug(bool debug) { _debug = true; - AHTTP_LOGDEBUG3("setDebug(", debug ? "on" : "off", ") version", ASYNC_HTTP_REQUEST_GENERIC_VERSION); + AHTTP_LOGDEBUG3(F("setDebug("), debug ? F("on") : F("off"), F(") version"), ASYNC_HTTP_REQUEST_GENERIC_VERSION); } _debug = debug; @@ -482,11 +487,11 @@ bool AsyncHTTPRequest::debug() //************************************************************************************************************** bool AsyncHTTPRequest::open(const char* method, const char* URL) { - AHTTP_LOGDEBUG3("open(", method, ", url =", URL); + AHTTP_LOGDEBUG3(F("open("), method, F(", url ="), URL); if (_readyState != readyStateUnsent && _readyState != readyStateDone) { - AHTTP_LOGDEBUG("open: not ready"); + AHTTP_LOGERROR(F("open: not ready")); return false; } @@ -540,7 +545,7 @@ bool AsyncHTTPRequest::open(const char* method, const char* URL) ////// else { - AHTTP_LOGDEBUG("open: Bad method"); + AHTTP_LOGERROR(F("open: Bad method")); return false; } @@ -548,14 +553,14 @@ bool AsyncHTTPRequest::open(const char* method, const char* URL) if (!_parseURL(URL)) { - AHTTP_LOGDEBUG("open: error parsing URL"); + AHTTP_LOGERROR(F("open: error parsing URL")); return false; } if ( _client && _client->connected() && (strcmp(_URL->host, _connectedHost) != 0 || _URL->port != _connectedPort)) { - AHTTP_LOGDEBUG("open: not connected"); + AHTTP_LOGERROR(F("open: not connected")); return false; } @@ -567,7 +572,7 @@ bool AsyncHTTPRequest::open(const char* method, const char* URL) sprintf(hostName, "%s:%d", _URL->host, _URL->port); _addHeader("host", hostName); - AHTTP_LOGDEBUG1("open: conneting to hostname =", hostName); + AHTTP_LOGDEBUG1(F("open: connecting to hostname ="), hostName); SAFE_DELETE_ARRAY(hostName) @@ -581,7 +586,7 @@ bool AsyncHTTPRequest::open(const char* method, const char* URL) } else { - AHTTP_LOGDEBUG("open: error alloc"); + AHTTP_LOGERROR(F("open: error alloc")); return false; } @@ -596,7 +601,7 @@ void AsyncHTTPRequest::onReadyStateChange(readyStateChangeCB cb, void* arg) //************************************************************************************************************** void AsyncHTTPRequest::setTimeout(int seconds) { - AHTTP_LOGDEBUG1("setTimeout = ", seconds); + AHTTP_LOGDEBUG1(F("setTimeout ="), seconds); _timeout = seconds; } @@ -607,11 +612,11 @@ bool AsyncHTTPRequest::send() // New in v1.1.1 if (_requestReadyToSend) { - AHTTP_LOGDEBUG("send()"); + AHTTP_LOGDEBUG(F("send()")); } else { - AHTTP_LOGDEBUG(CANT_SEND_BAD_REQUEST); + AHTTP_LOGERROR(CANT_SEND_BAD_REQUEST); return false; } ////// @@ -634,20 +639,20 @@ bool AsyncHTTPRequest::send(const String& body) // New in v1.1.1 if (_requestReadyToSend) { - AHTTP_LOGDEBUG3("send(String)", body.substring(0, 16).c_str(), ", length =", body.length()); + AHTTP_LOGDEBUG3(F("send(String)"), body.substring(0, 16).c_str(), F(", length ="), body.length()); } else { - AHTTP_LOGDEBUG(CANT_SEND_BAD_REQUEST); + AHTTP_LOGERROR(CANT_SEND_BAD_REQUEST); return false; } ////// - AHTTP_LOGERROR1("01) send String body =", body); + AHTTP_LOGERROR1(F("01) send String body ="), body); MUTEX_LOCK(false) - AHTTP_LOGERROR1("02) send String body =", body); + AHTTP_LOGERROR1(F("02) send String body ="), body); _addHeader("Content-Length", String(body.length()).c_str()); @@ -658,14 +663,14 @@ bool AsyncHTTPRequest::send(const String& body) return false; } - AHTTP_LOGERROR1("1) send String body =", body); + AHTTP_LOGERROR1(F("1) send String body ="), body); _request->write(body); - AHTTP_LOGERROR1("2) send String body =", body); + AHTTP_LOGERROR1(F("2) send String body ="), body); _send(); - AHTTP_LOGERROR1("3) send String body =", body); + AHTTP_LOGERROR1(F("3) send String body ="), body); _AHTTP_unlock; @@ -678,11 +683,11 @@ bool AsyncHTTPRequest::send(const char* body) // New in v1.1.1 if (_requestReadyToSend) { - AHTTP_LOGDEBUG3("send(char)", body, ", length =", strlen(body)); + AHTTP_LOGDEBUG3(F("send(char)"), body, F(", length ="), strlen(body)); } else { - AHTTP_LOGDEBUG(CANT_SEND_BAD_REQUEST); + AHTTP_LOGERROR(CANT_SEND_BAD_REQUEST); return false; } ////// @@ -712,11 +717,11 @@ bool AsyncHTTPRequest::send(const uint8_t* body, size_t len) // New in v1.1.1 if (_requestReadyToSend) { - AHTTP_LOGDEBUG3("send(char)", (char*) body, ", length =", len); + AHTTP_LOGDEBUG3(F("send(char)"), (char*) body, F(", length ="), len); } else { - AHTTP_LOGDEBUG(CANT_SEND_BAD_REQUEST); + AHTTP_LOGERROR(CANT_SEND_BAD_REQUEST); return false; } ////// @@ -746,11 +751,11 @@ bool AsyncHTTPRequest::send(xbuf* body, size_t len) // New in v1.1.1 if (_requestReadyToSend) { - AHTTP_LOGDEBUG3("send(char)", body->peekString(16).c_str(), ", length =", len); + AHTTP_LOGDEBUG3(F("send(char)"), body->peekString(16).c_str(), F(", length ="), len); } else { - AHTTP_LOGDEBUG(CANT_SEND_BAD_REQUEST); + AHTTP_LOGERROR(CANT_SEND_BAD_REQUEST); return false; } ////// @@ -777,7 +782,7 @@ bool AsyncHTTPRequest::send(xbuf* body, size_t len) //************************************************************************************************************** void AsyncHTTPRequest::abort() { - AHTTP_LOGDEBUG("abort()"); + AHTTP_LOGERROR(F("abort()")); if (! _client) { @@ -802,46 +807,118 @@ int AsyncHTTPRequest::responseHTTPcode() return _HTTPcode; } +//************************************************************************************************************** +String AsyncHTTPRequest::responseHTTPString() +{ + switch(_HTTPcode) + { + case 0: + return F("OK"); + case HTTPCODE_CONNECTION_REFUSED: + return F("CONNECTION_REFUSED"); + case HTTPCODE_SEND_HEADER_FAILED: + return F("SEND_HEADER_FAILED"); + case HTTPCODE_SEND_PAYLOAD_FAILED: + return F("SEND_PAYLOAD_FAILED"); + case HTTPCODE_NOT_CONNECTED: + return F("NOT_CONNECTED"); + case HTTPCODE_CONNECTION_LOST: + return F("CONNECTION_LOST"); + case HTTPCODE_NO_STREAM: + return F("NO_STREAM"); + case HTTPCODE_NO_HTTP_SERVER: + return F("NO_HTTP_SERVER"); + case HTTPCODE_TOO_LESS_RAM: + return F("TOO_LESS_RAM"); + case HTTPCODE_ENCODING: + return F("ENCODING"); + case HTTPCODE_STREAM_WRITE: + return F("STREAM_WRITE"); + case HTTPCODE_TIMEOUT: + return F("TIMEOUT"); + + // HTTP positive code + case 100: return F("Continue"); + case 101: return F("Switching Protocols"); + case 200: return F("HTTP OK"); + case 201: return F("Created"); + case 202: return F("Accepted"); + case 203: return F("Non-Authoritative Information"); + case 204: return F("No Content"); + case 205: return F("Reset Content"); + case 206: return F("Partial Content"); + case 300: return F("Multiple Choices"); + case 301: return F("Moved Permanently"); + case 302: return F("Found"); + case 303: return F("See Other"); + case 304: return F("Not Modified"); + case 305: return F("Use Proxy"); + case 307: return F("Temporary Redirect"); + case 400: return F("Bad Request"); + case 401: return F("Unauthorized"); + case 402: return F("Payment Required"); + case 403: return F("Forbidden"); + case 404: return F("Not Found"); + case 405: return F("Method Not Allowed"); + case 406: return F("Not Acceptable"); + case 407: return F("Proxy Authentication Required"); + case 408: return F("Request Time-out"); + case 409: return F("Conflict"); + case 410: return F("Gone"); + case 411: return F("Length Required"); + case 412: return F("Precondition Failed"); + case 413: return F("Request Entity Too Large"); + case 414: return F("Request-URI Too Large"); + case 415: return F("Unsupported Media Type"); + case 416: return F("Requested range not satisfiable"); + case 417: return F("Expectation Failed"); + case 500: return F("Internal Server Error"); + case 501: return F("Not Implemented"); + case 502: return F("Bad Gateway"); + case 503: return F("Service Unavailable"); + case 504: return F("Gateway Time-out"); + case 505: return F("HTTP Version not supported"); + default: return "UNKNOWN"; + } +} + //************************************************************************************************************** String AsyncHTTPRequest::responseText() { - AHTTP_LOGDEBUG("responseText()"); + AHTTP_LOGDEBUG(F("responseText()")); MUTEX_LOCK(String()) if ( ! _response || _readyState < readyStateLoading || ! available()) { - AHTTP_LOGDEBUG("responseText() no data"); + AHTTP_LOGERROR(F("responseText() no data")); _AHTTP_unlock; return String(); } - String localString; - size_t avail = available(); - - if ( ! localString.reserve(avail)) - { - AHTTP_LOGDEBUG("responseText() no buffer"); - - _HTTPcode = HTTPCODE_TOO_LESS_RAM; - _client->abort(); + size_t avail = available(); + + String localString = _response->readString(avail); + + if (localString.length() < avail) + { + AHTTP_LOGERROR(F("!responseText() no buffer")) + _HTTPcode = HTTPCODE_TOO_LESS_RAM; + _client->abort(); + _AHTTP_unlock; + + return String(); + } + + _contentRead += localString.length(); + + AHTTP_LOGDEBUG3(F("responseText() ="), localString.substring(0,16), F(", size ="), avail); _AHTTP_unlock; - return String(); - } - - localString = _response->readString(avail); - _contentRead += localString.length(); - - //AHTTP_LOGDEBUG3("responseText(char)", localString.substring(0, 16).c_str(), ", avail =", avail); - AHTTP_LOGDEBUG3("responseText(char)", localString, ", avail =", avail); - - _AHTTP_unlock; - - return localString; + return localString; } //************************************************************************************************************** @@ -858,13 +935,13 @@ char globalLongString[GLOBAL_STR_LEN + 1]; char* AsyncHTTPRequest::responseLongText() { - AHTTP_LOGDEBUG("responseLongText()"); + AHTTP_LOGDEBUG(F("responseLongText()")); MUTEX_LOCK(NULL) if ( ! _response || _readyState < readyStateLoading || ! available()) { - AHTTP_LOGDEBUG("responseText() no data"); + AHTTP_LOGERROR(F("responseText() no data")); _AHTTP_unlock; @@ -881,7 +958,7 @@ char* AsyncHTTPRequest::responseLongText() _contentRead += _response->readString(avail).length(); - AHTTP_LOGDEBUG3("responseLongText(char)", globalLongString, ", avail =", avail); + AHTTP_LOGDEBUG3(F("responseLongText(char)"), globalLongString, F(", avail ="), avail); _AHTTP_unlock; @@ -893,7 +970,7 @@ size_t AsyncHTTPRequest::responseRead(uint8_t* buf, size_t len) { if ( ! _response || _readyState < readyStateLoading || ! available()) { - AHTTP_LOGDEBUG("responseRead() no data"); + AHTTP_LOGERROR(F("responseRead() no data")); return 0; } @@ -903,7 +980,7 @@ size_t AsyncHTTPRequest::responseRead(uint8_t* buf, size_t len) size_t avail = available() > len ? len : available(); _response->read(buf, avail); - AHTTP_LOGDEBUG3("responseRead(char)", (char*) buf, ", avail =", avail); + AHTTP_LOGDEBUG3(F("responseRead(char)"), (char*) buf, F(", avail ="), avail); _contentRead += avail; @@ -938,7 +1015,7 @@ size_t AsyncHTTPRequest::responseLength() //************************************************************************************************************** void AsyncHTTPRequest::onData(onDataCB cb, void* arg) { - AHTTP_LOGDEBUG("onData() CB set"); + AHTTP_LOGDEBUG(F("onData() CB set")); _onDataCB = cb; _onDataCBarg = arg; @@ -1049,16 +1126,16 @@ bool AsyncHTTPRequest::_parseURL(const String& url) strcpy(_URL->query, url.substring(queryBeg).c_str()); - AHTTP_LOGDEBUG2("_parseURL(): scheme+host", _URL->scheme, _URL->host); - AHTTP_LOGDEBUG3("_parseURL(): port+path+query", _URL->port, _URL->path, _URL->query); + AHTTP_LOGDEBUG2(F("_parseURL(): scheme+host"), _URL->scheme, _URL->host); + AHTTP_LOGDEBUG3(F("_parseURL(): port+path+query"), _URL->port, _URL->path, _URL->query); - return true; + return true; } //************************************************************************************************************** bool AsyncHTTPRequest::_connect() { - AHTTP_LOGDEBUG("_connect()"); + AHTTP_LOGDEBUG(F("_connect()")); if ( ! _client) { @@ -1100,15 +1177,21 @@ bool AsyncHTTPRequest::_connect() if ( ! _client->connected()) { + AHTTP_LOGDEBUG3(F("_client->connecting to"), _URL->host, F(","), _URL->port); + if ( ! _client->connect(_URL->host, _URL->port)) { - AHTTP_LOGDEBUG3("client.connect failed:", _URL->host, ",", _URL->port); + AHTTP_LOGERROR3(F("client.connect failed:"), _URL->host, F(","), _URL->port); _HTTPcode = HTTPCODE_NOT_CONNECTED; _setReadyState(readyStateDone); return false; } + else + { + AHTTP_LOGDEBUG3(F("client.connect OK to"), _URL->host, F(","), _URL->port); + } } else { @@ -1116,6 +1199,8 @@ bool AsyncHTTPRequest::_connect() } _lastActivity = millis(); + + AHTTP_LOGDEBUG(F("_connect() true")); return true; } @@ -1123,7 +1208,7 @@ bool AsyncHTTPRequest::_connect() //************************************************************************************************************** bool AsyncHTTPRequest::_buildRequest() { - AHTTP_LOGDEBUG("_buildRequest()"); + AHTTP_LOGDEBUG(F("_buildRequest()")); // Build the header. if ( ! _request) @@ -1135,8 +1220,8 @@ bool AsyncHTTPRequest::_buildRequest() } // New in v1.1.1 - AHTTP_LOGDEBUG1("_HTTPmethod =", _HTTPmethod); - AHTTP_LOGDEBUG3(_HTTPmethodStringwithSpace[_HTTPmethod], _URL->path, _URL->query, " HTTP/1.1\r\n" ); + AHTTP_LOGDEBUG1(F("_HTTPmethod ="), _HTTPmethod); + AHTTP_LOGDEBUG3(_HTTPmethodStringwithSpace[_HTTPmethod], _URL->path, _URL->query, F("HTTP/1.1\r\n") ); ////// // New in v1.1.0 @@ -1159,7 +1244,7 @@ bool AsyncHTTPRequest::_buildRequest() _request->write(hdr->value); _request->write("\r\n"); - AHTTP_LOGDEBUG3(hdr->name, ":", hdr->value, "\r\n" ); + AHTTP_LOGDEBUG3(hdr->name, F(":"), hdr->value, F("\r\n")); hdr = hdr->next; } @@ -1178,29 +1263,25 @@ size_t AsyncHTTPRequest::_send() if ( ! _request) return 0; - AHTTP_LOGDEBUG1("_send(), _request->available =", _request->available()); + AHTTP_LOGDEBUG1(F("_send(), _request->available ="), _request->available()); -#if 1 if ( ! _client->connected()) { - AHTTP_LOGDEBUG("!connected"); + AHTTP_LOGDEBUG(F("!connected yet")); + + // KH fix bug https://github.com/khoih-prog/AsyncHTTPRequest_Generic/issues/38 + _HTTPcode = HTTPCODE_NOT_CONNECTED; + _setReadyState(readyStateUnsent); + /////////////////////////// return 0; } else if ( ! _client->canSend()) { - AHTTP_LOGDEBUG("*can't send"); + AHTTP_LOGDEBUG(F("*can't send")); return 0; } -#else - if ( ! _client->connected() || ! _client->canSend()) - { - AHTTP_LOGDEBUG("*can't send"); - - return 0; - } -#endif size_t supply = _request->available(); size_t demand = _client->space(); @@ -1235,7 +1316,7 @@ size_t AsyncHTTPRequest::_send() _client->send(); - AHTTP_LOGDEBUG1("*send", sent); + AHTTP_LOGDEBUG1(F("*send"), sent); _lastActivity = millis(); @@ -1249,7 +1330,7 @@ void AsyncHTTPRequest::_setReadyState(reqStates newState) { _readyState = newState; - AHTTP_LOGDEBUG1("_setReadyState :", _readyState); + AHTTP_LOGDEBUG1(F("_setReadyState :"), _readyState); if (_readyStateChangeCB) { @@ -1263,7 +1344,7 @@ void AsyncHTTPRequest::_processChunks() { while (_chunks->available()) { - AHTTP_LOGDEBUG3("_processChunks()", _chunks->peekString(16).c_str(), ", chunks available =", _chunks->available()); + AHTTP_LOGDEBUG3(F("_processChunks()"), _chunks->peekString(16).c_str(), F(", chunks available ="), _chunks->available()); size_t _chunkRemaining = _contentLength - _contentRead - _response->available(); _chunkRemaining -= _response->write(_chunks, _chunkRemaining); @@ -1275,7 +1356,7 @@ void AsyncHTTPRequest::_processChunks() String chunkHeader = _chunks->readStringUntil("\r\n"); - AHTTP_LOGDEBUG3("*getChunkHeader", chunkHeader.c_str(), ", chunkHeader length =", chunkHeader.length()); + AHTTP_LOGDEBUG3(F("*getChunkHeader"), chunkHeader.c_str(), F(", chunkHeader length ="), chunkHeader.length()); size_t chunkLength = strtol(chunkHeader.c_str(), nullptr, 16); _contentLength += chunkLength; @@ -1286,13 +1367,13 @@ void AsyncHTTPRequest::_processChunks() if (connectionHdr && (strcasecmp_P(connectionHdr, PSTR("close")) == 0)) { - AHTTP_LOGDEBUG("*all chunks received - closing TCP"); + AHTTP_LOGDEBUG(F("*all chunks received - closing TCP")); _client->close(); } else { - AHTTP_LOGDEBUG("*all chunks received - no disconnect"); + AHTTP_LOGDEBUG(F("*all chunks received - no disconnect")); } _requestEndTime = millis(); @@ -1317,7 +1398,7 @@ void AsyncHTTPRequest::_processChunks() //************************************************************************************************************** void AsyncHTTPRequest::_onConnect(AsyncClient* client) { - AHTTP_LOGDEBUG("_onConnect handler"); + AHTTP_LOGDEBUG(F("_onConnect handler")); MUTEX_LOCK_NR @@ -1334,7 +1415,7 @@ void AsyncHTTPRequest::_onConnect(AsyncClient* client) _AHTTP_unlock; // KH, to remove - AHTTP_LOGDEBUG("_onConnect: Can't new _responser"); + //AHTTP_LOGERROR(F("_onConnect: Can't new _response")); /////// return; @@ -1382,7 +1463,7 @@ void AsyncHTTPRequest::_onPoll(AsyncClient* client) _client->close(); _HTTPcode = HTTPCODE_TIMEOUT; - AHTTP_LOGDEBUG("_onPoll timeout"); + AHTTP_LOGDEBUG(F("_onPoll timeout")); } if (_onDataCB && available()) @@ -1398,7 +1479,8 @@ void AsyncHTTPRequest::_onError(AsyncClient* client, int8_t error) { (void) client; - AHTTP_LOGDEBUG1("_onError handler error =", error); + //AHTTP_LOGERROR1(F("_onError handler error ="), error); + AHTTP_LOGERROR1(F("_onError handler error ="), client->errorToString(error)); _HTTPcode = error; } @@ -1408,23 +1490,25 @@ void AsyncHTTPRequest::_onDisconnect(AsyncClient* client) { (void) client; - AHTTP_LOGDEBUG("\n_onDisconnect handler"); + AHTTP_LOGDEBUG(F("\n_onDisconnect handler")); MUTEX_LOCK_NR if (_readyState < readyStateOpened) { - AHTTP_LOGDEBUG("HTTPCODE_NOT_CONNECTED"); + AHTTP_LOGERROR(F("HTTPCODE_NOT_CONNECTED")); _HTTPcode = HTTPCODE_NOT_CONNECTED; } else if (_HTTPcode > 0 && (_readyState < readyStateHdrsRecvd || (_contentRead + _response->available()) < _contentLength)) { - AHTTP_LOGDEBUG("HTTPCODE_CONNECTION_LOST"); + AHTTP_LOGDEBUG(F("_onDisconnect: HTTPCODE_CONNECTION_LOST")); _HTTPcode = HTTPCODE_CONNECTION_LOST; } - AHTTP_LOGDEBUG1("_HTTPcode = ", _HTTPcode); + AHTTP_LOGDEBUG1(F("_onDisconnect: _HTTPcode ="), _HTTPcode); + AHTTP_LOGDEBUG1(F("_onDisconnect: _HTTPcode ="), responseHTTPString()); + SAFE_DELETE_ARRAY(_connectedHost) @@ -1441,7 +1525,7 @@ void AsyncHTTPRequest::_onDisconnect(AsyncClient* client) //************************************************************************************************************** void AsyncHTTPRequest::_onData(void* Vbuf, size_t len) { - AHTTP_LOGDEBUG3("_onData handler", (char*) Vbuf, ", len =", len); + AHTTP_LOGDEBUG3(F("_onData handler"), (char*) Vbuf, F(", len ="), len); MUTEX_LOCK_NR @@ -1453,7 +1537,7 @@ void AsyncHTTPRequest::_onData(void* Vbuf, size_t len) _chunks->write((uint8_t*)Vbuf, len); // KH, to remove - AHTTP_LOGDEBUG("_onData: _processChunks"); + //AHTTP_LOGDEBUG(F("_onData: _processChunks")); /////// _processChunks(); @@ -1471,7 +1555,7 @@ void AsyncHTTPRequest::_onData(void* Vbuf, size_t len) _AHTTP_unlock; // KH, to remove - AHTTP_LOGDEBUG("_onData: headers not complete"); + //AHTTP_LOGERROR(F("_onData: headers not complete")); /////// return; @@ -1491,13 +1575,13 @@ void AsyncHTTPRequest::_onData(void* Vbuf, size_t len) if (connectionHdr && (strcasecmp_P(connectionHdr, PSTR("close")) == 0)) { - AHTTP_LOGDEBUG("*all data received - closing TCP"); + AHTTP_LOGDEBUG(F("*all data received - closing TCP")); _client->close(); } else { - AHTTP_LOGDEBUG("*all data received - no disconnect"); + AHTTP_LOGDEBUG(F("*all data received - no disconnect")); } _requestEndTime = millis(); @@ -1519,7 +1603,7 @@ void AsyncHTTPRequest::_onData(void* Vbuf, size_t len) //************************************************************************************************************** bool AsyncHTTPRequest::_collectHeaders() { - AHTTP_LOGDEBUG("_collectHeaders()"); + AHTTP_LOGDEBUG(F("_collectHeaders()")); // Loop to parse off each header line. Drop out and return false if no \r\n (incomplete) do @@ -1571,7 +1655,7 @@ bool AsyncHTTPRequest::_collectHeaders() if (hdr && strcasecmp_P(hdr->value, PSTR("chunked")) == 0) { - AHTTP_LOGDEBUG("*transfer-encoding: chunked"); + AHTTP_LOGDEBUG(F("*transfer-encoding: chunked")); _chunked = true; _contentLength = 0;