From: Moises Silva Date: Wed, 14 Apr 2010 22:36:22 +0000 (-0400) Subject: complete ss7 config by setting context and dial plan X-Git-Tag: git2svn-syncpoint-master~223 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0abbe4bd0e5b20d7e2362b0f3c159ba6a32d4593;p=thirdparty%2Ffreeswitch.git complete ss7 config by setting context and dial plan --- diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c index 3a4ff4c9fb..fc3f1c4ca9 100644 --- a/libs/freetdm/mod_freetdm/mod_freetdm.c +++ b/libs/freetdm/mod_freetdm/mod_freetdm.c @@ -2198,11 +2198,15 @@ static switch_status_t load_config(void) if ((spans = switch_xml_child(cfg, "ss7_spans"))) { for (myspan = switch_xml_child(spans, "span"); myspan; myspan = myspan->next) { ftdm_status_t zstatus = FTDM_FAIL; + const char *context = "default"; + const char *dialplan = "XML"; + ftdm_conf_parameter_t spanparameters[30]; char *id = (char *) switch_xml_attr(myspan, "id"); char *name = (char *) switch_xml_attr(myspan, "name"); char *configname = (char *) switch_xml_attr(myspan, "config"); ftdm_span_t *span = NULL; uint32_t span_id = 0; + unsigned paramindex = 0; if (!name && !id) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "ss7 span missing required attribute 'id' or 'name', skipping ...\n"); continue; @@ -2239,14 +2243,38 @@ static switch_status_t load_config(void) continue; } - if (0) { - if (ftdm_configure_span("ss7", span, on_ss7_signal, - "confnode", ss7confnode, - TAG_END) != FTDM_SUCCESS) { - ftdm_log(FTDM_LOG_ERROR, "Error configuring ss7 FreeTDM span %d\n", span_id); - continue; + memset(spanparameters, 0, sizeof(spanparameters)); + 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"); + + if (sizeof(spanparameters)/sizeof(spanparameters[0]) == paramindex) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Too many parameters for ss7 span, ignoring any parameter after %s\n", var); + break; + } + + if (!strcasecmp(var, "context")) { + context = val; + } else if (!strcasecmp(var, "dialplan")) { + dialplan = val; + } else { + spanparameters[paramindex].var = var; + spanparameters[paramindex].val = val; + paramindex++; } } + + if (ftdm_configure_span("ss7", span, on_ss7_signal, + "confnode", ss7confnode, + "parameters", spanparameters, + TAG_END) != FTDM_SUCCESS) { + ftdm_log(FTDM_LOG_ERROR, "Error configuring ss7 FreeTDM span %d\n", span_id); + continue; + } + SPAN_CONFIG[span->span_id].span = span; + switch_copy_string(SPAN_CONFIG[span->span_id].context, context, sizeof(SPAN_CONFIG[span->span_id].context)); + switch_copy_string(SPAN_CONFIG[span->span_id].dialplan, dialplan, sizeof(SPAN_CONFIG[span->span_id].dialplan)); + switch_copy_string(SPAN_CONFIG[span->span_id].type, "Sangoma (SS7)", sizeof(SPAN_CONFIG[span->span_id].type)); ftdm_log(FTDM_LOG_DEBUG, "Configured ss7 FreeTDM span %d with config node %s\n", span_id, configname); } } @@ -2701,7 +2729,6 @@ static switch_status_t load_config(void) const char *dialplan = "XML"; uint32_t span_id = 0; ftdm_span_t *span = NULL; - const char *tonegroup = NULL; ftdm_conf_parameter_t spanparameters[30]; unsigned paramindex = 0; @@ -2723,9 +2750,8 @@ static switch_status_t load_config(void) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Too many parameters for boost span, ignoring any parameter after %s\n", var); break; } - if (!strcasecmp(var, "tonegroup")) { - tonegroup = val; - } else if (!strcasecmp(var, "context")) { + + if (!strcasecmp(var, "context")) { context = val; } else if (!strcasecmp(var, "dialplan")) { dialplan = val; @@ -2736,10 +2762,6 @@ static switch_status_t load_config(void) } } - if (!tonegroup) { - tonegroup = "us"; - } - if (name) { zstatus = ftdm_span_find_by_name(name, &span); } else { diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c index 8c0744538d..089e66da37 100644 --- a/libs/freetdm/src/ftdm_io.c +++ b/libs/freetdm/src/ftdm_io.c @@ -1623,8 +1623,8 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_get_sig_status(ftdm_channel_t *ftdmchan, if (ftdmchan->span->get_channel_sig_status) { return ftdmchan->span->get_channel_sig_status(ftdmchan, sigstatus); } else { - ftdm_log(FTDM_LOG_ERROR, "get_channel_sig_status method not implemented!\n"); - return FTDM_FAIL; + /* don't log error here, it can be called just to test if its supported */ + return FTDM_NOTIMPL; } }