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

[telnet server]add indication flag for IP option in LINEMODE

balbekova пре 6 година
родитељ
комит
7c89b18906
1 измењених фајлова са 11 додато и 2 уклоњено
  1. 11 2
      modules/Telnet_Server/telnet_server.c

+ 11 - 2
modules/Telnet_Server/telnet_server.c

@@ -168,6 +168,7 @@ typedef struct{
 	uint8_t num_connect;
 	bool active_conn;
 	bool flagWhiteListTelnet;
+	bool flag_telnet_ip_option;
 }telnetd_state_t;
 
 static portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, telnetd_state_t *s  );
@@ -254,7 +255,13 @@ static void telnetd_input(telnetd_state_t *s)
 				to be executed again. */
 				if( s->bufptr == 0 )
 				{
-					strcpy( s->buf, s->prev_cmd );
+					if(s->flag_telnet_ip_option ){
+						s->flag_telnet_ip_option = false;
+						return;
+					}
+					else{
+						strcpy( s->buf, s->prev_cmd );
+					}
 				}
 
 				/* Transmit a line separator, just to make the
@@ -394,8 +401,8 @@ void parseopt(telnetd_state_t *ts, uint8_t code, uint8_t option)
       break;
 
     case TELOPT_TIMING_MARK:
-    	memset(ts->prev_cmd, 0, cmdMAX_INPUT_SIZE );
     	xTimerStop(ts->RepeatSensorInfoTimer, 0);
+    	ts->flag_telnet_ip_option = true;
 		sendopt(ts, TELNET_WILL, TELOPT_TIMING_MARK);
 		sendopt(ts, TELNET_MARK, 0);
 		if(ts->telnetState != TELNET_CHANGE_PWD && ts->telnetState != TELNET_CHANGE_PWD_ACK)
@@ -850,6 +857,7 @@ void vBasicSocketsCommandInterpreterTask( void *pvParameters )
 						auth_tlnt_srvr_param[cur_cnt].active_conn = false;
 						auth_tlnt_srvr_param[cur_cnt].telnetState = TELNET_AUTH;
 						auth_tlnt_srvr_param[cur_cnt].telnet_code_auth = USER;
+						auth_tlnt_srvr_param[cur_cnt].flag_telnet_ip_option = false;
 						xTimerStop(auth_tlnt_srvr_param[cur_cnt].RepeatSensorInfoTimer, 0);
 						cnt_conn -= 1;
 						closesocket(i);
@@ -876,6 +884,7 @@ void telnet_server_init(void) {
 		auth_tlnt_srvr_param[i].active_conn = false;
 		auth_tlnt_srvr_param[i].telnetState = TELNET_AUTH;
 		auth_tlnt_srvr_param[i].telnet_code_auth = USER;
+		auth_tlnt_srvr_param[i].flag_telnet_ip_option = false;
 		auth_tlnt_srvr_param[i].RepeatSensorInfoTimer = xTimerCreate("SensorInfoTmr", REPEAT_SENSOR_INFO_TIME, pdFALSE, ( void * ) i, SensorInfoTimerCallback);
 	}
 	vRegisterCLICommands();