|  | @@ -25,6 +25,7 @@
 | 
	
		
			
				|  |  |  #include <stdbool.h>
 | 
	
		
			
				|  |  |  #include "FreeRTOS.h"
 | 
	
		
			
				|  |  |  #include "task.h"
 | 
	
		
			
				|  |  | +#include "semphr.h"
 | 
	
		
			
				|  |  |  #include "wolfssh_test.h"
 | 
	
		
			
				|  |  |  #include "cli.h"
 | 
	
		
			
				|  |  |  #include "CLI_Commands.h"
 | 
	
	
		
			
				|  | @@ -55,9 +56,9 @@ typedef struct {
 | 
	
		
			
				|  |  |      WOLFSSH* ssh;
 | 
	
		
			
				|  |  |      SOCKET_T fd;
 | 
	
		
			
				|  |  |      word32 id;
 | 
	
		
			
				|  |  | -    char nonBlock;
 | 
	
		
			
				|  |  |  } thread_ctx_t;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +static const bool nonBlock = true;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifndef EXAMPLE_HIGHWATER_MARK
 | 
	
		
			
				|  |  |      #define EXAMPLE_HIGHWATER_MARK 0x3FFF8000 /* 1GB - 32kB */
 | 
	
	
		
			
				|  | @@ -138,7 +139,7 @@ static void *server_worker(void* vArgs)
 | 
	
		
			
				|  |  |      user_level_t user_id;
 | 
	
		
			
				|  |  |      wolfSSH_SetUserAuthCtx(threadCtx->ssh, &user_id);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (!threadCtx->nonBlock)
 | 
	
		
			
				|  |  | +    if (!nonBlock)
 | 
	
		
			
				|  |  |          ret = wolfSSH_accept(threadCtx->ssh);
 | 
	
		
			
				|  |  |      else
 | 
	
		
			
				|  |  |          ret = NonBlockSSH_accept(threadCtx->ssh);
 | 
	
	
		
			
				|  | @@ -159,11 +160,29 @@ static void *server_worker(void* vArgs)
 | 
	
		
			
				|  |  |                  uint8_t buf[EXAMPLE_BUFFER_SZ];
 | 
	
		
			
				|  |  |                  int rxSz = 0;
 | 
	
		
			
				|  |  |                  do {
 | 
	
		
			
				|  |  | +                    if (nonBlock) {
 | 
	
		
			
				|  |  | +                        SOCKET_T sockfd;
 | 
	
		
			
				|  |  | +                        int select_ret = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        sockfd = (SOCKET_T)wolfSSH_get_fd(threadCtx->ssh);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        select_ret = tcp_select(sockfd, 1);
 | 
	
		
			
				|  |  | +                        if (!sSettings.sSSH.SSHEnable ||
 | 
	
		
			
				|  |  | +                            (select_ret != WS_SELECT_RECV_READY &&
 | 
	
		
			
				|  |  | +                            select_ret != WS_SELECT_ERROR_READY &&
 | 
	
		
			
				|  |  | +                            select_ret != WS_SELECT_TIMEOUT)) {
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  |                      rxSz = wolfSSH_stream_read(threadCtx->ssh, buf, sizeof(buf));
 | 
	
		
			
				|  |  |                      if (rxSz <= 0) {
 | 
	
		
			
				|  |  |                          rxSz = wolfSSH_get_error(threadCtx->ssh);
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | -                } while (rxSz == WS_WANT_READ || rxSz == WS_WANT_WRITE);
 | 
	
		
			
				|  |  | +                } while ((rxSz == WS_WANT_READ || rxSz == WS_WANT_WRITE) && sSettings.sSSH.SSHEnable);
 | 
	
		
			
				|  |  | +                if (!sSettings.sSSH.SSHEnable) {
 | 
	
		
			
				|  |  | +                    stop = true;
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  if (rxSz > 0) {
 | 
	
		
			
				|  |  |                      cli_getchar(cli_state, buf[0], true);    // TODO handle rxSz > 1
 | 
	
	
		
			
				|  | @@ -300,7 +319,6 @@ static void ssh_server(void *arg)
 | 
	
		
			
				|  |  |      word32 threadCount = 0;
 | 
	
		
			
				|  |  |      const char multipleConnections = 0;
 | 
	
		
			
				|  |  |      char useEcc = 1;
 | 
	
		
			
				|  |  | -    char nonBlock = 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (wolfSSH_Init() != WS_SUCCESS) {
 | 
	
		
			
				|  |  |          printf("Couldn't initialize wolfSSH.\n");
 | 
	
	
		
			
				|  | @@ -376,7 +394,6 @@ static void ssh_server(void *arg)
 | 
	
		
			
				|  |  |              threadCtx->ssh = ssh;
 | 
	
		
			
				|  |  |              threadCtx->fd = clientFd;
 | 
	
		
			
				|  |  |              threadCtx->id = threadCount++;
 | 
	
		
			
				|  |  | -            threadCtx->nonBlock = nonBlock;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifndef SINGLE_THREADED
 | 
	
		
			
				|  |  |              ThreadStart(server_worker, threadCtx, &thread);
 | 
	
	
		
			
				|  | @@ -413,9 +430,4 @@ void ssh_server_init(void)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  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);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  |  }
 |