diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-10-13 05:48:10 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-10-13 05:48:10 +0000 |
commit | 503546a95baecea66fe46a3d224ad39a1ef3b36e (patch) | |
tree | 7f70638fc6d0dac088474472e719face91d4847e | |
parent | 04b29acc66b27c26c51f1bb2ee44aeba9a22f89a (diff) |
Fix an issue with console verbosity when running asterisk -rx to execute a command
and retrieve its output. The issue was that there was no way for the main Asterisk
process to know that the remote console was connecting in the -rx mode. The way that
James has fixed this is to have all remote consoles muted by default. Then, regular
remote consoles automatically execute a CLI command to unmute themselves when they
first start up.
(closes issue #10847)
Reported by: atis
Patches:
asterisk-consolemute.diff.txt uploaded by jamesgolovich (license 176)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@85533 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | include/asterisk/logger.h | 2 | ||||
-rw-r--r-- | main/asterisk.c | 24 | ||||
-rw-r--r-- | main/cli.c | 7 |
3 files changed, 20 insertions, 13 deletions
diff --git a/include/asterisk/logger.h b/include/asterisk/logger.h index b4737d06c..63b3cdbb0 100644 --- a/include/asterisk/logger.h +++ b/include/asterisk/logger.h @@ -83,7 +83,7 @@ int ast_unregister_verbose(void (*verboser)(const char *string)); void ast_console_puts(const char *string); void ast_console_puts_mutable(const char *string); -void ast_console_toggle_mute(int fd); +void ast_console_toggle_mute(int fd, int silent); #define _A_ __FILE__, __LINE__, __PRETTY_FUNCTION__ diff --git a/main/asterisk.c b/main/asterisk.c index 9f0f049de..873828e2f 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -832,16 +832,18 @@ int ast_safe_system(const char *s) /*! * \brief mute or unmute a console from logging */ -void ast_console_toggle_mute(int fd) { +void ast_console_toggle_mute(int fd, int silent) { int x; for (x = 0;x < AST_MAX_CONNECTS; x++) { if (fd == consoles[x].fd) { if (consoles[x].mute) { consoles[x].mute = 0; - ast_cli(fd, "Console is not muted anymore.\n"); + if (!silent) + ast_cli(fd, "Console is not muted anymore.\n"); } else { consoles[x].mute = 1; - ast_cli(fd, "Console is muted.\n"); + if (!silent) + ast_cli(fd, "Console is muted.\n"); } return; } @@ -1000,7 +1002,7 @@ static void *listener(void *unused) flags = fcntl(consoles[x].p[1], F_GETFL); fcntl(consoles[x].p[1], F_SETFL, flags | O_NONBLOCK); consoles[x].fd = s; - consoles[x].mute = ast_opt_mute; + consoles[x].mute = 1; /* Default is muted, we will un-mute if necessary */ if (ast_pthread_create_background(&consoles[x].t, &attr, netconsole, &consoles[x])) { ast_log(LOG_ERROR, "Unable to spawn thread to handle connection: %s\n", strerror(errno)); close(consoles[x].p[0]); @@ -2256,13 +2258,15 @@ static void ast_remotecontrol(char * data) pid = atoi(cpid); else pid = -1; - snprintf(tmp, sizeof(tmp), "core set verbose atleast %d", option_verbose); - fdprint(ast_consock, tmp); - snprintf(tmp, sizeof(tmp), "core set debug atleast %d", option_debug); - fdprint(ast_consock, tmp); - if (ast_opt_mute) { - snprintf(tmp, sizeof(tmp), "log and verbose output currently muted ('logger unmute' to unmute)"); + if (!data) { + snprintf(tmp, sizeof(tmp), "core set verbose atleast %d", option_verbose); fdprint(ast_consock, tmp); + snprintf(tmp, sizeof(tmp), "core set debug atleast %d", option_debug); + fdprint(ast_consock, tmp); + if (!ast_opt_mute) + fdprint(ast_consock, "logger mute silent"); + else + printf("log and verbose output currently muted ('logger mute' to unmute)\n"); } ast_verbose("Connected to Asterisk %s currently running on %s (pid = %d)\n", version, hostname, pid); remotehostname = hostname; diff --git a/main/cli.c b/main/cli.c index 826ed6f2a..83e5c71cf 100644 --- a/main/cli.c +++ b/main/cli.c @@ -402,9 +402,12 @@ static int handle_debuglevel_deprecated(int fd, int argc, char *argv[]) static int handle_logger_mute(int fd, int argc, char *argv[]) { - if (argc != 2) + if (argc < 2 || argc > 3) return RESULT_SHOWUSAGE; - ast_console_toggle_mute(fd); + if (argc == 3 && !strcasecmp(argv[2], "silent")) + ast_console_toggle_mute(fd, 1); + else + ast_console_toggle_mute(fd, 0); return RESULT_SUCCESS; } |