فهرست منبع

ssh: close connections on port/enable status change

Sergey Alirzaev 5 سال پیش
والد
کامیت
d198e7aea3
5فایلهای تغییر یافته به همراه29 افزوده شده و 6 حذف شده
  1. 9 0
      modules/SSH_Server/server.c
  2. 1 0
      modules/SSH_Server/server.h
  3. 0 2
      modules/cli/cli.c
  4. 5 0
      modules/cli/cli.h
  5. 14 4
      modules/parameters.c

+ 9 - 0
modules/SSH_Server/server.c

@@ -404,3 +404,12 @@ void ssh_server_init(void)
 {
     xTaskCreate(ssh_server, ( char * ) "ssh_server", 24*configMINIMAL_STACK_SIZE + EXAMPLE_BUFFER_SZ, NULL, tskIDLE_PRIORITY + 1, NULL);
 }
+
+void ssh_server_restart(void)
+{
+    for (unsigned i = 0; i < array_len(cli_states); ++i) {
+        if (cli_states[i].state != STATE_UNUSED && cli_states[i].send == cli_send) {
+            wolfSSH_shutdown(cli_states[i].num_connect);
+        }
+    }
+}

+ 1 - 0
modules/SSH_Server/server.h

@@ -26,6 +26,7 @@
 
 
 void ssh_server_init(void);
+void ssh_server_restart(void);
 
 
 #endif /* _WOLFSSH_SERVER_H_ */

+ 0 - 2
modules/cli/cli.c

@@ -18,8 +18,6 @@
 
 #define REPEAT_SENSOR_INFO_TIME		configTICK_RATE_HZ*5*1
 
-#define array_len(x) (sizeof(x)/sizeof(x[0]))
-
 /**
   * @brief  Общая структура настроек
   */

+ 5 - 0
modules/cli/cli.h

@@ -11,6 +11,8 @@
 #define cmdMAX_INPUT_SIZE			144
 #define MAX_SESSIONS	2
 
+#define array_len(x) (sizeof(x)/sizeof(x[0]))
+
 typedef enum{
 	CLI_AUTH = 0,
 	CLI_AUTH_PASSW,
@@ -54,11 +56,14 @@ typedef struct {
 	intptr_t num_connect;	// fd
 } cli_state_t;
 
+extern cli_state_t cli_states[MAX_SESSIONS];
+
 void cli_init(void);
 void cli_getchar(cli_state_t *s, char incoming_char);
 cli_state_t *alloc_state(void);
 void free_state(cli_state_t *state);
 void cli_hello(cli_state_t *cli_state);
 user_level_t cli_auth_user(char *user, char *password);
+void cli_close_connections(void);
 
 #endif

+ 14 - 4
modules/parameters.c

@@ -1628,6 +1628,7 @@ void SetTelnetEnableStateStr(char *str)
 }
 
 #if defined HARDWARE_BT6709
+#include "server.h"
 // ************************************************************************** //
 //                             Параметры SSH
 /**
@@ -1635,7 +1636,12 @@ void SetTelnetEnableStateStr(char *str)
   */
 void SetSSHPortStr(char *str)
 {
-    sSettings.sSSH.port = atoi(str);
+    uint16_t new_port = atoi(str);
+    bool port_changed = new_port != sSettings.sSSH.port;
+    sSettings.sSSH.port = new_port;
+    if (port_changed) {
+        ssh_server_restart();
+    }
 }
 
 /**
@@ -1644,15 +1650,19 @@ void SetSSHPortStr(char *str)
 void SetSSHEnableStateStr(char *str)
 {
     if (strncmp(str, "on", 2) == 0) {
+        bool old_state = sSettings.sSSH.SSHEnable;
         sSettings.sSSH.SSHEnable = 1;
+        if (old_state != true) {
+            ssh_server_init();
+        }
     } else {
         sSettings.sSSH.SSHEnable = 0;
+        ssh_server_restart();
     }
-
 }
 #endif // HARDWARE_BT6709
-#endif
-#endif
+#endif // !BT6702_SERVICE
+#endif // HARDWARE_BT6707 || HARDWARE_BT6709
 // ************************************************************************** //
 //                             Параметры даты и времени