]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: ISDN allow change state from PROCEED to UP
authorDavid Yat Sin <dyatsin@sangoma.com>
Thu, 25 Nov 2010 21:16:36 +0000 (16:16 -0500)
committerDavid Yat Sin <dyatsin@sangoma.com>
Thu, 25 Nov 2010 23:55:27 +0000 (18:55 -0500)
libs/freetdm/src/ftdm_io.c
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c

index ede3ff8fc8cd08445af35c8e10ae6ca605b58a6b..6f543304a297904f2acd4b1b6edc0b7c50030f9f 100644 (file)
@@ -2033,6 +2033,11 @@ FT_DECLARE(ftdm_status_t) _ftdm_channel_call_answer(const char *file, const char
                goto done;
        }
 
+#if 0 
+       /* DAVIDY - We will fail RFC's if we do that, but some modules apart from ftmod_sangoma_isdn 
+        * expect the call to always to go PROGRESS and PROGRESS MEDIA state before going to UP, so 
+        * remove this only in netborder branch for now */
+
        if (ftdmchan->state < FTDM_CHANNEL_STATE_PROGRESS) {
                ftdm_channel_set_state(file, func, line, ftdmchan, FTDM_CHANNEL_STATE_PROGRESS, 1);
        }
@@ -2052,7 +2057,7 @@ FT_DECLARE(ftdm_status_t) _ftdm_channel_call_answer(const char *file, const char
                ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Ignoring answer because the call has moved to TERMINATING while we're moving to UP\n");
                goto done;
        }
-
+#endif
        ftdm_channel_set_state(file, func, line, ftdmchan, FTDM_CHANNEL_STATE_UP, 1);
 
 done:
index 6f5f83859045117d56bac8cdcd27277f19c5bb56..9aa52f816c1c475d2d2694e75c45580bbe6e6afa 100644 (file)
@@ -121,7 +121,8 @@ ftdm_state_map_t sangoma_isdn_state_map = {
                ZSD_INBOUND,
                ZSM_UNACCEPTABLE,
                {FTDM_CHANNEL_STATE_PROCEED, FTDM_END},
-               {FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_RINGING, FTDM_CHANNEL_STATE_PROGRESS, FTDM_CHANNEL_STATE_PROGRESS_MEDIA,FTDM_END}
+               {FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_RINGING, FTDM_CHANNEL_STATE_PROGRESS, FTDM_CHANNEL_STATE_PROGRESS_MEDIA,
+                FTDM_CHANNEL_STATE_UP, FTDM_END}
        },
        {
                ZSD_INBOUND,
index a541a655d800a22ab7fb41fb4e42ad56cef9280d..f10fa766e3ff2f8b5f645aa03433305bccbb3065 100644 (file)
@@ -377,18 +377,17 @@ void sngisdn_process_cnst_ind (sngisdn_event_data_t *sngisdn_event)
                
                        switch(ftdmchan->state) {
                                case FTDM_CHANNEL_STATE_DIALING:
-                                       if (evntType == MI_CALLPROC) {
-                                               ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROCEED);
-                                       } else if (evntType == MI_PROGRESS ||
-                                               (cnStEvnt->progInd.eh.pres && cnStEvnt->progInd.progDesc.val == IN_PD_IBAVAIL)) {
+                                       if (cnStEvnt->progInd.eh.pres && cnStEvnt->progInd.progDesc.val == IN_PD_IBAVAIL) {
                                                ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA);
+                                       } else  if (evntType == MI_CALLPROC) {
+                                               ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROCEED);
                                        } else {
                                                ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS);
                                        }
                                        break;
+                               case FTDM_CHANNEL_STATE_PROCEED:
                                case FTDM_CHANNEL_STATE_PROGRESS:
-                                       if (evntType == MI_PROGRESS ||
-                                               (cnStEvnt->progInd.eh.pres && cnStEvnt->progInd.progDesc.val == IN_PD_IBAVAIL)) {
+                                       if (cnStEvnt->progInd.eh.pres && cnStEvnt->progInd.progDesc.val == IN_PD_IBAVAIL) {
                                                ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA);
                                        }
                                        break;