From 890ecc6d45935421523f0f1ee463739ca64d4637 Mon Sep 17 00:00:00 2001
From: Stefan Knoblich <stkn@openisdn.net>
Date: Wed, 25 Jul 2012 11:03:41 +0200
Subject: [PATCH] ftmod_isdn: Use span trunk_mode to select default mode and
 print warning if final modes do not match.

Same as ftmod_libpri.

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
---
 .../freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c | 27 +++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c b/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c
index f5b957e7ae..153f380cdd 100644
--- a/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c
+++ b/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c
@@ -2659,11 +2659,24 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(isdn_configure_span)
 
 	isdn_data = malloc(sizeof(*isdn_data));
 	assert(isdn_data != NULL);
-	memset(isdn_data, 0, sizeof(*isdn_data));
 
-	isdn_data->mode = Q931_TE;
+	memset(isdn_data, 0, sizeof(*isdn_data));
 	dialect = Q931_Dialect_Q931;
 
+	/* Use trunk_mode span parameter to set default */
+	switch (ftdm_span_get_trunk_mode(span)) {
+	case FTDM_TRUNK_MODE_NET:
+		ftdm_log(FTDM_LOG_INFO, "Span '%s' [s%d] defaulting to NET mode\n",
+			ftdm_span_get_name(span), ftdm_span_get_id(span));
+		isdn_data->mode = Q931_NT;
+		break;
+	default:
+		ftdm_log(FTDM_LOG_INFO, "Span '%s' [s%d] defaulting to USER mode\n",
+			ftdm_span_get_name(span), ftdm_span_get_id(span));
+		isdn_data->mode = Q931_TE;
+		break;
+	}
+
 	for (i = 0; ftdm_parameters[i].var; i++) {
 		const char *var = ftdm_parameters[i].var;
 		const char *val = ftdm_parameters[i].val;
@@ -2727,6 +2740,16 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(isdn_configure_span)
 		digit_timeout = DEFAULT_DIGIT_TIMEOUT;
 	}
 
+	/* Check if modes match and log a message if they do not. Just to be on the safe side. */
+	if (isdn_data->mode == Q931_TE && ftdm_span_get_trunk_mode(span) == FTDM_TRUNK_MODE_NET) {
+		ftdm_log(FTDM_LOG_WARNING, "Span '%s' signalling set up for TE/CPE/USER mode, while port is running in NT/NET mode. You may want to check your 'trunk_mode' settings.\n",
+			ftdm_span_get_name(span));
+	}
+	else if (isdn_data->mode == Q931_NT && ftdm_span_get_trunk_mode(span) == FTDM_TRUNK_MODE_CPE) {
+		ftdm_log(FTDM_LOG_WARNING, "Span '%s' signalling set up for NT/NET mode, while port is running in TE/CPE/USER mode. You may want to check your 'trunk_mode' settings.\n",
+			ftdm_span_get_name(span));
+	}
+
 	/* allocate per b-chan data */
 	if (isdn_data->mode == Q931_NT) {
 		ftdm_isdn_bchan_data_t *data;