From 0e11b1eabd91e0e0e83bd05f77e19566abeeade3 Mon Sep 17 00:00:00 2001 From: Moritz Ulmer Date: Sun, 15 Dec 2024 06:10:17 +0530 Subject: [PATCH 1/3] Allow definition of custom network interfaces --- src/WebSockets.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/WebSockets.h b/src/WebSockets.h index c918c9f..44538f0 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -135,6 +135,7 @@ #define NETWORK_UNOWIFIR4 (7) #define NETWORK_WIFI_NINA (8) #define NETWORK_SAMD_SEED (9) +#define NETWORK_CUSTOM (10) // max size of the WS Message Header #define WEBSOCKETS_MAX_HEADER_SIZE (14) @@ -286,7 +287,7 @@ #define WEBSOCKETS_NETWORK_CLASS WiFiClient #define WEBSOCKETS_NETWORK_SERVER_CLASS WiFiServer -#else +#elif(WEBSOCKETS_NETWORK_TYPE != NETWORK_CUSTOM) #error "no network type selected!" #endif From e09f98392969ac74de41cc18110679dd9ea62838 Mon Sep 17 00:00:00 2001 From: Moritz Ulmer Date: Wed, 25 Dec 2024 12:39:23 +0530 Subject: [PATCH 2/3] Create network client interface class --- src/NetworkClient.h | 31 +++++++++++++++++++++++++++++++ src/WebSockets.h | 10 +++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/NetworkClient.h diff --git a/src/NetworkClient.h b/src/NetworkClient.h new file mode 100644 index 0000000..5b7c360 --- /dev/null +++ b/src/NetworkClient.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include + +class NetworkClient : public Client { + public: + NetworkClient(); + NetworkClient(WiFiClient wifi_client); + virtual ~NetworkClient() = default; + + int connect(IPAddress ip, uint16_t port) final; + int connect(const char * host, uint16_t port) final; + int connect(const char * host, uint16_t port, int32_t timeout); + size_t write(uint8_t) final; + size_t write(const uint8_t * buf, size_t size) final; + size_t write(const char * str); + int available() final; + int read() final; + int read(uint8_t * buf, size_t size) final; + int peek() final; + void flush() final; + void stop() final; + uint8_t connected() final; + operator bool() final; + + void setCACert(const char * rootCA); + void setCACertBundle(const uint8_t * bundle); + void setInsecure(); + bool verify(const char * fingerprint, const char * domain_name); +}; diff --git a/src/WebSockets.h b/src/WebSockets.h index 44538f0..cfecef2 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -287,7 +287,15 @@ #define WEBSOCKETS_NETWORK_CLASS WiFiClient #define WEBSOCKETS_NETWORK_SERVER_CLASS WiFiServer -#elif(WEBSOCKETS_NETWORK_TYPE != NETWORK_CUSTOM) +#elif(WEBSOCKETS_NETWORK_TYPE == NETWORK_CUSTOM) +#include +#include + +#define SSL_AXTLS +#define WEBSOCKETS_NETWORK_CLASS NetworkClient +#define WEBSOCKETS_NETWORK_SSL_CLASS NetworkClient +#define WEBSOCKETS_NETWORK_SERVER_CLASS WiFiServer +#else #error "no network type selected!" #endif From 3dfbdfc72e42585dc7f12415c774e8ae2cf47db3 Mon Sep 17 00:00:00 2001 From: Moritz Ulmer Date: Wed, 25 Dec 2024 13:20:24 +0530 Subject: [PATCH 3/3] Change to PIMPL approach --- src/NetworkClient.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/NetworkClient.h b/src/NetworkClient.h index 5b7c360..4198dd3 100644 --- a/src/NetworkClient.h +++ b/src/NetworkClient.h @@ -4,10 +4,13 @@ #include class NetworkClient : public Client { + class Impl; + std::unique_ptr _impl; + public: NetworkClient(); NetworkClient(WiFiClient wifi_client); - virtual ~NetworkClient() = default; + virtual ~NetworkClient(); int connect(IPAddress ip, uint16_t port) final; int connect(const char * host, uint16_t port) final;