Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
}