mirror of
https://github.com/rstrouse/ESPSomfy-RTS.git
synced 2026-06-03 02:32:12 +02:00
Migrate web server to ESPAsyncWebServer
This commit is contained in:
parent
eb75868adb
commit
3ecb8edb18
10 changed files with 515 additions and 297 deletions
121
Web.h
121
Web.h
|
|
@ -1,37 +1,87 @@
|
|||
#include <WebServer.h>
|
||||
#include "Somfy.h"
|
||||
#include <ArduinoJson.h>
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <vector>
|
||||
#ifndef webserver_h
|
||||
#define webserver_h
|
||||
|
||||
using HTTPMethod = uint8_t;
|
||||
|
||||
struct AsyncRequestContext {
|
||||
String body;
|
||||
bool bodyEnabled = true;
|
||||
std::vector<std::pair<String, String>> headers;
|
||||
};
|
||||
|
||||
class WebClientCompat {
|
||||
public:
|
||||
explicit WebClientCompat(AsyncWebServerRequest *request = nullptr) : request(request) {}
|
||||
IPAddress remoteIP() const;
|
||||
void bind(AsyncWebServerRequest *request);
|
||||
private:
|
||||
AsyncWebServerRequest *request;
|
||||
};
|
||||
|
||||
class WebRequestCompat {
|
||||
public:
|
||||
explicit WebRequestCompat(AsyncWebServerRequest *request);
|
||||
HTTPMethod method() const;
|
||||
bool hasArg(const char *name) const;
|
||||
String arg(const char *name) const;
|
||||
bool hasHeader(const char *name) const;
|
||||
String header(const char *name) const;
|
||||
void sendHeader(const char *name, const char *value);
|
||||
void sendHeader(const char *name, const String &value);
|
||||
void sendHeader(const String &name, const String &value);
|
||||
void sendHeader(const __FlashStringHelper *name, const __FlashStringHelper *value);
|
||||
void sendHeader(const __FlashStringHelper *name, const char *value);
|
||||
void send(int code);
|
||||
void send(int code, const char *body);
|
||||
void send(int code, const char *contentType, const char *content);
|
||||
void send(int code, const char *contentType, const String &content);
|
||||
void send(AsyncWebServerResponse *response);
|
||||
AsyncResponseStream *beginResponseStream(const char *contentType);
|
||||
String uri() const;
|
||||
WebClientCompat &client();
|
||||
AsyncWebServerRequest *raw() const;
|
||||
private:
|
||||
AsyncRequestContext *ctx() const;
|
||||
void addPendingHeaders(AsyncWebServerResponse *response);
|
||||
void clearContext();
|
||||
|
||||
AsyncWebServerRequest *request;
|
||||
mutable WebClientCompat requestClient;
|
||||
};
|
||||
|
||||
class Web {
|
||||
public:
|
||||
bool uploadSuccess = false;
|
||||
void sendCORSHeaders(WebServer &server);
|
||||
void sendCacheHeaders(uint32_t seconds=604800);
|
||||
void sendCORSHeaders(WebRequestCompat &server);
|
||||
void sendCacheHeaders(WebRequestCompat &server, uint32_t seconds=604800);
|
||||
void startup();
|
||||
void handleLogin(WebServer &server);
|
||||
void handleLogout(WebServer &server);
|
||||
void handleStreamFile(WebServer &server, const char *filename, const char *encoding);
|
||||
void handleController(WebServer &server);
|
||||
void handleLoginContext(WebServer &server);
|
||||
void handleGetRepeaters(WebServer &server);
|
||||
void handleGetRooms(WebServer &server);
|
||||
void handleGetShades(WebServer &server);
|
||||
void handleGetGroups(WebServer &server);
|
||||
void handleShadeCommand(WebServer &server);
|
||||
void handleRepeatCommand(WebServer &server);
|
||||
void handleGroupCommand(WebServer &server);
|
||||
void handleTiltCommand(WebServer &server);
|
||||
void handleDiscovery(WebServer &server);
|
||||
void handleNotFound(WebServer &server);
|
||||
void handleRoom(WebServer &server);
|
||||
void handleShade(WebServer &server);
|
||||
void handleGroup(WebServer &server);
|
||||
void handleSetPositions(WebServer &server);
|
||||
void handleSetSensor(WebServer &server);
|
||||
void handleDownloadFirmware(WebServer &server);
|
||||
void handleBackup(WebServer &server, bool attach = false);
|
||||
void handleReboot(WebServer &server);
|
||||
void handleDeserializationError(WebServer &server, DeserializationError &err);
|
||||
void handleLogin(WebRequestCompat &server);
|
||||
void handleLogout(WebRequestCompat &server);
|
||||
void handleStreamFile(WebRequestCompat &server, const char *filename, const char *encoding);
|
||||
void handleController(WebRequestCompat &server);
|
||||
void handleLoginContext(WebRequestCompat &server);
|
||||
void handleGetRepeaters(WebRequestCompat &server);
|
||||
void handleGetRooms(WebRequestCompat &server);
|
||||
void handleGetShades(WebRequestCompat &server);
|
||||
void handleGetGroups(WebRequestCompat &server);
|
||||
void handleShadeCommand(WebRequestCompat &server);
|
||||
void handleRepeatCommand(WebRequestCompat &server);
|
||||
void handleGroupCommand(WebRequestCompat &server);
|
||||
void handleTiltCommand(WebRequestCompat &server);
|
||||
void handleDiscovery(WebRequestCompat &server);
|
||||
void handleNotFound(WebRequestCompat &server);
|
||||
void handleRoom(WebRequestCompat &server);
|
||||
void handleShade(WebRequestCompat &server);
|
||||
void handleGroup(WebRequestCompat &server);
|
||||
void handleSetPositions(WebRequestCompat &server);
|
||||
void handleSetSensor(WebRequestCompat &server);
|
||||
void handleDownloadFirmware(WebRequestCompat &server);
|
||||
void handleBackup(WebRequestCompat &server, bool attach = false);
|
||||
void handleReboot(WebRequestCompat &server);
|
||||
void handleDeserializationError(WebRequestCompat &server, DeserializationError &err);
|
||||
void begin();
|
||||
void loop();
|
||||
void end();
|
||||
|
|
@ -40,11 +90,16 @@ class Web {
|
|||
bool createAPIToken(const char *payload, char *token);
|
||||
bool createAPIPinToken(const IPAddress ipAddress, const char *pin, char *token);
|
||||
bool createAPIPasswordToken(const IPAddress ipAddress, const char *username, const char *password, char *token);
|
||||
bool isAuthenticated(WebServer &server, bool cfg = false);
|
||||
bool isAuthenticated(WebRequestCompat &server, bool cfg = false);
|
||||
|
||||
//void chunkRoomsResponse(WebServer &server, const char *elem = nullptr);
|
||||
//void chunkShadesResponse(WebServer &server, const char *elem = nullptr);
|
||||
//void chunkGroupsResponse(WebServer &server, const char *elem = nullptr);
|
||||
//void chunkGroupResponse(WebServer &server, SomfyGroup *, const char *prefix = nullptr);
|
||||
static AsyncRequestContext *ensureRequestContext(AsyncWebServerRequest *request);
|
||||
static AsyncRequestContext *findRequestContext(AsyncWebServerRequest *request);
|
||||
static void releaseRequestContext(AsyncWebServerRequest *request);
|
||||
static void collectBody(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total);
|
||||
|
||||
//void chunkRoomsResponse(WebRequestCompat &server, const char *elem = nullptr);
|
||||
//void chunkShadesResponse(WebRequestCompat &server, const char *elem = nullptr);
|
||||
//void chunkGroupsResponse(WebRequestCompat &server, const char *elem = nullptr);
|
||||
//void chunkGroupResponse(WebRequestCompat &server, SomfyGroup *, const char *prefix = nullptr);
|
||||
};
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue