|
|
|
@ -2862,10 +2862,14 @@ static void send_rasterisk_connect_commands(void)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef HAVE_LIBEDIT_IS_UNICODE
|
|
|
|
|
static int ast_el_read_char(EditLine *editline, wchar_t *cp)
|
|
|
|
|
#define CHAR_T_LIBEDIT wchar_t
|
|
|
|
|
#define CHAR_TO_LIBEDIT(c) btowc(c)
|
|
|
|
|
#else
|
|
|
|
|
static int ast_el_read_char(EditLine *editline, char *cp)
|
|
|
|
|
#define CHAR_T_LIBEDIT char
|
|
|
|
|
#define CHAR_TO_LIBEDIT(c) c
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static int ast_el_read_char(EditLine *editline, CHAR_T_LIBEDIT *cp)
|
|
|
|
|
{
|
|
|
|
|
int num_read = 0;
|
|
|
|
|
int lastpos = 0;
|
|
|
|
@ -2886,28 +2890,29 @@ static int ast_el_read_char(EditLine *editline, char *cp)
|
|
|
|
|
}
|
|
|
|
|
res = ast_poll(fds, max, -1);
|
|
|
|
|
if (res < 0) {
|
|
|
|
|
if (sig_flags.need_quit || sig_flags.need_quit_handler)
|
|
|
|
|
if (sig_flags.need_quit || sig_flags.need_quit_handler) {
|
|
|
|
|
break;
|
|
|
|
|
if (errno == EINTR)
|
|
|
|
|
}
|
|
|
|
|
if (errno == EINTR) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
fprintf(stderr, "poll failed: %s\n", strerror(errno));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!ast_opt_exec && fds[1].revents) {
|
|
|
|
|
char c = '\0';
|
|
|
|
|
|
|
|
|
|
num_read = read(STDIN_FILENO, &c, 1);
|
|
|
|
|
if (num_read < 1) {
|
|
|
|
|
break;
|
|
|
|
|
} else {
|
|
|
|
|
#ifdef HAVE_LIBEDIT_IS_UNICODE
|
|
|
|
|
*cp = btowc(c);
|
|
|
|
|
#else
|
|
|
|
|
*cp = c;
|
|
|
|
|
#endif
|
|
|
|
|
return (num_read);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
*cp = CHAR_TO_LIBEDIT(c);
|
|
|
|
|
|
|
|
|
|
return num_read;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (fds[0].revents) {
|
|
|
|
|
res = read(ast_consock, buf, sizeof(buf) - 1);
|
|
|
|
|
/* if the remote side disappears exit */
|
|
|
|
@ -2918,6 +2923,7 @@ static int ast_el_read_char(EditLine *editline, char *cp)
|
|
|
|
|
} else {
|
|
|
|
|
int tries;
|
|
|
|
|
int reconnects_per_second = 20;
|
|
|
|
|
|
|
|
|
|
fprintf(stderr, "Attempting to reconnect for 30 seconds\n");
|
|
|
|
|
for (tries = 0; tries < 30 * reconnects_per_second; tries++) {
|
|
|
|
|
if (ast_tryconnect()) {
|
|
|
|
@ -2926,8 +2932,9 @@ static int ast_el_read_char(EditLine *editline, char *cp)
|
|
|
|
|
WELCOME_MESSAGE;
|
|
|
|
|
send_rasterisk_connect_commands();
|
|
|
|
|
break;
|
|
|
|
|
} else
|
|
|
|
|
usleep(1000000 / reconnects_per_second);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
usleep(1000000 / reconnects_per_second);
|
|
|
|
|
}
|
|
|
|
|
if (tries >= 30 * reconnects_per_second) {
|
|
|
|
|
fprintf(stderr, "Failed to reconnect for 30 seconds. Quitting.\n");
|
|
|
|
@ -2948,25 +2955,17 @@ static int ast_el_read_char(EditLine *editline, char *cp)
|
|
|
|
|
console_print(buf, 0);
|
|
|
|
|
|
|
|
|
|
if ((res < EL_BUF_SIZE - 1) && ((buf[res-1] == '\n') || (res >= 2 && buf[res-2] == '\n'))) {
|
|
|
|
|
#ifdef HAVE_LIBEDIT_IS_UNICODE
|
|
|
|
|
*cp = btowc(CC_REFRESH);
|
|
|
|
|
#else
|
|
|
|
|
*cp = CC_REFRESH;
|
|
|
|
|
#endif
|
|
|
|
|
return(1);
|
|
|
|
|
} else {
|
|
|
|
|
lastpos = 1;
|
|
|
|
|
*cp = CHAR_TO_LIBEDIT(CC_REFRESH);
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
lastpos = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef HAVE_LIBEDIT_IS_UNICODE
|
|
|
|
|
*cp = btowc('\0');
|
|
|
|
|
#else
|
|
|
|
|
*cp = '\0';
|
|
|
|
|
#endif
|
|
|
|
|
*cp = CHAR_TO_LIBEDIT('\0');
|
|
|
|
|
|
|
|
|
|
return (0);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static struct ast_str *prompt = NULL;
|
|
|
|
|