diff --git a/include/HTTPServer.h b/include/HTTPServer.h index f4432e5..cf1857f 100644 --- a/include/HTTPServer.h +++ b/include/HTTPServer.h @@ -1,74 +1,74 @@ - /*! 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 HTTPServer.h - * \version 1.0 - * \date 2022-08-14 - * \author Bogdan Pilyugin - * \brief - * \details - * \copyright Apache License, Version 2.0 - */ - -#ifndef COMPONENTS_WEB_GUI_APPLICATION_INCLUDE_HTTPSERVER_H_ -#define COMPONENTS_WEB_GUI_APPLICATION_INCLUDE_HTTPSERVER_H_ - -#include "esp_err.h" -#include "esp_log.h" -#include "esp_vfs.h" -#include - -#include -#include -#include - -#include "Helpers.h" -#include "SystemConfiguration.h" -#include "romfs.h" -#include "NetTransport.h" - -#include -#include "esp_netif.h" -#include "esp_eth.h" -#include "mbedtls/base64.h" - -#define MAX_DYNVAR_LENGTH 256 -#define MAX_INCFILE_LENGTH 1024 - -#define HTTP_SERVER_DEBUG_LEVEL 0 - -typedef enum -{ - HTTP_IO_DONE = 0u, // Finished with procedure - HTTP_IO_NEED_DATA, // More data needed to continue, call again later - HTTP_IO_WAITING, // Waiting for asynchronous process to complete, call again later - HTTP_IO_REDIRECT, - HTTP_IO_DONE_NOREFRESH -} HTTP_IO_RESULT; - -typedef struct -{ - const char tag[16]; - const int taglen; - void (*HandlerRoutine)(char *VarData, void *arg); -} dyn_var_handler_t; - -void regHTTPPrintCustom(int (*print_handler)(httpd_req_t *req, char *buf, char *var)); -void regAfterPostHandlerCustom(HTTP_IO_RESULT (*post_handler)(httpd_req_t *req, const char *filename, char *PostData)); - -esp_err_t start_file_server(void); -HTTP_IO_RESULT HTTPPostApp(httpd_req_t *req, const char *filename, char *PostData); -int HTTPPrint(httpd_req_t *req, char* buf, char* var); - -#endif /* COMPONENTS_WEB_GUI_APPLICATION_INCLUDE_HTTPSERVER_H_ */ + /*! 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 HTTPServer.h + * \version 1.0 + * \date 2022-08-14 + * \author Bogdan Pilyugin + * \brief + * \details + * \copyright Apache License, Version 2.0 + */ + +#ifndef COMPONENTS_WEB_GUI_APPLICATION_INCLUDE_HTTPSERVER_H_ +#define COMPONENTS_WEB_GUI_APPLICATION_INCLUDE_HTTPSERVER_H_ + +#include "esp_err.h" +#include "esp_log.h" +#include "esp_vfs.h" +#include + +#include +#include +#include + +#include "Helpers.h" +#include "SystemConfiguration.h" +#include "romfs.h" +#include "NetTransport.h" + +#include +#include "esp_netif.h" +#include "esp_eth.h" +#include "mbedtls/base64.h" + +#define MAX_DYNVAR_LENGTH 256 +#define MAX_INCFILE_LENGTH 1024 + +#define HTTP_SERVER_DEBUG_LEVEL 0 + +typedef enum +{ + HTTP_IO_DONE = 0u, // Finished with procedure + HTTP_IO_NEED_DATA, // More data needed to continue, call again later + HTTP_IO_WAITING, // Waiting for asynchronous process to complete, call again later + HTTP_IO_REDIRECT, + HTTP_IO_DONE_NOREFRESH +} HTTP_IO_RESULT; + +typedef struct +{ + const char tag[16]; + const int taglen; + void (*HandlerRoutine)(char *VarData, void *arg); +} dyn_var_handler_t; + +void regHTTPPrintCustom(int (*print_handler)(httpd_req_t *req, char *buf, char *var, int arg)); +void regAfterPostHandlerCustom(HTTP_IO_RESULT (*post_handler)(httpd_req_t *req, const char *filename, char *PostData)); + +esp_err_t start_file_server(void); +HTTP_IO_RESULT HTTPPostApp(httpd_req_t *req, const char *filename, char *PostData); +int HTTPPrint(httpd_req_t *req, char* buf, char* var); + +#endif /* COMPONENTS_WEB_GUI_APPLICATION_INCLUDE_HTTPSERVER_H_ */ diff --git a/src/HTTPPostSystem.c b/src/HTTPPostSystem.c index 2016887..bc3a195 100644 --- a/src/HTTPPostSystem.c +++ b/src/HTTPPostSystem.c @@ -1,463 +1,463 @@ -/*! 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" - -static const char *TAG = "HTTPServerPost"; - -#define FILE_PATH_MAX (ESP_VFS_PATH_MAX + CONFIG_SPIFFS_OBJ_NAME_LEN) - -const char url_adapters[] = "adapters.html"; -const char url_services[] = "services.html"; -const char url_system[] = "system.html"; -const char url_reboot[] = "reboot.html"; - -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; - break; - } - return res; -} - -static HTTP_IO_RESULT AfterPostHandler(httpd_req_t *req, const char *filename, char *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) - AfterPostHandlerCust(req, filename, PostData); - - return HTTP_IO_DONE; -} - -static HTTP_IO_RESULT HTTPPostAdaptersSettings(httpd_req_t *req, char *PostData) -{ - char tmp[32]; -#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, "dhcp", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - TempIsETHDHCPEnabled = true; - } - - if (httpd_query_key_value(PostData, "ipa", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.IPAddr); - if (httpd_query_key_value(PostData, "mas", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.Mask); - if (httpd_query_key_value(PostData, "gte", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.Gateway); - if (httpd_query_key_value(PostData, "dns1", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.DNSAddr1); - if (httpd_query_key_value(PostData, "dns2", tmp, 15) == ESP_OK) - esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.DNSAddr2); - if (httpd_query_key_value(PostData, "dns3", 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, "netm", tmp, sizeof(tmp)) == ESP_OK) - { - if (!strcmp((const char*) tmp, (const char*) "1")) - GetSysConf()->wifiSettings.Flags1.bIsAP = true; - else if (!strcmp((const char*) tmp, (const char*) "2")) - GetSysConf()->wifiSettings.Flags1.bIsAP = false; - } - /*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 (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 - } - - 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[33]; -#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) - 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) - 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)); - - 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, 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; - } - } -#endif - return HTTP_IO_DONE; -} - -static HTTP_IO_RESULT HTTPPostSystemSettings(httpd_req_t *req, char *PostData) -{ - char tmp[64]; - bool TempIsOTAEnabled = 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, "otaurl", tmp, sizeof(tmp)) == ESP_OK) - { - UnencodeURL(tmp); - strcpy(GetSysConf()->OTAURL, tmp); - } - - if (httpd_query_key_value(PostData, "upd", tmp, sizeof(tmp)) == ESP_OK) - { - - if (!strcmp(tmp, (const char*) "prs")) - { - //StartOTA(); - } - - } - 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; - } - - 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 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; -} - +/*! 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" + +static const char *TAG = "HTTPServerPost"; + +#define FILE_PATH_MAX (ESP_VFS_PATH_MAX + CONFIG_SPIFFS_OBJ_NAME_LEN) + +const char url_adapters[] = "adapters.html"; +const char url_services[] = "services.html"; +const char url_system[] = "system.html"; +const char url_reboot[] = "reboot.html"; + +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; + break; + } + return res; +} + +static HTTP_IO_RESULT AfterPostHandler(httpd_req_t *req, const char *filename, char *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) + AfterPostHandlerCust(req, filename, PostData); + + return HTTP_IO_DONE; +} + +static HTTP_IO_RESULT HTTPPostAdaptersSettings(httpd_req_t *req, char *PostData) +{ + char tmp[32]; +#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, "dhcp", tmp, sizeof(tmp)) == ESP_OK) + { + if (!strcmp((const char*) tmp, (const char*) "1")) + TempIsETHDHCPEnabled = true; + } + + if (httpd_query_key_value(PostData, "ipa", tmp, 15) == ESP_OK) + esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.IPAddr); + if (httpd_query_key_value(PostData, "mas", tmp, 15) == ESP_OK) + esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.Mask); + if (httpd_query_key_value(PostData, "gte", tmp, 15) == ESP_OK) + esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.Gateway); + if (httpd_query_key_value(PostData, "dns1", tmp, 15) == ESP_OK) + esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.DNSAddr1); + if (httpd_query_key_value(PostData, "dns2", tmp, 15) == ESP_OK) + esp_netif_str_to_ip4(tmp, (esp_ip4_addr_t*) &GetSysConf()->ethSettings.DNSAddr2); + if (httpd_query_key_value(PostData, "dns3", 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, "netm", tmp, sizeof(tmp)) == ESP_OK) + { + if (!strcmp((const char*) tmp, (const char*) "1")) + GetSysConf()->wifiSettings.Flags1.bIsAP = true; + else if (!strcmp((const char*) tmp, (const char*) "2")) + GetSysConf()->wifiSettings.Flags1.bIsAP = false; + } + /*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 (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 + } + + 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[33]; +#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) + 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) + 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)); + + 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[64]; + bool TempIsOTAEnabled = 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, "otaurl", tmp, sizeof(tmp)) == ESP_OK) + { + UnencodeURL(tmp); + strcpy(GetSysConf()->OTAURL, tmp); + } + + if (httpd_query_key_value(PostData, "upd", tmp, sizeof(tmp)) == ESP_OK) + { + + if (!strcmp(tmp, (const char*) "prs")) + { + //StartOTA(); + } + + } + 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; + } + + 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 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 index 6c28750..4495759 100644 --- a/src/HTTPPrintSystem.c +++ b/src/HTTPPrintSystem.c @@ -1,766 +1,766 @@ -/*! 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" - -static const char *TAG = "HTTPServerPrint"; - -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); - -void regHTTPPrintCustom(int (*print_handler)(httpd_req_t *req, char *buf, char *var)) -{ - 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, " "); -} - -static void HTTPPrint_time(char *VarData, void *arg) -{ - time_t now; - time(&now); - snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", (uint32_t) now); -} -static void HTTPPrint_uptime(char *VarData, void *arg) -{ - snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", 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_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_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.Flags1.bIsAP) - 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_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(&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(&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(&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(&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()); -} -#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(&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(&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(&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 - -void HTTPPrint_gsmstat(char *VarData, void *arg) -{ - PrintInterfaceState(VarData, arg, GetPPPNetifAdapter()); -} - -#if CONFIG_WEBGUIAPP_GPRS_ENABLE -/*GSM MODEM*/ -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 - -#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); -} - -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_ifc_gprs(char *VarData, void *arg) -{ -#if CONFIG_WEBGUIAPP_GPRS_ENABLE - snprintf(VarData, MAX_DYNVAR_LENGTH, "1"); -#else - snprintf(VarData, MAX_DYNVAR_LENGTH, "0"); -#endif -} - -static void HTTPPrint_ifc_mq2(char *VarData, void *arg) -{ -#if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 - snprintf(VarData, MAX_DYNVAR_LENGTH, "1"); -#else - snprintf(VarData, MAX_DYNVAR_LENGTH, "0"); -#endif -} - - -//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[] = { - /*Ststem settings*/ - { "dname", sizeof("dname") - 1, &HTTPPrint_dname }, - { "login", sizeof("login") - 1, &HTTPPrint_login }, - { "pass", sizeof("pass") - 1, &HTTPPrint_pass }, - { "ota", sizeof("ota") - 1, &HTTPPrint_ota }, - { "fver", sizeof("fver") - 1, &HTTPPrint_fver }, - { "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 }, - { "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 }, - #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 - - { "gsmstat", sizeof("gsmstat") - 1, &HTTPPrint_gsmstat }, - -#if CONFIG_WEBGUIAPP_GPRS_ENABLE - /*GSM modem*/ - { "gsmen", sizeof("gsmen") - 1, &HTTPPrint_gsmen }, - - { "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 - -#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 }, - - { "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 }, - - { "ifc_gprs", sizeof("ifc_gprs") - 1, &HTTPPrint_ifc_gprs }, - { "ifc_mq2", sizeof("ifc_mq2") - 1, &HTTPPrint_ifc_mq2 }, - -}; - -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); - else - HTTPPrint_DEF(VarData, NULL); - -} -int dLen = strlen(VarData); -memcpy(buf, VarData, dLen); -return dLen; - -} +/*! 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" + +static const char *TAG = "HTTPServerPrint"; + +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, " "); +} + +static void HTTPPrint_time(char *VarData, void *arg) +{ + time_t now; + time(&now); + snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", (uint32_t) now); +} +static void HTTPPrint_uptime(char *VarData, void *arg) +{ + snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", 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_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_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.Flags1.bIsAP) + 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_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(&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(&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(&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(&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()); +} +#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(&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(&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(&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 + +void HTTPPrint_gsmstat(char *VarData, void *arg) +{ + PrintInterfaceState(VarData, arg, GetPPPNetifAdapter()); +} + +#if CONFIG_WEBGUIAPP_GPRS_ENABLE +/*GSM MODEM*/ +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 + +#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); +} + +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_ifc_gprs(char *VarData, void *arg) +{ +#if CONFIG_WEBGUIAPP_GPRS_ENABLE + snprintf(VarData, MAX_DYNVAR_LENGTH, "1"); +#else + snprintf(VarData, MAX_DYNVAR_LENGTH, "0"); +#endif +} + +static void HTTPPrint_ifc_mq2(char *VarData, void *arg) +{ +#if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2 + snprintf(VarData, MAX_DYNVAR_LENGTH, "1"); +#else + snprintf(VarData, MAX_DYNVAR_LENGTH, "0"); +#endif +} + + +//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[] = { + /*Ststem settings*/ + { "dname", sizeof("dname") - 1, &HTTPPrint_dname }, + { "login", sizeof("login") - 1, &HTTPPrint_login }, + { "pass", sizeof("pass") - 1, &HTTPPrint_pass }, + { "ota", sizeof("ota") - 1, &HTTPPrint_ota }, + { "fver", sizeof("fver") - 1, &HTTPPrint_fver }, + { "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 }, + { "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 }, + #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 + + { "gsmstat", sizeof("gsmstat") - 1, &HTTPPrint_gsmstat }, + +#if CONFIG_WEBGUIAPP_GPRS_ENABLE + /*GSM modem*/ + { "gsmen", sizeof("gsmen") - 1, &HTTPPrint_gsmen }, + + { "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 + +#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 }, + + { "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 }, + + { "ifc_gprs", sizeof("ifc_gprs") - 1, &HTTPPrint_ifc_gprs }, + { "ifc_mq2", sizeof("ifc_mq2") - 1, &HTTPPrint_ifc_mq2 }, + +}; + +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; + +} diff --git a/src/SystemConfiguration.c b/src/SystemConfiguration.c index 029e9be..33f3359 100644 --- a/src/SystemConfiguration.c +++ b/src/SystemConfiguration.c @@ -183,9 +183,6 @@ static void InitSysIO(void) static void InitSysSPI(void) { #ifdef CONFIG_WEBGUIAPP_SPI_ENABLE - - - //spi_device_init_custom(); spi_bus_config_t buscfg = { .miso_io_num = CONFIG_SPI_MISO_GPIO, .mosi_io_num = CONFIG_SPI_MOSI_GPIO,