]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Minor change to allow skip states
authorDavid Yat Sin <dyatsin@sangoma.com>
Tue, 14 Dec 2010 21:04:25 +0000 (16:04 -0500)
committerDavid Yat Sin <dyatsin@sangoma.com>
Tue, 14 Dec 2010 21:04:25 +0000 (16:04 -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 deeb578c81a030966f0c458f8c480f6a7d4ed0aa..4bd0fdd33e3f8ee047fa7c9725f458ac4a055fa1 100644 (file)
@@ -2379,14 +2379,16 @@ FT_DECLARE(ftdm_status_t) _ftdm_channel_call_indicate(const char *file, const ch
                        ftdm_set_flag(ftdmchan, FTDM_CHANNEL_PROGRESS);
                        ftdm_set_flag(ftdmchan, FTDM_CHANNEL_MEDIA);
                } else {
-                       if (ftdmchan->state < FTDM_CHANNEL_STATE_PROGRESS) {
-                               ftdm_channel_set_state(file, func, line, ftdmchan, FTDM_CHANNEL_STATE_PROGRESS, 1);
-                       }
+                       if (!ftdm_test_flag(ftdmchan->span, FTDM_SPAN_USE_SKIP_STATES)) {
+                               if (ftdmchan->state < FTDM_CHANNEL_STATE_PROGRESS) {
+                                       ftdm_channel_set_state(file, func, line, ftdmchan, FTDM_CHANNEL_STATE_PROGRESS, 1);
+                               }
 
-                       /* set state unlocks the channel so we need to re-confirm that the channel hasn't gone to hell */
-                       if (ftdmchan->state == FTDM_CHANNEL_STATE_TERMINATING) {
-                               ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Ignoring answer because the call has moved to TERMINATING while we're moving to PROGRESS\n");
-                               goto done;
+                               /* set state unlocks the channel so we need to re-confirm that the channel hasn't gone to hell */
+                               if (ftdmchan->state == FTDM_CHANNEL_STATE_TERMINATING) {
+                                       ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Ignoring answer because the call has moved to TERMINATING while we're moving to PROGRESS\n");
+                                       goto done;
+                               }
                        }
 
                        ftdm_channel_set_state(file, func, line, ftdmchan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA, 1);
index 49e16ea12c6bbd397ffa93a4095e431b75b2e4bc..f8867d5fcf6a869f2e6ffb7f963a770348309117 100644 (file)
@@ -704,12 +704,9 @@ static void ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdmchan)
                                sigev.event_id = FTDM_SIGEVENT_PROGRESS;
                                ftdm_span_send_signal(ftdmchan->span, &sigev);
                        } else {
-                               /* If we already sent a PROCEED before, do not send a PROGRESS as there is nothing to indicate to the remote switch */
-                               if (ftdmchan->last_state != FTDM_CHANNEL_STATE_PROCEED) {
-                                       /* Send a progress message, indicating: Call is not end-to-end ISDN, further call progress may be available */
-                                       ftdm_sngisdn_progind_t prog_ind = {SNGISDN_PROGIND_LOC_USER, SNGISDN_PROGIND_DESCR_NETE_ISDN};
-                                       sngisdn_snd_progress(ftdmchan, prog_ind);
-                               }
+                               /* Send a progress message, indicating: Call is not end-to-end ISDN, further call progress may be available */
+                               ftdm_sngisdn_progind_t prog_ind = {SNGISDN_PROGIND_LOC_USER, SNGISDN_PROGIND_DESCR_NETE_ISDN};
+                               sngisdn_snd_progress(ftdmchan, prog_ind);                               
                        }
                }
                break;
index 003227016de3260e5f997b3687b1662fb3cc60da..bdd371704dc00fc4c00fcc1008e94fd9d5870ba2 100644 (file)
@@ -493,6 +493,9 @@ void sngisdn_process_disc_ind (sngisdn_event_data_t *sngisdn_event)
                        /* This is a race condition. We just sent a DISCONNECT, on this channel */
                        /* Do nothing */
                        break;
+               case FTDM_CHANNEL_STATE_RESET:
+                       ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Processing SETUP but channel in RESET state, ignoring\n");
+                       break;
                default:
                        ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Received DISCONNECT in an invalid state (%s)\n",
                                                  ftdm_channel_state2str(ftdmchan->state));
@@ -598,7 +601,7 @@ void sngisdn_process_rel_ind (sngisdn_event_data_t *sngisdn_event)
                        }
                        break;
                case FTDM_CHANNEL_STATE_RESET:
-                       /* User initiated reset, so they do not know about this call */
+                       ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Processing SETUP but channel in RESET state, ignoring\n");
                        break;
                default:
                        ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Received RELEASE in an invalid state (%s)\n",
@@ -1103,7 +1106,7 @@ void sngisdn_process_rst_cfm (sngisdn_event_data_t *sngisdn_event)
        }
        
        if (!rstEvnt->rstInd.eh.pres || !rstEvnt->rstInd.rstClass.pres) {
-               ftdm_log(FTDM_LOG_CRIT, "Receved RESTART, but Restart Indicator IE not present\n");
+               ftdm_log(FTDM_LOG_DEBUG, "Receved RESTART, but Restart Indicator IE not present\n");
                return;
        }