chlog: freetdm: isdn: fix for 5ESS call clearing procedures

This commit is contained in:
David Yat Sin 2011-02-01 15:41:23 -05:00
parent be370d45eb
commit ae4b2873b0
1 changed files with 10 additions and 1 deletions

View File

@ -683,8 +683,8 @@ static ftdm_status_t ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdm
if (!sngisdn_test_flag(sngisdn_info, FLAG_SENT_PROCEED)) { if (!sngisdn_test_flag(sngisdn_info, FLAG_SENT_PROCEED)) {
/* By default, we do not send a progress indicator in the proceed */ /* By default, we do not send a progress indicator in the proceed */
ftdm_sngisdn_progind_t prog_ind = {SNGISDN_PROGIND_LOC_USER, SNGISDN_PROGIND_DESCR_INVALID}; ftdm_sngisdn_progind_t prog_ind = {SNGISDN_PROGIND_LOC_USER, SNGISDN_PROGIND_DESCR_INVALID};
sngisdn_set_flag(sngisdn_info, FLAG_SENT_PROCEED); sngisdn_set_flag(sngisdn_info, FLAG_SENT_PROCEED);
sngisdn_snd_proceed(ftdmchan, prog_ind); sngisdn_snd_proceed(ftdmchan, prog_ind);
} }
} }
@ -800,6 +800,15 @@ static ftdm_status_t ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdm
/* If we never received a PROCEED/ALERT/PROGRESS/CONNECT on an outgoing call, we need to send release instead of disconnect */ /* If we never received a PROCEED/ALERT/PROGRESS/CONNECT on an outgoing call, we need to send release instead of disconnect */
sngisdn_snd_release(ftdmchan, 0); sngisdn_snd_release(ftdmchan, 0);
break; break;
case FTDM_CHANNEL_STATE_PROCEED:
if (!ftdm_test_flag(ftdmchan, FTDM_CHANNEL_OUTBOUND) &&
((sngisdn_span_data_t*)(ftdmchan->span->signal_data))->switchtype == SNGISDN_SWITCH_5ESS) {
/* When using 5ESS, if the user wants to clear an inbound call, the correct procedure is to send a PROGRESS with in-band info available, and play tones. Then send a DISCONNECT. If we reached this point, it means user did not try to play-tones, so send a RELEASE because remote side does not expect DISCONNECT in state 3 */
sngisdn_snd_release(ftdmchan, 0);
break;
}
/* fall-through */
default: default:
sngisdn_snd_disconnect(ftdmchan); sngisdn_snd_disconnect(ftdmchan);
break; break;