diff --git a/channel.c b/channel.c index 8fe3ee538a..b0894e3a64 100755 --- a/channel.c +++ b/channel.c @@ -1966,6 +1966,14 @@ int ast_write(struct ast_channel *chan, struct ast_frame *fr) res = 0; } } + + /* It's possible this is a translated frame */ + if (f && f->frametype == AST_FRAME_DTMF) { + ast_log(LOG_DTMF, "%s : %c\n", chan->name, f->subclass); + } else if (fr->frametype == AST_FRAME_DTMF) { + ast_log(LOG_DTMF, "%s : %c\n", chan->name, fr->subclass); + } + if (f && (f != fr)) ast_frfree(f); ast_clear_flag(chan, AST_FLAG_BLOCKING); diff --git a/configs/logger.conf.sample b/configs/logger.conf.sample index fc000a1039..008554271a 100755 --- a/configs/logger.conf.sample +++ b/configs/logger.conf.sample @@ -40,6 +40,7 @@ ; warning ; error ; verbose +; dtmf ; ; Special filename "console" represents the system console ; diff --git a/include/asterisk/logger.h b/include/asterisk/logger.h index 2e8a786b58..c94fd96d26 100755 --- a/include/asterisk/logger.h +++ b/include/asterisk/logger.h @@ -99,6 +99,12 @@ extern void ast_console_puts(const char *string); #define __LOG_VERBOSE 5 #define LOG_VERBOSE __LOG_VERBOSE, _A_ +#ifdef LOG_DTMF +#undef LOG_DTMF +#endif +#define __LOG_DTMF 6 +#define LOG_DTMF __LOG_DTMF, _A_ + #if defined(__cplusplus) || defined(c_plusplus) } #endif diff --git a/logger.c b/logger.c index 8e5cdbf167..be3b8c1769 100755 --- a/logger.c +++ b/logger.c @@ -44,6 +44,7 @@ static int syslog_level_map[] = { LOG_NOTICE, LOG_WARNING, LOG_ERR, + LOG_DEBUG, LOG_DEBUG }; @@ -107,7 +108,8 @@ static char *levels[] = { "NOTICE", "WARNING", "ERROR", - "VERBOSE" + "VERBOSE", + "DTMF" }; static int colors[] = { @@ -116,7 +118,8 @@ static int colors[] = { COLOR_YELLOW, COLOR_BRRED, COLOR_RED, - COLOR_GREEN + COLOR_GREEN, + COLOR_BRGREEN }; static int make_components(char *s, int lineno) @@ -141,6 +144,8 @@ static int make_components(char *s, int lineno) res |= (1 << __LOG_DEBUG); else if (!strcasecmp(w, "verbose")) res |= (1 << __LOG_VERBOSE); + else if (!strcasecmp(w, "dtmf")) + res |= (1 << __LOG_DTMF); else { fprintf(stderr, "Logfile Warning: Unknown keyword '%s' at line %d of logger.conf\n", w, lineno); } @@ -495,6 +500,8 @@ static int handle_logger_show_channels(int fd, int argc, char *argv[]) ast_cli(fd, " - "); if (chan->logmask & (1 << __LOG_DEBUG)) ast_cli(fd, "Debug "); + if (chan->logmask & (1 << __LOG_DTMF)) + ast_cli(fd, "DTMF "); if (chan->logmask & (1 << __LOG_VERBOSE)) ast_cli(fd, "Verbose "); if (chan->logmask & (1 << __LOG_WARNING)) @@ -653,6 +660,9 @@ static void ast_log_vsyslog(int level, const char *file, int line, const char *f if (level == __LOG_VERBOSE) { snprintf(buf, sizeof(buf), "VERBOSE[%ld]: ", (long)GETTID()); level = __LOG_DEBUG; + } else if (level == __LOG_DTMF) { + snprintf(buf, sizeof(buf), "DTMF[%ld]: ", (long)GETTID()); + level = __LOG_DEBUG; } else { snprintf(buf, sizeof(buf), "%s[%ld]: %s:%d in %s: ", levels[level], (long)GETTID(), file, line, function);