TNT/include/ssh_server.h
m1ngsama c0cb22a85f Add SSH read timeout and PTY handling improvements
Fixes thread accumulation and blocking issues:

1. SSH read timeouts
   - Use ssh_channel_read_timeout() with 30s timeout
   - Handle SSH_AGAIN, SSH_ERROR return codes properly
   - 60s timeout for username input
   - Prevents threads blocking forever on dead connections

2. Improved PTY request handling
   - Exit loop after PTY + SHELL received
   - Don't loop on WINDOW_CHANGE during init
   - Clear termination conditions

3. Better UTF-8 validation
   - Check multi-byte read completeness
   - Skip incomplete sequences gracefully

Prevents "zombie threads" and eliminates need to restart
after extended operation.
2025-12-01 14:00:00 +08:00

45 lines
1.2 KiB
C

#ifndef SSH_SERVER_H
#define SSH_SERVER_H
#include "common.h"
#include "chat_room.h"
#include <libssh/libssh.h>
#include <libssh/server.h>
/* Client connection structure */
typedef struct client {
int fd; /* Socket file descriptor (not used with SSH) */
ssh_session session; /* SSH session */
ssh_channel channel; /* SSH channel */
char username[MAX_USERNAME_LEN];
int width;
int height;
client_mode_t mode;
help_lang_t help_lang;
int scroll_pos;
int help_scroll_pos;
bool show_help;
char command_input[256];
char command_output[2048];
pthread_t thread;
bool connected;
int ref_count; /* Reference count for safe cleanup */
pthread_mutex_t ref_lock; /* Lock for ref_count */
} client_t;
/* Initialize SSH server */
int ssh_server_init(int port);
/* Start SSH server (blocking) */
int ssh_server_start(int listen_fd);
/* Handle client session */
void* client_handle_session(void *arg);
/* Send data to client */
int client_send(client_t *client, const char *data, size_t len);
/* Send formatted string to client */
int client_printf(client_t *client, const char *fmt, ...);
#endif /* SSH_SERVER_H */