From 5b7df6b4f26cadaf73ba7f2e006518bc9d06e4cb Mon Sep 17 00:00:00 2001 From: MG-5 Date: Sat, 26 Nov 2022 23:15:58 +0100 Subject: [PATCH] Make REST server working --- main/rest/RestServer.cxx | 16 ++++++++++------ main/rest/RestServer.hpp | 6 +++--- sdkconfig | 14 +++++++------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/main/rest/RestServer.cxx b/main/rest/RestServer.cxx index e13ccb6..4049d4d 100644 --- a/main/rest/RestServer.cxx +++ b/main/rest/RestServer.cxx @@ -17,6 +17,7 @@ void RestServer::initServer() netbiosns_init(); netbiosns_set_name(MdnsHostName); + ESP_ERROR_CHECK(initFileSystem()); ESP_ERROR_CHECK(startServer(WebMountPoint)); } @@ -105,7 +106,7 @@ esp_err_t RestServer::startServer(std::string newBasePath) //-------------------------------------------------------------------------------------------------- esp_err_t RestServer::systemInfoGetHandler(httpd_req_t *req) { - // [[maybe_unused]] int number = reinterpret_cast(req->user_ctx)->test; + ESP_LOGI(PrintTag, "systemInfoGetHandler") httpd_resp_set_type(req, "application/json"); @@ -126,7 +127,6 @@ esp_err_t RestServer::commonGetHandler(httpd_req_t *req) std::string filePath; auto serverInstance = reinterpret_cast(req->user_ctx); - filePath = serverInstance->basePath; if (req->uri[strlen(req->uri) - 1] == '/') @@ -143,7 +143,9 @@ esp_err_t RestServer::commonGetHandler(httpd_req_t *req) return ESP_FAIL; } - setContentTypeFromFile(req, filePath.data()); + esp_err_t returnValue = setContentTypeFromFile(req, filePath); + if (returnValue != ESP_OK) + ESP_LOGE(PrintTag, "Failed to set content type, reason: %s", esp_err_to_name(returnValue)); size_t readBytes; do @@ -160,7 +162,7 @@ esp_err_t RestServer::commonGetHandler(httpd_req_t *req) { close(fileStreamId); ESP_LOGE(PrintTag, "Failed to send file %s", filePath.data()); - httpd_resp_sendstr_chunk(req, NULL); // Abort sending file + httpd_resp_sendstr_chunk(req, nullptr); // Abort sending file httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "Failed to send file"); return ESP_FAIL; } @@ -171,14 +173,14 @@ esp_err_t RestServer::commonGetHandler(httpd_req_t *req) ESP_LOGI(PrintTag, "Sended file: %s", filePath.data()); // Respond with an empty chunk to signal HTTP response completion - httpd_resp_send_chunk(req, NULL, 0); + httpd_resp_send_chunk(req, nullptr, 0); return ESP_OK; } //-------------------------------------------------------------------------------------------------- esp_err_t RestServer::setContentTypeFromFile(httpd_req_t *req, std::string filePath) { - std::string type = "text/plain"; + std::string_view type = "text/plain"; if (checkFileExtension(filePath, ".html")) type = "text/html"; @@ -198,6 +200,8 @@ esp_err_t RestServer::setContentTypeFromFile(httpd_req_t *req, std::string fileP else if (checkFileExtension(filePath, ".svg")) type = "text/xml"; + ESP_LOGD(PrintTag, "content type: %s", type.data()); + return httpd_resp_set_type(req, type.data()); } diff --git a/main/rest/RestServer.hpp b/main/rest/RestServer.hpp index b96819b..53c2218 100644 --- a/main/rest/RestServer.hpp +++ b/main/rest/RestServer.hpp @@ -18,7 +18,7 @@ class RestServer private: static constexpr auto PrintTag = "[RestServer]"; - static constexpr size_t ScratchBufferSize = 10240; + static constexpr size_t ScratchBufferSize = 1024 * 20; void initialiseMdns(); esp_err_t initFileSystem(); @@ -29,6 +29,6 @@ class RestServer static esp_err_t setContentTypeFromFile(httpd_req_t *req, std::string filePath); static bool checkFileExtension(std::string filePath, std::string extension); - std::string basePath; - char scratchBuffer[ScratchBufferSize]; + std::string basePath = ""; + char scratchBuffer[ScratchBufferSize]{}; }; diff --git a/sdkconfig b/sdkconfig index 37f4d10..91f7dbd 100644 --- a/sdkconfig +++ b/sdkconfig @@ -382,7 +382,7 @@ CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH=y # # HTTP Server # -CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 +CONFIG_HTTPD_MAX_REQ_HDR_LEN=1024 CONFIG_HTTPD_MAX_URI_LEN=512 CONFIG_HTTPD_ERR_RESP_NO_DELAY=y CONFIG_HTTPD_PURGE_BUF_LEN=32 @@ -735,10 +735,10 @@ CONFIG_LOG_DEFAULT_LEVEL_INFO=y # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set CONFIG_LOG_DEFAULT_LEVEL=3 -CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y -# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set +# CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT is not set +CONFIG_LOG_MAXIMUM_LEVEL_DEBUG=y # CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set -CONFIG_LOG_MAXIMUM_LEVEL=3 +CONFIG_LOG_MAXIMUM_LEVEL=4 CONFIG_LOG_COLORS=y CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set @@ -833,7 +833,7 @@ CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums -CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=6000 +CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=5120 CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set @@ -1146,7 +1146,7 @@ CONFIG_SPIFFS_PAGE_CHECK=y CONFIG_SPIFFS_GC_MAX_RUNS=10 # CONFIG_SPIFFS_GC_STATS is not set CONFIG_SPIFFS_PAGE_SIZE=256 -CONFIG_SPIFFS_OBJ_NAME_LEN=32 +CONFIG_SPIFFS_OBJ_NAME_LEN=64 # CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set CONFIG_SPIFFS_USE_MAGIC=y CONFIG_SPIFFS_USE_MAGIC_LENGTH=y @@ -1382,7 +1382,7 @@ CONFIG_TCP_OVERSIZE_MSS=y # CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set # CONFIG_TCP_OVERSIZE_DISABLE is not set CONFIG_UDP_RECVMBOX_SIZE=6 -CONFIG_TCPIP_TASK_STACK_SIZE=6000 +CONFIG_TCPIP_TASK_STACK_SIZE=5120 CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set # CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set