]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
chlog: freetdm: isdn: fix for 5ESS call clearing procedures
authorDavid Yat Sin <dyatsin@sangoma.com>
Tue, 1 Feb 2011 20:41:23 +0000 (15:41 -0500)
committerDavid Yat Sin <dyatsin@sangoma.com>
Tue, 1 Feb 2011 20:41:23 +0000 (15:41 -0500)
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c

index df528ae9c10a52ecdf5319425b074f784609e541..97984fbfab77fa60a0f0a77b162f27d3449cbf48 100644 (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)) {
                                        /* 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;