}
-static const char *LEVEL_NAMES[] = {
+const char *FTDM_LEVEL_NAMES[9] = {
"EMERG",
"ALERT",
"CRIT",
NULL
};
-static int ftdm_log_level = 7;
+static int ftdm_log_level = FTDM_LOG_LEVEL_DEBUG;
static void default_logger(const char *file, const char *func, int line, int level, const char *fmt, ...)
{
vsnprintf(data, sizeof(data), fmt, ap);
- fprintf(stderr, "[%s] %s:%d %s() %s", LEVEL_NAMES[level], file, line, func, data);
+ fprintf(stderr, "[%s] %s:%d %s() %s", FTDM_LEVEL_NAMES[level], file, line, func, data);
va_end(ap);
ftdm_log(FTDM_LOG_CRIT, "Total Channel Cnt %i\n",cnt);
}
-#define FTDM_BOOST_SYNTAX "list sigmods | <sigmod_name> <command>"
+#define FTDM_BOOST_SYNTAX "list sigmods | <sigmod_name> <command> | tracelevel <span> <level>"
/**
* \brief API function to kill or debug a sangoma_boost span
* \param stream API stream handler
print_request_ids();
goto done;
}
-
+ } else if (!strcasecmp(argv[0], "tracelevel")) {
+ ftdm_status_t status;
+ const char *levelname = NULL;
+ int dbglevel;
+ ftdm_sangoma_boost_data_t *sangoma_boost_data;
+ ftdm_span_t *span;
+
+ if (argc <= 2) {
+ stream->write_function(stream, "-ERR usage: tracelevel <span> <level>\n");
+ goto done;
+ }
+
+ status = ftdm_span_find_by_name(argv[1], &span);
+ if (FTDM_SUCCESS != status) {
+ stream->write_function(stream, "-ERR failed to find span by name %s\n", argv[1]);
+ goto done;
+ }
+
+ if (span->signal_type != FTDM_SIGTYPE_SANGOMABOOST) {
+ stream->write_function(stream, "-ERR span %s is not of boost type\n", argv[1]);
+ goto done;
+ }
+
+ for (dbglevel = 0; (levelname = FTDM_LEVEL_NAMES[dbglevel]); dbglevel++) {
+ if (!strcasecmp(levelname, argv[2])) {
+ break;
+ }
+ }
+
+ if (!levelname) {
+ stream->write_function(stream, "-ERR invalid log level %s\n", argv[2]);
+ goto done;
+ }
+
+ sangoma_boost_data = span->signal_data;
+ sangoma_boost_data->pcon.debuglevel = dbglevel;
+ sangoma_boost_data->mcon.debuglevel = dbglevel;
+ stream->write_function(stream, "+OK span %s has now trace level %s\n", argv[1], FTDM_LEVEL_NAMES[dbglevel]);
+ goto done;
#ifndef __WINDOWS__
#if 0
/* NC: This code crashes the kernel due to fork on heavy fs load */
span->get_span_sig_status = sangoma_boost_get_span_sig_status;
span->set_span_sig_status = sangoma_boost_set_span_sig_status;
span->state_map = &boost_state_map;
+ sangoma_boost_data->mcon.debuglevel = FTDM_LOG_LEVEL_DEBUG;
+ sangoma_boost_data->pcon.debuglevel = FTDM_LOG_LEVEL_DEBUG;
ftdm_clear_flag(span, FTDM_SPAN_SUGGEST_CHAN_ID);
ftdm_set_flag(span, FTDM_SPAN_USE_CHAN_QUEUE);
if (sigmod_iface) {
if (event->event_id == SIGBOOST_EVENT_HEARTBEAT)
return;
- ftdm_log(file, func, line, FTDM_LOG_LEVEL_WARNING, "%s EVENT (%s): %s:(%X) [w%dg%d] CSid=%i Seq=%i Cn=[%s] Cd=[%s] Ci=[%s] Rdnis=[%s]\n",
+ ftdm_log(file, func, line, mcon->debuglevel, "%s EVENT (%s): %s:(%X) [w%dg%d] CSid=%i Seq=%i Cn=[%s] Cd=[%s] Ci=[%s] Rdnis=[%s]\n",
dir ? "TX":"RX",
priority ? "P":"N",
sangomabc_event_id_name(event->event_id),
{
if (event->event_id == SIGBOOST_EVENT_HEARTBEAT)
return;
- ftdm_log(file, func, line, FTDM_LOG_LEVEL_WARNING, "%s EVENT (%s): %s:(%X) [s%dc%d] Rc=%i CSid=%i Seq=%i \n",
+ ftdm_log(file, func, line, mcon->debuglevel, "%s EVENT (%s): %s:(%X) [s%dc%d] Rc=%i CSid=%i Seq=%i \n",
dir ? "TX":"RX",
priority ? "P":"N",
sangomabc_event_id_name(event->event_id),
ftdm_queue_t *boost_queue;
ftdm_interrupt_t *sock_interrupt;
ftdm_span_t *span;
+ int debuglevel;
};
typedef struct sangomabc_connection sangomabc_connection_t;
#define ftdm_log_chan(fchan, level, format, ...) ftdm_log(level, "s%dc%d " format, fchan->span_id, fchan->chan_id, __VA_ARGS__)
#define ftdm_log_chan_msg(fchan, level, msg) ftdm_log(level, "s%dc%d " msg, fchan->span_id, fchan->chan_id)
+extern const char *FTDM_LEVEL_NAMES[9];
+
static __inline__ void ftdm_abort(void)
{
#ifdef __cplusplus