mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-13 07:45:26 +00:00
Fix for Q.921 not always recovering
This commit is contained in:
parent
06a3266360
commit
15ef8925c3
@ -475,8 +475,16 @@ void sngisdn_snd_restart(ftdm_channel_t *ftdmchan)
|
||||
void sngisdn_snd_data(ftdm_channel_t *dchan, uint8_t *data, ftdm_size_t len)
|
||||
{
|
||||
sng_l1_frame_t l1_frame;
|
||||
ftdm_alarm_flag_t alarmbits = 0;
|
||||
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) dchan->span->signal_data;
|
||||
|
||||
ftdm_channel_get_alarms(dchan, &alarmbits);
|
||||
|
||||
if (alarmbits) {
|
||||
ftdm_log_chan_msg(dchan, FTDM_LOG_WARNING, "Dropping incoming data due to L1 alarm\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (len > sizeof(l1_frame.data)) {
|
||||
ftdm_log_chan(dchan, FTDM_LOG_ERROR, "Received frame of %"FTDM_SIZE_FMT" bytes, exceeding max size of %"FTDM_SIZE_FMT" bytes\n",
|
||||
len, sizeof(l1_frame.data));
|
||||
@ -548,9 +556,11 @@ void sngisdn_snd_event(sngisdn_span_data_t *signal_data, ftdm_oob_event_t event)
|
||||
case FTDM_OOB_ALARM_CLEAR:
|
||||
l1_event.type = SNG_L1EVENT_ALARM_OFF;
|
||||
sng_isdn_event_ind(signal_data->link_id, &l1_event);
|
||||
|
||||
ftdm_sched_timer(signal_data->sched, "delayed_dl_req", 8000, sngisdn_delayed_dl_req, (void*) signal_data, NULL);
|
||||
signal_data->dl_request_pending = 1;
|
||||
|
||||
if (!signal_data->dl_request_pending) {
|
||||
signal_data->dl_request_pending = 1;
|
||||
ftdm_sched_timer(signal_data->sched, "delayed_dl_req", 8000, sngisdn_delayed_dl_req, (void*) signal_data, NULL);
|
||||
}
|
||||
break;
|
||||
case FTDM_OOB_ALARM_TRAP:
|
||||
l1_event.type = SNG_L1EVENT_ALARM_ON;
|
||||
|
@ -1214,14 +1214,23 @@ void sngisdn_t3_timeout(void *p_sngisdn_info)
|
||||
|
||||
void sngisdn_delayed_dl_req(void *p_signal_data)
|
||||
{
|
||||
ftdm_signaling_status_t sigstatus = FTDM_SIG_STATE_DOWN;
|
||||
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t *)p_signal_data;
|
||||
ftdm_span_t *span = signal_data->ftdm_span;
|
||||
|
||||
if (!signal_data->dl_request_pending) {
|
||||
return;
|
||||
}
|
||||
signal_data->dl_request_pending = 0;
|
||||
|
||||
ftdm_span_get_sig_status(span, &sigstatus);
|
||||
if (sigstatus == FTDM_SIG_STATE_UP) {
|
||||
signal_data->dl_request_pending = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
sngisdn_snd_dl_req(span->channels[1]);
|
||||
ftdm_sched_timer(signal_data->sched, "delayed_dl_req", 4000, sngisdn_delayed_dl_req, (void*) signal_data, NULL);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user