mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-15 08:29:45 +00:00
freetdm: more analog changes to attempt to make the state transitions more similar
to other signaling modules
This commit is contained in:
parent
60cb91b042
commit
37cdd5b934
@ -491,9 +491,10 @@ static void *ftdm_analog_channel_run(ftdm_thread_t *me, void *obj)
|
|||||||
ftdm_channel_command(ftdmchan, FTDM_COMMAND_GENERATE_RING_OFF, NULL);
|
ftdm_channel_command(ftdmchan, FTDM_COMMAND_GENERATE_RING_OFF, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_OFFHOOK) &&
|
if (ftdmchan->type == FTDM_CHAN_TYPE_FXS &&
|
||||||
|
ftdm_test_flag(ftdmchan, FTDM_CHANNEL_OFFHOOK) &&
|
||||||
(ftdmchan->last_state == FTDM_CHANNEL_STATE_RINGING || ftdmchan->last_state == FTDM_CHANNEL_STATE_DIALTONE
|
(ftdmchan->last_state == FTDM_CHANNEL_STATE_RINGING || ftdmchan->last_state == FTDM_CHANNEL_STATE_DIALTONE
|
||||||
|| ftdmchan->last_state >= FTDM_CHANNEL_STATE_RING)) {
|
|| ftdmchan->last_state == FTDM_CHANNEL_STATE_RING)) {
|
||||||
ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_BUSY);
|
ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_BUSY);
|
||||||
} else {
|
} else {
|
||||||
ftdmchan->caller_data.hangup_cause = FTDM_CAUSE_NORMAL_CLEARING;
|
ftdmchan->caller_data.hangup_cause = FTDM_CAUSE_NORMAL_CLEARING;
|
||||||
|
@ -329,8 +329,8 @@ static void *ftdm_analog_em_channel_run(ftdm_thread_t *me, void *obj)
|
|||||||
{
|
{
|
||||||
if (state_counter > 500) {
|
if (state_counter > 500) {
|
||||||
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_OFFHOOK) &&
|
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_OFFHOOK) &&
|
||||||
(ftdmchan->last_state == FTDM_CHANNEL_STATE_RING || ftdmchan->last_state == FTDM_CHANNEL_STATE_DIALTONE
|
(ftdmchan->last_state == FTDM_CHANNEL_STATE_RINGING || ftdmchan->last_state == FTDM_CHANNEL_STATE_DIALTONE
|
||||||
|| ftdmchan->last_state >= FTDM_CHANNEL_STATE_IDLE)) {
|
|| ftdmchan->last_state == FTDM_CHANNEL_STATE_RING)) {
|
||||||
ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_BUSY);
|
ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_BUSY);
|
||||||
} else {
|
} else {
|
||||||
ftdmchan->caller_data.hangup_cause = FTDM_CAUSE_NORMAL_CLEARING;
|
ftdmchan->caller_data.hangup_cause = FTDM_CAUSE_NORMAL_CLEARING;
|
||||||
@ -340,7 +340,7 @@ static void *ftdm_analog_em_channel_run(ftdm_thread_t *me, void *obj)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FTDM_CHANNEL_STATE_UP:
|
case FTDM_CHANNEL_STATE_UP:
|
||||||
case FTDM_CHANNEL_STATE_IDLE:
|
case FTDM_CHANNEL_STATE_RING:
|
||||||
{
|
{
|
||||||
ftdm_sleep(interval);
|
ftdm_sleep(interval);
|
||||||
continue;
|
continue;
|
||||||
@ -386,7 +386,7 @@ static void *ftdm_analog_em_channel_run(ftdm_thread_t *me, void *obj)
|
|||||||
ftdm_channel_use(ftdmchan);
|
ftdm_channel_use(ftdmchan);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FTDM_CHANNEL_STATE_IDLE:
|
case FTDM_CHANNEL_STATE_RING:
|
||||||
{
|
{
|
||||||
ftdm_channel_use(ftdmchan);
|
ftdm_channel_use(ftdmchan);
|
||||||
|
|
||||||
@ -421,7 +421,7 @@ static void *ftdm_analog_em_channel_run(ftdm_thread_t *me, void *obj)
|
|||||||
ftdm_channel_command(ftdmchan, FTDM_COMMAND_WINK, NULL);
|
ftdm_channel_command(ftdmchan, FTDM_COMMAND_WINK, NULL);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FTDM_CHANNEL_STATE_RING:
|
case FTDM_CHANNEL_STATE_RINGING:
|
||||||
{
|
{
|
||||||
ftdm_buffer_zero(dt_buffer);
|
ftdm_buffer_zero(dt_buffer);
|
||||||
teletone_run(&ts, ftdmchan->span->tone_map[FTDM_TONEMAP_RING]);
|
teletone_run(&ts, ftdmchan->span->tone_map[FTDM_TONEMAP_RING]);
|
||||||
@ -477,7 +477,7 @@ static void *ftdm_analog_em_channel_run(ftdm_thread_t *me, void *obj)
|
|||||||
|
|
||||||
if (last_digit && (!collecting || ((elapsed - last_digit > analog_data->digit_timeout) || strlen(dtmf) > analog_data->max_dialstr))) {
|
if (last_digit && (!collecting || ((elapsed - last_digit > analog_data->digit_timeout) || strlen(dtmf) > analog_data->max_dialstr))) {
|
||||||
ftdm_log(FTDM_LOG_DEBUG, "Number obtained [%s]\n", dtmf);
|
ftdm_log(FTDM_LOG_DEBUG, "Number obtained [%s]\n", dtmf);
|
||||||
ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_IDLE);
|
ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_RING);
|
||||||
last_digit = 0;
|
last_digit = 0;
|
||||||
collecting = 0;
|
collecting = 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user