From 91f9374a9f7d1b1ae23347b9ef2cd5104c4b49e5 Mon Sep 17 00:00:00 2001
From: David Yat Sin <dyatsin@sangoma.com>
Date: Mon, 11 Jun 2012 13:23:37 -0400
Subject: [PATCH] Added code to treat sngss7_config section (same as sng_isup)

---
 libs/freetdm/mod_freetdm/mod_freetdm.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c
index 2e4f7e1e5f..9896e932aa 100755
--- a/libs/freetdm/mod_freetdm/mod_freetdm.c
+++ b/libs/freetdm/mod_freetdm/mod_freetdm.c
@@ -2894,8 +2894,11 @@ static ftdm_conf_node_t *_get_ss7_config_node(switch_xml_t cfg, const char *conf
 		return NULL;
 	}
 
-	/* search the isup config */
-	for (isup = switch_xml_child(ss7configs, "sng_isup"); isup; isup = isup->next) {
+	/* sng_isup and ss7config xml childs are treated the same way. sng_isup was used initially, but does not make sense
+	 * for configurations that do not have an ISUP layer, sng_isup is kept for backward compatibility */
+
+	/* search the ss7config */
+	for (isup = switch_xml_child(ss7configs, "sngss7_config"); isup; isup = isup->next) {
 		char *name = (char *) switch_xml_attr(isup, "name");
 		if (!name) {
 			continue;
@@ -2904,10 +2907,23 @@ static ftdm_conf_node_t *_get_ss7_config_node(switch_xml_t cfg, const char *conf
 			break;
 		}
 	}
-
+	
 	if (!isup) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "not found '%s' sng_isup XML config section\n", confname);
-		return NULL;
+		/* search the isup config */
+		for (isup = switch_xml_child(ss7configs, "sng_isup"); isup; isup = isup->next) {
+			char *name = (char *) switch_xml_attr(isup, "name");
+			if (!name) {
+				continue;
+			}
+			if (!strcasecmp(name, confname)) {
+				break;
+			}
+		}
+
+		if (!isup) {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "not found '%s' ss7config or sng_isup XML config section\n", confname);
+			return NULL;
+		}
 	}
 
 	/* found our XML chunk, create the root node */