mirror of
https://github.com/tsl0922/ttyd.git
synced 2025-12-19 10:34:18 +01:00
Add support for the --max-clients option
This commit is contained in:
@@ -88,6 +88,7 @@ OPTIONS:
|
|||||||
--readonly, -R Do not allow clients to write to the TTY
|
--readonly, -R Do not allow clients to write to the TTY
|
||||||
--client-option, -t Send option to client (format: key=value), repeat to add more options
|
--client-option, -t Send option to client (format: key=value), repeat to add more options
|
||||||
--check-origin, -O Do not allow websocket connection from different origin
|
--check-origin, -O Do not allow websocket connection from different origin
|
||||||
|
--max-clients, -m Maximum clients to support (default: 0, no limit)
|
||||||
--once, -o Accept only one client and exit on disconnection
|
--once, -o Accept only one client and exit on disconnection
|
||||||
--browser, -B Open terminal with the default system browser
|
--browser, -B Open terminal with the default system browser
|
||||||
--index, -I Custom index.html path
|
--index, -I Custom index.html path
|
||||||
|
|||||||
@@ -72,6 +72,10 @@ Cross platform: macOS, Linux, FreeBSD, OpenWrt/LEDE, Windows
|
|||||||
\-O, \-\-check\-origin
|
\-O, \-\-check\-origin
|
||||||
Do not allow websocket connection from different origin
|
Do not allow websocket connection from different origin
|
||||||
|
|
||||||
|
.PP
|
||||||
|
\-m, \-\-max\-clients
|
||||||
|
Maximum clients to support (default: 0, no limit)
|
||||||
|
|
||||||
.PP
|
.PP
|
||||||
\-o, \-\-once
|
\-o, \-\-once
|
||||||
Accept only one client and exit on disconnection
|
Accept only one client and exit on disconnection
|
||||||
|
|||||||
@@ -51,6 +51,9 @@ ttyd 1 "September 2016" ttyd "User Manual"
|
|||||||
-O, --check-origin
|
-O, --check-origin
|
||||||
Do not allow websocket connection from different origin
|
Do not allow websocket connection from different origin
|
||||||
|
|
||||||
|
-m, --max-clients
|
||||||
|
Maximum clients to support (default: 0, no limit)
|
||||||
|
|
||||||
-o, --once
|
-o, --once
|
||||||
Accept only one client and exit on disconnection
|
Accept only one client and exit on disconnection
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, voi
|
|||||||
}
|
}
|
||||||
|
|
||||||
lws_get_peer_addresses(wsi, lws_get_socket_fd(wsi), name, sizeof(name), rip, sizeof(rip));
|
lws_get_peer_addresses(wsi, lws_get_socket_fd(wsi), name, sizeof(name), rip, sizeof(rip));
|
||||||
lwsl_notice("HTTP %s - %s (%s)\n", in, rip, name);
|
lwsl_notice("HTTP %s - %s (%s)\n", (char *) in, rip, name);
|
||||||
|
|
||||||
switch (check_auth(wsi)) {
|
switch (check_auth(wsi)) {
|
||||||
case 0:
|
case 0:
|
||||||
|
|||||||
@@ -188,6 +188,10 @@ callback_tty(struct lws *wsi, enum lws_callback_reasons reason,
|
|||||||
lwsl_warn("refuse to serve WS client due to the --once option.\n");
|
lwsl_warn("refuse to serve WS client due to the --once option.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
if (server->max_clients > 0 && server->client_count == server->max_clients) {
|
||||||
|
lwsl_warn("refuse to serve WS client due to the --max-clients option.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
if (lws_hdr_copy(wsi, buf, sizeof(buf), WSI_TOKEN_GET_URI) <= 0 || strcmp(buf, WS_PATH)) {
|
if (lws_hdr_copy(wsi, buf, sizeof(buf), WSI_TOKEN_GET_URI) <= 0 || strcmp(buf, WS_PATH)) {
|
||||||
lwsl_warn("refuse to serve WS client for illegal ws path: %s\n", buf);
|
lwsl_warn("refuse to serve WS client for illegal ws path: %s\n", buf);
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ static const struct option options[] = {
|
|||||||
{"ssl-ca", required_argument, NULL, 'A'},
|
{"ssl-ca", required_argument, NULL, 'A'},
|
||||||
{"readonly", no_argument, NULL, 'R'},
|
{"readonly", no_argument, NULL, 'R'},
|
||||||
{"check-origin", no_argument, NULL, 'O'},
|
{"check-origin", no_argument, NULL, 'O'},
|
||||||
|
{"max-clients", required_argument, NULL, 'm'},
|
||||||
{"once", no_argument, NULL, 'o'},
|
{"once", no_argument, NULL, 'o'},
|
||||||
{"browser", no_argument, NULL, 'B'},
|
{"browser", no_argument, NULL, 'B'},
|
||||||
{"debug", required_argument, NULL, 'd'},
|
{"debug", required_argument, NULL, 'd'},
|
||||||
@@ -42,7 +43,7 @@ static const struct option options[] = {
|
|||||||
{"help", no_argument, NULL, 'h'},
|
{"help", no_argument, NULL, 'h'},
|
||||||
{NULL, 0, 0, 0}
|
{NULL, 0, 0, 0}
|
||||||
};
|
};
|
||||||
static const char *opt_string = "p:i:c:u:g:s:r:I:aSC:K:A:Rt:OoBd:vh";
|
static const char *opt_string = "p:i:c:u:g:s:r:I:aSC:K:A:Rt:Om:oBd:vh";
|
||||||
|
|
||||||
void print_help() {
|
void print_help() {
|
||||||
fprintf(stderr, "ttyd is a tool for sharing terminal over the web\n\n"
|
fprintf(stderr, "ttyd is a tool for sharing terminal over the web\n\n"
|
||||||
@@ -62,6 +63,7 @@ void print_help() {
|
|||||||
" --readonly, -R Do not allow clients to write to the TTY\n"
|
" --readonly, -R Do not allow clients to write to the TTY\n"
|
||||||
" --client-option, -t Send option to client (format: key=value), repeat to add more options\n"
|
" --client-option, -t Send option to client (format: key=value), repeat to add more options\n"
|
||||||
" --check-origin, -O Do not allow websocket connection from different origin\n"
|
" --check-origin, -O Do not allow websocket connection from different origin\n"
|
||||||
|
" --max-clients, -m Maximum clients to support (default: 0, no limit)\n"
|
||||||
" --once, -o Accept only one client and exit on disconnection\n"
|
" --once, -o Accept only one client and exit on disconnection\n"
|
||||||
" --browser, -B Open terminal with the default system browser\n"
|
" --browser, -B Open terminal with the default system browser\n"
|
||||||
" --index, -I Custom index.html path\n"
|
" --index, -I Custom index.html path\n"
|
||||||
@@ -251,6 +253,9 @@ main(int argc, char **argv) {
|
|||||||
case 'O':
|
case 'O':
|
||||||
server->check_origin = true;
|
server->check_origin = true;
|
||||||
break;
|
break;
|
||||||
|
case 'm':
|
||||||
|
server->max_clients = atoi(optarg);
|
||||||
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
server->once = true;
|
server->once = true;
|
||||||
break;
|
break;
|
||||||
@@ -418,6 +423,8 @@ main(int argc, char **argv) {
|
|||||||
lwsl_notice(" check origin: true\n");
|
lwsl_notice(" check origin: true\n");
|
||||||
if (server->readonly)
|
if (server->readonly)
|
||||||
lwsl_notice(" readonly: true\n");
|
lwsl_notice(" readonly: true\n");
|
||||||
|
if (server->max_clients > 0)
|
||||||
|
lwsl_notice(" max clients: %d\n", server->max_clients);
|
||||||
if (server->once)
|
if (server->once)
|
||||||
lwsl_notice(" once: true\n");
|
lwsl_notice(" once: true\n");
|
||||||
if (server->index != NULL) {
|
if (server->index != NULL) {
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ struct tty_server {
|
|||||||
char *sig_name; // human readable signal string
|
char *sig_name; // human readable signal string
|
||||||
bool readonly; // whether not allow clients to write to the TTY
|
bool readonly; // whether not allow clients to write to the TTY
|
||||||
bool check_origin; // whether allow websocket connection from different origin
|
bool check_origin; // whether allow websocket connection from different origin
|
||||||
|
int max_clients; // maximum clients to support
|
||||||
bool once; // whether accept only one client and exit on disconnection
|
bool once; // whether accept only one client and exit on disconnection
|
||||||
char *socket_path; // UNIX domain socket path
|
char *socket_path; // UNIX domain socket path
|
||||||
pthread_mutex_t lock;
|
pthread_mutex_t lock;
|
||||||
|
|||||||
Reference in New Issue
Block a user