mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-01 19:43:03 +00:00
Merged revisions 163384 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ................ r163384 | tilghman | 2008-12-11 17:38:56 -0600 (Thu, 11 Dec 2008) | 16 lines Merged revisions 163383 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r163383 | tilghman | 2008-12-11 17:35:55 -0600 (Thu, 11 Dec 2008) | 9 lines When a Ctrl-C or Ctrl-D ends a remote console, on certain shells, the terminal is messed up. By intercepting those events with a signal handler in the remote console, we can avoid those issues. (closes issue #13464) Reported by: tzafrir Patches: 20081110__bug13464.diff.txt uploaded by Corydon76 (license 14) Tested by: blitzrage ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@163386 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -1451,6 +1451,11 @@ static void __quit_handler(int num)
|
||||
* is going to exit */
|
||||
}
|
||||
|
||||
static void __remote_quit_handler(int num)
|
||||
{
|
||||
sig_flags.need_quit = 1;
|
||||
}
|
||||
|
||||
static const char *fix_header(char *outbuf, int maxout, const char *s, char *cmp)
|
||||
{
|
||||
const char *c;
|
||||
@@ -2443,6 +2448,11 @@ static void ast_remotecontrol(char *data)
|
||||
char *ebuf;
|
||||
int num = 0;
|
||||
|
||||
memset(&sig_flags, 0, sizeof(sig_flags));
|
||||
signal(SIGINT, __remote_quit_handler);
|
||||
signal(SIGTERM, __remote_quit_handler);
|
||||
signal(SIGHUP, __remote_quit_handler);
|
||||
|
||||
if (read(ast_consock, buf, sizeof(buf)) < 0) {
|
||||
ast_log(LOG_ERROR, "read() failed: %s\n", strerror(errno));
|
||||
return;
|
||||
@@ -2453,6 +2463,9 @@ static void ast_remotecontrol(char *data)
|
||||
sprintf(tmp, "%s%s", prefix, data);
|
||||
if (write(ast_consock, tmp, strlen(tmp) + 1) < 0) {
|
||||
ast_log(LOG_ERROR, "write() failed: %s\n", strerror(errno));
|
||||
if (sig_flags.need_quit == 1) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
stringp = buf;
|
||||
@@ -2499,6 +2512,10 @@ static void ast_remotecontrol(char *data)
|
||||
char buffer[512] = "", *curline = buffer, *nextline;
|
||||
int not_written = 1;
|
||||
|
||||
if (sig_flags.need_quit == 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (read(ast_consock, buffer, sizeof(buffer) - 1) <= 0) {
|
||||
break;
|
||||
}
|
||||
@@ -2530,6 +2547,10 @@ static void ast_remotecontrol(char *data)
|
||||
for (;;) {
|
||||
ebuf = (char *)el_gets(el, &num);
|
||||
|
||||
if (sig_flags.need_quit == 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ebuf && write(1, "", 1) < 0)
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user