mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-12 20:27:19 +00:00
Freetdm - ISDN:Fix for progress indicator not set properly. Allow state change from RINGING to PROGRESS
This commit is contained in:
parent
98fa4a914c
commit
ae70ea0c13
@ -234,7 +234,7 @@ ftdm_state_map_t sangoma_isdn_state_map = {
|
|||||||
ZSD_OUTBOUND,
|
ZSD_OUTBOUND,
|
||||||
ZSM_UNACCEPTABLE,
|
ZSM_UNACCEPTABLE,
|
||||||
{FTDM_CHANNEL_STATE_RINGING, FTDM_END},
|
{FTDM_CHANNEL_STATE_RINGING, FTDM_END},
|
||||||
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_CHANNEL_STATE_UP, FTDM_END},
|
{FTDM_CHANNEL_STATE_TERMINATING, FTDM_CHANNEL_STATE_HANGUP, FTDM_CHANNEL_STATE_PROGRESS, FTDM_CHANNEL_STATE_PROGRESS_MEDIA, FTDM_CHANNEL_STATE_UP, FTDM_END},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ZSD_OUTBOUND,
|
ZSD_OUTBOUND,
|
||||||
|
@ -372,7 +372,10 @@ void sngisdn_process_cnst_ind (sngisdn_event_data_t *sngisdn_event)
|
|||||||
case FTDM_CHANNEL_STATE_PROGRESS:
|
case FTDM_CHANNEL_STATE_PROGRESS:
|
||||||
case FTDM_CHANNEL_STATE_RINGING:
|
case FTDM_CHANNEL_STATE_RINGING:
|
||||||
if (cnStEvnt->progInd.eh.pres && cnStEvnt->progInd.progDesc.val == IN_PD_IBAVAIL) {
|
if (cnStEvnt->progInd.eh.pres && cnStEvnt->progInd.progDesc.val == IN_PD_IBAVAIL) {
|
||||||
|
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Early media available\n");
|
||||||
sngisdn_set_flag(sngisdn_info, FLAG_MEDIA_READY);
|
sngisdn_set_flag(sngisdn_info, FLAG_MEDIA_READY);
|
||||||
|
} else {
|
||||||
|
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Early media not available\n");
|
||||||
}
|
}
|
||||||
switch (evntType) {
|
switch (evntType) {
|
||||||
case MI_CALLPROC:
|
case MI_CALLPROC:
|
||||||
@ -387,10 +390,8 @@ void sngisdn_process_cnst_ind (sngisdn_event_data_t *sngisdn_event)
|
|||||||
break;
|
break;
|
||||||
case MI_PROGRESS:
|
case MI_PROGRESS:
|
||||||
if (sngisdn_test_flag(sngisdn_info, FLAG_MEDIA_READY)) {
|
if (sngisdn_test_flag(sngisdn_info, FLAG_MEDIA_READY)) {
|
||||||
|
|
||||||
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA);
|
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS_MEDIA);
|
||||||
} else if (ftdmchan->state != FTDM_CHANNEL_STATE_PROGRESS) {
|
} else if (ftdmchan->state != FTDM_CHANNEL_STATE_PROGRESS) {
|
||||||
|
|
||||||
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS);
|
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_PROGRESS);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -39,7 +39,7 @@ void sngisdn_snd_setup(ftdm_channel_t *ftdmchan)
|
|||||||
ConEvnt conEvnt;
|
ConEvnt conEvnt;
|
||||||
sngisdn_chan_data_t *sngisdn_info = ftdmchan->call_data;
|
sngisdn_chan_data_t *sngisdn_info = ftdmchan->call_data;
|
||||||
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) ftdmchan->span->signal_data;
|
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) ftdmchan->span->signal_data;
|
||||||
ftdm_sngisdn_progind_t prog_ind = {SNGISDN_PROGIND_LOC_USER, SNGISDN_PROGIND_DESCR_NETE_ISDN};
|
ftdm_sngisdn_progind_t prog_ind = {SNGISDN_PROGIND_LOC_USER, SNGISDN_PROGIND_DESCR_ORIG_NISDN};
|
||||||
|
|
||||||
ftdm_assert((!sngisdn_info->suInstId && !sngisdn_info->spInstId), "Trying to call out, but call data was not cleared\n");
|
ftdm_assert((!sngisdn_info->suInstId && !sngisdn_info->spInstId), "Trying to call out, but call data was not cleared\n");
|
||||||
|
|
||||||
|
@ -789,7 +789,7 @@ ftdm_status_t set_prog_ind_ie(ftdm_channel_t *ftdmchan, ProgInd *progInd, ftdm_s
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ftdm_log(FTDM_LOG_WARNING, "Invalid prog_ind location:%d\n", loc);
|
ftdm_log(FTDM_LOG_WARNING, "Invalid prog_ind location:%d\n", loc);
|
||||||
progInd->location.val = IN_PD_NOTETEISDN;
|
progInd->location.val = IN_LOC_USER;
|
||||||
}
|
}
|
||||||
return FTDM_SUCCESS;
|
return FTDM_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user