Преглед изворни кода

BT6706: fix network settings apply telnet server
add control symbols (snmp, info) telnet server

balbekova пре 7 година
родитељ
комит
0c5b85c39f
1 измењених фајлова са 127 додато и 42 уклоњено
  1. 127 42
      modules/Telnet_Server/CLI_Commands.c

+ 127 - 42
modules/Telnet_Server/CLI_Commands.c

@@ -36,6 +36,8 @@
 #include "CLI_Commands.h"
 #include "CLI_Parameters.h"
 #include "telnet_server.h"
+#include "netconf.h"
+#include "control_symbol.h"
 
 
 #define in_range_digit(c, lo, up)  	((uint8_t)c >= lo && (uint8_t)c <= up)
@@ -289,7 +291,7 @@ static const CLI_Command_Definition_t prvHistoryCommandDefinition =
 	( const int8_t * const ) "history", /* The command string to type. */
 	( const int8_t * const ) "\thistory show EVENTS|UPS <num_page>:	вывод журнала\r\n",
 	prvTaskHistoryCommand, /* The function to run. */
-	2 /* Two parameters are expected, which can take any value. */
+	3 /* Two parameters are expected, which can take any value. */
 };
 
 /* Structure that defines the "sensor info" command line command.   This
@@ -306,8 +308,8 @@ static const CLI_Command_Definition_t prvSensorCommandDefinition =
 generates a table that shows how much run time each task has */
 static const CLI_Command_Definition_t prvUploadCommandDefinition =
 {
-	( const int8_t * const ) "firmware dowmload http", /* The command string to type. */
-	( const int8_t * const ) "\tfirmware dowmload http: переход в режим обновления через Web-сервер\r\n",
+	( const int8_t * const ) "firmware download http", /* The command string to type. */
+	( const int8_t * const ) "\tfirmware download http: переход в режим обновления через Web-сервер\r\n",
 	prvTaskUploadCommand, /* The function to run. */
 	2 /* No parameters are expected. */
 };
@@ -446,28 +448,37 @@ static portBASE_TYPE prvTaskInfoCommand( int8_t *pcWriteBuffer, size_t xWriteBuf
 		if(xParameterStringLength > (int32_t)sizeof(str))
 			xParameterStringLength = sizeof(str) - 1;
 		strncat(str, ( const char * ) pcParameterString, strlen(( const char * ) pcParameterString));
-		switch(i){
-		case INFO_ADDRESS:
-			if(telnet_code_auth == ADMIN)
-				SetLocation(str);
-			else
-				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
-			break;
-		case INFO_OWNER:
-			if(telnet_code_auth == ADMIN)
-				SetOwner(str);
-			else
-				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
-			break;
-		case INFO_COMMENTS:
-			if(telnet_code_auth == ADMIN)
-				SetComment(str);
-			else
-				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
-			break;
-		default:
+		if(control_string_en_digit(str, strlen(str))){
+			switch(i){
+			case INFO_ADDRESS:
+				if(telnet_code_auth == ADMIN)
+					SetLocation(str);
+				else
+					strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+				break;
+			case INFO_OWNER:
+				if(telnet_code_auth == ADMIN)
+					SetOwner(str);
+				else
+					strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+				break;
+			case INFO_COMMENTS:
+				if(telnet_code_auth == ADMIN)
+					SetComment(str);
+				else
+					strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcPermissionDenied, strlen( ( char * ) pcPermissionDenied ) );
+				break;
+			default:
+				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+				break;
+			}
+			if(i >= INFO_ADDRESS && i <= INFO_COMMENTS){
+				SETTINGS_Save();
+				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+			}
+		}
+		else{
 			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
-			break;
 		}
 		xReturn = pdFALSE;
 	}
