// Copyright (c) 2020 Lukasz Chodyla // Distributed under the MIT License. // See accompanying file LICENSE.txt for the full license. #include "nx/firmware/MqTriggerHttpServer.h" #include "HttpHelpers.h" #include #define TAG "NX_HTTP" #define REBOOT_DELAY_MS 3000 static httpd_handle_t server = NULL; static const MqTriggerHttpCallbacks* callbacks = NULL; // -- URI handlers -- ADD_HTTP_HANDLER("/", getRoot, HTTP_GET) ADD_HTTP_HANDLER("/index.js", getJs, HTTP_GET) ADD_HTTP_HANDLER("/index.css", getCss, HTTP_GET) ADD_HTTP_HANDLER("/sys", getSysSet, HTTP_GET) ADD_HTTP_HANDLER("/sys/form", getSysSetForm, HTTP_GET) ADD_HTTP_HANDLER("/sys", postSysSet, HTTP_POST) ADD_HTTP_HANDLER("/app", getAppSet, HTTP_GET) ADD_HTTP_HANDLER("/app/form", getAppSetForm, HTTP_GET) ADD_HTTP_HANDLER("/app", postAppSet, HTTP_POST) ADD_HTTP_HANDLER("/app/cmd", postCmd, HTTP_POST) static esp_err_t uriOptionsHandler(httpd_req_t* req) { nxAddCorsHeaders(req); const char resp[] = ""; httpd_resp_send(req, resp, HTTPD_RESP_USE_STRLEN); return ESP_OK; } static httpd_uri_t uriOptions = { .uri = "*", .method = HTTP_OPTIONS, .handler = uriOptionsHandler }; static esp_err_t uriRebootHandler(httpd_req_t* req) { nxAddCorsHeaders(req); const char resp[] = ""; httpd_resp_send(req, resp, HTTPD_RESP_USE_STRLEN); vTaskDelay(REBOOT_DELAY_MS / portTICK_PERIOD_MS); esp_restart(); return ESP_OK; } static httpd_uri_t uriReboot = { .uri = "/sys/reboot", .method = HTTP_POST, .handler = uriRebootHandler }; void registerMqTriggerHttpHandlers(void) { httpd_register_uri_handler(server, &uriOptions); httpd_register_uri_handler(server, &uri_getRoot); httpd_register_uri_handler(server, &uri_getJs); httpd_register_uri_handler(server, &uri_getCss); httpd_register_uri_handler(server, &uri_getSysSet); httpd_register_uri_handler(server, &uri_getSysSetForm); httpd_register_uri_handler(server, &uri_postSysSet); httpd_register_uri_handler(server, &uri_getAppSet); httpd_register_uri_handler(server, &uri_getAppSetForm); httpd_register_uri_handler(server, &uri_postAppSet); httpd_register_uri_handler(server, &uri_postCmd); httpd_register_uri_handler(server, &uriReboot); } // --------- Public API --------- // bool nxStartMqTriggerHttpServer(void) { httpd_config_t config = HTTPD_DEFAULT_CONFIG(); // configure server here: config.server_port = 80; config.max_uri_handlers = 16; config.uri_match_fn = httpd_uri_match_wildcard; config.stack_size = 8192; // ... if (server != NULL) { nxStopMqTriggerHttpServer(); } if (httpd_start(&server, &config) == ESP_OK) { registerMqTriggerHttpHandlers(); } return server != NULL; } void nxStopMqTriggerHttpServer() { if (server) { httpd_stop(server); server = NULL; } } void nxSetMqTriggerHttpCallbacks(const MqTriggerHttpCallbacks* cbs) { callbacks = cbs; }