diff --git a/libs/freetdm/.update b/libs/freetdm/.update
index 5009a80d3a..e9475b68ed 100644
--- a/libs/freetdm/.update
+++ b/libs/freetdm/.update
@@ -1 +1 @@
-Tue Jun 3 17:09:07 EDT 2008
+Fri Oct 3 17:54:41 EDT 2008
diff --git a/libs/freetdm/conf/openzap.conf.xml b/libs/freetdm/conf/openzap.conf.xml
index 8326505177..bfa2bc0391 100644
--- a/libs/freetdm/conf/openzap.conf.xml
+++ b/libs/freetdm/conf/openzap.conf.xml
@@ -5,6 +5,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/libs/freetdm/mod_openzap/mod_openzap.c b/libs/freetdm/mod_openzap/mod_openzap.c
index 5ea4e7728d..1fa56ea393 100644
--- a/libs/freetdm/mod_openzap/mod_openzap.c
+++ b/libs/freetdm/mod_openzap/mod_openzap.c
@@ -1794,7 +1794,9 @@ static switch_status_t load_config(void)
zap_span_t *span = NULL;
char *tonegroup = NULL;
uint32_t opts = 0;
-
+ int q921loglevel = -1;
+ int q931loglevel = -1;
+
for (param = switch_xml_child(myspan, "param"); param; param = param->next) {
char *var = (char *) switch_xml_attr_soft(param, "name");
char *val = (char *) switch_xml_attr_soft(param, "value");
@@ -1805,6 +1807,14 @@ static switch_status_t load_config(void)
mode = val;
} else if (!strcasecmp(var, "dialect")) {
dialect = val;
+ } else if (!strcasecmp(var, "q921loglevel")) {
+ if ((q921loglevel = switch_log_str2level(val)) == SWITCH_LOG_INVALID) {
+ q921loglevel = -1;
+ }
+ } else if (!strcasecmp(var, "q931loglevel")) {
+ if ((q931loglevel = switch_log_str2level(val)) == SWITCH_LOG_INVALID) {
+ q931loglevel = -1;
+ }
} else if (!strcasecmp(var, "context")) {
context = val;
} else if (!strcasecmp(var, "suggest-channel") && switch_true(val)) {
@@ -1813,8 +1823,7 @@ static switch_status_t load_config(void)
dialplan = val;
}
}
-
-
+
if (!id && !name) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "span missing required param 'id'\n");
continue;
@@ -1849,6 +1858,8 @@ static switch_status_t load_config(void)
if (zap_configure_span("isdn", span, on_clear_channel_signal,
"mode", mode,
"dialect", dialect,
+ "q921loglevel", q921loglevel,
+ "q931loglevel", q931loglevel,
TAG_END) != ZAP_SUCCESS) {
zap_log(ZAP_LOG_ERROR, "Error starting OpenZAP span %d mode: %d dialect: %d error: %s\n", span_id, mode, dialect, span->last_error);
continue;
diff --git a/libs/freetdm/src/isdn/Q921.c b/libs/freetdm/src/isdn/Q921.c
index a3e5ec3783..7667203227 100644
--- a/libs/freetdm/src/isdn/Q921.c
+++ b/libs/freetdm/src/isdn/Q921.c
@@ -2993,6 +2993,12 @@ void Q921SetLogLevel(L2TRUNK trunk, Q921LogLevel_t level)
if(!trunk)
return;
+ if (level < Q921_LOG_NONE) {
+ level = Q921_LOG_NONE;
+ } else if (level > Q921_LOG_DEBUG) {
+ level = Q921_LOG_DEBUG;
+ }
+
trunk->loglevel = level;
}
diff --git a/libs/freetdm/src/isdn/Q931.c b/libs/freetdm/src/isdn/Q931.c
index b29bcf97dd..a235253c3a 100644
--- a/libs/freetdm/src/isdn/Q931.c
+++ b/libs/freetdm/src/isdn/Q931.c
@@ -860,6 +860,15 @@ void Q931SetLogCB(Q931_TrunkInfo_t *trunk, Q931LogCB_t func, void *priv)
*/
void Q931SetLogLevel(Q931_TrunkInfo_t *trunk, Q931LogLevel_t level)
{
+ if(!trunk)
+ return;
+
+ if (level < Q931_LOG_NONE) {
+ level = Q931_LOG_NONE;
+ } else if (level > Q931_LOG_DEBUG) {
+ level = Q931_LOG_DEBUG;
+ }
+
trunk->loglevel = level;
}
diff --git a/libs/freetdm/src/isdn/include/Q921.h b/libs/freetdm/src/isdn/include/Q921.h
index f09fa7577c..cb21a157ea 100644
--- a/libs/freetdm/src/isdn/include/Q921.h
+++ b/libs/freetdm/src/isdn/include/Q921.h
@@ -119,7 +119,10 @@ typedef enum /* Type of connection */
typedef enum
{
- Q921_LOG_NONE = 0,
+ Q921_LOG_NONE = -1,
+ Q921_LOG_EMERG = 0,
+ Q921_LOG_ALERT,
+ Q921_LOG_CRIT,
Q921_LOG_ERROR,
Q921_LOG_WARNING,
Q921_LOG_NOTICE,
diff --git a/libs/freetdm/src/isdn/include/Q931.h b/libs/freetdm/src/isdn/include/Q931.h
index e05c7e9dce..9877912f79 100644
--- a/libs/freetdm/src/isdn/include/Q931.h
+++ b/libs/freetdm/src/isdn/include/Q931.h
@@ -634,12 +634,15 @@ typedef struct {
typedef struct Q931_TrunkInfo Q931_TrunkInfo_t;
typedef enum {
- Q931_LOG_NONE = 0,
- Q931_LOG_ERROR,
- Q931_LOG_WARNING,
- Q931_LOG_NOTICE,
- Q931_LOG_INFO,
- Q931_LOG_DEBUG
+ Q931_LOG_NONE = -1,
+ Q931_LOG_EMERG,
+ Q931_LOG_ALERT,
+ Q931_LOG_CRIT,
+ Q931_LOG_ERROR,
+ Q931_LOG_WARNING,
+ Q931_LOG_NOTICE,
+ Q931_LOG_INFO,
+ Q931_LOG_DEBUG
} Q931LogLevel_t;
typedef L3INT (*Q931Tx34CB_t) (void *,L3UCHAR *, L3INT);
diff --git a/libs/freetdm/src/ozmod/ozmod_isdn/ozmod_isdn.c b/libs/freetdm/src/ozmod/ozmod_isdn/ozmod_isdn.c
index a9170d0d2b..87d0cf595f 100644
--- a/libs/freetdm/src/ozmod/ozmod_isdn/ozmod_isdn.c
+++ b/libs/freetdm/src/ozmod/ozmod_isdn/ozmod_isdn.c
@@ -1518,34 +1518,8 @@ static int q931_rx_32(void *pvt, Q921DLMsg_t ind, L3UCHAR tei, L3UCHAR *msg, L3I
static int zap_isdn_q921_log(void *pvt, Q921LogLevel_t level, char *msg, L2INT size)
{
zap_span_t *span = (zap_span_t *) pvt;
- int loglevel = ZAP_LOG_LEVEL_DEBUG;
- switch(level) {
- case Q921_LOG_DEBUG:
- loglevel = ZAP_LOG_LEVEL_DEBUG;
- break;
-
- case Q921_LOG_INFO:
- loglevel = ZAP_LOG_LEVEL_INFO;
- break;
-
- case Q921_LOG_NOTICE:
- loglevel = ZAP_LOG_LEVEL_NOTICE;
- break;
-
- case Q921_LOG_WARNING:
- loglevel = ZAP_LOG_LEVEL_WARNING;
- break;
-
- case Q921_LOG_ERROR:
- loglevel = ZAP_LOG_LEVEL_ERROR;
- break;
-
- default:
- return 0;
- }
-
- zap_log("Span", "Q.921", span->span_id, loglevel, "%s", msg);
+ zap_log("Span", "Q.921", span->span_id, (int)level, "%s", msg);
return 0;
}
@@ -1553,7 +1527,7 @@ static L3INT zap_isdn_q931_log(void *pvt, Q931LogLevel_t level, char *msg, L3INT
{
zap_span_t *span = (zap_span_t *) pvt;
- zap_log("Span", "Q.931", span->span_id, ZAP_LOG_LEVEL_DEBUG, "%s", msg);
+ zap_log("Span", "Q.931", span->span_id, (int)level, "%s", msg);
return 0;
}
@@ -1697,6 +1671,8 @@ static ZIO_SIG_CONFIGURE_FUNCTION(zap_isdn_configure_span)
char *var, *val;
Q931Dialect_t dialect = Q931_Dialect_National;
uint32_t opts = 0;
+ int q921loglevel = 0;
+ int q931loglevel = 0;
if (span->signal_type) {
snprintf(span->last_error, sizeof(span->last_error), "Span is already configured for signalling [%d].", span->signal_type);
@@ -1760,9 +1736,23 @@ static ZIO_SIG_CONFIGURE_FUNCTION(zap_isdn_configure_span)
break;
}
tonemap = (const char *)val;
+ } else if (!strcasecmp(var, "q921loglevel")) {
+ q921loglevel = va_arg(ap, int);
+ if (q921loglevel < Q921_LOG_NONE) {
+ q921loglevel = Q921_LOG_NONE;
+ } else if (q921loglevel > Q921_LOG_DEBUG) {
+ q921loglevel = Q921_LOG_DEBUG;
+ }
+ } else if (!strcasecmp(var, "q931loglevel")) {
+ q931loglevel = va_arg(ap, int);
+ if (q931loglevel < Q931_LOG_NONE) {
+ q931loglevel = Q931_LOG_NONE;
+ } else if (q931loglevel > Q931_LOG_DEBUG) {
+ q931loglevel = Q931_LOG_DEBUG;
+ }
}
}
-
+
span->start = zap_isdn_start;
isdn_data->sig_cb = sig_cb;
isdn_data->dchans[0] = dchans[0];
@@ -1781,7 +1771,7 @@ static ZIO_SIG_CONFIGURE_FUNCTION(zap_isdn_configure_span)
&isdn_data->q931);
Q921SetLogCB(&isdn_data->q921, &zap_isdn_q921_log, isdn_data);
- Q921SetLogLevel(&isdn_data->q921, Q921_LOG_NONE);
+ Q921SetLogLevel(&isdn_data->q921, (Q921LogLevel_t)q921loglevel);
Q931Api_InitTrunk(&isdn_data->q931,
dialect,
@@ -1794,7 +1784,7 @@ static ZIO_SIG_CONFIGURE_FUNCTION(zap_isdn_configure_span)
span);
Q931SetLogCB(&isdn_data->q931, &zap_isdn_q931_log, isdn_data);
- Q931SetLogLevel(&isdn_data->q931, Q931_LOG_DEBUG);
+ Q931SetLogLevel(&isdn_data->q931, (Q931LogLevel_t)q931loglevel);
isdn_data->q931.autoRestartAck = 1;
isdn_data->q931.autoConnectAck = 0;