1 #include <stdbool.h> 2 #include <uv.h> 3 4 #include "queue.h" 5 6 // client message 7 #define INPUT '0' 8 #define RESIZE_TERMINAL '1' 9 #define PAUSE '2' 10 #define RESUME '3' 11 #define JSON_DATA '{' 12 13 // server message 14 #define OUTPUT '0' 15 #define SET_WINDOW_TITLE '1' 16 #define SET_PREFERENCES '2' 17 18 #define MAX_READ_RETRY 2 19 20 // url paths 21 struct endpoints { 22 char *ws; 23 char *index; 24 char *token; 25 char *parent; 26 }; 27 28 extern volatile bool force_exit; 29 extern struct lws_context *context; 30 extern struct server *server; 31 extern struct endpoints endpoints; 32 33 typedef enum { STATE_INIT, STATE_PAUSE, STATE_KILL, STATE_EXIT } proc_state; 34 35 struct pss_http { 36 char path[128]; 37 char *buffer; 38 char *ptr; 39 size_t len; 40 }; 41 42 struct pty_proc { 43 char **args; 44 int argc; 45 46 pid_t pid; 47 int status; 48 proc_state state; 49 50 int pty; 51 char *pty_buffer; 52 ssize_t pty_len; 53 int err_count; 54 55 uv_pipe_t pipe; 56 57 LIST_ENTRY(pty_proc) entry; 58 }; 59 60 struct pss_tty { 61 bool initialized; 62 int initial_cmd_index; 63 bool authenticated; 64 char address[50]; 65 char path[20]; 66 67 struct lws *wsi; 68 char *buffer; 69 size_t len; 70 71 struct pty_proc *proc; 72 }; 73 74 struct server { 75 int client_count; // client count 76 char *prefs_json; // client preferences 77 char *credential; // encoded basic auth credential 78 char *index; // custom index.html 79 char *command; // full command line 80 char **argv; // command with arguments 81 int argc; // command + arguments count 82 int sig_code; // close signal 83 char sig_name[20]; // human readable signal string 84 bool url_arg; // allow client to send cli arguments in URL 85 bool readonly; // whether not allow clients to write to the TTY 86 bool check_origin; // whether allow websocket connection from different origin 87 int max_clients; // maximum clients to support 88 bool once; // whether accept only one client and exit on disconnection 89 char socket_path[255]; // UNIX domain socket path 90 char terminal_type[30]; // terminal type to report 91 92 uv_loop_t *loop; // the libuv event loop 93 uv_signal_t watcher; // SIGCHLD watcher 94 95 LIST_HEAD(proc, pty_proc) procs; // started process list 96 }; 97