From 2d53cfe03f92e1ad37bee4c6d2ff67651889f77c Mon Sep 17 00:00:00 2001 From: Shuanglei Tao Date: Mon, 12 Sep 2016 08:30:45 +0800 Subject: [PATCH] Initial commit --- .gitignore | 52 ++++ CMakeLists.txt | 43 ++++ LICENSE | 21 ++ README.md | 53 ++++ http.c | 75 ++++++ index.html | 674 +++++++++++++++++++++++++++++++++++++++++++++++++ protocol.c | 287 +++++++++++++++++++++ screenshot.gif | Bin 0 -> 128123 bytes server.c | 134 ++++++++++ server.h | 70 +++++ 10 files changed, 1409 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100644 README.md create mode 100644 http.c create mode 100644 index.html create mode 100644 protocol.c create mode 100644 screenshot.gif create mode 100644 server.c create mode 100644 server.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62beb87 --- /dev/null +++ b/.gitignore @@ -0,0 +1,52 @@ +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su + +# Cmake files +CMakeCache.txt +CMakeFiles +CMakeScripts +Makefile +cmake_install.cmake +install_manifest.txt +CTestTestfile.cmake +build + +# Clion files +.idea/ + +# Project files +html.h \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..d06092a --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,43 @@ +cmake_minimum_required(VERSION 2.8) +project(ttyd) + +set(SOURCE_FILES server.c http.c protocol.c) + +find_package(OpenSSL REQUIRED) +find_package(Libwebsockets QUIET) + +# libwebsockets 1.x doesn't support cmake +if (NOT Libwebsockets_DIR) + pkg_check_modules(Libwebsockets REQUIRED libwebsockets) + find_path(LIBWEBSOCKETS_INCLUDE_DIR libwebsockets.h + HINTS ${LIBWEBSOCKETS_INCLUDEDIR} ${LIBWEBSOCKETS_INCLUDE_DIRS}) + find_library(LIBWEBSOCKETS_LIBRARIES NAMES websockets libwebsockets + HINTS ${LIBWEBSOCKETS_LIBDIR} ${LIBWEBSOCKETS_LIBRARY_DIRS}) + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(LIBWEBSOCKETS DEFAULT_MSG LIBWEBSOCKETS_LIBRARIES LIBWEBSOCKETS_INCLUDE_DIR) + mark_as_advanced(LIBWEBSOCKETS_INCLUDE_DIR LIBWEBSOCKETS_LIBRARIES) +endif() + +find_package(PkgConfig) +pkg_check_modules(PC_JSON-C REQUIRED json-c) +find_path(JSON-C_INCLUDE_DIR json.h + HINTS ${PC_JSON-C_INCLUDEDIR} ${PC_JSON-C_INCLUDE_DIRS} PATH_SUFFIXES json-c json) +find_library(JSON-C_LIBRARY NAMES json-c libjson-c + HINTS ${PC_JSON-C_LIBDIR} ${PC_JSON-C_LIBRARY_DIRS}) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(JSON-C DEFAULT_MSG JSON-C_LIBRARY JSON-C_INCLUDE_DIR) +mark_as_advanced(JSON-C_INCLUDE_DIR JSON-C_LIBRARY) + +find_program(CMAKE_XXD NAMES xxd) +add_custom_command(OUTPUT html.h + COMMAND ${CMAKE_XXD} -i index.html html.h + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating html.h from index.html") +list(APPEND SOURCE_FILES html.h) + +set(INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR} ${LIBWEBSOCKETS_INCLUDE_DIR} ${JSON-C_INCLUDE_DIR}) +set(LINK_LIBS util pthread ${OPENSSL_LIBRARIES} ${LIBWEBSOCKETS_LIBRARIES} ${JSON-C_LIBRARY}) + +add_executable(${PROJECT_NAME} ${SOURCE_FILES}) +target_include_directories(${PROJECT_NAME} PUBLIC ${INCLUDE_DIRS}) +target_link_libraries(${PROJECT_NAME} ${LINK_LIBS}) \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d81dc10 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Shuanglei Tao + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0ef7f2b --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# ttyd - terminal emulator for the web + +ttyd is a simple command line tool for sharing terminal over the web, inspired by [GoTTY](https://github.com/yudai/gotty). + +![screenshot](screenshot.gif) + +> **WARNING:** ttyd is still under heavily development, so features may be incomplete or expected to have bugs. + +# Requirements + +- [CMake](https://cmake.org) +- [OpenSSL](https://www.openssl.org) +- [JSON-C](https://github.com/json-c/json-c) +- [Libwebsockets](https://libwebsockets.org) + +# Installation + +### For Mac OS X users + +```bash +brew install cmake openssl json-c libwebsockets +git clone https://github.com/tsl0922/ttyd.git +cd ttyd && mkdir build && cd build +cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl .. +make +``` + +### For Linux users + +Ubuntu as example: + +```bash +sudo apt-get install cmake libwebsockets-dev libjson-c-dev libssl-dev +git clone https://github.com/tsl0922/ttyd.git +cd ttyd && mkdir build && cd build +cmake .. +make +``` + +The `ttyd` executable file will be in the `build` directory. + +# Usage + +``` +Usage: ttyd command [options] +``` + +ttyd will start a web server at port `7681`. When you open , the `command` will be started with `options` as arguments and now you can see the running command on the web! :tada: + +# Credits + +- [GoTTY](https://github.com/yudai/gotty): ttyd is a port of GoTTY to `C` language. +- [hterm](https://chromium.googlesource.com/apps/libapps/+/HEAD/hterm): ttyd uses hterm to run a terminal emulator on the web. \ No newline at end of file diff --git a/http.c b/http.c new file mode 100644 index 0000000..435329a --- /dev/null +++ b/http.c @@ -0,0 +1,75 @@ +#include "server.h" +#include "html.h" + +int +callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { + unsigned char buffer[4096 + LWS_PRE]; + unsigned char *p; + unsigned char *end; + char buf[256]; + int n; + + switch (reason) { + case LWS_CALLBACK_HTTP: + lwsl_notice("lws_http_serve: %s\n", in); + + { + char name[100], rip[50]; + lws_get_peer_addresses(wsi, lws_get_socket_fd(wsi), name, + sizeof(name), rip, sizeof(rip)); + sprintf(buf, "%s (%s)", name, rip); + lwsl_notice("HTTP connect from %s\n", buf); + } + + if (len < 1) { + lws_return_http_status(wsi, HTTP_STATUS_BAD_REQUEST, NULL); + goto try_to_reuse; + } + + if (lws_hdr_total_length(wsi, WSI_TOKEN_POST_URI)) + return 0; + + if (strcmp((const char *) in, "/")) { + lws_return_http_status(wsi, HTTP_STATUS_NOT_FOUND, NULL); + goto try_to_reuse; + } + + p = buffer + LWS_PRE; + end = p + sizeof(buffer) - LWS_PRE; + + if (lws_add_http_header_status(wsi, 200, &p, end)) + return 1; + if (lws_add_http_header_by_token(wsi, + WSI_TOKEN_HTTP_CONTENT_TYPE, + (unsigned char *) "text/html", + 9, &p, end)) + return 1; + if (lws_add_http_header_content_length(wsi, index_html_len, &p, end)) + return 1; + if (lws_finalize_http_header(wsi, &p, end)) + return 1; + n = lws_write(wsi, buffer + LWS_PRE, p - (buffer + LWS_PRE), LWS_WRITE_HTTP_HEADERS); + if (n < 0) { + return 1; + } + + n = lws_write_http(wsi, index_html, index_html_len); + if (n < 0) + return 1; + goto try_to_reuse; + case LWS_CALLBACK_HTTP_WRITEABLE: + lwsl_info("LWS_CALLBACK_HTTP_WRITEABLE\n"); + break; + default: + break; + } + + return 0; + + /* if we're on HTTP1.1 or 2.0, will keep the idle connection alive */ + try_to_reuse: + if (lws_http_transaction_completed(wsi)) + return -1; + + return 0; +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..37d54d6 --- /dev/null +++ b/index.html @@ -0,0 +1,674 @@ + + + + + Web Terminal + + + + + + +
+ + \ No newline at end of file diff --git a/protocol.c b/protocol.c new file mode 100644 index 0000000..f1f9b56 --- /dev/null +++ b/protocol.c @@ -0,0 +1,287 @@ +#include "server.h" + +// client message +#define INPUT '0' +#define PING '1' +#define RESIZE_TERMINAL '2' + +// server message +#define OUTPUT '0' +#define PONG '1' +#define SET_WINDOW_TITLE '2' +#define SET_PREFERENCES '3' +#define SET_RECONNECT '4' + +#define BUF_SIZE 1024 + +char * +base64_encode(const unsigned char *buffer, size_t length) { + BIO *bio, *b64; + BUF_MEM *bptr; + + b64 = BIO_new(BIO_f_base64()); + bio = BIO_new(BIO_s_mem()); + b64 = BIO_push(b64, bio); + + BIO_write(b64, buffer, (int) length); + BIO_flush(b64); + BIO_get_mem_ptr(b64, &bptr); + + char *data = (char *)malloc(bptr->length); + memcpy(data, bptr->data, bptr->length-1); + data[bptr->length-1] = 0; + + BIO_free_all(b64); + + return data; +} + +int +send_initial_message(struct lws *wsi) { + unsigned char message[LWS_PRE + 256]; + unsigned char *p = &message[LWS_PRE]; + int n; + + char hostname[128]; + gethostname(hostname, sizeof(hostname) - 1); + + // window title + n = sprintf((char *) p, "%c%s (%s)", SET_WINDOW_TITLE, server->command, hostname); + if (lws_write(wsi, p, (size_t) n, LWS_WRITE_TEXT) < n) { + return -1; + } + // reconnect time + n = sprintf((char *) p, "%c%d", SET_RECONNECT, 10); + if (lws_write(wsi, p, (size_t) n, LWS_WRITE_TEXT) < n) { + return -1; + } + + return 0; +} + +struct winsize * +parse_window_size(const char *json) { + int columns, rows; + json_object *obj = json_tokener_parse(json); + struct json_object *o = NULL; + + if (!json_object_object_get_ex(obj, "columns", &o)) { + lwsl_err("columns field not exists!"); + return NULL; + } + columns = json_object_get_int(o); + if (!json_object_object_get_ex(obj, "rows", &o)) { + lwsl_err("rows field not exists!"); + return NULL; + } + rows = json_object_get_int(o); + + struct winsize *size = malloc(sizeof(struct winsize)); + memset(size, 0, sizeof(struct winsize)); + size->ws_col = (unsigned short) columns; + size->ws_row = (unsigned short) rows; + + return size; +} + +void * +thread_run_command(void *args) { + struct tty_client *client; + int pty; + int bytes; + char buf[BUF_SIZE]; + fd_set des_set; + + client = (struct tty_client *) args; + pid_t pid = forkpty(&pty, NULL, NULL, NULL); + + switch (pid) { + case -1: /* */ + lwsl_err("forkpty\n"); + break; + case 0: /* child */ + if (setenv("TERM", "xterm-256color", true) < 0) { + perror("setenv"); + exit(1); + } + if (execvp(server->argv[0], server->argv) < 0) { + perror("execvp"); + exit(1); + } + break; + default: /* parent */ + lwsl_notice("started process, pid: %d\n", pid); + client->pid = pid; + client->pty = pty; + + while (!client->exit) { + FD_ZERO (&des_set); + FD_SET (pty, &des_set); + + if (select(pty + 1, &des_set, NULL, NULL, NULL) < 0) { + break; + } + + if (FD_ISSET (pty, &des_set)) { + memset(buf, 0, BUF_SIZE); + bytes = (int) read(pty, buf, BUF_SIZE); + struct pty_data *frame = (struct pty_data *) malloc(sizeof(struct pty_data)); + frame->len = bytes; + if (bytes > 0) { + frame->data = malloc((size_t) bytes); + memcpy(frame->data, buf, bytes); + } + pthread_mutex_lock(&client->lock); + STAILQ_INSERT_TAIL(&client->queue, frame, list); + pthread_mutex_unlock(&client->lock); + } + } + tty_client_destroy(client); + break; + } + + return 0; +} + +void +tty_client_destroy(struct tty_client *client) { + if (client->exit) + return; + + // stop event loop + client->exit = true; + + // kill process and free resource + if (kill(client->pid, SIGHUP) != 0) { + lwsl_err("kill: pid, errno: %d (%s)\n", client->pid, errno, strerror(errno)); + } + int status; + while (waitpid(client->pid, &status, 0) == -1 && errno == EINTR) + ; + lwsl_notice("process exited with code %d, pid: %d\n", status, client->pid); + close(client->pty); + + // remove from clients list + pthread_mutex_lock(&server->lock); + LIST_REMOVE(client, list); + server->client_count--; + pthread_mutex_unlock(&server->lock); +} + +int +callback_tty(struct lws *wsi, enum lws_callback_reasons reason, + void *user, void *in, size_t len) { + struct tty_client *client = (struct tty_client *) user; + char *data; + struct winsize *size; + + switch (reason) { + case LWS_CALLBACK_ESTABLISHED: + client->exit = false; + client->initialized = false; + client->wsi = wsi; + lws_get_peer_addresses(wsi, lws_get_socket_fd(wsi), + client->hostname, sizeof(client->hostname), + client->address, sizeof(client->address)); + STAILQ_INIT(&client->queue); + if (pthread_create(&client->thread, NULL, thread_run_command, client) != 0) { + lwsl_err("pthread_create\n"); + return 1; + } + + pthread_mutex_lock(&server->lock); + LIST_INSERT_HEAD(&server->clients, client, list); + server->client_count++; + pthread_mutex_unlock(&server->lock); + + lwsl_notice("client connected from %s (%s), total: %d\n", client->hostname, client->address, server->client_count); + break; + + case LWS_CALLBACK_SERVER_WRITEABLE: + if (!client->initialized) { + if (send_initial_message(wsi) < 0) + return -1; + client->initialized = true; + break; + } + + pthread_mutex_lock(&client->lock); + while (!STAILQ_EMPTY(&client->queue)) { + struct pty_data *frame = STAILQ_FIRST(&client->queue); + // read error or client exited, close connection + if (frame->len <= 0) { + STAILQ_REMOVE_HEAD(&client->queue, list); + free(frame); + return -1; + } + + char *b64_text = base64_encode((const unsigned char *) frame->data, (size_t) frame->len); + size_t msg_len = LWS_PRE + strlen(b64_text) + 1; + unsigned char message[msg_len]; + unsigned char *p = &message[LWS_PRE]; + size_t n = sprintf((char *) p, "%c%s", OUTPUT, b64_text); + + free(b64_text); + + if (lws_write(wsi, p, n, LWS_WRITE_TEXT) < n) { + lwsl_err("lws_write\n"); + break; + } + + STAILQ_REMOVE_HEAD(&client->queue, list); + free(frame->data); + free(frame); + + if(lws_partial_buffered(wsi)){ + lws_callback_on_writable(wsi); + break; + } + } + pthread_mutex_unlock(&client->lock); + break; + + case LWS_CALLBACK_RECEIVE: + data = (char *) in; + char command = data[0]; + switch (command) { + case INPUT: + if (write(client->pty, data + 1, len - 1) < len - 1) { + lwsl_err("write INPUT to pty\n"); + return -1; + } + break; + case PING: + { + unsigned char c = PONG; + if (lws_write(wsi, &c, 1, LWS_WRITE_TEXT) != 1) { + lwsl_err("send PONG\n"); + return -1; + } + } + break; + case RESIZE_TERMINAL: + size = parse_window_size(data + 1); + if (size != NULL) { + if (ioctl(client->pty, TIOCSWINSZ, size) == -1) { + lwsl_err("ioctl TIOCSWINSZ: %d (%s)\n", errno, strerror(errno)); + } + free(size); + } + break; + default: + lwsl_notice("unknown message type: %c\n", command); + break; + } + break; + + case LWS_CALLBACK_CLOSED: + tty_client_destroy(client); + lwsl_notice("client disconnected from %s (%s), total: %d\n", client->hostname, client->address, server->client_count); + break; + + default: + break; + } + + return 0; +} \ No newline at end of file diff --git a/screenshot.gif b/screenshot.gif new file mode 100644 index 0000000000000000000000000000000000000000..503c51523038d41adf853813a9fbad8a69d79e43 GIT binary patch literal 128123 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
f)}WJquZgeUO>#!dyAuJ>K?GGC581j)(b8 z)v;a&rMIC83jrNy`)m`DTD^i^$l$)-&b=;|_015~k?)>L%?E2gpEQg1Y%~H&3W}GIjiQiU&!o|s5gEZi0gglt zox)?pn?NSq+1uI*D)#uMk5{^7yWZCainH@@f}{CX+n2W{r$n%#rVgpktC?FYh_$?sPXZ*HH*7Z`u2au{ zBuOFAOPP>yeF)l+ZrYd*|CInKpT1}XJim7Ma?a02V(TF^=Ev-2Znm%BNPclGhm-a- zI{o`Ro%d3`!kj_&#WnX!Wv{Ny0mlI1e}0uf-zfk_*KApFP<%F}jaU$LB=-34m7ILQzA$?+xsBNl`wl>SQjif8N;N&GbzLDup zE)=8}NDjhk_~}@tW~1H(BMV~Dkwlcf_P;ofgm|FZ4zIM{xvi&k=TqR}(1o2D{cwrn(E@!&Qt`P7IXn(tN@wFLICt?a%3<>v=>Kk4w0`!+Z5Sh97Kez zeq!|jvmb%t>)QW;0}m1h+YOu~oIB*Kb5C|VvRWh>Bk2fh03%~+THftp@r8XIk%WS= z)@UakkrfT+6{&_;tu|&4hQ90AZ&cA?0uMgDdtCZe2-@07P%lK!0DjUU816xTPMKzc z^xZ45vhDW%qrpm=M1+23zj_NDlVCZP;hzEAzXB?q23RJk+#!wt{Q9QFC*cU9x63Cv z$eb}!jL0c=LJ%_4GA=O5GoU{A{UYΠ%~L4n#jm0Bm9LniEI`|AL&56gqUFgNPui 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

