diff options
Diffstat (limited to 'platformio/temphum/src/http_server.h')
-rw-r--r-- | platformio/temphum/src/http_server.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/platformio/temphum/src/http_server.h b/platformio/temphum/src/http_server.h new file mode 100644 index 0000000..35f7c08 --- /dev/null +++ b/platformio/temphum/src/http_server.h @@ -0,0 +1,56 @@ +#pragma once +#include <ESP8266WebServer.h> +#include <Ticker.h> +#include <memory> +#include <list> +#include <utility> +#include "config.h" +#include "wifi.h" +#include "static.h" + +namespace homekit { + +struct OTAStatus { + bool invalidMd5; + + OTAStatus() : invalidMd5(false) {} + + inline void clean() { + invalidMd5 = false; + } +}; + +using files::StaticFile; + +class HttpServer { +private: + ESP8266WebServer server; + Ticker restartTimer; + std::shared_ptr<std::list<wifi::ScanResult>> scanResults; + OTAStatus ota; + + char* scanBuf; + size_t scanBufSize; + + void sendGzip(const StaticFile& file, PGM_P content_type); + void sendError(const String& message); + + bool getInputParam(const char* field_name, size_t max_len, String& dst); + +public: + explicit HttpServer(std::shared_ptr<std::list<wifi::ScanResult>> scanResults) + : server(80) + , scanResults(std::move(scanResults)) + , scanBufSize(512) { + scanBuf = new char[scanBufSize]; + }; + + ~HttpServer() { + delete[] scanBuf; + } + + void start(); + void loop(); +}; + +}
\ No newline at end of file |