aboutsummaryrefslogtreecommitdiff
path: root/include/pio/libs/http_server/homekit/http_server.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/pio/libs/http_server/homekit/http_server.h')
-rw-r--r--include/pio/libs/http_server/homekit/http_server.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/include/pio/libs/http_server/homekit/http_server.h b/include/pio/libs/http_server/homekit/http_server.h
new file mode 100644
index 0000000..8725a88
--- /dev/null
+++ b/include/pio/libs/http_server/homekit/http_server.h
@@ -0,0 +1,62 @@
+#ifndef COMMON_HOMEKIT_HTTP_SERVER_H
+#define COMMON_HOMEKIT_HTTP_SERVER_H
+
+#include <ESP8266WebServer.h>
+#include <Ticker.h>
+#include <memory>
+#include <list>
+#include <utility>
+
+#include <homekit/config.h>
+#include <homekit/wifi.h>
+#include <homekit/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);
+ virtual void ota_led() const;
+
+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();
+};
+
+}
+
+#endif //COMMON_HOMEKIT_HTTP_SERVER_H