6B-^5 z8~triMI-FvoM-Htqt#=WIj{ECp@(J~y{u@UXDZ>417IKh1fn_hPw0uP4k+oHAcgj3 zuh&lD5@*D3zKL^`Mn$JUC?r}L8&HS+s$`T9bJR;!SpBV~J*O$1AyPLS{ZVSakly)YjB zp66hXH04lY_JQbV&%}Z(Pt&Z^F4YGc0t0?1u_Re~2x67ce{!vJ72EC|msK;}+z{IJ zz_g`+?q4#Ox4V!018qNiHwZff+Qw+c*x#P9XVyv*8tk)UWw$BR$5jIlLyi=!+}ONW zuXzSMO_YFf_w79kj{hBdkkat4C`R2i=H%?4j$tzN$bodh5M8vW9L|5TN&%I^2(c^JC7;kC}7k&imf`Tx}d&U}Ql`w_E6t`77KQ0?~YU%uyV<5WI$h_Fn}j z0-&g1hREdj4i_H{Qi8Ny8Z%=!6YAZ9QZZ<lxV5GuazXMh;mD4-`|k-Onl`JL@pi=EWnD# zsoJGVMw1`Lxoz2DLA#(tB-@8Vvf$67y6=8>DdiVbKjCAr>2_51LxMy7vBA@1i23bD z7#n3|iX?7RoEq)!Yb&uIS*}Mko*B0&KUHSdo9*MXO*l3f?$6TiZc0Xi)KA$lQPuPO zQ9(}xr10AGSCH7Pa&*h(4LgP3-^iKp+SGL_kUT?a%L;cxhjp-HDH5vAbkl-f-cbj_Y)TeVNDZQ?~2H{eow`8y!>*LuniieS;PKD?@9N0Al1Kp!9BwLEM(rn z#;2U!B%_@KZZR25l9YZ#|3F#k(%<^ut}m7`-?D{z z?q46Zlk44kXK)OcN|^}6XnC{~Izm#B8e7w^s#of*W%*Z%`)Aqy&DqJMj?k|W`D?lO zJq^g#74v#s+wO(e5q@L48L(%m#xQ3KS{;14?RLLuExv7=^J`^g`%MSM%Z|B#XiE3{ zIm&X3}?%i+nwtA#C#k^Ln>DTmff;FEks^`pE%N$flZTshhZ?7!B*8TMXZwJG0>>;x= zc(yPuwH3;+*0Qo0;ontU3ZX%_uCb+1jhSc=k<9n6mfLm9cEx*@$NCO#W4PCJLpMZ} z+Z3fCp+$Z1hpycPhgPBM)8^JkR&eWmdix6tpWNv>{|(W0+fYu>0HLxzfu{b(hOS=W zbX|_3qQChClFWOR<30z!Uhxn7-!+eP3p~d;MW3QpOWkj8=Q&Gww*WBMd5Qo0_^0{3 zb=T6jcgr#{y7BaXe=}}7^cnHx?Ji7;3ZU}q|H4qYJz7x)Q6QUXHzGtxq{76Yr+7q? zoDB$o7u_gM@O!^QQcuQP5hXN^W5hZaJon#j!Z^S=-zm@Q9yOZ>5znAjw z_$M9EiFuBEUmJJ6NbWR>4(jh?)6)g$KZlcW=!g=*RGEm$S$#{Ytz=Wl@E$n1xuX#P z5sWN}svxKv0VY?3P$6ZAQ;7+VY|yB_7!)Dwl<8_69mFCn0g~L!%?}KI!Nm(XzAF6; z*8nJ3Tc23Hz|thwATpZhf)QiWaw^ZSyBC8stL4S05@udwJ)(V@B;(#d7wYuNE~Q$) zLLN>^4oTxYu}4CAv8W!I8OzGUKfeVbXSiNLD)++Ms{Q_1zHjv49MB zqU9}ZU2H}Y$id<5v*Y#dFw)1accQ18Lx%&7W^QW$$9SfC`B?r&@5A)RrccYN2O4Ll z=)bF#Cr^W*tS;8mD zu+T6jase>bhZCbM5l1~h7R2i%0DglR-fQ9b;&*e+ksF8*FLC?1XU*v~s}f943ATWs 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%0Ai1fL} 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 VJ->hH7ha+LSRQq}c?ke8_#a>kDa`-? literal 0 HcmV?d00001 diff --git a/server.c b/server.c new file mode 100644 index 0000000..d8abf33 --- /dev/null +++ b/server.c @@ -0,0 +1,134 @@ +#include "server.h" + +volatile bool force_exit = false; +struct lws_context *context; +struct tty_server *server; + +static const struct lws_protocols protocols[] = { + { + "http-only", + callback_http, + 0, + 0, + }, + { + "tty", + callback_tty, + sizeof(struct tty_client), + 128, + }, + {NULL, NULL, 0, 0} +}; + +static const struct lws_extension extensions[] = { + { + "permessage-deflate", + lws_extension_callback_pm_deflate, + "permessage-deflate" + }, + { + "deflate-frame", + lws_extension_callback_pm_deflate, + "deflate_frame" + }, + {NULL, NULL, NULL} +}; + +struct tty_server* +tty_server_new(int argc, char **argv) { + struct tty_server *ts; + size_t cmd_len = 0; + + ts = malloc(sizeof(struct tty_server)); + LIST_INIT(&ts->clients); + ts->client_count = 0; + ts->argv = malloc(sizeof(char *) * argc); + for (int i = 1; i < argc; i++) { + size_t len = strlen(argv[i]); + ts->argv[i-1] = malloc(len); + strcpy(ts->argv[i-1], argv[i]); + + cmd_len += len; + if (i != argc -1) { + cmd_len++; // for space + } + } + ts->argv[argc-1] = NULL; + + ts->command = malloc(cmd_len); + char *ptr = ts->command; + for (int i = 0; i < argc - 1; i++) { + ptr = stpcpy(ptr, ts->argv[i]); + if (i != argc -2) { + sprintf(ptr++, "%c", ' '); + } + } + + return ts; +} + +void +sig_handler(int sig) { + force_exit = true; + lws_cancel_service(context); +} + +int +main(int argc, char **argv) { + if (argc == 1) { + printf("Usage: %s command [options]", argv[0]); + exit(EXIT_SUCCESS); + } + server = tty_server_new(argc, argv); + lwsl_notice("start command: %s\n", server->command); + + struct lws_context_creation_info info; + memset(&info, 0, sizeof(info)); + info.port = 7681; + info.iface = NULL; + info.protocols = protocols; + info.ssl_cert_filepath = NULL; + info.ssl_private_key_filepath = NULL; + info.gid = -1; + info.uid = -1; + info.max_http_header_pool = 16; + info.options = LWS_SERVER_OPTION_VALIDATE_UTF8; + info.extensions = extensions; + info.timeout_secs = 5; + + signal(SIGINT, sig_handler); + + context = lws_create_context(&info); + if (context == NULL) { + lwsl_err("libwebsockets init failed\n"); + return -1; + } + + // libwebsockets main loop + while (!force_exit) { + pthread_mutex_lock(&server->lock); + if (!LIST_EMPTY(&server->clients)) { + struct tty_client *client; + LIST_FOREACH(client, &server->clients, list) { + if (!STAILQ_EMPTY(&client->queue)) { + lws_callback_on_writable(client->wsi); + } + } + } + pthread_mutex_unlock(&server->lock); + lws_service(context, 10); + } + + lws_context_destroy(context); + + // cleanup + int i = 0; + do { + free(server->argv[i++]); + } while (server->argv[i] != NULL); + free(server->argv); + free(server->command); + free(server); + + return 0; +} diff --git a/server.h b/server.h new file mode 100644 index 0000000..079e10b --- /dev/null +++ b/server.h @@ -0,0 +1,70 @@ +#include "lws_config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#ifdef __APPLE__ +#include +#else +#include +#endif + +#include + +extern volatile bool force_exit; +extern struct lws_context *context; +extern struct tty_server *server; + +struct pty_data { + char *data; + int len; + STAILQ_ENTRY(pty_data) list; +}; + +struct tty_client { + bool exit; + bool initialized; + char hostname[100]; + char address[50]; + + struct lws *wsi; + int pid; + int pty; + pthread_t thread; + + STAILQ_HEAD(pty, pty_data) queue; + pthread_mutex_t lock; + + LIST_ENTRY(tty_client) list; +}; + +struct tty_server { + LIST_HEAD(client, tty_client) clients; + int client_count; + char *command; // full command line + char **argv; // command with arguments + pthread_mutex_t lock; +}; + +extern void +tty_client_destroy(struct tty_client *client); + +extern int +callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); + +extern int +callback_tty(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len); + -- 2.43.4