if (hcause < 1 || hcause > 127) {
hcause = FTDM_CAUSE_DESTINATION_OUT_OF_ORDER;
}
- ftdm_channel_call_hangup_with_cause(tech_pvt->ftdmchan, hcause);
+ var = switch_channel_get_variable(channel, "ss7_rel_loc");
+ if (var) {
+ ftdm_usrmsg_t usrmsg;
+ memset(&usrmsg, 0, sizeof(ftdm_usrmsg_t));
+ ftdm_usrmsg_add_var(&usrmsg, "ss7_rel_loc", var);
+ ftdm_channel_call_hangup_with_cause_ex(tech_pvt->ftdmchan, hcause, &usrmsg);
+ } else {
+ ftdm_channel_call_hangup_with_cause(tech_pvt->ftdmchan, hcause);
+ }
}
break;
- default:
+ default:
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Unhandled channel type %d for channel %s\n", chantype, switch_channel_get_name(channel));
}
/* Used by ftmod_sangoma_ss7 only */
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-DNIS-NADI");
if (sipvar) {
- ftdm_usrmsg_add_var(&usrmsg, "ss7_clg_nadi", sipvar);
+ ftdm_usrmsg_add_var(&usrmsg, "ss7_cld_nadi", sipvar);
}
-
+
sipvar = switch_channel_get_variable(channel, "sip_h_X-FreeTDM-RDNIS");
if (sipvar) {
ftdm_set_string(caller_data.rdnis.digits, sipvar);
switch_channel_set_variable_printf(channel, "freetdm_calling_party_category", ftdm_calling_party_category2str(channel_caller_data->cpc));
switch_channel_set_variable_printf(channel, "screening_ind", ftdm_screening2str(channel_caller_data->screen));
switch_channel_set_variable_printf(channel, "presentation_ind", ftdm_presentation2str(channel_caller_data->pres));
-
-
+
if (globals.sip_headers) {
switch_channel_set_variable(channel, "sip_h_X-FreeTDM-SpanName", ftdm_channel_get_span_name(sigmsg->channel));
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-SpanNumber", "%d", spanid);
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-TransUUID", "%s",switch_core_session_get_uuid(session));
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-SpanNumber", "%d", spanid);
switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-ChanNumber", "%d", chanid);
switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-CallerName", "%s", channel_caller_data->cid_name);
switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-RDNIS-Plan", "%d", channel_caller_data->rdnis.plan);
switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-CPC", "%s", ftdm_calling_party_category2str(channel_caller_data->cpc));
-
+ var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_iam_nature_connection_hex");
+ if (!ftdm_strlen_zero(var_value)) {
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-IAM-NATURE-CONN-HEX", "%s", var_value);
+ }
+
+ var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_iam_fwd_ind_hex");
+ if (!ftdm_strlen_zero(var_value)) {
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-IAM-FWD-IND-HEX", "%s", var_value);
+ }
+
+ var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_access_transport_urlenc");
+ if (!ftdm_strlen_zero(var_value)) {
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-Access-Transport-URLENC", "%s", var_value);
+ }
+
+ var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_rdinfo_indicator");
+ if (!ftdm_strlen_zero(var_value)) {
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-RDINF-Indicator", "%s", var_value);
+ }
+
+ var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_rdinfo_orig");
+ if (!ftdm_strlen_zero(var_value)) {
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-RDINF-OrigReason", "%s", var_value);
+ }
+
+ var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_rdinfo_count");
+ if (!ftdm_strlen_zero(var_value)) {
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-RDINF-Count", "%s", var_value);
+ }
+
+ var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_rdinfo_reason");
+ if (!ftdm_strlen_zero(var_value)) {
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-RDINF-Reason", "%s", var_value);
+ }
+
var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_clg_nadi");
if (!ftdm_strlen_zero(var_value)) {
- switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-NADI", "%d", var_value);
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-NADI", "%s", var_value);
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-ANI-NADI", "%s", var_value);
+ }
+
+ var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_cld_nadi");
+ if (!ftdm_strlen_zero(var_value)) {
+ switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-DNIS-NADI", "%s", var_value);
}
var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_rdnis_screen_ind");
current_options |= ANALOG_OPTION_CALL_SWAP;
current_options &= ~ANALOG_OPTION_3WAY;
}
-
+
return current_options;
-
}
- #define CONFIG_ERROR(...) { \
+ #define LOAD_ERROR(...) { \
ftdm_log(FTDM_LOG_ERROR, __VA_ARGS__); \
globals.config_error = 1; \
}
}
if (zstatus != FTDM_SUCCESS) {
- CONFIG_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+ LOAD_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
continue;
}
-
+
if (!span_id) {
span_id = ftdm_span_get_id(span);
}
}
}
- if (ftdm_configure_span_signaling(span,
- "gsm",
+ if (ftdm_configure_span_signaling(span,
+ "gsm",
on_clear_channel_signal,
spanparameters) != FTDM_SUCCESS) {
- CONFIG_ERROR("Error configuring Sangoma GSM FreeTDM span %d\n", span_id);
+ LOAD_ERROR("Error configuring Sangoma GSM FreeTDM span %d\n", span_id);
continue;
}
SPAN_CONFIG[span_id].span = span;
}
if (zstatus != FTDM_SUCCESS) {
- CONFIG_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+ LOAD_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
continue;
}
-
+
if (!span_id) {
span_id = ftdm_span_get_id(span);
}
}
}
- if (ftdm_configure_span_signaling(span,
- "sangoma_isdn",
+ if (ftdm_configure_span_signaling(span,
+ "sangoma_isdn",
on_clear_channel_signal,
spanparameters) != FTDM_SUCCESS) {
- CONFIG_ERROR("Error configuring Sangoma ISDN FreeTDM span %d\n", span_id);
+ LOAD_ERROR("Error configuring Sangoma ISDN FreeTDM span %d\n", span_id);
continue;
}
SPAN_CONFIG[span_id].span = span;
}
if (zstatus != FTDM_SUCCESS) {
- CONFIG_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+ LOAD_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
continue;
}
-
+
if (!span_id) {
span_id = ftdm_span_get_id(span);
}
}
}
- if (ftdm_configure_span_signaling(span,
- "sangoma_ss7",
+ if (ftdm_configure_span_signaling(span,
+ "sangoma_ss7",
on_clear_channel_signal,
spanparameters) != FTDM_SUCCESS) {
- CONFIG_ERROR("Error configuring ss7 FreeTDM span %d\n", span_id);
+ LOAD_ERROR("Error configuring ss7 FreeTDM span %d\n", span_id);
continue;
}
SPAN_CONFIG[span_id].span = span;
}
if (zstatus != FTDM_SUCCESS) {
- CONFIG_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+ LOAD_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
continue;
}
-
+
if (!span_id) {
span_id = ftdm_span_get_id(span);
}
analog_options = enable_analog_option(val, analog_options);
}
}
-
+
if (!id && !name) {
- CONFIG_ERROR("span missing required param 'id'\n");
+ LOAD_ERROR("span missing required param 'id'\n");
continue;
}
-
+
if (!tonegroup) {
tonegroup = "us";
}
}
if (zstatus != FTDM_SUCCESS) {
- CONFIG_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+ LOAD_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
continue;
}
-
+
if (!span_id) {
span_id = ftdm_span_get_id(span);
}
analog_options = enable_analog_option(val, analog_options);
}
}
-
+
if (!id && !name) {
- CONFIG_ERROR("span missing required param 'id'\n");
+ LOAD_ERROR("span missing required param 'id'\n");
continue;
}
}
if (zstatus != FTDM_SUCCESS) {
- CONFIG_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
+ LOAD_ERROR("Error finding FreeTDM span id:%s name:%s\n", switch_str_nil(id), switch_str_nil(name));
continue;
}
-
+
if (!span_id) {
span_id = ftdm_span_get_id(span);
}
paramindex++;
}
}
-
+
zstatus = ftdm_span_find_by_name(name, &span);
if (zstatus != FTDM_SUCCESS) {
- CONFIG_ERROR("Error finding FreeTDM span %s\n", name);
+ LOAD_ERROR("Error finding FreeTDM span %s\n", name);
continue;
}