diff --git a/CMakeLists.txt b/CMakeLists.txt index 2887b35..1c616cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,8 +16,8 @@ idf_component_register( "src/HTTPServer.c" "src/FileServer.c" "src/HTTPAPISystem.c" - "src/HTTPPrintSystem.c" - "src/HTTPPostSystem.c" + # "src/HTTPPrintSystem.c" + # "src/HTTPPostSystem.c" "src/CommandProcSys.c" "src/Helpers.c" "src/NetTransport.c" diff --git a/include/SystemApplication.h b/include/SystemApplication.h index 1b4e46c..9238aee 100644 --- a/include/SystemApplication.h +++ b/include/SystemApplication.h @@ -30,10 +30,7 @@ #define REAST_API_DEBUG_MODE 0 -#define EXPECTED_MAX_HEADER_SIZE 512 -#define EXPECTED_MAX_PAYLOAD_SIZE 4096 - -#define EXPECTED_MAX_DATA_SIZE (EXPECTED_MAX_HEADER_SIZE + EXPECTED_MAX_PAYLOAD_SIZE) +#define EXPECTED_MAX_DATA_SIZE (4096) #define VAR_MAX_NAME_LENGTH MAX_DYNVAR_NAME_LENGTH #define VAR_MAX_VALUE_LENGTH (2048) diff --git a/src/HTTPPostSystem.c b/src/HTTPPostSystem.c deleted file mode 100644 index 0a0bf26..0000000 --- a/src/HTTPPostSystem.c +++ /dev/null @@ -1,657 +0,0 @@ -/*! Copyright 2022 Bogdan Pilyugin - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * \file HTTPPostSystem.c - * \version 1.0 - * \date 2022-08-14 - * \author Bogdan Pilyugin - * \brief - * \details - * \copyright Apache License, Version 2.0 - */ - -#include "HTTPServer.h" -#include "LoRaWAN.h" -#include "Helpers.h" -#include "MQTT.h" -#include "UserCallbacks.h" - -static const char *TAG = "HTTPServerPost"; - -#define FILE_PATH_MAX (ESP_VFS_PATH_MAX + CONFIG_SPIFFS_OBJ_NAME_LEN) - -char rtstat[2048]; - -const char url_adapters[] = "adapters.html"; -const char url_services[] = "services.html"; -const char url_system[] = "system.html"; -const char url_reboot[] = "reboot.html"; -const char url_api[] = "api"; - -static HTTP_IO_RESULT AfterPostHandler(httpd_req_t *req, const char *filename, char *PostData); -static HTTP_IO_RESULT HTTPPostAdaptersSettings(httpd_req_t *req, char *PostData); -static HTTP_IO_RESULT HTTPPostServicesSettings(httpd_req_t *req, char *PostData); -static HTTP_IO_RESULT HTTPPostSystemSettings(httpd_req_t *req, char *PostData); -static HTTP_IO_RESULT HTTPPostReboot(httpd_req_t *req, char *PostData); - -HTTP_IO_RESULT (*AfterPostHandlerCust)(httpd_req_t *req, const char *filename, char *PostData); - -void regAfterPostHandlerCustom(HTTP_IO_RESULT (*post_handler)(httpd_req_t *req, const char *filename, char *PostData)) -{ - AfterPostHandlerCust = post_handler; -} - -HTTP_IO_RESULT HTTPPostApp(httpd_req_t *req, const char *filename, char *PostData) -{ - const char *pt = filename + 1; - -#if HTTP_SERVER_DEBUG_LEVEL > 0 - //ESP_LOGI(TAG, "URI for POST processing:%s", req->uri); - ESP_LOGI(TAG, "Filename:%s", pt); - ESP_LOGI(TAG, "DATA for POST processing:%s", PostData); -#endif - - HTTP_IO_RESULT res = AfterPostHandler(req, pt, PostData); - - switch (res) - { - case HTTP_IO_DONE: - break; - case HTTP_IO_WAITING: - break; - case HTTP_IO_NEED_DATA: - break; - case HTTP_IO_REDIRECT: - strcpy((char*) filename, PostData); - break; - case HTTP_IO_DONE_NOREFRESH: - break; - case HTTP_IO_DONE_API: - break; - break; - } - return res; -} - -static HTTP_IO_RESULT AfterPostHandler(httpd_req_t *req, const char *filename, char *PostData) -{ - if (!memcmp(filename, url_api, sizeof(url_api))) - return HTTPPostSysAPI(req, PostData); - if (!memcmp(filename, url_adapters, sizeof(url_adapters))) - return HTTPPostAdaptersSettings(req, PostData); - if (!memcmp(filename, url_services, sizeof(url_services))) - return HTTPPostServicesSettings(req, PostData); - if (!memcmp(filename, url_system, sizeof(url_system))) - return HTTPPostSystemSettings(req, PostData); - - if (!memcmp(filename, url_reboot, sizeof(url_reboot))) - return HTTPPostReboot(req, PostData); - - // If not found target URL here, try to call custom code - if (AfterPostHandlerCust != NULL) - return AfterPostHandlerCust(req, filename, PostData); - - return HTTP_IO_DONE; -} - -static HTTP_IO_RESULT HTTPPostAdaptersSettings(httpd_req_t *req, char *PostData) -{ - char tmp[33]; -#if CONFIG_WEBGUIAPP_ETHERNET_ENABLE - - bool TempIsETHEnabled = false; - bool TempIsETHDHCPEnabled = false; - if (httpd_query_key_value(PostData, "ethen", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - TempIsETHEnabled = true; - } - if (httpd_query_key_value(PostData, "edhcp", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - TempIsETHDHCPEnabled = true; - } - - if (httpd_query_key_value(PostData, "eipa", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.IPAddr); - if (httpd_query_key_value(PostData, "emas", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.Mask); - if (httpd_query_key_value(PostData, "egte", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.Gateway); - if (httpd_query_key_value(PostData, "edns1", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.DNSAddr1); - if (httpd_query_key_value(PostData, "edns2", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.DNSAddr2); - if (httpd_query_key_value(PostData, "edns3", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.DNSAddr3); - -#endif - -#if CONFIG_WEBGUIAPP_WIFI_ENABLE - - bool TempIsWiFiEnabled = false; - bool TempIsWIFIDHCPEnabled = false; - if (httpd_query_key_value(PostData, "wifien", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - TempIsWiFiEnabled = true; - } - if (httpd_query_key_value(PostData, "wfmode", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "sta")) - GetSysConf()->wifiSettings.WiFiMode = WIFI_MODE_STA; - else if (!strcmp((const char*) tmp, (const char*) "ap")) - GetSysConf()->wifiSettings.WiFiMode = WIFI_MODE_AP; - else if (!strcmp((const char*) tmp, (const char*) "apsta")) - GetSysConf()->wifiSettings.WiFiMode = WIFI_MODE_APSTA; - } - if (httpd_query_key_value(PostData, "wifipwr", tmp, sizeof(tmp)) == ESP_OK) - { - uint8_t pwr = atoi((const char*) tmp); - if (pwr >= 1 && pwr <= 20) - GetSysConf()->wifiSettings.MaxPower = pwr * 4; - } - - /*AP section*/ - httpd_query_key_value(PostData, "wfiap", GetSysConf()->wifiSettings.ApSSID, - sizeof(GetSysConf()->wifiSettings.ApSSID)); - if (httpd_query_key_value(PostData, "wfpap", tmp, sizeof(tmp)) == ESP_OK) - { - if (strcmp(tmp, (const char*) "********")) - strcpy(GetSysConf()->wifiSettings.ApSecurityKey, tmp); - } - if (httpd_query_key_value(PostData, "ipaap", tmp, sizeof(tmp)) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->wifiSettings.ApIPAddr); - - httpd_query_key_value(PostData, "wfi", GetSysConf()->wifiSettings.InfSSID, - sizeof(GetSysConf()->wifiSettings.InfSSID)); - if (httpd_query_key_value(PostData, "wfp", tmp, sizeof(tmp)) == ESP_OK) - { - if (strcmp(tmp, (const char*) "********")) - strcpy(GetSysConf()->wifiSettings.InfSecurityKey, tmp); - } - /*STATION section*/ - if (httpd_query_key_value(PostData, "dhcp", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - TempIsWIFIDHCPEnabled = true; - } - if (httpd_query_key_value(PostData, "ipa", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->wifiSettings.InfIPAddr); - if (httpd_query_key_value(PostData, "mas", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->wifiSettings.InfMask); - if (httpd_query_key_value(PostData, "gte", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->wifiSettings.InfGateway); - if (httpd_query_key_value(PostData, "dns", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->wifiSettings.DNSAddr1); - if (httpd_query_key_value(PostData, "dns2", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->wifiSettings.DNSAddr2); - if (httpd_query_key_value(PostData, "dns3", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->wifiSettings.DNSAddr3); - -#endif -#if CONFIG_WEBGUIAPP_GPRS_ENABLE - bool TempIsGSMEnabled = false; - if (httpd_query_key_value(PostData, "gsmen", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - TempIsGSMEnabled = true; - } - - if (httpd_query_key_value(PostData, "sav", tmp, 4) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { - GetSysConf()->gsmSettings.Flags1.bIsGSMEnabled = TempIsGSMEnabled; - WriteNVSSysConfig(GetSysConf()); - memcpy(PostData, "/reboot.html", sizeof "/reboot.html"); - return HTTP_IO_REDIRECT; - } - } - if (httpd_query_key_value(PostData, "restart", tmp, 4) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { - //PPPModemSoftRestart(); - } - } - if (httpd_query_key_value(PostData, "hdrst", tmp, 4) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { - //PPPModemColdStart(); - } - } -#endif - -#if CONFIG_WEBGUIAPP_LORAWAN_ENABLE - bool TempIsLoRaEnabled = false; - if (httpd_query_key_value(PostData, "lren", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - TempIsLoRaEnabled = true; - } - if (httpd_query_key_value(PostData, "lrdvid", tmp, sizeof(tmp)) == ESP_OK) - { - if (strlen(tmp) == 16) - StrToBytesLen((unsigned char*) tmp, (unsigned char*) GetSysConf()->lorawanSettings.DevEui, 16); - } - if (httpd_query_key_value(PostData, "lrapid", tmp, sizeof(tmp)) == ESP_OK) - { - if (strlen(tmp) == 16) - StrToBytesLen((unsigned char*) tmp, (unsigned char*) GetSysConf()->lorawanSettings.AppEui, 16); - } - if (httpd_query_key_value(PostData, "lrapkey", tmp, sizeof(tmp)) == ESP_OK) - { - if (strlen(tmp) == 32) - StrToBytesLen((unsigned char*) tmp, (unsigned char*) GetSysConf()->lorawanSettings.AppKey, 32); - } -#endif - - if (httpd_query_key_value(PostData, "wifisc", tmp, 4) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { - WiFiScan(); - } - } - - if (httpd_query_key_value(PostData, "wifistart", tmp, 4) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { - WiFiStartAPTemp(120); - } - } - if (httpd_query_key_value(PostData, "wifistop", tmp, 4) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { - WiFiStopAP(); - } - } - - if (httpd_query_key_value(PostData, "wifisave", tmp, 4) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { - WriteNVSSysConfig(GetSysConf()); - memcpy(PostData, "/reboot.html", sizeof "/reboot.html"); - return HTTP_IO_REDIRECT; - } - } - - if (httpd_query_key_value(PostData, "save", tmp, 5) == ESP_OK || - httpd_query_key_value(PostData, "apply", tmp, 5) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "eth")) - { -#if CONFIG_WEBGUIAPP_ETHERNET_ENABLE - GetSysConf()->ethSettings.Flags1.bIsETHEnabled = TempIsETHEnabled; - GetSysConf()->ethSettings.Flags1.bIsDHCPEnabled = TempIsETHDHCPEnabled; -#endif - } - else if (!strcmp(tmp, (const char*) "wifi")) - { -#if CONFIG_WEBGUIAPP_WIFI_ENABLE - GetSysConf()->wifiSettings.Flags1.bIsWiFiEnabled = TempIsWiFiEnabled; - GetSysConf()->wifiSettings.Flags1.bIsDHCPEnabled = TempIsWIFIDHCPEnabled; -#endif - } - else if (!strcmp(tmp, (const char*) "gprs")) - { -#if CONFIG_WEBGUIAPP_GPRS_ENABLE - GetSysConf()->gsmSettings.Flags1.bIsGSMEnabled = TempIsGSMEnabled; -#endif - } - else if (!strcmp(tmp, (const char*) "lora")) - { -#if CONFIG_WEBGUIAPP_LORAWAN_ENABLE - GetSysConf()->lorawanSettings.Flags1.bIsLoRaWANEnabled = TempIsLoRaEnabled; -#endif - } - - if (httpd_query_key_value(PostData, "apply", tmp, 5) == ESP_OK) - { - WriteNVSSysConfig(GetSysConf()); - return HTTP_IO_DONE; - } - else if (httpd_query_key_value(PostData, "save", tmp, 5) == ESP_OK) - { - WriteNVSSysConfig(GetSysConf()); - memcpy(PostData, "/reboot.html", sizeof "/reboot.html"); - return HTTP_IO_REDIRECT; - } - - } - - return HTTP_IO_DONE; -} - -static HTTP_IO_RESULT HTTPPostServicesSettings(httpd_req_t *req, char *PostData) -{ - char tmp[64]; -#if CONFIG_WEBGUIAPP_MQTT_ENABLE - bool TempIsMQTT1Enabled = false; - -#if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 - bool TempIsMQTT2Enabled = false; -#endif - httpd_query_key_value(PostData, "mqurl1", GetSysConf()->mqttStation[0].ServerAddr, - sizeof(GetSysConf()->mqttStation[0].ServerAddr)); - httpd_query_key_value(PostData, "mqid1", GetSysConf()->mqttStation[0].ClientID, - sizeof(GetSysConf()->mqttStation[0].ClientID)); - httpd_query_key_value(PostData, "mqsys1", GetSysConf()->mqttStation[0].SystemName, - sizeof(GetSysConf()->mqttStation[0].SystemName)); - httpd_query_key_value(PostData, "mqgrp1", GetSysConf()->mqttStation[0].GroupName, - sizeof(GetSysConf()->mqttStation[0].GroupName)); - httpd_query_key_value(PostData, "mqname1", GetSysConf()->mqttStation[0].UserName, - sizeof(GetSysConf()->mqttStation[0].UserName)); - - if (httpd_query_key_value(PostData, "mqen1", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - TempIsMQTT1Enabled = true; - } - if (httpd_query_key_value(PostData, "mqport1", tmp, sizeof(tmp)) == ESP_OK) - { - uint16_t tp = atoi((const char*) tmp); - if (tp < 65535 && tp >= 1000) - GetSysConf()->mqttStation[0].ServerPort = tp; - } - - if (httpd_query_key_value(PostData, "mqpass1", tmp, sizeof(tmp)) == ESP_OK && - strcmp(tmp, (const char*) "******")) - { - strcpy(GetSysConf()->mqttStation[0].UserPass, tmp); - } - -#if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 - httpd_query_key_value(PostData, "mqurl2", GetSysConf()->mqttStation[1].ServerAddr, - sizeof(GetSysConf()->mqttStation[1].ServerAddr)); - httpd_query_key_value(PostData, "mqid2", GetSysConf()->mqttStation[1].ClientID, - sizeof(GetSysConf()->mqttStation[1].ClientID)); - httpd_query_key_value(PostData, "mqsys2", GetSysConf()->mqttStation[1].SystemName, - sizeof(GetSysConf()->mqttStation[1].SystemName)); - httpd_query_key_value(PostData, "mqgrp2", GetSysConf()->mqttStation[1].GroupName, - sizeof(GetSysConf()->mqttStation[1].GroupName)); - httpd_query_key_value(PostData, "mqname2", GetSysConf()->mqttStation[1].UserName, - sizeof(GetSysConf()->mqttStation[1].UserName)); - - if (httpd_query_key_value(PostData, "mqen2", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - TempIsMQTT2Enabled = true; - } - - if (httpd_query_key_value(PostData, "mqport2", tmp, sizeof(tmp)) == ESP_OK) - { - uint16_t tp = atoi((const char*) tmp); - if (tp < 65535 && tp >= 1000) - GetSysConf()->mqttStation[1].ServerPort = tp; - } - - if (httpd_query_key_value(PostData, "mqpass2", tmp, sizeof(tmp)) == ESP_OK && - strcmp(tmp, (const char*) "******")) - { - strcpy(GetSysConf()->mqttStation[1].UserPass, tmp); - } - -#endif - - /*SNTP*/ - bool TempIsSNTPEnabled = false; - if (httpd_query_key_value(PostData, "sntpen", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - TempIsSNTPEnabled = true; - } - httpd_query_key_value(PostData, "tsr", GetSysConf()->sntpClient.SntpServerAdr, - sizeof(GetSysConf()->sntpClient.SntpServerAdr)); - httpd_query_key_value(PostData, "tsr2", GetSysConf()->sntpClient.SntpServer2Adr, - sizeof(GetSysConf()->sntpClient.SntpServer2Adr)); - httpd_query_key_value(PostData, "tsr3", GetSysConf()->sntpClient.SntpServer3Adr, - sizeof(GetSysConf()->sntpClient.SntpServer3Adr)); - - /*MQTT Test button handlers*/ - if (httpd_query_key_value(PostData, "mqtttest1", tmp, 6) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { - if (GetSysConf()->mqttStation[0].Flags1.bIsGlobalEnabled) - PublicTestMQTT(0); - return HTTP_IO_DONE; - } - } - - if (httpd_query_key_value(PostData, "mqtttest2", tmp, 6) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { - if (GetSysConf()->mqttStation[1].Flags1.bIsGlobalEnabled) - PublicTestMQTT(1); - return HTTP_IO_DONE; - } - } - - if (httpd_query_key_value(PostData, "save", tmp, 6) == ESP_OK || - httpd_query_key_value(PostData, "apply", tmp, 6) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "mqtt1")) - { - GetSysConf()->mqttStation[0].Flags1.bIsGlobalEnabled = TempIsMQTT1Enabled; - } - - else if (!strcmp(tmp, (const char*) "mqtt2")) - { -#if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 - GetSysConf()->mqttStation[1].Flags1.bIsGlobalEnabled = TempIsMQTT2Enabled; -#endif - } - - else if (!strcmp(tmp, (const char*) "sntp")) - { - GetSysConf()->sntpClient.Flags1.bIsGlobalEnabled = TempIsSNTPEnabled; - } - - if (httpd_query_key_value(PostData, "apply", tmp, 6) == ESP_OK) - { - WriteNVSSysConfig(GetSysConf()); - return HTTP_IO_DONE; - } - else if (httpd_query_key_value(PostData, "save", tmp, 6) == ESP_OK) - { - WriteNVSSysConfig(GetSysConf()); - memcpy(PostData, "/reboot.html", sizeof "/reboot.html"); - return HTTP_IO_REDIRECT; - } - } - -#endif - return HTTP_IO_DONE; -} - -static HTTP_IO_RESULT HTTPPostSystemSettings(httpd_req_t *req, char *PostData) -{ - char tmp[128]; - bool TempIsOTAEnabled = false; - bool TempIsRstEnabled = false; - if (httpd_query_key_value(PostData, "nam", tmp, sizeof(tmp)) == ESP_OK) - { - UnencodeURL(tmp); - strcpy(GetSysConf()->NetBIOSName, tmp); - } - - httpd_query_key_value(PostData, "lgn", GetSysConf()->SysName, sizeof(GetSysConf()->SysName)); - - if (httpd_query_key_value(PostData, "psn", tmp, sizeof(tmp)) == ESP_OK) - { - if (strcmp(tmp, (const char*) "******")) - strcpy(GetSysConf()->SysPass, tmp); - } - - if (httpd_query_key_value(PostData, "ota", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - TempIsOTAEnabled = true; - } - - if (httpd_query_key_value(PostData, "otarst", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - TempIsRstEnabled = true; - } - - if (httpd_query_key_value(PostData, "otaint", tmp, sizeof(tmp)) == ESP_OK) - { - uint16_t tp = atoi((const char*) tmp); - if (tp < 65535 && tp >= 1) - GetSysConf()->OTAAutoInt = tp; - } - - if (httpd_query_key_value(PostData, "otaurl", tmp, sizeof(tmp)) == ESP_OK) - { - UnencodeURL(tmp); - strcpy(GetSysConf()->OTAURL, tmp); - } - - if (httpd_query_key_value(PostData, "colscheme", tmp, sizeof(tmp)) == ESP_OK) - { - uint16_t chm = atoi((const char*) tmp); - if (chm < 3 && chm >= 1) - GetSysConf()->ColorSheme = chm; - } - - if (httpd_query_key_value(PostData, "upd", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { - StartOTA(true); - } - } - if (httpd_query_key_value(PostData, "rtos", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { -#if (CONFIG_FREERTOS_USE_TRACE_FACILITY == 1) - vTaskGetRunTimeStatsCustom(rtstat); - httpd_resp_sendstr(req, rtstat); -#endif - return HTTP_IO_DONE_API; - } - } - - if (httpd_query_key_value(PostData, "rst", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { - memcpy(PostData, "/reboot.html", sizeof "/reboot.html"); - return HTTP_IO_REDIRECT; - } - } - - if (httpd_query_key_value(PostData, "save", tmp, sizeof(tmp)) == ESP_OK || - httpd_query_key_value(PostData, "apply", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "syst")) - { - GetSysConf()->Flags1.bIsOTAEnabled = TempIsOTAEnabled; - GetSysConf()->Flags1.bIsResetOTAEnabled = TempIsRstEnabled; - } - - if (httpd_query_key_value(PostData, "apply", tmp, 5) == ESP_OK) - { - WriteNVSSysConfig(GetSysConf()); - return HTTP_IO_DONE; - } - else if (httpd_query_key_value(PostData, "save", tmp, 5) == ESP_OK) - { - WriteNVSSysConfig(GetSysConf()); - memcpy(PostData, "/reboot.html", sizeof "/reboot.html"); - return HTTP_IO_REDIRECT; - } - - } - - if (httpd_query_key_value(PostData, "cmd", tmp, 4) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "1")) - { - - return HTTP_IO_DONE_NOREFRESH; - } -#if CONFIG_WEBGUIAPP_GPRS_ENABLE - else if (!strcmp(tmp, (const char*) "2")) - { - char resp[256] = {0}; - ModemSendAT("AT+CCLK?\r", resp, 200); - return HTTP_IO_DONE_NOREFRESH; - } - else if (!strcmp(tmp, (const char*) "3")) - { - char resp[256] = {0}; - ModemSendAT("ATD+79022518532;\r", resp, 200); - return HTTP_IO_DONE_NOREFRESH; - } - else if (!strcmp(tmp, (const char*) "4")) - { - char resp[256] = {0}; - ModemSendAT("ATH\r", resp, 200); - return HTTP_IO_DONE_NOREFRESH; - } -#endif - else if (!strcmp(tmp, (const char*) "5")) - { - return HTTP_IO_DONE_NOREFRESH; - } - else if (!strcmp(tmp, (const char*) "6")) - { - return HTTP_IO_DONE_NOREFRESH; - } - else if (!strcmp(tmp, (const char*) "7")) - { - return HTTP_IO_DONE_NOREFRESH; - } - else if (!strcmp(tmp, (const char*) "8")) - { - return HTTP_IO_DONE_NOREFRESH; - } - else if (!strcmp(tmp, (const char*) "9")) - { - return HTTP_IO_DONE_NOREFRESH; - } - else if (!strcmp(tmp, (const char*) "10")) - { - GenerateSystemSettingsJSONFile(); - return HTTP_IO_DONE_NOREFRESH; - } - - } - - return HTTP_IO_DONE; -} - -static HTTP_IO_RESULT HTTPPostReboot(httpd_req_t *req, char *PostData) -{ - char tmp[33]; - if (httpd_query_key_value(PostData, "rbt", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp(tmp, (const char*) "prs")) - { - DelayedRestart(); - } - } - return HTTP_IO_DONE; -} - diff --git a/src/HTTPPrintSystem.c b/src/HTTPPrintSystem.c deleted file mode 100644 index 4f8240d..0000000 --- a/src/HTTPPrintSystem.c +++ /dev/null @@ -1,1008 +0,0 @@ -/*! Copyright 2022 Bogdan Pilyugin - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * \file HTTPPrintSystem.c - * \version 1.0 - * \date 2022-08-14 - * \author Bogdan Pilyugin - * \brief - * \details - * \copyright Apache License, Version 2.0 - */ - -#include "HTTPServer.h" -#include "esp_sntp.h" -#include "esp_netif.h" -#include "esp_wifi.h" -#include "NetTransport.h" -#include "esp_ota_ops.h" -#include "romfs.h" -#include "esp_idf_version.h" -#include "jWrite.h" -#include "UserCallbacks.h" - -static const char *TAG = "HTTPServerPrint"; - -extern espfs_fs_t *fs; - -typedef enum -{ - IP, - NETMASK, - GW -} IP_PRINT_TYPE; - -//Pointer to extend user implemented print handler -static int (*HTTPPrintCust)(httpd_req_t *req, char *buf, char *var, int arg); - -void regHTTPPrintCustom(int (*print_handler)(httpd_req_t *req, char *buf, char *var, int arg)) -{ - HTTPPrintCust = print_handler; -} - -static void PrintInterfaceState(char *VarData, void *arg, esp_netif_t *netif) -{ - if (netif != NULL && esp_netif_is_netif_up(netif)) - snprintf(VarData, MAX_DYNVAR_LENGTH, "CONNECTED"); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "DISCONNECTED"); -} - -static void PrintIPFromInterface(char *VarData, void *arg, esp_netif_t *netif, IP_PRINT_TYPE tp) -{ - char buf[16]; - esp_netif_ip_info_t ip_info; - if (netif != NULL && esp_netif_get_ip_info(netif, &ip_info) == ESP_OK) - { - switch (tp) - { - case IP: - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", esp_ip4addr_ntoa(&ip_info.ip, buf, 16)); - break; - case NETMASK: - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", esp_ip4addr_ntoa(&ip_info.netmask, buf, 16)); - break; - case GW: - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", esp_ip4addr_ntoa(&ip_info.gw, buf, 16)); - break; - } - } - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "-"); -} - -static void PrintDNSFromInterface(char *VarData, void *arg, esp_netif_t *netif, esp_netif_dns_type_t type) -{ - char buf[16]; - esp_netif_dns_info_t dns_info; - if (netif != NULL && esp_netif_get_dns_info(netif, type, &dns_info) == ESP_OK) - { - - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", esp_ip4addr_ntoa((esp_ip4_addr_t*) (&dns_info.ip), buf, 16)); - } - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "-"); -} - -static void PrintMACFromInterface(char *VarData, void *arg, esp_netif_t *netif) -{ - uint8_t mac_addr[6] = { 0 }; - esp_netif_get_mac(netif, mac_addr); - snprintf(VarData, MAX_DYNVAR_LENGTH, "%02x-%02x-%02x-%02x-%02x-%02x", - mac_addr[0], - mac_addr[1], - mac_addr[2], - mac_addr[3], - mac_addr[4], - mac_addr[5]); -} - -static void PrintCheckbox(char *VarData, void *arg, bool checked) -{ - if (checked) - snprintf(VarData, MAX_DYNVAR_LENGTH, "checked"); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, " "); -} - -/*GUI color define*/ - -static void HTTPPrint_bgrclr(char *VarData, void *arg) -{ - const char *sch = CONFIG_WEBGUIAPP_SCH1_BACKGROUNG_COLOR; - if (GetSysConf()->ColorSheme == 2) - sch = CONFIG_WEBGUIAPP_SCH2_BACKGROUNG_COLOR; - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", sch); -} -static void HTTPPrint_pnlclr(char *VarData, void *arg) -{ - const char *sch = CONFIG_WEBGUIAPP_SCH1_PANEL_COLOR; - if (GetSysConf()->ColorSheme == 2) - sch = CONFIG_WEBGUIAPP_SCH2_PANEL_COLOR; - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", sch); -} -static void HTTPPrint_mnuclr(char *VarData, void *arg) -{ - const char *sch = CONFIG_WEBGUIAPP_SCH1_MENU_COLOR; - if (GetSysConf()->ColorSheme == 2) - sch = CONFIG_WEBGUIAPP_SCH2_MENU_COLOR; - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", sch); -} -static void HTTPPrint_actclr(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", CONFIG_WEBGUIAPP_ACCENT_COLOR); -} -static void HTTPPrint_fntclr(char *VarData, void *arg) -{ - const char *sch = CONFIG_WEBGUIAPP_SCH1_TEXT_COLOR; - if (GetSysConf()->ColorSheme == 2) - sch = CONFIG_WEBGUIAPP_SCH2_TEXT_COLOR; - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", sch); -} -static void HTTPPrint_brdclr(char *VarData, void *arg) -{ - const char *sch = CONFIG_WEBGUIAPP_SCH1_BORDER_COLOR; - if (GetSysConf()->ColorSheme == 2) - sch = CONFIG_WEBGUIAPP_SCH2_BORDER_COLOR; - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", sch); -} - -static void HTTPPrint_colchm(char *VarData, void *arg) -{ - if ((*(uint8_t*) arg) == GetSysConf()->ColorSheme) - snprintf(VarData, MAX_DYNVAR_LENGTH, "selected"); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, " "); -} - -static void HTTPPrint_name(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", CONFIG_DEVICE_MODEL_NAME); -} - -static void HTTPPrint_time(char *VarData, void *arg) -{ - time_t now; - time(&now); - snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", (int) now); -} -static void HTTPPrint_uptime(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", (int) GetUpTime()); -} - -static void HTTPPrint_status_fail(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "none"); -} - -static void HTTPPrint_dname(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->NetBIOSName); -} - -static void HTTPPrint_login(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->SysName); -} - -static void HTTPPrint_pass(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******"); -} - -static void HTTPPrint_ota(char *VarData, void *arg) -{ - PrintCheckbox(VarData, arg, GetSysConf()->Flags1.bIsOTAEnabled); -} -static void HTTPPrint_otarst(char *VarData, void *arg) -{ - PrintCheckbox(VarData, arg, GetSysConf()->Flags1.bIsResetOTAEnabled); -} - -static void HTTPPrint_otaint(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->OTAAutoInt); -} - -static void HTTPPrint_serial(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->ID); -} -static void HTTPPrint_serial10(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->SN); -} - -static void HTTPPrint_fver(char *VarData, void *arg) -{ - esp_app_desc_t cur_app_info; - if (esp_ota_get_partition_description(esp_ota_get_running_partition(), &cur_app_info) == ESP_OK) - { - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", cur_app_info.version); - } -} -static void HTTPPrint_hrev(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", CONFIG_BOARD_HARDWARE_REVISION); -} -static void HTTPPrint_fverav(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetAvailVersion()); -} - -static void HTTPPrint_updstat(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetUpdateStatus()); -} - -static void HTTPPrint_idfver(char *VarData, void *arg) -{ - esp_app_desc_t cur_app_info; - if (esp_ota_get_partition_description(esp_ota_get_running_partition(), &cur_app_info) == ESP_OK) - { - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", cur_app_info.idf_ver); - } -} -static void HTTPPrint_builddate(char *VarData, void *arg) -{ - esp_app_desc_t cur_app_info; - if (esp_ota_get_partition_description(esp_ota_get_running_partition(), &cur_app_info) == ESP_OK) - { - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s %s", cur_app_info.date, cur_app_info.time); - } -} - -static void HTTPPrint_otaurl(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->OTAURL); -} - -static void HTTPPrint_tshift(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "7200"); -} - -static void HTTPPrint_tz(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->sntpClient.TimeZone); -} - -static void HTTPPrint_wlev(char *VarData, void *arg) -{ - wifi_ap_record_t wifi; - if (esp_wifi_sta_get_ap_info(&wifi) == ESP_OK) - snprintf(VarData, MAX_DYNVAR_LENGTH, "%ddBm", wifi.rssi); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "--"); -} - -static void HTTPPrint_defadp(char *VarData, void *arg) -{ - GetDefaultNetIFName(VarData); -} - -#if CONFIG_WEBGUIAPP_WIFI_ENABLE - -static void HTTPPrint_wfen(char *VarData, void *arg) -{ - PrintCheckbox(VarData, arg, GetSysConf()->wifiSettings.Flags1.bIsWiFiEnabled); -} -static void HTTPPrint_wfstat(char *VarData, void *arg) -{ - if (GetSysConf()->wifiSettings.WiFiMode == WIFI_MODE_AP) - PrintInterfaceState(VarData, arg, GetAPNetifAdapter()); - else - PrintInterfaceState(VarData, arg, GetSTANetifAdapter()); -} -static void HTTPPrint_cln(char *VarData, void *arg) -{ - //PrintCheckbox(VarData, arg, !GetSysConf()->wifiSettings.Flags1.bIsAP); -} -static void HTTPPrint_apn(char *VarData, void *arg) -{ - //PrintCheckbox(VarData, arg, GetSysConf()->wifiSettings.Flags1.bIsAP); -} - -static void HTTPPrint_wfmode(char *VarData, void *arg) -{ - if ((*(uint8_t*) arg) == GetSysConf()->wifiSettings.WiFiMode) - snprintf(VarData, MAX_DYNVAR_LENGTH, "selected"); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, " "); -} - -static void HTTPPrint_ssidap(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->wifiSettings.ApSSID); -} - -static void HTTPPrint_wkeyap(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "********"); -} -/*AP IP*/ -static void HTTPPrint_ipap(char *VarData, void *arg) -{ - if (GetAPNetifAdapter() && esp_netif_is_netif_up(GetAPNetifAdapter())) - PrintIPFromInterface(VarData, arg, GetAPNetifAdapter(), IP); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", - ip4addr_ntoa((const ip4_addr_t*) &GetSysConf()->wifiSettings.ApIPAddr)); -} - -static void HTTPPrint_ssid(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->wifiSettings.InfSSID); -} - -static void HTTPPrint_wkey(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "********"); -} - -static void HTTPPrint_cbdh(char *VarData, void *arg) -{ - PrintCheckbox(VarData, arg, GetSysConf()->wifiSettings.Flags1.bIsDHCPEnabled); -} -/*STA IP*/ -static void HTTPPrint_ip(char *VarData, void *arg) -{ - if (GetSTANetifAdapter() && esp_netif_is_netif_up(GetSTANetifAdapter())) - PrintIPFromInterface(VarData, arg, GetSTANetifAdapter(), IP); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", - ip4addr_ntoa((const ip4_addr_t*) &GetSysConf()->wifiSettings.InfIPAddr)); -} -/*STA NETMASK*/ -static void HTTPPrint_msk(char *VarData, void *arg) -{ - if (GetSTANetifAdapter() && esp_netif_is_netif_up(GetSTANetifAdapter())) - PrintIPFromInterface(VarData, arg, GetSTANetifAdapter(), NETMASK); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", - ip4addr_ntoa((const ip4_addr_t*) &GetSysConf()->wifiSettings.InfMask)); -} -/*STA GATEWAY*/ -static void HTTPPrint_gate(char *VarData, void *arg) -{ - if (GetSTANetifAdapter() && esp_netif_is_netif_up(GetSTANetifAdapter())) - PrintIPFromInterface(VarData, arg, GetSTANetifAdapter(), GW); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", - ip4addr_ntoa((const ip4_addr_t*) &GetSysConf()->wifiSettings.InfGateway)); -} -/*Current DNS*/ -static void HTTPPrint_dns(char *VarData, void *arg) -{ - if (GetSTANetifAdapter() && esp_netif_is_netif_up(GetSTANetifAdapter())) - PrintDNSFromInterface(VarData, arg, GetSTANetifAdapter(), ESP_NETIF_DNS_MAIN); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "0.0.0.0"); -} -static void HTTPPrint_dns2(char *VarData, void *arg) -{ - if (GetSTANetifAdapter() && esp_netif_is_netif_up(GetSTANetifAdapter())) - PrintDNSFromInterface(VarData, arg, GetSTANetifAdapter(), ESP_NETIF_DNS_BACKUP); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "0.0.0.0"); -} -static void HTTPPrint_dns3(char *VarData, void *arg) -{ - if (GetSTANetifAdapter() && esp_netif_is_netif_up(GetSTANetifAdapter())) - PrintDNSFromInterface(VarData, arg, GetSTANetifAdapter(), ESP_NETIF_DNS_FALLBACK); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "0.0.0.0"); -} - -static void HTTPPrint_macadr(char *VarData, void *arg) -{ - PrintMACFromInterface(VarData, arg, GetSTANetifAdapter()); -} - -static void HTTPPrint_apmacadr(char *VarData, void *arg) -{ - PrintMACFromInterface(VarData, arg, GetAPNetifAdapter()); -} -static void HTTPPrint_wifisc(char *VarData, void *arg) -{ - wifi_ap_record_t *R = GetWiFiAPRecord(*(uint8_t*) (arg)); - if (!R) - return; - snprintf(VarData, MAX_DYNVAR_LENGTH, "{\"ssid\":\"%s\",\"rssi\":%i,\"ch\":%d}", R->ssid, R->rssi, - R->primary); -} -static void HTTPPrint_wifipwr(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", (unsigned int) (GetSysConf()->wifiSettings.MaxPower / 4)); -} -#endif - -#if CONFIG_WEBGUIAPP_ETHERNET_ENABLE -static void HTTPPrint_ethen(char *VarData, void *arg) -{ - PrintCheckbox(VarData, arg, GetSysConf()->ethSettings.Flags1.bIsETHEnabled); -} -static void HTTPPrint_ecbdh(char *VarData, void *arg) -{ - PrintCheckbox(VarData, arg, GetSysConf()->ethSettings.Flags1.bIsDHCPEnabled); -} -static void HTTPPrint_ethstat(char *VarData, void *arg) -{ - PrintInterfaceState(VarData, arg, GetETHNetifAdapter()); -} -/*Etherbox IP*/ -static void HTTPPrint_eip(char *VarData, void *arg) -{ - if (GetETHNetifAdapter() && esp_netif_is_netif_up(GetETHNetifAdapter())) - PrintIPFromInterface(VarData, arg, GetETHNetifAdapter(), IP); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", ip4addr_ntoa((const ip4_addr_t*)&GetSysConf()->ethSettings.IPAddr)); -} -/*Etherbox NETMASK*/ -static void HTTPPrint_emsk(char *VarData, void *arg) -{ - if (GetETHNetifAdapter() && esp_netif_is_netif_up(GetETHNetifAdapter())) - PrintIPFromInterface(VarData, arg, GetETHNetifAdapter(), NETMASK); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", ip4addr_ntoa((const ip4_addr_t*)&GetSysConf()->ethSettings.Mask)); -} -/*Ethernet GATEWAY*/ -static void HTTPPrint_egate(char *VarData, void *arg) -{ - if (GetETHNetifAdapter() && esp_netif_is_netif_up(GetETHNetifAdapter())) - PrintIPFromInterface(VarData, arg, GetETHNetifAdapter(), GW); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", ip4addr_ntoa((const ip4_addr_t*)&GetSysConf()->ethSettings.Gateway)); -} -/*Current DNS*/ -static void HTTPPrint_edns(char *VarData, void *arg) -{ - if (GetETHNetifAdapter() && esp_netif_is_netif_up(GetETHNetifAdapter())) - PrintDNSFromInterface(VarData, arg, GetETHNetifAdapter(), ESP_NETIF_DNS_MAIN); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "0.0.0.0"); -} -static void HTTPPrint_bkedns(char *VarData, void *arg) -{ - - if (GetETHNetifAdapter() && esp_netif_is_netif_up(GetETHNetifAdapter())) - PrintDNSFromInterface(VarData, arg, GetETHNetifAdapter(), ESP_NETIF_DNS_BACKUP); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "0.0.0.0"); -} -static void HTTPPrint_fledns(char *VarData, void *arg) -{ - - if (GetETHNetifAdapter() && esp_netif_is_netif_up(GetETHNetifAdapter())) - PrintDNSFromInterface(VarData, arg, GetETHNetifAdapter(), ESP_NETIF_DNS_FALLBACK); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "0.0.0.0"); -} - -static void HTTPPrint_emacadr(char *VarData, void *arg) -{ - PrintMACFromInterface(VarData, arg, GetETHNetifAdapter()); -} - -#endif - -#if CONFIG_WEBGUIAPP_GPRS_ENABLE -/*GSM MODEM*/ -void HTTPPrint_gsmstat(char *VarData, void *arg) -{ - PrintInterfaceState(VarData, arg, GetPPPNetifAdapter()); -} -void HTTPPrint_gsmen(char *VarData, void *arg) -{ - PrintCheckbox(VarData, arg, GetSysConf()->gsmSettings.Flags1.bIsGSMEnabled); -} - -void HTTPPrint_gsmmod(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, GetPPPModemInfo()->model); -} -void HTTPPrint_gsmopr(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, GetPPPModemInfo()->oper); -} -void HTTPPrint_gimei(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, GetPPPModemInfo()->imei); -} -void HTTPPrint_gimsi(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, GetPPPModemInfo()->imsi); -} - -/*PPP IP*/ -void HTTPPrint_gsmip(char *VarData, void *arg) -{ - PrintIPFromInterface(VarData, arg, GetPPPNetifAdapter(), IP); -} -/*PPP NETMASK*/ -void HTTPPrint_gsmmsk(char *VarData, void *arg) -{ - PrintIPFromInterface(VarData, arg, GetPPPNetifAdapter(), NETMASK); -} -/*PPP GATEWAY*/ -void HTTPPrint_gsmgate(char *VarData, void *arg) -{ - PrintIPFromInterface(VarData, arg, GetPPPNetifAdapter(), GW); -} -/*Current DNS*/ -void HTTPPrint_gsmdns(char *VarData, void *arg) -{ - PrintDNSFromInterface(VarData, arg, GetPPPNetifAdapter(), ESP_NETIF_DNS_MAIN); -} -void HTTPPrint_bkgsmdns(char *VarData, void *arg) -{ - PrintDNSFromInterface(VarData, arg, GetPPPNetifAdapter(), ESP_NETIF_DNS_BACKUP); -} -void HTTPPrint_flgsmdns(char *VarData, void *arg) -{ - PrintDNSFromInterface(VarData, arg, GetPPPNetifAdapter(), ESP_NETIF_DNS_FALLBACK); -} - -void HTTPPrint_gsmmac(char *VarData, void *arg) -{ - PrintMACFromInterface(VarData, arg, GetPPPNetifAdapter()); -} -#endif - -#ifdef CONFIG_WEBGUIAPP_LORAWAN_ENABLE -/*LORAWAN settings*/ -void HTTPPrint_lren(char *VarData, void *arg) -{ - PrintCheckbox(VarData, arg, GetSysConf()->lorawanSettings.Flags1.bIsLoRaWANEnabled); -} -void HTTPPrint_lrstat(char *VarData, void *arg) -{ - if (isLORAConnected()) - snprintf(VarData, MAX_DYNVAR_LENGTH, "CONNECTED"); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "DISCONNECTED"); -} -void HTTPPrint_lrdvid(char *VarData, void *arg) -{ - uint8_t temp[16]; - BytesToStr((unsigned char*) &GetSysConf()->lorawanSettings.DevEui, temp, 8); - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", temp); -} - -void HTTPPrint_lrapid(char *VarData, void *arg) -{ - uint8_t temp[16]; - BytesToStr((unsigned char*) &GetSysConf()->lorawanSettings.AppEui, temp, 8); - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", temp); -} -void HTTPPrint_lrapkey(char *VarData, void *arg) -{ - uint8_t temp[32]; - BytesToStr((unsigned char*) &GetSysConf()->lorawanSettings.AppKey, temp, 16); - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", temp); -} -#endif - -#if CONFIG_WEBGUIAPP_MQTT_ENABLE -void HTTPPrint_mqen1(char *VarData, void *arg) -{ - PrintCheckbox(VarData, arg, GetSysConf()->mqttStation[0].Flags1.bIsGlobalEnabled); -} -void HTTPPrint_mqurl1(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].ServerAddr); -} -void HTTPPrint_mqport1(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->mqttStation[0].ServerPort); -} -void HTTPPrint_mqid1(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].ClientID); -} -void HTTPPrint_mqsys1(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].SystemName); -} -void HTTPPrint_mqgrp1(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].GroupName); -} -void HTTPPrint_mqname1(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].UserName); -} -void HTTPPrint_mqpass1(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******"); -} - -#if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 -void HTTPPrint_mqen2(char *VarData, void *arg) -{ - PrintCheckbox(VarData, arg, GetSysConf()->mqttStation[1].Flags1.bIsGlobalEnabled); -} -void HTTPPrint_mqurl2(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].ServerAddr); -} -void HTTPPrint_mqport2(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->mqttStation[1].ServerPort); -} -void HTTPPrint_mqid2(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].ClientID); -} -void HTTPPrint_mqsys2(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].SystemName); -} -void HTTPPrint_mqgrp2(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].GroupName); -} -void HTTPPrint_mqname2(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].UserName); -} -void HTTPPrint_mqpass2(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******"); -} -#endif -#endif - -/*SNTP*/ -void HTTPPrint_sntpen(char *VarData, void *arg) -{ - PrintCheckbox(VarData, arg, GetSysConf()->sntpClient.Flags1.bIsGlobalEnabled); -} -void HTTPPrint_tmsrv(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->sntpClient.SntpServerAdr); -} -void HTTPPrint_tmsrv2(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->sntpClient.SntpServer2Adr); -} -void HTTPPrint_tmsrv3(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->sntpClient.SntpServer3Adr); -} - -static void HTTPPrint_freeram(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", (int) esp_get_free_heap_size()); -} -static void HTTPPrint_minram(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", (int) esp_get_minimum_free_heap_size()); -} -static void HTTPPrint_mqtt1st(char *VarData, void *arg) -{ - if (GetMQTT1Connected()) - snprintf(VarData, MAX_DYNVAR_LENGTH, "CONNECTED"); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "DISCONNECTED"); -} -static void HTTPPrint_mqtt2st(char *VarData, void *arg) -{ - if (GetMQTT2Connected()) - snprintf(VarData, MAX_DYNVAR_LENGTH, "CONNECTED"); - else - snprintf(VarData, MAX_DYNVAR_LENGTH, "DISCONNECTED"); -} - -/* Pass build configuration to web interface*/ -static void HTTPPrint_hide_gprs(char *VarData, void *arg) -{ -#if CONFIG_WEBGUIAPP_GPRS_ENABLE - snprintf(VarData, MAX_DYNVAR_LENGTH, " "); -#else - snprintf(VarData, MAX_DYNVAR_LENGTH, "hide"); -#endif -} - -static void HTTPPrint_hide_mqtt1(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, " "); -} - -static void HTTPPrint_hide_mqtt2(char *VarData, void *arg) -{ -#if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 - snprintf(VarData, MAX_DYNVAR_LENGTH, " "); -#else - snprintf(VarData, MAX_DYNVAR_LENGTH, "hide"); -#endif -} - -static void HTTPPrint_hide_lora(char *VarData, void *arg) -{ -#ifdef CONFIG_WEBGUIAPP_LORAWAN_ENABLE - snprintf(VarData, MAX_DYNVAR_LENGTH, " "); -#else - snprintf(VarData, MAX_DYNVAR_LENGTH, "hide"); -#endif -} - -static void HTTPPrint_hide_eth(char *VarData, void *arg) -{ -#if CONFIG_WEBGUIAPP_ETHERNET_ENABLE - snprintf(VarData, MAX_DYNVAR_LENGTH, " "); -#else - snprintf(VarData, MAX_DYNVAR_LENGTH, "hide"); -#endif -} - -static void HTTPPrint_hide_wifi(char *VarData, void *arg) -{ -#if CONFIG_WEBGUIAPP_WIFI_ENABLE - snprintf(VarData, MAX_DYNVAR_LENGTH, " "); -#else - snprintf(VarData, MAX_DYNVAR_LENGTH, "hide"); -#endif -} - -static void HTTPPrint_testvariable(char *VarData, void *arg) -{ - static int counter = 1; - snprintf(VarData, MAX_DYNVAR_LENGTH, "[Long extended dynamic variable number %d]", counter++); -} - -//Default string if not found handler -static void HTTPPrint_DEF(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "#DEF"); -} - -dyn_var_handler_t HANDLERS_ARRAY[] = { - /*GUI settings*/ - - { "bgrclr", sizeof("bgrclr") - 1, &HTTPPrint_bgrclr }, - { "pnlclr", sizeof("pnlclr") - 1, &HTTPPrint_pnlclr }, - { "mnuclr", sizeof("mnuclr") - 1, &HTTPPrint_mnuclr }, - { "actclr", sizeof("actclr") - 1, &HTTPPrint_actclr }, - { "fntclr", sizeof("fntclr") - 1, &HTTPPrint_fntclr }, - { "brdclr", sizeof("brdclr") - 1, &HTTPPrint_brdclr }, - { "colchm", sizeof("colchm") - 1, &HTTPPrint_colchm }, - - /*System settings*/ - { "name", sizeof("name") - 1, &HTTPPrint_name }, - { "dname", sizeof("dname") - 1, &HTTPPrint_dname }, - { "login", sizeof("login") - 1, &HTTPPrint_login }, - { "pass", sizeof("pass") - 1, &HTTPPrint_pass }, - { "ota", sizeof("ota") - 1, &HTTPPrint_ota }, - { "otarst", sizeof("otarst") - 1, &HTTPPrint_otarst }, - { "otaint", sizeof("otaint") - 1, &HTTPPrint_otaint }, - { "fver", sizeof("fver") - 1, &HTTPPrint_fver }, - { "hrev", sizeof("hrev") - 1, &HTTPPrint_hrev }, - { "fverav", sizeof("fverav") - 1, &HTTPPrint_fverav }, - { "updstat", sizeof("updstat") - 1, &HTTPPrint_updstat }, - - { "idfver", sizeof("idfver") - 1, &HTTPPrint_idfver }, - { "builddate", sizeof("builddate") - 1, &HTTPPrint_builddate }, - { "serial", sizeof("serial") - 1, &HTTPPrint_serial }, - { "serial10", sizeof("serial10") - 1, &HTTPPrint_serial10 }, - { "otaurl", sizeof("otaurl") - 1, &HTTPPrint_otaurl }, - - { "time", sizeof("time") - 1, &HTTPPrint_time }, - { "uptime", sizeof("uptime") - 1, &HTTPPrint_uptime }, - { "tshift", sizeof("tshift") - 1, &HTTPPrint_tshift }, - { "tz", sizeof("tz") - 1, &HTTPPrint_tz }, - - { "defadp", sizeof("defadp") - 1, &HTTPPrint_defadp }, - { "wlev", sizeof("wlev") - 1, &HTTPPrint_wlev }, - -#if CONFIG_WEBGUIAPP_WIFI_ENABLE - /*WiFi network*/ - { "wfen", sizeof("wfen") - 1, &HTTPPrint_wfen }, - { "wfstat", sizeof("wfstat") - 1, &HTTPPrint_wfstat }, - { "cln", sizeof("cln") - 1, &HTTPPrint_cln }, - { "apn", sizeof("apn") - 1, &HTTPPrint_apn }, - { "wfmode", sizeof("wfmode") - 1, &HTTPPrint_wfmode }, - { "ssidap", sizeof("ssidap") - 1, &HTTPPrint_ssidap }, - { "wkeyap", sizeof("wkeyap") - 1, &HTTPPrint_wkeyap }, - { "ipap", sizeof("ipap") - 1, &HTTPPrint_ipap }, - { "ssid", sizeof("ssid") - 1, &HTTPPrint_ssid }, - { "wkey", sizeof("wkey") - 1, &HTTPPrint_wkey }, - { "cbdh", sizeof("cbdh") - 1, &HTTPPrint_cbdh }, - { "ip", sizeof("ip") - 1, &HTTPPrint_ip }, - { "msk", sizeof("msk") - 1, &HTTPPrint_msk }, - { "gate", sizeof("gate") - 1, &HTTPPrint_gate }, - { "dns", sizeof("dns") - 1, &HTTPPrint_dns }, - { "dns2", sizeof("dns2") - 1, &HTTPPrint_dns2 }, - { "dns3", sizeof("dns3") - 1, &HTTPPrint_dns3 }, - { "macadr", sizeof("macadr") - 1, &HTTPPrint_macadr }, - { "apmacadr", sizeof("apmacadr") - 1, &HTTPPrint_apmacadr }, - { "wifisc", sizeof("wifisc") - 1, &HTTPPrint_wifisc }, - { "wifipwr", sizeof("wifipwr") - 1, &HTTPPrint_wifipwr }, - #endif - -#if CONFIG_WEBGUIAPP_ETHERNET_ENABLE - /*ETHERNET network*/ - { "ethen", sizeof("ethen") - 1, &HTTPPrint_ethen }, - { "ecbdh", sizeof("ecbdh") - 1, &HTTPPrint_ecbdh }, - { "ethstat", sizeof("ethstat") - 1, &HTTPPrint_ethstat }, - { "eip", sizeof("eip") - 1, &HTTPPrint_eip }, - { "emsk", sizeof("emsk") - 1, &HTTPPrint_emsk }, - { "egate", sizeof("egate") - 1, &HTTPPrint_egate }, - { "edns", sizeof("edns") - 1, &HTTPPrint_edns }, - { "bkedns", sizeof("bkedns") - 1, &HTTPPrint_bkedns }, - { "fledns", sizeof("fledns") - 1, &HTTPPrint_fledns }, - { "emacadr", sizeof("emacadr") - 1, &HTTPPrint_emacadr }, - #endif - -#if CONFIG_WEBGUIAPP_GPRS_ENABLE - /*GSM modem*/ - { "gsmen", sizeof("gsmen") - 1, &HTTPPrint_gsmen }, - { "gsmstat", sizeof("gsmstat") - 1, &HTTPPrint_gsmstat }, - { "gsmmod", sizeof("gsmmod") - 1, &HTTPPrint_gsmmod }, - { "gsmopr", sizeof("gsmopr") - 1, &HTTPPrint_gsmopr }, - { "gimei", sizeof("gimei") - 1, &HTTPPrint_gimei }, - { "gimsi", sizeof("gimsi") - 1, &HTTPPrint_gimsi }, - { "gsmip", sizeof("gsmip") - 1, &HTTPPrint_gsmip }, - { "gsmmsk", sizeof("gsmmsk") - 1, &HTTPPrint_gsmmsk }, - { "gsmgate", sizeof("gsmgate") - 1, &HTTPPrint_gsmgate }, - { "gsmdns", sizeof("gsmdns") - 1, &HTTPPrint_gsmdns }, - { "bkgsmdns", sizeof("bkgsmdns") - 1, &HTTPPrint_bkgsmdns }, - { "flgsmdns", sizeof("flgsmdns") - 1, &HTTPPrint_flgsmdns }, - { "gsmmac", sizeof("gsmmac") - 1, &HTTPPrint_gsmmac }, - #endif - -#ifdef CONFIG_WEBGUIAPP_LORAWAN_ENABLE - /*LORAWAN settings*/ - { "lren", sizeof("lren") - 1, &HTTPPrint_lren }, - { "lrstat", sizeof("lrstat") - 1, &HTTPPrint_lrstat }, - { "lrdvid", sizeof("lrdvid") - 1, &HTTPPrint_lrdvid }, - { "lrapid", sizeof("lrapid") - 1, &HTTPPrint_lrapid }, - { "lrapkey", sizeof("lrapkey") - 1, &HTTPPrint_lrapkey }, -#endif -#if CONFIG_WEBGUIAPP_MQTT_ENABLE - /*MQTT*/ - { "mqen1", sizeof("mqen1") - 1, &HTTPPrint_mqen1 }, - { "mqurl1", sizeof("mqurl1") - 1, &HTTPPrint_mqurl1 }, - { "mqport1", sizeof("mqport1") - 1, &HTTPPrint_mqport1 }, - { "mqsys1", sizeof("mqsys1") - 1, &HTTPPrint_mqsys1 }, - { "mqgrp1", sizeof("mqgrp1") - 1, &HTTPPrint_mqgrp1 }, - { "mqid1", sizeof("mqid1") - 1, &HTTPPrint_mqid1 }, - { "mqname1", sizeof("mqname1") - 1, &HTTPPrint_mqname1 }, - { "mqpass1", sizeof("mqpass1") - 1, &HTTPPrint_mqpass1 }, - -#if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 - { "mqen2", sizeof("mqen2") - 1, &HTTPPrint_mqen2 }, - { "mqurl2", sizeof("mqurl2") - 1, &HTTPPrint_mqurl2 }, - { "mqport2", sizeof("mqport2") - 1, &HTTPPrint_mqport2 }, - { "mqid2", sizeof("mqid2") - 1, &HTTPPrint_mqid2 }, - { "mqsys2", sizeof("mqsys2") - 1, &HTTPPrint_mqsys2 }, - { "mqgrp2", sizeof("mqgrp2") - 1, &HTTPPrint_mqgrp2 }, - { "mqname2", sizeof("mqname2") - 1, &HTTPPrint_mqname2 }, - { "mqpass2", sizeof("mqpass2") - 1, &HTTPPrint_mqpass2 }, - -#endif -#endif - /*SNTP*/ - { "sntpen", sizeof("sntpen") - 1, &HTTPPrint_sntpen }, - { "tmsrv", sizeof("tmsrv") - 1, &HTTPPrint_tmsrv }, - { "tmsrv2", sizeof("tmsrv2") - 1, &HTTPPrint_tmsrv2 }, - { "tmsrv3", sizeof("tmsrv3") - 1, &HTTPPrint_tmsrv3 }, - - { "freeram", sizeof("freeram") - 1, &HTTPPrint_freeram }, - { "minram", sizeof("minram") - 1, &HTTPPrint_minram }, - { "mqtt1st", sizeof("mqtt1st") - 1, &HTTPPrint_mqtt1st }, - { "mqtt2st", sizeof("mqtt2st") - 1, &HTTPPrint_mqtt2st }, - - /*ERROR report*/ - { "status_fail", sizeof("status_fail") - 1, &HTTPPrint_status_fail }, - - { "hide_eth", sizeof("hide_eth") - 1, &HTTPPrint_hide_eth }, - { "hide_wifi", sizeof("hide_wifi") - 1, &HTTPPrint_hide_wifi }, - { "hide_lora", sizeof("hide_lora") - 1, &HTTPPrint_hide_lora }, - { "hide_gprs", sizeof("hide_gprs") - 1, &HTTPPrint_hide_gprs }, - { "hide_mqtt1", sizeof("hide_mqtt1") - 1, &HTTPPrint_hide_mqtt1 }, - { "hide_mqtt2", sizeof("hide_mqtt2") - 1, &HTTPPrint_hide_mqtt2 }, - - { "testvariable", sizeof("testvariable") - 1, &HTTPPrint_testvariable }, - -}; - -int HTTPPrint(httpd_req_t *req, char *buf, char *var) -{ - char VarData[MAX_DYNVAR_LENGTH]; - const char incPat[] = "inc:"; - const int incPatLen = sizeof(incPat) - 1; - if (!memcmp(var, incPat, incPatLen)) - { - const char rootFS[] = "/"; - char filename[32]; - filename[0] = 0x00; - var += incPatLen; - strcat(filename, rootFS); - strcat(filename, var); - espfs_file_t *file = espfs_fopen(fs, filename); - struct espfs_stat_t stat; - if (file) - { - espfs_fstat(file, &stat); - int readBytes = espfs_fread(file, buf, stat.size); - espfs_fclose(file); - return readBytes; - } - } - - bool fnd = false; - char *p2 = var + strlen(var) - 1; //last var symbol - int arg = 0; -//searching for tag in handles array - for (int i = 0; i < (sizeof(HANDLERS_ARRAY) / sizeof(HANDLERS_ARRAY[0])); ++i) - { - if (*p2 == ')') - { //found close brace - char *p1 = p2; - while ((*p1 != '(') && (p1 > var)) - --p1; - if (*p1 == '(') - { //found open brace - *p1 = 0x00; //trim variable to name part - ++p1; //to begin of argument - *p2 = 0x00; //set end of argument - arg = atoi(p1); - } - } - if (strcmp(var, HANDLERS_ARRAY[i].tag) == 0 - && HANDLERS_ARRAY[i].HandlerRoutine != NULL) - { - HANDLERS_ARRAY[i].HandlerRoutine(VarData, (void*) &arg); - fnd = true; - break; - } - } - if (!fnd) - { - if (HTTPPrintCust != NULL) - return HTTPPrintCust(req, buf, var, arg); - else - HTTPPrint_DEF(VarData, NULL); - - } - int dLen = strlen(VarData); - memcpy(buf, VarData, dLen); - return dLen; - -} - -void GenerateSystemSettingsJSONFile(void) -{ - char *buf = malloc(2048); - if (!buf) - return; - struct jWriteControl jwc; - jwOpen(&jwc, buf, 2048, JW_OBJECT, JW_PRETTY); - for (int i = 0; i < (sizeof(HANDLERS_ARRAY) / sizeof(HANDLERS_ARRAY[0])); ++i) - { - char val[18]; - val[0] = 0x00; - strcat(val, "~"); - strcat(val, HANDLERS_ARRAY[i].tag); - strcat(val, "~"); - jwObj_string(&jwc, (char*) HANDLERS_ARRAY[i].tag, val); - } - jwEnd(&jwc); - jwClose(&jwc); - ESP_LOGI(TAG, "%s", buf); - free(buf); -} - diff --git a/src/HTTPServer.c b/src/HTTPServer.c index 659d800..92fa38b 100644 --- a/src/HTTPServer.c +++ b/src/HTTPServer.c @@ -29,12 +29,15 @@ extern espfs_fs_t *fs; const char GZIP_SIGN[] = { 0x1f, 0x8b, 0x08 }; static esp_err_t GETHandler(httpd_req_t *req); +static esp_err_t GETHandler2(httpd_req_t *req); static esp_err_t CheckAuth(httpd_req_t *req); struct file_server_data *server_data = NULL; httpd_handle_t server = NULL; static const char *TAG = "HTTPServer"; +const char url_api[] = "/api"; + //Pointer to external user defined rest api handler static int (*HTTPUserRestAPI)(char *url, char *req, int len, char *resp) = NULL; void regHTTPUserRestAPI(int (*api_handler)(char *url, char *req, int len, char *resp)) @@ -221,30 +224,11 @@ static esp_err_t POSTHandler(httpd_req_t *req) ((struct file_server_data*) req->user_ctx)->base_path, req->uri, sizeof(filepath)); + http_res = HTTP_IO_DONE; + if (!memcmp(filename, url_api, sizeof(url_api))) + http_res = HTTPPostSysAPI(req, buf); - http_res = HTTPPostApp(req, filename, buf); - - if (http_res == HTTP_IO_DONE) - return GETHandler(req); - - else if (http_res == HTTP_IO_REDIRECT) - { - httpd_resp_set_status(req, "307 Temporary Redirect"); - httpd_resp_set_hdr(req, "Location", filename); - httpd_resp_send(req, NULL, 0); // Response body can be empty -#if HTTP_SERVER_DEBUG_LEVEL > 0 - ESP_LOGI(TAG, "Redirect request from POST"); -#endif - return ESP_OK; - } - - else if (http_res == HTTP_IO_DONE_NOREFRESH) - { - httpd_resp_set_status(req, HTTPD_204); - httpd_resp_send(req, NULL, 0); // Response body can be empty - return ESP_OK; - } - else if (http_res == HTTP_IO_DONE_API) + if (http_res == HTTP_IO_DONE_API) { httpd_resp_send(req, NULL, 0); // Response body can be empty return ESP_OK; @@ -260,6 +244,103 @@ static esp_err_t POSTHandler(httpd_req_t *req) return ESP_OK; } +static esp_err_t GETHandler2(httpd_req_t *req) +{ +#if HTTP_SERVER_DEBUG_LEVEL > 0 + ESP_LOGI(TAG, "GET request handle"); +#endif + + //Route to file server GET handler + if (memmem(req->uri, strlen(req->uri), "/storage/", sizeof("/storage/") - 1)) + return download_get_handler(req); + + char filepath[FILE_PATH_MAX]; + espfs_file_t *file; + struct espfs_stat_t stat; + const char *filename = get_path_from_uri(filepath, + ((struct file_server_data*) req->user_ctx)->base_path, + req->uri, + sizeof(filepath)); + if (!filename) + { + ESP_LOGE(TAG, "Filename is too long"); + /* Respond with 500 Internal Server Error */ + httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, + "Filename too long"); + return ESP_FAIL; + } + + /* Redirect request to /index.html */ + if (filename[strlen(filename) - 1] == '/') + { + httpd_resp_set_status(req, "307 Temporary Redirect"); + httpd_resp_set_hdr(req, "Location", "/index.html"); + httpd_resp_send(req, NULL, 0); // Response body can be empty +#if HTTP_SERVER_DEBUG_LEVEL > 0 + ESP_LOGI(TAG, "Redirect request to /index.html"); +#endif + return ESP_OK; + } + +//check auth for all files + if (CheckAuth(req) != ESP_OK) + { + return ESP_FAIL; + } +//open file + file = espfs_fopen(fs, filepath); + if (!file) + { + httpd_resp_send_err(req, HTTPD_404_NOT_FOUND, "File not found"); + return ESP_FAIL; + } +//get file info + espfs_stat(fs, filepath, &stat); + +#if HTTP_SERVER_DEBUG_LEVEL > 0 + ESP_LOGI(TAG, "Sending file : %s (%d bytes)...", filename, + stat.size); +#endif + + set_content_type_from_file(req, filename); + httpd_resp_set_hdr(req, "Cache-Control", "max-age=600"); + httpd_resp_set_hdr(req, "Content-Encoding", "gzip"); + httpd_resp_set_hdr(req, "Connection", "close"); + + /* Retrieve the pointer to scratch buffer for temporary storage */ + char *chunk = ((struct file_server_data*) req->user_ctx)->scratch; + size_t chunksize; + do + { + /* Read file in chunks into the scratch buffer */ + chunksize = espfs_fread(file, chunk, SCRATCH_BUFSIZE); + if (chunksize > 0) + { + /* Send the buffer contents as HTTP response chunk */ + if (httpd_resp_send_chunk(req, chunk, chunksize) != ESP_OK) + { + espfs_fclose(file); + ESP_LOGE(TAG, "File sending failed!"); + /* Abort sending file */ + httpd_resp_sendstr_chunk(req, NULL); + /* Respond with 500 Internal Server Error */ + httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "Failed to send file"); + return ESP_FAIL; + } + } + /* Keep looping till the whole file is sent */ + } + while (chunksize != 0); + /* Close file after sending complete */ + espfs_fclose(file); + /* Respond with an empty chunk to signal HTTP response completion */ +#ifdef CONFIG_EXAMPLE_HTTPD_CONN_CLOSE_HEADER + httpd_resp_set_hdr(req, "Connection", "close"); +#endif + httpd_resp_send_chunk(req, NULL, 0); + return ESP_OK; +} + static esp_err_t GETHandler(httpd_req_t *req) { #if HTTP_SERVER_DEBUG_LEVEL > 0 @@ -442,7 +523,7 @@ static httpd_handle_t start_webserver(void) /* URI handler for GET request */ httpd_uri_t get = { .uri = "/*", .method = HTTP_GET, - .handler = GETHandler, + .handler = GETHandler2, .user_ctx = server_data // Pass server data as context }; httpd_register_uri_handler(server, &get);