static FIO_SIGNAL_CB_FUNCTION(on_r2_signal) { int chanid = ftdm_channel_get_ph_id(sigmsg->channel); ftdm_log(FTDM_LOG_DEBUG, "Got R2 channel sig [%s] in channel %d\n", ftdm_signal_event2str(sigmsg->event_id), chanid); switch (sigmsg->event_id) { case FTDM_SIGEVENT_START: { ftdm_mutex_lock(the_mutex); if (!fchan) { fchan = sigmsg->channel; indication = FTDM_CHANNEL_INDICATE_PROCEED; } ftdm_mutex_unlock(the_mutex); } break; case FTDM_SIGEVENT_INDICATION_COMPLETED: { ftdm_channel_indication_t ind = FTDM_CHANNEL_INDICATE_NONE; if (sigmsg->ev_data.indication_completed.indication == FTDM_CHANNEL_INDICATE_PROCEED) { ftdm_log(FTDM_LOG_DEBUG, "Proceed indication result = %d\n", sigmsg->ev_data.indication_completed.status); ind = FTDM_CHANNEL_INDICATE_PROGRESS; } else if (sigmsg->ev_data.indication_completed.indication == FTDM_CHANNEL_INDICATE_PROGRESS) { ftdm_log(FTDM_LOG_DEBUG, "Progress indication result = %d\n", sigmsg->ev_data.indication_completed.status); ind = FTDM_CHANNEL_INDICATE_PROGRESS_MEDIA; } else if (sigmsg->ev_data.indication_completed.indication == FTDM_CHANNEL_INDICATE_PROGRESS_MEDIA) { ftdm_log(FTDM_LOG_DEBUG, "Progress media indication result = %d\n", sigmsg->ev_data.indication_completed.status); ind = FTDM_CHANNEL_INDICATE_ANSWER; } else if (sigmsg->ev_data.indication_completed.indication == FTDM_CHANNEL_INDICATE_ANSWER) { ftdm_log(FTDM_LOG_DEBUG, "Answer indication result = %d\n", sigmsg->ev_data.indication_completed.status); } else { ftdm_log(FTDM_LOG_DEBUG, "Unexpected indication, result = %d\n", sigmsg->ev_data.indication_completed.status); exit(1); } ftdm_mutex_lock(the_mutex); if (fchan) { indication = ind; } ftdm_mutex_unlock(the_mutex); } break; case FTDM_SIGEVENT_STOP: { ftdm_channel_call_hangup(sigmsg->channel); } break; case FTDM_SIGEVENT_RELEASED: { ftdm_mutex_lock(the_mutex); if (fchan && fchan == sigmsg->channel) { fchan = NULL; } ftdm_mutex_unlock(the_mutex); } break; default: break; } return FTDM_SUCCESS; }
static FIO_SIGNAL_CB_FUNCTION(on_signal) { ftdm_log(FTDM_LOG_DEBUG, "got sig [%s]\n", ftdm_signal_event2str(sigmsg->event_id)); switch(sigmsg->event_id) { case FTDM_SIGEVENT_START: ftdm_set_state_locked(sigmsg->channel, FTDM_CHANNEL_STATE_RING); ftdm_log(FTDM_LOG_DEBUG, "launching thread and indicating ring\n"); ftdm_thread_create_detached(test_call, sigmsg->channel); break; default: break; } return FTDM_SUCCESS; }
static FIO_SIGNAL_CB_FUNCTION(on_r2_signal) { ftdm_log(FTDM_LOG_DEBUG, "Got R2 channel sig [%s] in channel\n", ftdm_signal_event2str(sigmsg->event_id), sigmsg->channel->physical_chan_id); return FTDM_SUCCESS; }