Files
wlan-ap/feeds/ucentral/rtty/patches/100-max_timeout.patch
John Crispin e0063c69c7 ucentral: development update
* enhance maverick stability
* add persistent certificate storage
* update schema
* add channel stats to telemetry messages
* make rtty cmd handler work
* add support for recovery images

Signed-off-by: John Crispin <john@phrozen.org>
2021-05-27 13:19:21 +02:00

119 lines
3.2 KiB
Diff

Index: rtty-7.1.4/src/main.c
===================================================================
--- rtty-7.1.4.orig/src/main.c
+++ rtty-7.1.4/src/main.c
@@ -37,6 +37,9 @@ enum {
LONG_OPT_HELP = 1
};
+int force_exit = 0;
+int connected = 0;
+
static void signal_cb(struct ev_loop *loop, ev_signal *w, int revents)
{
if (w->signum == SIGINT) {
@@ -53,6 +56,7 @@ static struct option long_options[] = {
{"token", required_argument, NULL, 't'},
{"verbose", no_argument, NULL, 'v'},
{"version", no_argument, NULL, 'V'},
+ {"exit", required_argument, NULL, 'e'},
{"help", no_argument, NULL, LONG_OPT_HELP},
{0, 0, 0, 0}
};
@@ -79,10 +83,17 @@ static void usage(const char *prog)
exit(1);
}
+static void timeout_cb(EV_P_ ev_timer *w, int revents)
+{
+ if (!connected)
+ exit(1);
+}
+
int main(int argc, char **argv)
{
struct ev_loop *loop = EV_DEFAULT;
struct ev_signal signal_watcher;
+ struct ev_timer timeout_watcher;
bool background = false;
bool verbose = false;
struct rtty rtty = {
@@ -95,7 +106,7 @@ int main(int argc, char **argv)
int c;
while (true) {
- c = getopt_long(argc, argv, "I:h:p:d:asDt:f:RS:vV", long_options, &option_index);
+ c = getopt_long(argc, argv, "I:h:p:d:asDt:f:RS:vVe:", long_options, &option_index);
if (c == -1)
break;
@@ -146,6 +157,9 @@ int main(int argc, char **argv)
case LONG_OPT_HELP:
usage(argv[0]);
break;
+ case 'e':
+ force_exit = atoi(optarg);
+ break;
default: /* '?' */
usage(argv[0]);
break;
@@ -167,6 +181,10 @@ int main(int argc, char **argv)
ev_signal_init(&signal_watcher, signal_cb, SIGINT);
ev_signal_start(loop, &signal_watcher);
+ if (force_exit) {
+ ev_timer_init(&timeout_watcher, timeout_cb, force_exit, 0.);
+ ev_timer_start(loop, &timeout_watcher);
+ }
if (rtty_start(&rtty) < 0)
return -1;
Index: rtty-7.1.4/src/rtty.c
===================================================================
--- rtty-7.1.4.orig/src/rtty.c
+++ rtty-7.1.4/src/rtty.c
@@ -36,6 +36,9 @@
#include "utils.h"
#include "command.h"
+extern int force_exit;
+extern int connected;
+
static char login_path[128]; /* /bin/login */
static void del_tty(struct tty *tty)
@@ -57,6 +60,8 @@ static void del_tty(struct tty *tty)
log_info("delete tty: %d\n", tty->sid);
free(tty);
+ if (force_exit)
+ exit(0);
}
static inline struct tty *find_tty(struct rtty *rtty, int sid)
@@ -69,6 +74,7 @@ static inline struct tty *find_tty(struc
static inline void tty_logout(struct rtty *rtty, int sid)
{
struct tty *tty = find_tty(rtty, sid);
+
if (tty)
del_tty(tty);
}
@@ -136,6 +142,8 @@ static void pty_on_exit(struct ev_loop *
ev_io_start(loop, &rtty->iow);
del_tty(tty);
+ if (force_exit)
+ exit(0);
}
static void tty_login(struct rtty *rtty)
@@ -188,6 +196,7 @@ static void tty_login(struct rtty *rtty)
buffer_put_u8(&rtty->wb, sid);
ev_io_start(rtty->loop, &rtty->iow);
+ connected = 1;
log_info("new tty: %d\n", sid);
}