]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: mod_freetdm - fix progress media state for R2 signaling
authorMoises Silva <moy@sangoma.com>
Wed, 8 Dec 2010 16:57:24 +0000 (11:57 -0500)
committerMoises Silva <moy@sangoma.com>
Wed, 8 Dec 2010 16:57:24 +0000 (11:57 -0500)
         ftmod_r2 - Do not set the state to DIALING unless openr2_chan_make_call succeeds

libs/freetdm/mod_freetdm/mod_freetdm.c
libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c

index ca16e8bc71351fd183ce141105a36319c853d551..7ea6bb6d375a812889c600682a9002ecf52f66fc 100755 (executable)
@@ -2033,7 +2033,6 @@ static FIO_SIGNAL_CB_FUNCTION(on_r2_signal)
                break;
 
                case FTDM_SIGEVENT_PROGRESS:
-               case FTDM_SIGEVENT_PROGRESS_MEDIA:
                {
                        if ((session = ftdm_channel_get_session(sigmsg->channel, 0))) {
                                channel = switch_core_session_get_channel(session);
@@ -2043,6 +2042,16 @@ static FIO_SIGNAL_CB_FUNCTION(on_r2_signal)
                }
                break;
 
+               case FTDM_SIGEVENT_PROGRESS_MEDIA:
+               {
+                       if ((session = ftdm_channel_get_session(sigmsg->channel, 0))) {
+                               channel = switch_core_session_get_channel(session);
+                               switch_channel_mark_pre_answered(channel);
+                               switch_core_session_rwunlock(session);
+                       }
+               }
+               break;
+
                case FTDM_SIGEVENT_UP:
                {
                        if ((session = ftdm_channel_get_session(sigmsg->channel, 0))) {
index 2a95b01fe9171a4bd1fb4622890c3f608acc0ddc..02860189b99b0442655abc2868152c88b9b9855f 100644 (file)
@@ -382,9 +382,6 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(r2_outgoing_call)
        }
 
        ft_r2_clean_call(ftdmchan->call_data);
-       R2CALL(ftdmchan)->ftdm_call_started = 1;
-       R2CALL(ftdmchan)->chanstate = FTDM_CHANNEL_STATE_DOWN;
-       ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_DIALING);
 
        /* start io dump */
        if (r2data->mf_dump_size) {
@@ -395,7 +392,7 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(r2_outgoing_call)
        callstatus = openr2_chan_make_call(R2CALL(ftdmchan)->r2chan, 
                        ftdmchan->caller_data.cid_num.digits, 
                        ftdmchan->caller_data.dnis.digits, 
-                       OR2_CALLING_PARTY_CATEGORY_NATIONAL_SUBSCRIBER);
+                       r2data->category);
 
        if (callstatus) {
                ftdm_log_chan_msg(ftdmchan, FTDM_LOG_CRIT, "Failed to make call in R2 channel, openr2_chan_make_call failed\n");
@@ -408,6 +405,10 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(r2_outgoing_call)
                return FTDM_BREAK;
        }
 
+       R2CALL(ftdmchan)->ftdm_call_started = 1;
+       R2CALL(ftdmchan)->chanstate = FTDM_CHANNEL_STATE_DOWN;
+       ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_DIALING);
+
        ftdm_channel_set_feature(ftdmchan, FTDM_CHANNEL_FEATURE_IO_STATS);
        ftdm_channel_command(ftdmchan, FTDM_COMMAND_FLUSH_TX_BUFFERS, NULL);
        ftdm_channel_command(ftdmchan, FTDM_COMMAND_FLUSH_RX_BUFFERS, NULL);
@@ -1354,6 +1355,7 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_r2_configure_span_signaling)
                hashtable_insert(spanpvt->r2calls, (void *)r2call->name, r2call, HASHTABLE_FLAG_FREE_VALUE);
        }
        r2data->mf_dump_size = r2conf.mf_dump_size;
+       r2data->category = r2conf.category;
        r2data->flags = 0;
        spanpvt->r2context = r2data->r2context;