}
}
break;
+ case FTDM_SIGEVENT_RELEASED: { /* twiddle */ } break;
default:
{
}
}
break;
+ case FTDM_SIGEVENT_RELEASED: { /* twiddle */ } break;
case FTDM_SIGEVENT_STOP:
{
private_t *tech_pvt = NULL;
status = ftdm_channel_from_event(sigmsg, &session);
}
break;
+
+ case FTDM_SIGEVENT_RELEASED: { /* twiddle */ } break;
/* on DNIS received from the R2 forward side, return status == FTDM_BREAK to stop requesting DNIS */
case FTDM_SIGEVENT_COLLECTED_DIGIT:
return ftdm_channel_from_event(sigmsg, &session);
}
break;
+
+ case FTDM_SIGEVENT_RELEASED: { /* twiddle */ } break;
+
case FTDM_SIGEVENT_STOP:
case FTDM_SIGEVENT_RESTART:
{
static ftdm_status_t ftdm_channel_clear_vars(ftdm_channel_t *ftdmchan);
FT_DECLARE(ftdm_status_t) ftdm_channel_done(ftdm_channel_t *ftdmchan)
{
+ ftdm_sigmsg_t sigmsg;
+
ftdm_assert_return(ftdmchan != NULL, FTDM_FAIL, "Null channel can't be done!\n");
ftdm_mutex_lock(ftdmchan->mutex);
ftdm_log(FTDM_LOG_DEBUG, "channel done %u:%u\n", ftdmchan->span_id, ftdmchan->chan_id);
+ memset(&sigmsg, 0, sizeof(sigmsg));
+ sigmsg.span_id = ftdmchan->span_id;
+ sigmsg.chan_id = ftdmchan->chan_id;
+ sigmsg.channel = ftdmchan;
+ sigmsg.event_id = FTDM_SIGEVENT_RELEASED;
+ ftdm_span_send_signal(ftdmchan->span, &sigmsg);
+
ftdm_mutex_unlock(ftdmchan->mutex);
return FTDM_SUCCESS;
typedef enum {
FTDM_SIGEVENT_START, /*!< Incoming call (ie: incoming SETUP msg or Ring) */
FTDM_SIGEVENT_STOP, /*!< Hangup */
+ FTDM_SIGEVENT_RELEASED, /*!< Channel is completely released and available */
FTDM_SIGEVENT_UP, /*!< Outgoing call has been answered */
FTDM_SIGEVENT_FLASH, /*< Flash event (typically on-hook/off-hook for analog devices) */
FTDM_SIGEVENT_PROGRESS, /*!< Outgoing call is making progress */