knxdisplay/main/webserver/WebServer.hpp
2026-01-30 08:51:59 +01:00

69 lines
2.5 KiB
C++

#pragma once
#include "esp_http_server.h"
#include "cJSON.h"
class WebServer {
public:
static WebServer& instance();
void start();
void stop();
bool isRunning() const { return server_ != nullptr; }
private:
WebServer() = default;
~WebServer();
WebServer(const WebServer&) = delete;
WebServer& operator=(const WebServer&) = delete;
httpd_handle_t server_ = nullptr;
// Static file handlers (StaticFileHandlers.cpp)
static esp_err_t rootHandler(httpd_req_t* req);
static esp_err_t staticFileHandler(httpd_req_t* req);
static esp_err_t imagesHandler(httpd_req_t* req);
// Config handlers (ConfigHandlers.cpp)
static esp_err_t getConfigHandler(httpd_req_t* req);
static esp_err_t postConfigHandler(httpd_req_t* req);
static esp_err_t postSaveHandler(httpd_req_t* req);
static esp_err_t postResetHandler(httpd_req_t* req);
// KNX handlers (KnxHandlers.cpp)
static esp_err_t getKnxAddressesHandler(httpd_req_t* req);
static esp_err_t getKnxProgHandler(httpd_req_t* req);
static esp_err_t postKnxProgHandler(httpd_req_t* req);
static esp_err_t postKnxResetHandler(httpd_req_t* req);
// Status handlers (StatusHandlers.cpp)
static esp_err_t getStatusHandler(httpd_req_t* req);
// File manager handlers (FileManagerHandlers.cpp)
static esp_err_t fileManagerHandler(httpd_req_t* req);
static esp_err_t filesListHandler(httpd_req_t* req);
static esp_err_t filesUploadHandler(httpd_req_t* req);
static esp_err_t filesDownloadHandler(httpd_req_t* req);
static esp_err_t filesDeleteHandler(httpd_req_t* req);
static esp_err_t filesMkdirHandler(httpd_req_t* req);
static esp_err_t filesReadHandler(httpd_req_t* req);
static esp_err_t filesWriteHandler(httpd_req_t* req);
public:
// Shared utility functions (used by handlers)
static const char* getContentType(const char* filepath);
static esp_err_t sendFile(httpd_req_t* req, const char* filepath);
static bool getQueryParam(httpd_req_t* req, const char* key, char* value, size_t maxLen);
// JSON response helpers
static esp_err_t sendJsonObject(httpd_req_t* req, cJSON* json);
static esp_err_t sendJsonError(httpd_req_t* req, const char* error);
static esp_err_t sendJsonSuccess(httpd_req_t* req);
};
// Case-insensitive path resolution for FAT filesystem
bool resolveCaseInsensitivePath(const char* requestedPath, char* resolvedPath, size_t maxLen);
// URL decode helper
void urlDecode(char* str);