summaryrefslogtreecommitdiff
path: root/platformio/temphum/src/http_server.h
diff options
context:
space:
mode:
Diffstat (limited to 'platformio/temphum/src/http_server.h')
-rw-r--r--platformio/temphum/src/http_server.h56
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