@@ -610,8 +621,11 @@ static portBASE_TYPE prvTaskSystimeCommand( int8_t *pcWriteBuffer, size_t xWrite
 			else{
 				fail = 1;
 			}
-			if(!fail)
+			if(!fail){
 				SetDateStr(str);
+				SETTINGS_Save();
+				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+			}
 			else
 				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
 			break;
@@ -643,8 +657,11 @@ static portBASE_TYPE prvTaskSystimeCommand( int8_t *pcWriteBuffer, size_t xWrite
 			else{
 				fail = 1;
 			}
-			if(!fail)
+			if(!fail){
 				SetTimeStr(str);
+				SETTINGS_Save();
+				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+			}
 			else
 				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
 			break;
@@ -716,6 +733,8 @@ static portBASE_TYPE prvTaskNTPCommand( int8_t *pcWriteBuffer, size_t xWriteBuff
 			enable_old_sntp = sSettings.sSNTP.sntpEnable;
 			SetSntpStateStr("1");
 			if(sSettings.sSNTP.sntpEnable != enable_old_sntp){
+				SETTINGS_Save();
+				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
 				SNTP_Init();
 				//vTaskDelay(7000);
 				SNTP_Poll();
@@ -725,6 +744,8 @@ static portBASE_TYPE prvTaskNTPCommand( int8_t *pcWriteBuffer, size_t xWriteBuff
 			enable_old_sntp = sSettings.sSNTP.sntpEnable;
 			SetSntpStateStr("0");
 			if(sSettings.sSNTP.sntpEnable != enable_old_sntp){
+				SETTINGS_Save();
+				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
 				SNTP_Init();
 				//vTaskDelay(7000);
 				SNTP_Poll();
@@ -781,6 +802,8 @@ static portBASE_TYPE prvTaskNTPCommand( int8_t *pcWriteBuffer, size_t xWriteBuff
 					if(ipaddr_addr(str_temp) != IPADDR_NONE){
 						if(strncmp(str_temp, sSettings.sSNTP.ip, strlen(str_temp)) != 0){
 							SetSntpServerIpStr(str_temp);
+							SETTINGS_Save();
+							log_event_data(LOG_SETTING_SAVE, name_login_telnet);
 							SNTP_Init();
 							//vTaskDelay(7000);
 							SNTP_Poll();
@@ -807,8 +830,11 @@ static portBASE_TYPE prvTaskNTPCommand( int8_t *pcWriteBuffer, size_t xWriteBuff
 					}
 					if(!fail){
 						float value = atof(str_temp);
-						if(value > -12.0 && value < 12.0)
+						if(value > -12.0 && value < 12.0){
 							SetSntpTimeZoneStr(str_temp);
+							SETTINGS_Save();
+							log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+						}
 						else
 							strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
 					}
@@ -903,17 +929,23 @@ static portBASE_TYPE prvTaskNetworkCommand( int8_t *pcWriteBuffer, size_t xWrite
 	strncat(str, ( const char * ) pcParameterString, strlen(( const char * ) pcParameterString));
 	switch(i){
 	case ARG_NETWORK_DHCP:
-		if(strncmp(str, "ENA", 3) == 0)
+		if(strncmp(str, "ENA", 3) == 0){
 			SetUDPDhcpStateStr("True");
-		else if(strncmp(str, "DIS", 3) == 0)
+			strcpy( ( char * ) pcWriteBuffer, "\t\tСохраните конфигурацию сетевых настроек\r\n" );
+		}
+		else if(strncmp(str, "DIS", 3) == 0){
 			SetUDPDhcpStateStr("False");
+			strcpy( ( char * ) pcWriteBuffer, "\t\tСохраните конфигурацию сетевых настроек\r\n" );
+		}
 		else
 			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
 		break;
 	case ARG_NETWORK_IP:
 		if(xParameterStringLength <= 15){
-			if(ipaddr_addr(str) != IPADDR_NONE)
+			if(ipaddr_addr(str) != IPADDR_NONE){
 				SetIPStr(str);
+				strcpy( ( char * ) pcWriteBuffer, "\t\tСохраните конфигурацию сетевых настроек\r\n" );
+			}
 			else
 				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
 		}
@@ -923,8 +955,10 @@ static portBASE_TYPE prvTaskNetworkCommand( int8_t *pcWriteBuffer, size_t xWrite
 		break;
 	case ARG_NETWORK_GW:
 		if(xParameterStringLength <= 15){
-			if(ipaddr_addr(str) != IPADDR_NONE)
+			if(ipaddr_addr(str) != IPADDR_NONE){
 				SetGatewayStr(str);
+				strcpy( ( char * ) pcWriteBuffer, "\t\tСохраните конфигурацию сетевых настроек\r\n" );
+			}
 			else
 				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
 		}
@@ -934,8 +968,10 @@ static portBASE_TYPE prvTaskNetworkCommand( int8_t *pcWriteBuffer, size_t xWrite
 		break;
 	case ARG_NETWORK_MASK:
 		if(xParameterStringLength <= 15){
-			if(ipaddr_addr(str) != IPADDR_NONE)
+			if(ipaddr_addr(str) != IPADDR_NONE){
 				SetMaskStr(str);
+				strcpy( ( char * ) pcWriteBuffer, "\t\tСохраните конфигурацию сетевых настроек\r\n" );
+			}
 			else
 				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
 		}
@@ -1049,6 +1085,10 @@ static portBASE_TYPE prvTaskSNMPCommand( int8_t *pcWriteBuffer, size_t xWriteBuf
 								SetManagerIp5(str);
 								break;
 							}
+							if(temp > 0 && temp < 6){
+								SETTINGS_Save();
+								log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+							}
 						}
 						else{
 							strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
@@ -1083,13 +1123,23 @@ static portBASE_TYPE prvTaskSNMPCommand( int8_t *pcWriteBuffer, size_t xWriteBuf
 			if(xParameterStringLength > (int32_t)sizeof(temp_str))
 			xParameterStringLength = sizeof(temp_str) - 1;
 			strncat(temp_str, ( const char * ) pcParameterString, strlen(( const char * ) pcParameterString));
-			if(strncmp(str, "read", 4) == 0){
-				SetReadCommunity(temp_str);
+			if(control_string_en_digit(temp_str, strlen(temp_str))){
+				if(strncmp(str, "read", 4) == 0){
+					SetReadCommunity(temp_str);
+					SETTINGS_Save();
+					log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+				}
+				else if(strncmp(str, "write", 5) == 0){
+					SetWriteCommunity(temp_str);
+					SETTINGS_Save();
+					log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+				}
+				else
+					strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
 			}
-			else if(strncmp(str, "write", 5) == 0)
-				SetWriteCommunity(temp_str);
-			else
+			else{
 				strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			}
 		}
 		else{
 			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
@@ -1202,6 +1252,7 @@ static portBASE_TYPE prvTaskConfigCommand( int8_t *pcWriteBuffer, size_t xWriteB
 	char str[110];
 	uint8_t i;
 	static uint8_t config_menu = 0;
+	static start = 0;
 
 	const int8_t * const pcInfoTableHeader = ( int8_t * ) "\r\n*********Конфигурация Контроллера*********\r\n";
 
@@ -1272,9 +1323,29 @@ static portBASE_TYPE prvTaskConfigCommand( int8_t *pcWriteBuffer, size_t xWriteB
 			}
 			break;
 		case ARG_CONFIG_APPLY:
-			SETTINGS_Save();
-			log_event_data(LOG_SETTING_SAVE, name_login_telnet);
-			strcpy( ( char * ) pcWriteBuffer, "\t\tНастройки сохранены!\r\n");
+			if(!start){
+			  /* Если параметры WEB изменились выставляем флаг, сохраняем настройки и перезагружаемся */
+			  if (GetStateWebReinit() == true)
+			  {
+				  start = 1;
+#ifdef HARDWARE_BT6706
+			  telnet_act = true;
+#endif
+				SetWebReinitFlag(true);
+				HTTP_SaveSettings();
+				strcpy( ( char * ) pcWriteBuffer, "\t\tНастройки сохранены! Контроллер будет перезагружен\r\n\tПосле перезагрузки подтвердите изменения сетевых настроек\r\n");
+				return pdTRUE;
+
+			  }
+			}
+			else{
+#ifdef HARDWARE_BT6706
+			  telnet_act = true;
+#endif
+				start = 0;
+				vTaskDelay(1010);
+				Reboot();
+			}
 			break;
 		case ARG_CONFIG_CONFIRM:
 			telnet_act = true;
@@ -1355,6 +1426,20 @@ static portBASE_TYPE prvTaskHistoryCommand( int8_t *pcWriteBuffer, size_t xWrite
 		return pdFALSE;
 	}
 
+	if( strncmp( ( const char * ) pcParameterString, "show", xParameterStringLength ) != 0 ){
+		strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+			return pdFALSE;
+	}
+
+	xParameterNumber ++;
+	/* Obtain the parameter string. */
+	pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
+															(
+																pcCommandString,		/* The command string itself. */
+																xParameterNumber,		/* Return the next parameter. */
+																&xParameterStringLength	/* Store the parameter string length. */
+															);
+
 	for(i = 0; i < ARG_HISTORY_ALL; i ++){
 		if( strncmp( ( const char * ) pcParameterString, history_args_list[i], xParameterStringLength ) == 0 ){
 			break;
@@ -1627,7 +1712,7 @@ static portBASE_TYPE prvTaskUPSCommand( int8_t *pcWriteBuffer, size_t xWriteBuff
 			  res = ups_metac_service_pdu(ups_cancel_test);
 			  if(res == 1){
 				  log_event_data(LOG_TEST_UPS, "Администратор (Останов)");
-				  strcpy( ( char * ) pcWriteBuffer, "\t\ttТест остановлен!\r\n");
+				  strcpy( ( char * ) pcWriteBuffer, "\t\tТест остановлен!\r\n");
 			  }
 			  else{
 				  strcpy( ( char * ) pcWriteBuffer, "\t\tТест не удалось остановить!\r\n");
@@ -1691,7 +1776,7 @@ static portBASE_TYPE prvTaskUPSCommand( int8_t *pcWriteBuffer, size_t xWriteBuff
 			res = ups_metac_service_pdu(ups_shutdown);
 			if(res == 1){
 				log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
-				strcpy( ( char * ) pcWriteBuffer, "\t\t\tОтключение нагрузки ИБП!\r\n");
+				strcpy( ( char * ) pcWriteBuffer, "\t\tОтключение нагрузки ИБП!\r\n");
 			}
 			else{
 				strcpy( ( char * ) pcWriteBuffer, "\t\tОтключение нагрузки ИБП не удалось!\r\n");