From 0a4a592ec2b0a3347cf77180eb8132f43dabed66 Mon Sep 17 00:00:00 2001 From: Emil Muratov Date: Wed, 19 Jun 2024 00:36:41 +0900 Subject: [PATCH] HTTPClient lib - add HTTPCLIENT_NOSECURE build flag `HTTPCLIENT_NOSECURE` build flag disables TLS support in HTTPClient library by excluding `NetworkClientSecure.h` header. This allows linker to strip down mbedTLS lind and certificates bundle, which in turn reduces firmware image for about ~80kib. --- libraries/HTTPClient/src/HTTPClient.cpp | 26 ++++++++++++++++++------- libraries/HTTPClient/src/HTTPClient.h | 11 ++++++++++- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/libraries/HTTPClient/src/HTTPClient.cpp b/libraries/HTTPClient/src/HTTPClient.cpp index 64dfe3a7db0..2d330cb76a8 100644 --- a/libraries/HTTPClient/src/HTTPClient.cpp +++ b/libraries/HTTPClient/src/HTTPClient.cpp @@ -28,15 +28,8 @@ #include #include - -#ifdef HTTPCLIENT_1_1_COMPATIBLE -#include -#include -#endif - #include #include - #include "HTTPClient.h" /// Cookie jar support @@ -56,6 +49,7 @@ class TransportTraits { } }; +#ifndef HTTPCLIENT_NOSECURE class TLSTraits : public TransportTraits { public: TLSTraits(const char *CAcert, const char *clicert = nullptr, const char *clikey = nullptr) : _cacert(CAcert), _clicert(clicert), _clikey(clikey) {} @@ -81,6 +75,7 @@ class TLSTraits : public TransportTraits { const char *_clicert; const char *_clikey; }; +#endif // HTTPCLIENT_NOSECURE #endif // HTTPCLIENT_1_1_COMPATIBLE /** @@ -145,7 +140,12 @@ bool HTTPClient::begin(NetworkClient &client, String url) { _port = (protocol == "https" ? 443 : 80); _secure = (protocol == "https"); + +#ifdef HTTPCLIENT_NOSECURE + return _secure ? false : beginInternal(url, protocol.c_str()); +#else return beginInternal(url, protocol.c_str()); +#endif // HTTPCLIENT_NOSECURE } /** @@ -174,10 +174,16 @@ bool HTTPClient::begin(NetworkClient &client, String host, uint16_t port, String _uri = uri; _protocol = (https ? "https" : "http"); _secure = https; + +#ifdef HTTPCLIENT_NOSECURE + if (_secure) return false; +#endif // HTTPCLIENT_NOSECURE + return true; } #ifdef HTTPCLIENT_1_1_COMPATIBLE +#ifndef HTTPCLIENT_NOSECURE bool HTTPClient::begin(String url, const char *CAcert) { if (_client && !_tcpDeprecated) { log_d("mix up of new and deprecated api"); @@ -199,6 +205,7 @@ bool HTTPClient::begin(String url, const char *CAcert) { return true; } +#endif // HTTPCLIENT_NOSECURE /** * parsing the url for all needed parameters @@ -214,6 +221,9 @@ bool HTTPClient::begin(String url) { clear(); _port = 80; if (!beginInternal(url, "http")) { +#ifdef HTTPCLIENT_NOSECURE + return false; +#endif // HTTPCLIENT_NOSECURE return begin(url, (const char *)NULL); } _transportTraits = TransportTraitsPtr(new TransportTraits()); @@ -299,6 +309,7 @@ bool HTTPClient::begin(String host, uint16_t port, String uri) { return true; } +#ifndef HTTPCLIENT_NOSECURE bool HTTPClient::begin(String host, uint16_t port, String uri, const char *CAcert) { if (_client && !_tcpDeprecated) { log_d("mix up of new and deprecated api"); @@ -338,6 +349,7 @@ bool HTTPClient::begin(String host, uint16_t port, String uri, const char *CAcer _transportTraits = TransportTraitsPtr(new TLSTraits(CAcert, cli_cert, cli_key)); return true; } +#endif // HTTPCLIENT_NOSECURE #endif // HTTPCLIENT_1_1_COMPATIBLE /** diff --git a/libraries/HTTPClient/src/HTTPClient.h b/libraries/HTTPClient/src/HTTPClient.h index edc050ab0dd..e523a9dd3c1 100644 --- a/libraries/HTTPClient/src/HTTPClient.h +++ b/libraries/HTTPClient/src/HTTPClient.h @@ -34,7 +34,9 @@ #include #include #include +#ifndef HTTPCLIENT_NOSECURE #include +#endif // HTTPCLIENT_NOSECURE /// Cookie jar support #include @@ -182,10 +184,17 @@ class HTTPClient { #ifdef HTTPCLIENT_1_1_COMPATIBLE bool begin(String url); - bool begin(String url, const char *CAcert); bool begin(String host, uint16_t port, String uri = "/"); +#ifndef HTTPCLIENT_NOSECURE + bool begin(String url, const char *CAcert); bool begin(String host, uint16_t port, String uri, const char *CAcert); bool begin(String host, uint16_t port, String uri, const char *CAcert, const char *cli_cert, const char *cli_key); +#else + bool begin(String url, const char *CAcert){ return false; }; + bool begin(String host, uint16_t port, String uri, const char *CAcert){ return false; }; + bool begin(String host, uint16_t port, String uri, const char *CAcert, const char *cli_cert, const char *cli_key){ return false; }; +#endif // HTTPCLIENT_NOSECURE + #endif void end(void);