From 0dd94a97a33fa5a14c8daedfc5add6ff52966111 Mon Sep 17 00:00:00 2001 From: technyon Date: Thu, 28 Apr 2022 23:26:21 +0200 Subject: [PATCH] implement EthWebServer --- CMakeLists.txt | 3 +- webserver/AbstractWebServer.h | 10 ++++-- webserver/EthWebServer.cpp | 14 ++++----- webserver/EthWebServer.h | 9 ++---- webserver/WifiWebServer.cpp | 57 +++++++++++++++++++++++++++++++++++ webserver/WifiWebServer.h | 24 +++++++++++++++ 6 files changed, 100 insertions(+), 17 deletions(-) create mode 100644 webserver/WifiWebServer.cpp create mode 100644 webserver/WifiWebServer.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 48d226b..0f4da33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,7 @@ file(GLOB SRCFILES Version.h webserver/AbstractWebServer.h webserver/EthWebServer.cpp + webserver/WifiWebServer.cpp lib/ESP32_BLE_Arduino-1.0.1/src/*.cpp lib/ESP32_BLE_Arduino-1.0.1/src/*.h lib/WiFiManager/WiFiManager.cpp @@ -54,7 +55,7 @@ add_executable(${PROJECT_NAME} main.cpp ${SRCFILES} ${SRCFILESREC} - webserver/EthWebServer.cpp webserver/EthWebServer.h) +) # Arduino.h is included in hello_world.cpp, so link with Arduino core target_link_arduino_libraries(${PROJECT_NAME} diff --git a/webserver/AbstractWebServer.h b/webserver/AbstractWebServer.h index 57b1a9b..1ece43b 100644 --- a/webserver/AbstractWebServer.h +++ b/webserver/AbstractWebServer.h @@ -1,6 +1,10 @@ #pragma once -#include "EthernetWebServer.h" +#include +#include + +typedef std::function THandlerFunction; +class Uri; class AbstractWebServer { @@ -9,10 +13,10 @@ public: virtual void begin() = 0; virtual bool authenticate(const char * username, const char * password) = 0; - virtual void requestAuthentication(HTTPAuthMethod mode, const char* realm, const String& authFailMsg) = 0; + virtual void requestAuthentication(int mode, const char* realm, const String& authFailMsg) = 0; virtual void requestAuthentication() = 0; virtual void send(int code, const char* content_type, const String& content) = 0; - virtual void on(const Uri &uri, EthernetWebServer::THandlerFunction handler) = 0; + virtual void on(const Uri &uri, THandlerFunction handler) = 0; virtual int args() = 0; virtual String arg(int i) = 0; virtual String argName(int i) = 0; diff --git a/webserver/EthWebServer.cpp b/webserver/EthWebServer.cpp index 2027d23..01f9c88 100644 --- a/webserver/EthWebServer.cpp +++ b/webserver/EthWebServer.cpp @@ -17,9 +17,14 @@ bool EthWebServer::authenticate(const char *username, const char *password) return _server.authenticate(username, password); } -void EthWebServer::requestAuthentication(HTTPAuthMethod mode, const char *realm, const String &authFailMsg) +void EthWebServer::requestAuthentication(int mode, const char *realm, const String &authFailMsg) { - return _server.requestAuthentication(mode, realm, authFailMsg); + return _server.requestAuthentication((HTTPAuthMethod)mode, realm, authFailMsg); +} + +void EthWebServer::requestAuthentication() +{ + return requestAuthentication(HTTPAuthMethod::BASIC_AUTH, "*", "Authentication failed"); } void EthWebServer::send(int code, const char *content_type, const String &content) @@ -32,11 +37,6 @@ void EthWebServer::on(const Uri &uri, EthernetWebServer::THandlerFunction handle _server.on(uri, handler); } -void EthWebServer::requestAuthentication() -{ - -} - int EthWebServer::args() { return _server.args(); diff --git a/webserver/EthWebServer.h b/webserver/EthWebServer.h index 90570e0..483e8be 100644 --- a/webserver/EthWebServer.h +++ b/webserver/EthWebServer.h @@ -1,6 +1,7 @@ #pragma once #include "AbstractWebServer.h" +#include "EthernetWebServer.h" class EthWebServer : public AbstractWebServer { @@ -9,17 +10,13 @@ public: virtual void begin(); virtual bool authenticate(const char *username, const char *password); - virtual void requestAuthentication(HTTPAuthMethod mode, const char *realm, const String &authFailMsg); + virtual void requestAuthentication(int mode, const char *realm, const String &authFailMsg); virtual void requestAuthentication(); virtual void send(int code, const char *content_type, const String &content); - virtual void on(const Uri &uri, EthernetWebServer::THandlerFunction handler); - + virtual void on(const Uri &uri, THandlerFunction handler); virtual int args(); - virtual String arg(int i); - virtual String argName(int i); - virtual void handleClient(); private: diff --git a/webserver/WifiWebServer.cpp b/webserver/WifiWebServer.cpp new file mode 100644 index 0000000..e49f5d3 --- /dev/null +++ b/webserver/WifiWebServer.cpp @@ -0,0 +1,57 @@ +#include "WifiWebServer.h" + +WifiWebServer::WifiWebServer(int port) + : AbstractWebServer(port), + _server(port) +{} + + +void WifiWebServer::begin() +{ + _server.begin(); +} + +bool WifiWebServer::authenticate(const char *username, const char *password) +{ + return _server.authenticate(username, password); +} + +void WifiWebServer::requestAuthentication(int mode, const char *realm, const String &authFailMsg) +{ + return _server.requestAuthentication((HTTPAuthMethod)mode, realm, authFailMsg); +} + +void WifiWebServer::send(int code, const char *content_type, const String &content) +{ + _server.send(code, content_type, content); +} + +void WifiWebServer::on(const Uri &uri, WebServer::THandlerFunction handler) +{ + _server.on(uri, handler); +} + +void WifiWebServer::requestAuthentication() +{ + +} + +int WifiWebServer::args() +{ + return _server.args(); +} + +String WifiWebServer::arg(int i) +{ + return _server.arg(i); +} + +String WifiWebServer::argName(int i) +{ + return _server.argName(i); +} + +void WifiWebServer::handleClient() +{ + _server.handleClient(); +} diff --git a/webserver/WifiWebServer.h b/webserver/WifiWebServer.h new file mode 100644 index 0000000..f0806a3 --- /dev/null +++ b/webserver/WifiWebServer.h @@ -0,0 +1,24 @@ +#pragma once + +#include +#include "AbstractWebServer.h" + +class WifiWebServer : public AbstractWebServer +{ +public: + explicit WifiWebServer(int port); + + virtual void begin(); + virtual bool authenticate(const char *username, const char *password); + virtual void requestAuthentication(int mode, const char *realm, const String &authFailMsg); + virtual void requestAuthentication(); + virtual void send(int code, const char *content_type, const String &content); + virtual void on(const Uri &uri, WebServer::THandlerFunction handler); + virtual int args(); + virtual String arg(int i); + virtual String argName(int i); + virtual void handleClient(); + +private: + WebServer _server; +}; \ No newline at end of file