From e7dabe52bc32a408f883e6def24b736babdd0250 Mon Sep 17 00:00:00 2001
From: Khoi Hoang <57012152+khoih-prog@users.noreply.github.com>
Date: Wed, 23 Dec 2020 17:35:01 -0500
Subject: [PATCH] Releases v1.1.0
### Releases v1.1.0
1. Add HTTP PUT, PATCH, DELETE and HEAD methods. Check [Add support for sending PUT, PATCH, DELETE request](https://github.com/khoih-prog/AsyncHTTPRequest_Generic/issues/5)
2. Add Table of Contents
3. Add Version String
---
README.md | 82 +++-
.../AsyncCustomHeader_STM32.ino | 4 +-
.../AsyncDweetGet_STM32.ino | 4 +-
.../AsyncDweetPost_STM32.ino | 4 +-
.../AsyncHTTPRequest_ESP.ino | 4 +-
.../AsyncHTTPRequest_ESP_WiFiManager.ino | 267 ++++++++----
.../AsyncHTTPRequest_STM32.ino | 4 +-
.../AsyncSimpleGET_STM32.ino | 4 +-
.../AsyncWebClientRepeating_STM32.ino | 4 +-
library.json | 16 +-
library.properties | 4 +-
platformio/platformio.ini | 24 +-
src/AsyncHTTPRequest_Debug_Generic.h | 3 +-
src/AsyncHTTPRequest_Generic.h | 17 +-
src/AsyncHTTPRequest_Impl_Generic.h | 35 +-
src/utility/xbuf.h | 3 +-
src/utility/xbuf_Impl.h | 3 +-
src_cpp/AsyncHTTPRequest_Debug_Generic.h | 3 +-
src_cpp/AsyncHTTPRequest_Generic.cpp | 35 +-
src_cpp/AsyncHTTPRequest_Generic.h | 16 +-
src_cpp/utility/xbuf.h | 5 +-
src_cpp/utility/xbuf_Impl.h | 400 ++++++++++++++++++
src_h/AsyncHTTPRequest_Debug_Generic.h | 3 +-
src_h/AsyncHTTPRequest_Generic.h | 17 +-
src_h/AsyncHTTPRequest_Impl_Generic.h | 35 +-
src_h/utility/xbuf.h | 3 +-
src_h/utility/xbuf_Impl.h | 3 +-
27 files changed, 856 insertions(+), 146 deletions(-)
create mode 100644 src_cpp/utility/xbuf_Impl.h
diff --git a/README.md b/README.md
index 5d7cee0..3ed93d9 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,62 @@
---
---
+## Table of Contents
+
+
+* [Why do we need the new Async AsyncHTTPRequest_Generic library](#why-do-we-need-this-async-asynchttprequest_generic-library)
+ * [Features](#features)
+ * [Supports](#supports)
+ * [Principles of operation](#principles-of-operation)
+* [Changelog](#changelog)
+ * [Releases v1.1.0](#releases-v110)
+ * [Releases v1.0.2](#releases-v102)
+ * [Releases v1.0.1](#releases-v101)
+ * [Releases v1.0.0](#releases-v100)
+* [AsyncHTTPRequest_Generic for ESP32, ESP8266 using built-in WiFi and STM32 boards using built-in LAN8742A Ethernet](#asynchttprequest_generic-for-esp32-esp8266-using-built-in-wifi-and-stm32-boards-using-built-in-lan8742a-ethernet)
+* [Prerequisites](#prerequisites)
+* [Installation](#installation)
+ * [Use Arduino Library Manager](#use-arduino-library-manager)
+ * [Manual Install](#manual-install)
+ * [VS Code & PlatformIO](#vs-code--platformio)
+* [Packages' Patches](#packages-patches)
+* [HOWTO Fix `Multiple Definitions` Linker Error](#howto-fix-multiple-definitions-linker-error)
+* [HOWTO Use analogRead() with ESP32 running WiFi and/or BlueTooth (BT/BLE)](#howto-use-analogread-with-esp32-running-wifi-andor-bluetooth-btble)
+ * [1. ESP32 has 2 ADCs, named ADC1 and ADC2](#1--esp32-has-2-adcs-named-adc1-and-adc2)
+ * [2. ESP32 ADCs functions](#2-esp32-adcs-functions)
+ * [3. ESP32 WiFi uses ADC2 for WiFi functions](#3-esp32-wifi-uses-adc2-for-wifi-functions)
+* [Examples](#examples)
+ * [AsyncHTTPRequest_ESP](examples/AsyncHTTPRequest_ESP)
+ * [AsyncHTTPRequest_ESP_WiFiManager](examples/AsyncHTTPRequest_ESP_WiFiManager)
+ * [AsyncHTTPRequest_STM32](examples/AsyncHTTPRequest_STM32)
+ * [AsyncCustomHeader_STM32](examples/AsyncCustomHeader_STM32)
+ * [AsyncDweetGet_STM32](examples/AsyncDweetGet_STM32)
+ * [AsyncDweetPost_STM32](examples/AsyncDweetPost_STM32)
+ * [AsyncSimpleGET_STM32](examples/AsyncSimpleGET_STM32)
+ * [AsyncWebClientRepeating_STM32](examples/AsyncWebClientRepeating_STM32)
+* [Example AsyncHTTPRequest_STM32](#example-asynchttprequest_stm32)
+ * [File AsyncHTTPRequest_STM32.ino](#1-file-asynchttprequest_stm32ino)
+ * [2. File defines.h](#2-file-definesh)
+* [Debug Terminal Output Samples](#debug-termimal-output-samples)
+ * [1. AsyncHTTPRequest_STM32 running on STM32F7 Nucleo-144 NUCLEO_F767ZI using built-in LAN8742A ](#1-asynchttprequest_stm32-running-on-stm32f7-nucleo-144-nucleo_f767zi-using-built-in-lan8742a)
+ * [2. AsyncHTTPRequest_ESP_WiFiManager running on ESP8266_NODEMCU](#2-asynchttprequest_esp_wifimanager-running-on-esp8266_nodemcu)
+ * [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)
+* [Debug](#debug)
+* [Troubleshooting](#troubleshooting)
+* [Issues](#issues)
+* [Releases](#releases)
+* [TO DO](#to-do)
+* [DONE](#done)
+* [Contributions and Thanks](#contributions-and-thanks)
+* [Contributing](#contributing)
+* [License and credits](#license-and-credits)
+* [Copyright](#copyright)
+
+---
+---
+
## Why do we need this Async [AsyncHTTPRequest_Generic library](https://github.com/khoih-prog/AsyncHTTPRequest_Generic)
#### Features
@@ -19,9 +75,9 @@
4. Relying on **[`STM32duino LwIP`](https://github.com/stm32duino/LwIP)/[`STM32duino STM32Ethernet`](https://github.com/stm32duino/STM32Ethernet)/[`STM32AsyncTCP`](https://github.com/philbowles/STM32AsyncTCP) for STM32 using built-in LAN8742A Ethernet.**
5. Methods similar in format and usage to XmlHTTPrequest in Javascript.
-#### Supports:
+#### Supports
-1. **GET and POST**
+1. **GET, POST, PUT, PATCH, DELETE and HEAD**
2. Request and response headers
3. Chunked response
4. Single String response for short (<~5K) responses (heap permitting).
@@ -45,6 +101,16 @@ Chunked responses are recognized and handled transparently.
---
---
+
+## Changelog
+
+### Releases v1.1.0
+
+1. Add HTTP PUT, PATCH, DELETE and HEAD methods. Check [Add support for sending PUT, PATCH, DELETE request](https://github.com/khoih-prog/AsyncHTTPRequest_Generic/issues/5)
+2. Add Table of Contents
+3. Add Version String
+
+
### Releases v1.0.2
1. Make Mutex Lock and delete more reliable and error-proof to prevent random crash.
@@ -509,7 +575,7 @@ IPAddress ip(192, 168, 2, 232);
---
---
-### Debug Terminal Oouput Samples
+### Debug Terminal Ouput Samples
#### 1. [AsyncHTTPRequest_STM32](examples/AsyncHTTPRequest_STM32) running on STM32F7 Nucleo-144 NUCLEO_F767ZI using built-in LAN8742A
@@ -763,10 +829,17 @@ Submit issues to: [AsyncHTTPRequest_Generic issues](https://github.com/khoih-pro
1. Initially add support to STM32 using built-in LAN8742A Etnernet. Tested on **STM32F7 Nucleo-144 F767ZI**.
2. Add more examples.
3. Add debugging features.
+ 4. Add PUT, PATCH, DELETE and HEAD besides GET and POST.
---
---
+## Releases
+
+### Releases v1.1.0
+
+1. Add HTTP PUT, PATCH, DELETE and HEAD methods. Check [Add support for sending PUT, PATCH, DELETE request](https://github.com/khoih-prog/AsyncHTTPRequest_Generic/issues/5)
+
### Releases v1.0.2
1. Make Mutex Lock and delete more reliable and error-proof to prevent random crash.
@@ -791,10 +864,13 @@ This library is based on, modified, bug-fixed and improved from:
2. Thanks to [Daniel Brunner](https://github.com/0xFEEDC0DE64) to report and make PR in [Fixed linker errors when included in multiple .cpp files](https://github.com/khoih-prog/AsyncHTTPRequest_Generic/pull/1) leading to v1.0.1. See [**HOWTO Fix `Multiple Definitions` Linker Error**](https://github.com/khoih-prog/AsyncHTTPRequest_Generic#HOWTO-Fix-Multiple-Definitions-Linker-Error)
+3. Thanks to [gleniat](https://github.com/gleniat) to make enhancement request in[Add support for sending PUT, PATCH, DELETE request](https://github.com/khoih-prog/AsyncHTTPRequest_Generic/issues/5) leading to v1.1.0.
+
diff --git a/examples/AsyncCustomHeader_STM32/AsyncCustomHeader_STM32.ino b/examples/AsyncCustomHeader_STM32/AsyncCustomHeader_STM32.ino
index e5bf7a3..b13f5cb 100644
--- a/examples/AsyncCustomHeader_STM32/AsyncCustomHeader_STM32.ino
+++ b/examples/AsyncCustomHeader_STM32/AsyncCustomHeader_STM32.ino
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#include "defines.h"
@@ -76,6 +77,7 @@ void setup(void)
while (!Serial);
Serial.println("\nStart AsyncCustomHeader_STM32 on " + String(BOARD_NAME));
+ Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION);
// start the ethernet connection and the server
// Use random mac
diff --git a/examples/AsyncDweetGet_STM32/AsyncDweetGet_STM32.ino b/examples/AsyncDweetGet_STM32/AsyncDweetGet_STM32.ino
index 603ec5a..f44643a 100644
--- a/examples/AsyncDweetGet_STM32/AsyncDweetGet_STM32.ino
+++ b/examples/AsyncDweetGet_STM32/AsyncDweetGet_STM32.ino
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
/**
@@ -123,6 +124,7 @@ void setup(void)
while (!Serial);
Serial.println("\nStart AsyncDweetGET_STM32 on " + String(BOARD_NAME));
+ Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION);
// start the ethernet connection and the server
// Use random mac
diff --git a/examples/AsyncDweetPost_STM32/AsyncDweetPost_STM32.ino b/examples/AsyncDweetPost_STM32/AsyncDweetPost_STM32.ino
index ce7eef0..d1f2555 100644
--- a/examples/AsyncDweetPost_STM32/AsyncDweetPost_STM32.ino
+++ b/examples/AsyncDweetPost_STM32/AsyncDweetPost_STM32.ino
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
// Dweet.io POST client. Connects to dweet.io once every ten seconds, sends a POST request and a request body.
@@ -122,6 +123,7 @@ void setup(void)
while (!Serial);
Serial.println("\nStart AsyncDweetPOST_STM32 on " + String(BOARD_NAME));
+ Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION);
// start the ethernet connection and the server
// Use random mac
diff --git a/examples/AsyncHTTPRequest_ESP/AsyncHTTPRequest_ESP.ino b/examples/AsyncHTTPRequest_ESP/AsyncHTTPRequest_ESP.ino
index 0c76329..b6eb516 100644
--- a/examples/AsyncHTTPRequest_ESP/AsyncHTTPRequest_ESP.ino
+++ b/examples/AsyncHTTPRequest_ESP/AsyncHTTPRequest_ESP.ino
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
//************************************************************************************************************
//
@@ -133,6 +134,7 @@ void setup()
while (!Serial);
Serial.println("\nStarting AsyncHTTPRequest_ESP using " + String(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 598ce8a..a2197ca 100644
--- a/examples/AsyncHTTPRequest_ESP_WiFiManager/AsyncHTTPRequest_ESP_WiFiManager.ino
+++ b/examples/AsyncHTTPRequest_ESP_WiFiManager/AsyncHTTPRequest_ESP_WiFiManager.ino
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
//************************************************************************************************************
//
@@ -48,6 +49,8 @@
//
//*************************************************************************************************************
+// Important note: This code is intended to run with the ESPAsync_WiFiManager library version 1.4.1+.
+
#if !( defined(ESP8266) || defined(ESP32) )
#error This code is intended to run on the ESP8266 or ESP32 platform! Please check your Tools->Board setting.
#endif
@@ -223,6 +226,10 @@ bool initialConfig = false;
IPAddress dns1IP = gatewayIP;
IPAddress dns2IP = IPAddress(8, 8, 8, 8);
+IPAddress APStaticIP = IPAddress(192, 168, 100, 1);
+IPAddress APStaticGW = IPAddress(192, 168, 100, 1);
+IPAddress APStaticSN = IPAddress(255, 255, 255, 0);
+
#include //https://github.com/khoih-prog/ESPAsync_WiFiManager
#define HTTP_PORT 80
@@ -236,6 +243,139 @@ DNSServer dnsServer;
AsyncHTTPRequest request;
Ticker ticker;
+///////////////////////////////////////////
+// New in v1.4.0
+/******************************************
+ * // Defined in ESPAsync_WiFiManager.h
+typedef struct
+{
+ IPAddress _ap_static_ip;
+ IPAddress _ap_static_gw;
+ IPAddress _ap_static_sn;
+
+} WiFi_AP_IPConfig;
+
+typedef struct
+{
+ IPAddress _sta_static_ip;
+ IPAddress _sta_static_gw;
+ IPAddress _sta_static_sn;
+#if USE_CONFIGURABLE_DNS
+ IPAddress _sta_static_dns1;
+ IPAddress _sta_static_dns2;
+#endif
+} WiFi_STA_IPConfig;
+******************************************/
+
+WiFi_AP_IPConfig WM_AP_IPconfig;
+WiFi_STA_IPConfig WM_STA_IPconfig;
+
+void initAPIPConfigStruct(WiFi_AP_IPConfig &in_WM_AP_IPconfig)
+{
+ in_WM_AP_IPconfig._ap_static_ip = APStaticIP;
+ in_WM_AP_IPconfig._ap_static_gw = APStaticGW;
+ in_WM_AP_IPconfig._ap_static_sn = APStaticSN;
+}
+
+void initSTAIPConfigStruct(WiFi_STA_IPConfig &in_WM_STA_IPconfig)
+{
+ in_WM_STA_IPconfig._sta_static_ip = stationIP;
+ in_WM_STA_IPconfig._sta_static_gw = gatewayIP;
+ in_WM_STA_IPconfig._sta_static_sn = netMask;
+#if USE_CONFIGURABLE_DNS
+ in_WM_STA_IPconfig._sta_static_dns1 = dns1IP;
+ in_WM_STA_IPconfig._sta_static_dns2 = dns2IP;
+#endif
+}
+
+void displayIPConfigStruct(WiFi_STA_IPConfig in_WM_STA_IPconfig)
+{
+ LOGERROR3(F("stationIP ="), in_WM_STA_IPconfig._sta_static_ip, ", gatewayIP =", in_WM_STA_IPconfig._sta_static_gw);
+ LOGERROR1(F("netMask ="), in_WM_STA_IPconfig._sta_static_sn);
+#if USE_CONFIGURABLE_DNS
+ LOGERROR3(F("dns1IP ="), in_WM_STA_IPconfig._sta_static_dns1, ", dns2IP =", in_WM_STA_IPconfig._sta_static_dns2);
+#endif
+}
+
+void configWiFi(WiFi_STA_IPConfig in_WM_STA_IPconfig)
+{
+ #if USE_CONFIGURABLE_DNS
+ // Set static IP, Gateway, Subnetmask, DNS1 and DNS2. New in v1.0.5
+ WiFi.config(in_WM_STA_IPconfig._sta_static_ip, in_WM_STA_IPconfig._sta_static_gw, in_WM_STA_IPconfig._sta_static_sn, in_WM_STA_IPconfig._sta_static_dns1, in_WM_STA_IPconfig._sta_static_dns2);
+ #else
+ // Set static IP, Gateway, Subnetmask, Use auto DNS1 and DNS2.
+ WiFi.config(in_WM_STA_IPconfig._sta_static_ip, in_WM_STA_IPconfig._sta_static_gw, in_WM_STA_IPconfig._sta_static_sn);
+ #endif
+}
+
+///////////////////////////////////////////
+
+uint8_t connectMultiWiFi()
+{
+#if ESP32
+ // For ESP32, this better be 0 to shorten the connect time
+ #define WIFI_MULTI_1ST_CONNECT_WAITING_MS 0
+#else
+ // For ESP8266, this better be 2200 to enable connect the 1st time
+ #define WIFI_MULTI_1ST_CONNECT_WAITING_MS 2200L
+#endif
+
+#define WIFI_MULTI_CONNECT_WAITING_MS 100L
+
+ uint8_t status;
+
+ LOGERROR(F("ConnectMultiWiFi with :"));
+
+ if ( (Router_SSID != "") && (Router_Pass != "") )
+ {
+ LOGERROR3(F("* Flash-stored Router_SSID = "), Router_SSID, F(", Router_Pass = "), Router_Pass );
+ }
+
+ for (uint8_t i = 0; i < NUM_WIFI_CREDENTIALS; i++)
+ {
+ // Don't permit NULL SSID and password len < MIN_AP_PASSWORD_SIZE (8)
+ if ( (String(WM_config.WiFi_Creds[i].wifi_ssid) != "") && (strlen(WM_config.WiFi_Creds[i].wifi_pw) >= MIN_AP_PASSWORD_SIZE) )
+ {
+ LOGERROR3(F("* Additional SSID = "), WM_config.WiFi_Creds[i].wifi_ssid, F(", PW = "), WM_config.WiFi_Creds[i].wifi_pw );
+ }
+ }
+
+ LOGERROR(F("Connecting MultiWifi..."));
+
+ WiFi.mode(WIFI_STA);
+
+#if !USE_DHCP_IP
+ // New in v1.4.0
+ configWiFi(WM_STA_IPconfig);
+ //////
+#endif
+
+ int i = 0;
+ status = wifiMulti.run();
+ delay(WIFI_MULTI_1ST_CONNECT_WAITING_MS);
+
+ while ( ( i++ < 20 ) && ( status != WL_CONNECTED ) )
+ {
+ status = wifiMulti.run();
+
+ if ( status == WL_CONNECTED )
+ break;
+ else
+ delay(WIFI_MULTI_CONNECT_WAITING_MS);
+ }
+
+ if ( status == WL_CONNECTED )
+ {
+ LOGERROR1(F("WiFi connected after time: "), i);
+ LOGERROR3(F("SSID:"), WiFi.SSID(), F(",RSSI="), WiFi.RSSI());
+ LOGERROR3(F("Channel:"), WiFi.channel(), F(",IP address:"), WiFi.localIP() );
+ }
+ else
+ LOGERROR(F("WiFi not connected"));
+
+ return status;
+}
+
void heartBeatPrint(void)
{
static int num = 1;
@@ -292,16 +432,31 @@ void check_status(void)
}
}
-void loadConfigData(void)
+void loadConfigData()
{
File file = FileFS.open(CONFIG_FILENAME, "r");
LOGERROR(F("LoadWiFiCfgFile "));
+ memset(&WM_config, 0, sizeof(WM_config));
+
+ // New in v1.4.0
+ memset(&WM_STA_IPconfig, 0, sizeof(WM_STA_IPconfig));
+ //////
+
if (file)
{
- file.readBytes((char *) &WM_config, sizeof(WM_config));
+ file.readBytes((char *) &WM_config, sizeof(WM_config));
+
+ // New in v1.4.0
+ file.readBytes((char *) &WM_STA_IPconfig, sizeof(WM_STA_IPconfig));
+ //////
+
file.close();
LOGERROR(F("OK"));
+
+ // New in v1.4.0
+ displayIPConfigStruct(WM_STA_IPconfig);
+ //////
}
else
{
@@ -309,14 +464,19 @@ void loadConfigData(void)
}
}
-void saveConfigData(void)
+void saveConfigData()
{
File file = FileFS.open(CONFIG_FILENAME, "w");
LOGERROR(F("SaveWiFiCfgFile "));
if (file)
{
- file.write((uint8_t*) &WM_config, sizeof(WM_config));
+ file.write((uint8_t*) &WM_config, sizeof(WM_config));
+
+ // New in v1.4.0
+ file.write((uint8_t*) &WM_STA_IPconfig, sizeof(WM_STA_IPconfig));
+ //////
+
file.close();
LOGERROR(F("OK"));
}
@@ -326,76 +486,6 @@ void saveConfigData(void)
}
}
-uint8_t connectMultiWiFi(void)
-{
-#if ESP32
- // For ESP32, this better be 0 to shorten the connect time
- #define WIFI_MULTI_1ST_CONNECT_WAITING_MS 0
-#else
- // For ESP8266, this better be 2200 to enable connect the 1st time
- #define WIFI_MULTI_1ST_CONNECT_WAITING_MS 2200L
-#endif
-
-#define WIFI_MULTI_CONNECT_WAITING_MS 100L
-
- uint8_t status;
-
- LOGERROR(F("ConnectMultiWiFi with :"));
-
- if ( (Router_SSID != "") && (Router_Pass != "") )
- {
- LOGERROR3(F("* Flash-stored Router_SSID = "), Router_SSID, F(", Router_Pass = "), Router_Pass );
- }
-
- for (uint8_t i = 0; i < NUM_WIFI_CREDENTIALS; i++)
- {
- // Don't permit NULL SSID and password len < MIN_AP_PASSWORD_SIZE (8)
- if ( (String(WM_config.WiFi_Creds[i].wifi_ssid) != "") && (strlen(WM_config.WiFi_Creds[i].wifi_pw) >= MIN_AP_PASSWORD_SIZE) )
- {
- LOGERROR3(F("* Additional SSID = "), WM_config.WiFi_Creds[i].wifi_ssid, F(", PW = "), WM_config.WiFi_Creds[i].wifi_pw );
- }
- }
-
- LOGERROR(F("Connecting MultiWifi..."));
-
- WiFi.mode(WIFI_STA);
-
-#if !USE_DHCP_IP
- #if USE_CONFIGURABLE_DNS
- // Set static IP, Gateway, Subnetmask, DNS1 and DNS2. New in v1.0.5
- WiFi.config(stationIP, gatewayIP, netMask, dns1IP, dns2IP);
- #else
- // Set static IP, Gateway, Subnetmask, Use auto DNS1 and DNS2.
- WiFi.config(stationIP, gatewayIP, netMask);
- #endif
-#endif
-
- int i = 0;
- status = wifiMulti.run();
- delay(WIFI_MULTI_1ST_CONNECT_WAITING_MS);
-
- while ( ( i++ < 20 ) && ( status != WL_CONNECTED ) )
- {
- status = wifiMulti.run();
-
- if ( status == WL_CONNECTED )
- break;
- else
- delay(WIFI_MULTI_CONNECT_WAITING_MS);
- }
-
- if ( status == WL_CONNECTED )
- {
- LOGERROR1(F("WiFi connected after time: "), i);
- LOGERROR3(F("SSID:"), WiFi.SSID(), F(",RSSI="), WiFi.RSSI());
- LOGERROR3(F("Channel:"), WiFi.channel(), F(",IP address:"), WiFi.localIP() );
- }
- else
- LOGERROR(F("WiFi not connected"));
-
- return status;
-}
-
void sendRequest()
{
if (request.readyState() == readyStateUnsent || request.readyState() == readyStateDone)
@@ -426,6 +516,8 @@ void setup()
Serial.print("\nStarting AsyncHTTPRequest_ESP_WiFiManager using " + String(FS_Name));
Serial.println(" on " + String(ARDUINO_BOARD));
+ Serial.println(ESP_ASYNC_WIFIMANAGER_VERSION);
+ Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION);
if (FORMAT_FILESYSTEM)
FileFS.format();
@@ -447,6 +539,11 @@ void setup()
unsigned long startedAt = millis();
+ // New in v1.4.0
+ initAPIPConfigStruct(WM_AP_IPconfig);
+ initSTAIPConfigStruct(WM_STA_IPconfig);
+ //////
+
//Local intialization. Once its business is done, there is no need to keep it around
// Use this to default DHCP hostname to ESP8266-XXXXXX or ESP32-XXXXXX
//ESPAsync_WiFiManager ESPAsync_wifiManager(&webServer, &dnsServer);
@@ -459,7 +556,9 @@ void setup()
//ESPAsync_wifiManager.resetSettings();
//set custom ip for portal
- ESPAsync_wifiManager.setAPStaticIPConfig(IPAddress(192, 168, 100, 1), IPAddress(192, 168, 100, 1), IPAddress(255, 255, 255, 0));
+ // New in v1.4.0
+ ESPAsync_wifiManager.setAPStaticIPConfig(WM_AP_IPconfig);
+ //////
ESPAsync_wifiManager.setMinimumSignalQuality(-1);
@@ -469,13 +568,10 @@ void setup()
//////
#if !USE_DHCP_IP
- #if USE_CONFIGURABLE_DNS
- // Set static IP, Gateway, Subnetmask, DNS1 and DNS2. New in v1.0.5
- ESPAsync_wifiManager.setSTAStaticIPConfig(stationIP, gatewayIP, netMask, dns1IP, dns2IP);
- #else
- // Set static IP, Gateway, Subnetmask, Use auto DNS1 and DNS2.
- ESPAsync_wifiManager.setSTAStaticIPConfig(stationIP, gatewayIP, netMask);
- #endif
+ // Set (static IP, Gateway, Subnetmask, DNS1 and DNS2) or (IP, Gateway, Subnetmask). New in v1.0.5
+ // New in v1.4.0
+ ESPAsync_wifiManager.setSTAStaticIPConfig(WM_STA_IPconfig);
+ //////
#endif
// New from v1.1.1
@@ -549,6 +645,11 @@ void setup()
}
}
+ // New in v1.4.0
+ ESPAsync_wifiManager.getSTAStaticIPConfig(WM_STA_IPconfig);
+ displayIPConfigStruct(WM_STA_IPconfig);
+ //////
+
saveConfigData();
}
else
diff --git a/examples/AsyncHTTPRequest_STM32/AsyncHTTPRequest_STM32.ino b/examples/AsyncHTTPRequest_STM32/AsyncHTTPRequest_STM32.ino
index 6f3be21..9e1ae0e 100644
--- a/examples/AsyncHTTPRequest_STM32/AsyncHTTPRequest_STM32.ino
+++ b/examples/AsyncHTTPRequest_STM32/AsyncHTTPRequest_STM32.ino
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
//************************************************************************************************************
//
@@ -92,6 +93,7 @@ void setup(void)
while (!Serial);
Serial.println("\nStart AsyncHTTPRequest_STM32 on " + String(BOARD_NAME));
+ Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION);
// start the ethernet connection and the server
// Use random mac
diff --git a/examples/AsyncSimpleGET_STM32/AsyncSimpleGET_STM32.ino b/examples/AsyncSimpleGET_STM32/AsyncSimpleGET_STM32.ino
index c12b1d3..c9a0c1c 100644
--- a/examples/AsyncSimpleGET_STM32/AsyncSimpleGET_STM32.ino
+++ b/examples/AsyncSimpleGET_STM32/AsyncSimpleGET_STM32.ino
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#include "defines.h"
@@ -73,6 +74,7 @@ void setup(void)
while (!Serial);
Serial.println("\nStart AsyncSimpleGET_STM32 on " + String(BOARD_NAME));
+ Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION);
// start the ethernet connection and the server
// Use random mac
diff --git a/examples/AsyncWebClientRepeating_STM32/AsyncWebClientRepeating_STM32.ino b/examples/AsyncWebClientRepeating_STM32/AsyncWebClientRepeating_STM32.ino
index 280f6d5..4fbeac9 100644
--- a/examples/AsyncWebClientRepeating_STM32/AsyncWebClientRepeating_STM32.ino
+++ b/examples/AsyncWebClientRepeating_STM32/AsyncWebClientRepeating_STM32.ino
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#include "defines.h"
@@ -76,6 +77,7 @@ void setup(void)
while (!Serial);
Serial.println("\nStart AsyncWebClientRepeating_STM32 on " + String(BOARD_NAME));
+ Serial.println(ASYNC_HTTP_REQUEST_GENERIC_VERSION);
// start the ethernet connection and the server
// Use random mac
diff --git a/library.json b/library.json
index 494dba5..663e084 100644
--- a/library.json
+++ b/library.json
@@ -1,7 +1,7 @@
{
"name":"AsyncHTTPRequest_Generic",
- "version": "1.0.2",
- "description":"Simple Async HTTP Request library, supporting GET and POST, on top of AsyncTCP libraries, such as AsyncTCP, ESPAsyncTCP, AsyncTCP_STM32, etc.. for ESP32, ESP8266 and currently STM32 with built-in LAN8742A Ethernet.",
+ "version": "1.1.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, ESP8266 and currently STM32 with built-in LAN8742A Ethernet.",
"keywords":"async,tcp,http,ESP8266,ESP32,ESPAsyncTCP,AsyncTCP,stm32,ethernet,wifi,lan8742a",
"authors": [
{
@@ -22,34 +22,36 @@
},
"license": "MIT",
"frameworks": "arduino",
- "dependencies": [
+ "dependencies":
+ [
{
"owner": "me-no-dev",
"name": "AsyncTCP",
- "version": "*",
+ "version": ">=1.1.1",
"platforms": ["espressif32"]
},
{
"owner": "me-no-dev",
"name": "ESP AsyncTCP",
- "version": "*",
+ "version": ">=1.2.2",
"platforms": "espressif8266"
},
{
"owner": "khoih-prog",
"name": "ESPAsync_WiFiManager",
+ "version": ">=1.4.1",
"platforms": ["espressif8266", "espressif32"]
},
{
"owner": "stm32duino",
"name": "STM32duino LwIP",
- "version": "^2.1.2",
+ "version": ">=2.1.2",
"platforms": "ststm32"
},
{
"owner": "stm32duino",
"name": "STM32Ethernet",
- "version": "^1.2.0",
+ "version": ">=1.2.0",
"platforms": "ststm32"
},
{
diff --git a/library.properties b/library.properties
index f440d8c..80ac8a3 100644
--- a/library.properties
+++ b/library.properties
@@ -1,9 +1,9 @@
name=AsyncHTTPRequest_Generic
-version=1.0.2
+version=1.1.0
author=Bob Lemaire,Khoi Hoang
maintainer=Khoi Hoang
license=MIT
-sentence=Simple Async HTTP Request library, supporting GET and POST, on top of AsyncTCP libraries, such as AsyncTCP, ESPAsyncTCP, AsyncTCP_STM32, etc.. for ESP32, ESP8266 and currently STM32 with built-in LAN8742A Ethernet.
+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, ESP8266 and currently STM32 with built-in LAN8742A Ethernet.
paragraph=This AsyncHTTPRequest_Generic Library, supporting GET and POST, for ESP32, ESP8266 and STM32 with built-in LAN8742A Ethernet, such as Nucleo-144 F767ZI, etc.
category=Communication,AsyncTCP,AsyncHTTP
url=https://github.com/khoih-prog/AsyncHTTPRequest_Generic
diff --git a/platformio/platformio.ini b/platformio/platformio.ini
index 6598b5f..62dad80 100644
--- a/platformio/platformio.ini
+++ b/platformio/platformio.ini
@@ -35,19 +35,19 @@ upload_speed = 921600
lib_deps =
; PlatformIO 4.x
- AsyncTCP@~1.1.1
- ESPAsyncTCP@~1.2.2
- STM32AsyncTCP@~1.0.0
- STM32duino LwIP@~2.1.2
- STM32duino STM32Ethernet@~1.2.0
- ESPAsync_WiFiManager@~1.1.2
+ AsyncTCP@>=1.1.1
+ ESPAsyncTCP@>=1.2.2
+ STM32AsyncTCP@>=1.0.0
+ STM32duino LwIP@>=2.1.2
+ STM32duino STM32Ethernet@>=1.2.0
+ ESPAsync_WiFiManager@>=1.4.1
; PlatformIO 5.x
-; me-no-dev/AsyncTCP@~1.1.1
-; me-no-dev/ESPAsyncTCP@~1.2.2
-; philbowles/STM32AsyncTCP@~1.0.0
-; stm32duino/STM32duino LwIP@~2.1.2
-; stm32duino/STM32duino STM32Ethernet@~1.2.0
-; khoih-prog/ESPAsync_WiFiManager@~1.1.2
+; me-no-dev/AsyncTCP@>=1.1.1
+; me-no-dev/ESPAsyncTCP@>=1.2.2
+; philbowles/STM32AsyncTCP@>=1.0.0
+; stm32duino/STM32duino LwIP@>=2.1.2
+; stm32duino/STM32duino STM32Ethernet@>=1.2.0
+; khoih-prog/ESPAsync_WiFiManager@>=1.4.1
build_flags =
; set your debug output (default=Serial)
diff --git a/src/AsyncHTTPRequest_Debug_Generic.h b/src/AsyncHTTPRequest_Debug_Generic.h
index d5e1bd4..2de2102 100644
--- a/src/AsyncHTTPRequest_Debug_Generic.h
+++ b/src/AsyncHTTPRequest_Debug_Generic.h
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#pragma once
diff --git a/src/AsyncHTTPRequest_Generic.h b/src/AsyncHTTPRequest_Generic.h
index 0d97a9e..eb32d73 100644
--- a/src/AsyncHTTPRequest_Generic.h
+++ b/src/AsyncHTTPRequest_Generic.h
@@ -17,18 +17,19 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#pragma once
-#define ASYNC_HTTP_REQUEST_GENERIC_VERSION "1.0.2"
+#define ASYNC_HTTP_REQUEST_GENERIC_VERSION "AsyncHTTPRequest_Generic v1.1.0"
#include
@@ -225,8 +226,14 @@ class AsyncHTTPRequest
private:
- enum {HTTPmethodGET, HTTPmethodPOST} _HTTPmethod;
-
+ // New in v1.1.0
+ typedef enum { HTTPmethodGET, HTTPmethodPOST, HTTPmethodPUT, HTTPmethodPATCH, HTTPmethodDELETE, HTTPmethodHEAD, HTTPmethodMAX } HTTPmethod;
+
+ HTTPmethod _HTTPmethod;
+
+ const char* _HTTPmethodStringwithSpace[HTTPmethodMAX] = {"GET ", "POST ", "PUT ", "PATCH ", "DELETE ", "HEAD "};
+ //////
+
reqStates _readyState;
int16_t _HTTPcode; // HTTP response code or (negative) exception code
@@ -286,3 +293,5 @@ class AsyncHTTPRequest
};
#include "AsyncHTTPRequest_Impl_Generic.h"
+
+
diff --git a/src/AsyncHTTPRequest_Impl_Generic.h b/src/AsyncHTTPRequest_Impl_Generic.h
index 3f5ac50..57cc74d 100644
--- a/src/AsyncHTTPRequest_Impl_Generic.h
+++ b/src/AsyncHTTPRequest_Impl_Generic.h
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#pragma once
@@ -110,6 +111,7 @@ bool AsyncHTTPRequest::open(const char* method, const char* URL)
_contentRead = 0;
_readyState = readyStateUnsent;
+
if (strcmp(method, "GET") == 0)
{
_HTTPmethod = HTTPmethodGET;
@@ -118,9 +120,28 @@ bool AsyncHTTPRequest::open(const char* method, const char* URL)
{
_HTTPmethod = HTTPmethodPOST;
}
+ // New in v1.1.0
+ else if (strcmp(method, "PUT") == 0)
+ {
+ _HTTPmethod = HTTPmethodPUT;
+ }
+ else if (strcmp(method, "PATCH") == 0)
+ {
+ _HTTPmethod = HTTPmethodPATCH;
+ }
+ else if (strcmp(method, "DELETE") == 0)
+ {
+ _HTTPmethod = HTTPmethodDELETE;
+ }
+ else if (strcmp(method, "HEAD") == 0)
+ {
+ _HTTPmethod = HTTPmethodHEAD;
+ }
+ //////
else
return false;
+
if (!_parseURL(URL))
{
return false;
@@ -589,13 +610,19 @@ bool AsyncHTTPRequest::_buildRequest()
return false;
}
- _request->write(_HTTPmethod == HTTPmethodGET ? "GET " : "POST ");
+
+ // New in v1.1.0
+ _request->write(_HTTPmethodStringwithSpace[_HTTPmethod]);
+ //////
+
_request->write(_URL->path);
_request->write(_URL->query);
_request->write(" HTTP/1.1\r\n");
- AHTTP_LOGDEBUG3(_HTTPmethod == HTTPmethodGET ? "GET " : "POST ", _URL->path, _URL->query, " HTTP/1.1\r\n" );
-
+ // New in v1.1.0
+ AHTTP_LOGDEBUG3(_HTTPmethodStringwithSpace[_HTTPmethod], _URL->path, _URL->query, " HTTP/1.1\r\n" );
+ //////
+
SAFE_DELETE(_URL)
_URL = nullptr;
diff --git a/src/utility/xbuf.h b/src/utility/xbuf.h
index ba30d8c..658eddf 100644
--- a/src/utility/xbuf.h
+++ b/src/utility/xbuf.h
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
/********************************************************************************************
diff --git a/src/utility/xbuf_Impl.h b/src/utility/xbuf_Impl.h
index 764e857..91527fc 100644
--- a/src/utility/xbuf_Impl.h
+++ b/src/utility/xbuf_Impl.h
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#pragma once
diff --git a/src_cpp/AsyncHTTPRequest_Debug_Generic.h b/src_cpp/AsyncHTTPRequest_Debug_Generic.h
index d5e1bd4..2de2102 100644
--- a/src_cpp/AsyncHTTPRequest_Debug_Generic.h
+++ b/src_cpp/AsyncHTTPRequest_Debug_Generic.h
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#pragma once
diff --git a/src_cpp/AsyncHTTPRequest_Generic.cpp b/src_cpp/AsyncHTTPRequest_Generic.cpp
index d3c5c8d..78678a2 100644
--- a/src_cpp/AsyncHTTPRequest_Generic.cpp
+++ b/src_cpp/AsyncHTTPRequest_Generic.cpp
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#include "AsyncHTTPRequest_Debug_Generic.h"
@@ -111,6 +112,7 @@ bool AsyncHTTPRequest::open(const char* method, const char* URL)
_contentRead = 0;
_readyState = readyStateUnsent;
+
if (strcmp(method, "GET") == 0)
{
_HTTPmethod = HTTPmethodGET;
@@ -119,9 +121,28 @@ bool AsyncHTTPRequest::open(const char* method, const char* URL)
{
_HTTPmethod = HTTPmethodPOST;
}
+ // New in v1.1.0
+ else if (strcmp(method, "PUT") == 0)
+ {
+ _HTTPmethod = HTTPmethodPUT;
+ }
+ else if (strcmp(method, "PATCH") == 0)
+ {
+ _HTTPmethod = HTTPmethodPATCH;
+ }
+ else if (strcmp(method, "DELETE") == 0)
+ {
+ _HTTPmethod = HTTPmethodDELETE;
+ }
+ else if (strcmp(method, "HEAD") == 0)
+ {
+ _HTTPmethod = HTTPmethodHEAD;
+ }
+ //////
else
return false;
+
if (!_parseURL(URL))
{
return false;
@@ -590,13 +611,19 @@ bool AsyncHTTPRequest::_buildRequest()
return false;
}
- _request->write(_HTTPmethod == HTTPmethodGET ? "GET " : "POST ");
+
+ // New in v1.1.0
+ _request->write(_HTTPmethodStringwithSpace[_HTTPmethod]);
+ //////
+
_request->write(_URL->path);
_request->write(_URL->query);
_request->write(" HTTP/1.1\r\n");
- AHTTP_LOGDEBUG3(_HTTPmethod == HTTPmethodGET ? "GET " : "POST ", _URL->path, _URL->query, " HTTP/1.1\r\n" );
-
+ // New in v1.1.0
+ AHTTP_LOGDEBUG3(_HTTPmethodStringwithSpace[_HTTPmethod], _URL->path, _URL->query, " HTTP/1.1\r\n" );
+ //////
+
SAFE_DELETE(_URL)
_URL = nullptr;
diff --git a/src_cpp/AsyncHTTPRequest_Generic.h b/src_cpp/AsyncHTTPRequest_Generic.h
index 682d7a2..b7bd314 100644
--- a/src_cpp/AsyncHTTPRequest_Generic.h
+++ b/src_cpp/AsyncHTTPRequest_Generic.h
@@ -17,18 +17,19 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#pragma once
-#define ASYNC_HTTP_REQUEST_GENERIC_VERSION "1.0.2"
+#define ASYNC_HTTP_REQUEST_GENERIC_VERSION "AsyncHTTPRequest_Generic v1.1.0"
#include
@@ -225,8 +226,14 @@ class AsyncHTTPRequest
private:
- enum {HTTPmethodGET, HTTPmethodPOST} _HTTPmethod;
-
+ // New in v1.1.0
+ typedef enum { HTTPmethodGET, HTTPmethodPOST, HTTPmethodPUT, HTTPmethodPATCH, HTTPmethodDELETE, HTTPmethodHEAD, HTTPmethodMAX } HTTPmethod;
+
+ HTTPmethod _HTTPmethod;
+
+ const char* _HTTPmethodStringwithSpace[HTTPmethodMAX] = {"GET ", "POST ", "PUT ", "PATCH ", "DELETE ", "HEAD "};
+ //////
+
reqStates _readyState;
int16_t _HTTPcode; // HTTP response code or (negative) exception code
@@ -285,3 +292,4 @@ class AsyncHTTPRequest
bool _collectHeaders();
};
+
diff --git a/src_cpp/utility/xbuf.h b/src_cpp/utility/xbuf.h
index 32c7aaf..658eddf 100644
--- a/src_cpp/utility/xbuf.h
+++ b/src_cpp/utility/xbuf.h
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
/********************************************************************************************
@@ -147,3 +148,5 @@ class xbuf: public Print
};
+#include "utility/xbuf_Impl.h"
+
diff --git a/src_cpp/utility/xbuf_Impl.h b/src_cpp/utility/xbuf_Impl.h
new file mode 100644
index 0000000..91527fc
--- /dev/null
+++ b/src_cpp/utility/xbuf_Impl.h
@@ -0,0 +1,400 @@
+/****************************************************************************************************************************
+ xbuf_Impl.h - Dead simple AsyncHTTPRequest for ESP8266, ESP32 and currently STM32 with built-in LAN8742A Ethernet
+
+ For ESP8266, ESP32 and STM32 with built-in LAN8742A Ethernet (Nucleo-144, DISCOVERY, etc)
+
+ AsyncHTTPRequest_STM32 is a library for the ESP8266, ESP32 and currently STM32 run built-in Ethernet WebServer
+
+ Based on and modified from asyncHTTPrequest Library (https://github.com/boblemaire/asyncHTTPrequest)
+
+ Built by Khoi Hoang https://github.com/khoih-prog/AsyncHTTPRequest_Generic
+ Licensed under MIT license
+
+ Copyright (C) <2018>
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License
+ as published bythe Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ 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.1.0
+
+ Version Modified By Date Comments
+ ------- ----------- ---------- -----------
+ 1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
+ 1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
+ 1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
+ *****************************************************************************************************************************/
+
+#pragma once
+
+xbuf::xbuf(const uint16_t segSize) : _head(nullptr), _tail(nullptr), _used(0), _free(0), _offset(0)
+{
+ _segSize = (segSize + 3) & -4;//((segSize + 3) >> 2) << 2;
+}
+
+//*******************************************************************************************************************
+xbuf::~xbuf()
+{
+ flush();
+}
+
+//*******************************************************************************************************************
+size_t xbuf::write(const uint8_t byte)
+{
+ return write((uint8_t*) &byte, 1);
+}
+
+//*******************************************************************************************************************
+size_t xbuf::write(const char* buf)
+{
+ return write((uint8_t*)buf, strlen(buf));
+}
+
+//*******************************************************************************************************************
+size_t xbuf::write(String string)
+{
+ return write((uint8_t*)string.c_str(), string.length());
+}
+
+//*******************************************************************************************************************
+size_t xbuf::write(const uint8_t* buf, const size_t len)
+{
+ size_t supply = len;
+
+ while (supply)
+ {
+ if (!_free)
+ {
+ addSeg();
+ }
+
+ size_t demand = _free < supply ? _free : supply;
+ memcpy(_tail->data + ((_offset + _used) % _segSize), buf + (len - supply), demand);
+ _free -= demand;
+ _used += demand;
+ supply -= demand;
+ }
+
+ return len;
+}
+
+//*******************************************************************************************************************
+size_t xbuf::write(xbuf* buf, const size_t len)
+{
+ size_t supply = len;
+
+ if (supply > buf->available())
+ {
+ supply = buf->available();
+ }
+
+ size_t read = 0;
+
+ while (supply)
+ {
+ if (!_free)
+ {
+ addSeg();
+ }
+
+ size_t demand = _free < supply ? _free : supply;
+ read += buf->read(_tail->data + ((_offset + _used) % _segSize), demand);
+ _free -= demand;
+ _used += demand;
+ supply -= demand;
+ }
+
+ return read;
+}
+
+//*******************************************************************************************************************
+uint8_t xbuf::read()
+{
+ uint8_t byte = 0;
+ read((uint8_t*) &byte, 1);
+
+ return byte;
+}
+
+//*******************************************************************************************************************
+uint8_t xbuf::peek()
+{
+ uint8_t byte = 0;
+ peek((uint8_t*) &byte, 1);
+
+ return byte;
+}
+
+//*******************************************************************************************************************
+size_t xbuf::read(uint8_t* buf, const size_t len)
+{
+ size_t read = 0;
+
+ while (read < len && _used)
+ {
+ size_t supply = (_offset + _used) > _segSize ? _segSize - _offset : _used;
+ size_t demand = len - read;
+ size_t chunk = supply < demand ? supply : demand;
+ memcpy(buf + read, _head->data + _offset, chunk);
+ _offset += chunk;
+ _used -= chunk;
+ read += chunk;
+
+ if (_offset == _segSize)
+ {
+ remSeg();
+ _offset = 0;
+ }
+ }
+
+ if ( ! _used)
+ {
+ flush();
+ }
+
+ return read;
+}
+
+//*******************************************************************************************************************
+size_t xbuf::peek(uint8_t* buf, const size_t len)
+{
+ size_t read = 0;
+ xseg* seg = _head;
+ size_t offset = _offset;
+ size_t used = _used;
+
+ while (read < len && used)
+ {
+ size_t supply = (offset + used) > _segSize ? _segSize - offset : used;
+ size_t demand = len - read;
+ size_t chunk = supply < demand ? supply : demand;
+
+ memcpy(buf + read, seg->data + offset, chunk);
+
+ offset += chunk;
+ used -= chunk;
+ read += chunk;
+
+ if (offset == _segSize)
+ {
+ seg = seg->next;
+ offset = 0;
+ }
+ }
+
+ return read;
+}
+
+//*******************************************************************************************************************
+size_t xbuf::available()
+{
+ return _used;
+}
+
+//*******************************************************************************************************************
+int xbuf::indexOf(const char target, const size_t begin)
+{
+ char targetstr[2] = " ";
+ targetstr[0] = target;
+
+ return indexOf(targetstr, begin);
+}
+
+//*******************************************************************************************************************
+int xbuf::indexOf(const char* target, const size_t begin)
+{
+ size_t targetLen = strlen(target);
+
+ if (targetLen > _segSize || targetLen > _used)
+ return -1;
+
+ size_t searchPos = _offset + begin;
+ size_t searchEnd = _offset + _used - targetLen;
+
+ if (searchPos > searchEnd)
+ return -1;
+
+ size_t searchSeg = searchPos / _segSize;
+ xseg* seg = _head;
+
+ while (searchSeg)
+ {
+ seg = seg->next;
+ searchSeg --;
+ }
+
+ size_t segPos = searchPos % _segSize;
+
+ while (searchPos <= searchEnd)
+ {
+ size_t compLen = targetLen;
+
+ if (compLen <= (_segSize - segPos))
+ {
+ if (memcmp(target, seg->data + segPos, compLen) == 0)
+ {
+ return searchPos - _offset;
+ }
+ }
+ else
+ {
+ size_t compLen = _segSize - segPos;
+
+ if (memcmp(target, seg->data + segPos, compLen) == 0)
+ {
+ compLen = targetLen - compLen;
+
+ if (memcmp(target + targetLen - compLen, seg->next->data, compLen) == 0)
+ {
+ return searchPos - _offset;
+ }
+ }
+ }
+
+ searchPos++;
+ segPos++;
+
+ if (segPos == _segSize)
+ {
+ seg = seg->next;
+ segPos = 0;
+ }
+ }
+
+ return -1;
+}
+
+//*******************************************************************************************************************
+String xbuf::readStringUntil(const char target)
+{
+ return readString(indexOf(target) + 1);
+}
+
+//*******************************************************************************************************************
+String xbuf::readStringUntil(const char* target)
+{
+ int index = indexOf(target);
+
+ if (index < 0)
+ return String();
+
+ return readString(index + strlen(target));
+}
+
+//*******************************************************************************************************************
+String xbuf::readString(int endPos)
+{
+ String result;
+
+ if ( ! result.reserve(endPos + 1))
+ {
+ return result;
+ }
+
+ if (endPos > _used)
+ {
+ endPos = _used;
+ }
+
+ if (endPos > 0 && result.reserve(endPos + 1))
+ {
+ while (endPos--)
+ {
+ result += (char)_head->data[_offset++];
+ _used--;
+
+ if (_offset >= _segSize)
+ {
+ remSeg();
+ }
+ }
+ }
+
+ return result;
+}
+
+//*******************************************************************************************************************
+String xbuf::peekString(int endPos)
+{
+ String result;
+
+ xseg* seg = _head;
+ size_t offset = _offset;
+
+ if (endPos > _used)
+ {
+ endPos = _used;
+ }
+
+ if (endPos > 0 && result.reserve(endPos + 1))
+ {
+ while (endPos--)
+ {
+ result += (char)seg->data[offset++];
+
+ if ( offset >= _segSize)
+ {
+ seg = seg->next;
+ offset = 0;
+ }
+ }
+ }
+
+ return result;
+}
+
+//*******************************************************************************************************************
+void xbuf::flush()
+{
+ while (_head)
+ remSeg();
+
+ _tail = nullptr;
+ _offset = 0;
+ _used = 0;
+ _free = 0;
+}
+
+//*******************************************************************************************************************
+void xbuf::addSeg()
+{
+ if (_tail)
+ {
+ _tail->next = (xseg*) new uint32_t[_segSize / 4 + 1];
+
+ // KH, Must check NULL here
+ _tail = _tail->next;
+ }
+ else
+ {
+ // KH, Must check NULL here
+ _tail = _head = (xseg*) new uint32_t[_segSize / 4 + 1];
+ }
+
+ // KH, Must check NULL here
+ if (_tail)
+ _tail->next = nullptr;
+
+ _free += _segSize;
+}
+
+//*******************************************************************************************************************
+void xbuf::remSeg()
+{
+ if (_head)
+ {
+ xseg *next = _head->next;
+ delete[] (uint32_t*) _head;
+ _head = next;
+
+ if ( ! _head)
+ {
+ _tail = nullptr;
+ }
+ }
+
+ _offset = 0;
+}
+
diff --git a/src_h/AsyncHTTPRequest_Debug_Generic.h b/src_h/AsyncHTTPRequest_Debug_Generic.h
index d5e1bd4..2de2102 100644
--- a/src_h/AsyncHTTPRequest_Debug_Generic.h
+++ b/src_h/AsyncHTTPRequest_Debug_Generic.h
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#pragma once
diff --git a/src_h/AsyncHTTPRequest_Generic.h b/src_h/AsyncHTTPRequest_Generic.h
index 0d97a9e..eb32d73 100644
--- a/src_h/AsyncHTTPRequest_Generic.h
+++ b/src_h/AsyncHTTPRequest_Generic.h
@@ -17,18 +17,19 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#pragma once
-#define ASYNC_HTTP_REQUEST_GENERIC_VERSION "1.0.2"
+#define ASYNC_HTTP_REQUEST_GENERIC_VERSION "AsyncHTTPRequest_Generic v1.1.0"
#include
@@ -225,8 +226,14 @@ class AsyncHTTPRequest
private:
- enum {HTTPmethodGET, HTTPmethodPOST} _HTTPmethod;
-
+ // New in v1.1.0
+ typedef enum { HTTPmethodGET, HTTPmethodPOST, HTTPmethodPUT, HTTPmethodPATCH, HTTPmethodDELETE, HTTPmethodHEAD, HTTPmethodMAX } HTTPmethod;
+
+ HTTPmethod _HTTPmethod;
+
+ const char* _HTTPmethodStringwithSpace[HTTPmethodMAX] = {"GET ", "POST ", "PUT ", "PATCH ", "DELETE ", "HEAD "};
+ //////
+
reqStates _readyState;
int16_t _HTTPcode; // HTTP response code or (negative) exception code
@@ -286,3 +293,5 @@ class AsyncHTTPRequest
};
#include "AsyncHTTPRequest_Impl_Generic.h"
+
+
diff --git a/src_h/AsyncHTTPRequest_Impl_Generic.h b/src_h/AsyncHTTPRequest_Impl_Generic.h
index 3f5ac50..57cc74d 100644
--- a/src_h/AsyncHTTPRequest_Impl_Generic.h
+++ b/src_h/AsyncHTTPRequest_Impl_Generic.h
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#pragma once
@@ -110,6 +111,7 @@ bool AsyncHTTPRequest::open(const char* method, const char* URL)
_contentRead = 0;
_readyState = readyStateUnsent;
+
if (strcmp(method, "GET") == 0)
{
_HTTPmethod = HTTPmethodGET;
@@ -118,9 +120,28 @@ bool AsyncHTTPRequest::open(const char* method, const char* URL)
{
_HTTPmethod = HTTPmethodPOST;
}
+ // New in v1.1.0
+ else if (strcmp(method, "PUT") == 0)
+ {
+ _HTTPmethod = HTTPmethodPUT;
+ }
+ else if (strcmp(method, "PATCH") == 0)
+ {
+ _HTTPmethod = HTTPmethodPATCH;
+ }
+ else if (strcmp(method, "DELETE") == 0)
+ {
+ _HTTPmethod = HTTPmethodDELETE;
+ }
+ else if (strcmp(method, "HEAD") == 0)
+ {
+ _HTTPmethod = HTTPmethodHEAD;
+ }
+ //////
else
return false;
+
if (!_parseURL(URL))
{
return false;
@@ -589,13 +610,19 @@ bool AsyncHTTPRequest::_buildRequest()
return false;
}
- _request->write(_HTTPmethod == HTTPmethodGET ? "GET " : "POST ");
+
+ // New in v1.1.0
+ _request->write(_HTTPmethodStringwithSpace[_HTTPmethod]);
+ //////
+
_request->write(_URL->path);
_request->write(_URL->query);
_request->write(" HTTP/1.1\r\n");
- AHTTP_LOGDEBUG3(_HTTPmethod == HTTPmethodGET ? "GET " : "POST ", _URL->path, _URL->query, " HTTP/1.1\r\n" );
-
+ // New in v1.1.0
+ AHTTP_LOGDEBUG3(_HTTPmethodStringwithSpace[_HTTPmethod], _URL->path, _URL->query, " HTTP/1.1\r\n" );
+ //////
+
SAFE_DELETE(_URL)
_URL = nullptr;
diff --git a/src_h/utility/xbuf.h b/src_h/utility/xbuf.h
index ba30d8c..658eddf 100644
--- a/src_h/utility/xbuf.h
+++ b/src_h/utility/xbuf.h
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
/********************************************************************************************
diff --git a/src_h/utility/xbuf_Impl.h b/src_h/utility/xbuf_Impl.h
index 764e857..91527fc 100644
--- a/src_h/utility/xbuf_Impl.h
+++ b/src_h/utility/xbuf_Impl.h
@@ -17,13 +17,14 @@
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.0.2
+ Version: 1.1.0
Version Modified By Date Comments
------- ----------- ---------- -----------
1.0.0 K Hoang 14/09/2020 Initial coding to add support to STM32 using built-in Ethernet (Nucleo-144, DISCOVERY, etc).
1.0.1 K Hoang 09/10/2020 Restore cpp code besides Impl.h code.
1.0.2 K Hoang 09/11/2020 Make Mutex Lock and delete more reliable and error-proof
+ 1.1.0 K Hoang 23/12/2020 Add HTTP PUT, PATCH, DELETE and HEAD methods
*****************************************************************************************************************************/
#pragma once