]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Separate verbose output from CLI output, by using a preamble.
authorTilghman Lesher <tilghman@meg.abyt.es>
Mon, 5 May 2008 22:50:31 +0000 (22:50 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Mon, 5 May 2008 22:50:31 +0000 (22:50 +0000)
(closes issue #12402)
 Reported by: Corydon76
 Patches:
       20080410__no_verbose_in_rx_output.diff.txt uploaded by Corydon76 (license 14)
       20080501__no_verbose_in_rx_output__1.4.diff.txt uploaded by Corydon76 (license 14)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@115333 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/asterisk.c
main/logger.c

index ca6396827f6ea0981a7fa385ab55703b8137995e..1d3e11b79a65e59441366ad699d20d0f964204a7 100644 (file)
@@ -1345,6 +1345,12 @@ static void __quit_handler(int num)
 static const char *fix_header(char *outbuf, int maxout, const char *s, char *cmp)
 {
        const char *c;
+
+       /* Check for verboser preamble */
+       if (*s == 127) {
+               s++;
+       }
+
        if (!strncmp(s, cmp, strlen(cmp))) {
                c = s + strlen(cmp);
                term_color(outbuf, cmp, COLOR_GRAY, 0, maxout);
@@ -1788,6 +1794,7 @@ static int ast_el_read_char(EditLine *el, char *cp)
 
                        buf[res] = '\0';
 
+                       /* Write over the CLI prompt */
                        if (!ast_opt_exec && !lastpos)
                                write(STDOUT_FILENO, "\r", 1);
                        write(STDOUT_FILENO, buf, res);
@@ -2292,13 +2299,38 @@ static void ast_remotecontrol(char * data)
                ast_el_read_history(filename);
 
        if (ast_opt_exec && data) {  /* hack to print output then exit if asterisk -rx is used */
-               char tempchar;
                struct pollfd fds;
                fds.fd = ast_consock;
                fds.events = POLLIN;
                fds.revents = 0;
-               while (poll(&fds, 1, 100) > 0)
-                       ast_el_read_char(el, &tempchar);
+               while (poll(&fds, 1, 500) > 0) {
+                       char buf[512] = "", *curline = buf, *nextline;
+                       int not_written = 1;
+
+                       if (read(ast_consock, buf, sizeof(buf) - 1) < 0) {
+                               break;
+                       }
+
+                       do {
+                               if ((nextline = strchr(curline, '\n'))) {
+                                       nextline++;
+                               } else {
+                                       nextline = strchr(curline, '\0');
+                               }
+
+                               /* Skip verbose lines */
+                               if (*curline != 127) {
+                                       not_written = 0;
+                                       write(STDOUT_FILENO, curline, nextline - curline + (*nextline == '\0' ? 1 : 0));
+                               }
+                               curline = nextline;
+                       } while (!ast_strlen_zero(curline));
+
+                       /* No non-verbose output in 500ms */
+                       if (not_written) {
+                               break;
+                       }
+               }
                return;
        }
        for (;;) {
index 79ff8deaf9ab05033b26c6392eb202680a1d72af..8f6ebaf80d2de2f50d5b765870c4546047b3b488 100644 (file)
@@ -875,8 +875,12 @@ void ast_verbose(const char *fmt, ...)
                ast_localtime(&t, &tm, NULL);
                strftime(date, sizeof(date), dateformat, &tm);
                datefmt = alloca(strlen(date) + 3 + strlen(fmt) + 1);
-               sprintf(datefmt, "[%s] %s", date, fmt);
+               sprintf(datefmt, "%c[%s] %s", 127, date, fmt);
                fmt = datefmt;
+       } else {
+               char *tmp = alloca(strlen(fmt) + 2);
+               sprintf(tmp, "%c%s", 127, fmt);
+               fmt = tmp;
        }
 
        if (!(buf = ast_dynamic_str_thread_get(&verbose_buf, VERBOSE_BUF_INIT_SIZE)))
@@ -897,7 +901,7 @@ void ast_verbose(const char *fmt, ...)
                v->verboser(buf->str);
        AST_LIST_UNLOCK(&verbosers);
 
-       ast_log(LOG_VERBOSE, "%s", buf->str);
+       ast_log(LOG_VERBOSE, "%s", buf->str + 1);
 }
 
 int ast_register_verbose(void (*v)(const char *string))