status = span->fio->channel_next_event(ftdmchan, event);
if (status != FTDM_SUCCESS) {
- return status;
+ goto done;
}
- /* before returning the event to the user we do some core operations with certain OOB events */
- memset(&sigmsg, 0, sizeof(sigmsg));
- sigmsg.span_id = span->span_id;
- sigmsg.chan_id = (*event)->channel->chan_id;
- sigmsg.channel = (*event)->channel;
- switch ((*event)->enum_id) {
- case FTDM_OOB_ALARM_CLEAR:
- {
- sigmsg.event_id = FTDM_SIGEVENT_ALARM_CLEAR;
- ftdm_clear_flag_locked((*event)->channel, FTDM_CHANNEL_IN_ALARM);
- ftdm_span_send_signal(span, &sigmsg);
- }
- break;
- case FTDM_OOB_ALARM_TRAP:
- {
- sigmsg.event_id = FTDM_SIGEVENT_ALARM_TRAP;
- ftdm_set_flag_locked((*event)->channel, FTDM_CHANNEL_IN_ALARM);
- ftdm_span_send_signal(span, &sigmsg);
- }
- break;
- default:
- /* NOOP */
- break;
+ status = ftdm_event_handle_oob(*event);
+ if (status != FTDM_SUCCESS) {
+ ftdm_log(FTDM_LOG_ERROR, "failed to send SIGEVENT signal to user\n");
}
+
+ done:
+ ftdm_channel_unlock(ftdmchan);
return status;
}