From ae4b2873b0e56090658953f503157166825b66bc Mon Sep 17 00:00:00 2001 From: David Yat Sin Date: Tue, 1 Feb 2011 15:41:23 -0500 Subject: [PATCH] chlog: freetdm: isdn: fix for 5ESS call clearing procedures --- .../src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c index df528ae9c1..97984fbfab 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c @@ -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)) { /* 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}; - sngisdn_set_flag(sngisdn_info, FLAG_SENT_PROCEED); + 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 */ sngisdn_snd_release(ftdmchan, 0); 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: sngisdn_snd_disconnect(ftdmchan); break;