diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 98767d3280..ca7154cfde 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -2441,6 +2441,12 @@ SWITCH_STANDARD_API(sofia_function) func = cmd_status; } else if (!strcasecmp(argv[0], "xmlstatus")) { func = cmd_xml_status; + } else if (!strcasecmp(argv[0], "tracelevel")) { + if (argv[1]) { + mod_sofia_globals.tracelevel = switch_log_str2level(argv[1]); + } + stream->write_function(stream, "+OK tracelevel is %s", switch_log_level2str(mod_sofia_globals.tracelevel)); + goto done; } else if (!strcasecmp(argv[0], "loglevel")) { if (argc > 2 && argv[2] && switch_is_number(argv[2])) { int level = atoi(argv[2]); diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 65a604913e..a27b26f5ee 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -274,6 +274,7 @@ struct mod_sofia_globals { int debug_presence; int auto_restart; int auto_nat; + int tracelevel; }; extern struct mod_sofia_globals mod_sofia_globals; diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index fb781c756c..08e2d5b221 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -1003,9 +1003,9 @@ void launch_sofia_profile_thread(sofia_profile_t *profile) static void logger(void *logarg, char const *fmt, va_list ap) { if (fmt && ap) { - switch_log_vprintf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_CONSOLE, fmt, ap); + switch_log_vprintf(SWITCH_CHANNEL_LOG_CLEAN, mod_sofia_globals.tracelevel, fmt, ap); } else if (fmt && !ap) { - switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_CONSOLE, "%s", fmt); + switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, mod_sofia_globals.tracelevel, "%s", fmt); } } @@ -1521,6 +1521,8 @@ switch_status_t reconfig_sofia(sofia_profile_t *profile) char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcasecmp(var, "debug")) { profile->debug = atoi(val); + } else if (!strcasecmp(var, "tracelevel")) { + mod_sofia_globals.tracelevel = switch_log_str2level(val); } else if (!strcasecmp(var, "sip-trace")) { if (switch_true(val)) { sofia_set_flag(profile, TFLAG_TPORT_LOG); diff --git a/src/switch_log.c b/src/switch_log.c index ca686ddd11..f444f26c3f 100644 --- a/src/switch_log.c +++ b/src/switch_log.c @@ -120,6 +120,19 @@ SWITCH_DECLARE(switch_log_level_t) switch_log_str2level(const char *str) int x = 0; switch_log_level_t level = SWITCH_LOG_INVALID; + if (switch_is_number(str)) { + x = atoi(str); + + if (x > SWITCH_LOG_INVALID) { + return SWITCH_LOG_INVALID -1; + } else if (x < 0) { + return 0; + } else { + return x; + } + } + + for (x = 0;; x++) { if (!LEVELS[x]) { break; diff --git a/src/switch_utils.c b/src/switch_utils.c index 4d1532df1d..31b182ebde 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -690,6 +690,10 @@ SWITCH_DECLARE(switch_bool_t) switch_is_number(const char *str) const char *p; switch_bool_t r = SWITCH_TRUE; + if (*str == '-' || *str == '+') { + str++; + } + for (p = str; p && *p; p++) { if (!(*p == '.' || (*p > 47 && *p < 58))) { r = SWITCH_FALSE;