Merge branch 'master' into moy.iodump
This commit is contained in:
commit
1e3a86310f
|
@ -397,6 +397,17 @@ static ftdm_status_t ftdm_r2_stop(ftdm_span_t *span)
|
||||||
return FTDM_SUCCESS;
|
return FTDM_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static FIO_CHANNEL_GET_SIG_STATUS_FUNCTION(ftdm_r2_get_channel_sig_status)
|
||||||
|
{
|
||||||
|
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_SIG_UP)) {
|
||||||
|
*status = FTDM_SIG_STATE_UP;
|
||||||
|
} else {
|
||||||
|
*status = FTDM_SIG_STATE_DOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FTDM_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/* always called from the monitor thread */
|
/* always called from the monitor thread */
|
||||||
static void ftdm_r2_on_call_init(openr2_chan_t *r2chan)
|
static void ftdm_r2_on_call_init(openr2_chan_t *r2chan)
|
||||||
{
|
{
|
||||||
|
@ -1251,6 +1262,9 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_r2_configure_span_signaling)
|
||||||
span->stop = ftdm_r2_stop;
|
span->stop = ftdm_r2_stop;
|
||||||
span->sig_read = NULL;
|
span->sig_read = NULL;
|
||||||
|
|
||||||
|
/* let the core set the states, we just read them */
|
||||||
|
span->get_channel_sig_status = ftdm_r2_get_channel_sig_status;
|
||||||
|
|
||||||
span->signal_cb = sig_cb;
|
span->signal_cb = sig_cb;
|
||||||
span->signal_type = FTDM_SIGTYPE_R2;
|
span->signal_type = FTDM_SIGTYPE_R2;
|
||||||
span->signal_data = r2data;
|
span->signal_data = r2data;
|
||||||
|
|
|
@ -131,11 +131,13 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
get_called_num(ftdmchan, &conEvnt->cdPtyNmb);
|
get_called_num(ftdmchan, &conEvnt->cdPtyNmb);
|
||||||
get_redir_num(ftdmchan, &conEvnt->redirNmb);
|
get_redir_num(ftdmchan, &conEvnt->redirNmb);
|
||||||
get_calling_subaddr(ftdmchan, &conEvnt->cgPtySad);
|
get_calling_subaddr(ftdmchan, &conEvnt->cgPtySad);
|
||||||
|
get_prog_ind_ie(ftdmchan, &conEvnt->progInd);
|
||||||
|
get_facility_ie(ftdmchan, &conEvnt->facilityStr);
|
||||||
|
|
||||||
if (get_calling_name_from_display(ftdmchan, &conEvnt->display) != FTDM_SUCCESS) {
|
if (get_calling_name_from_display(ftdmchan, &conEvnt->display) != FTDM_SUCCESS) {
|
||||||
get_calling_name_from_usr_usr(ftdmchan, &conEvnt->usrUsr);
|
get_calling_name_from_usr_usr(ftdmchan, &conEvnt->usrUsr);
|
||||||
}
|
}
|
||||||
get_prog_ind_ie(ftdmchan, &conEvnt->progInd);
|
|
||||||
|
|
||||||
ftdm_log_chan(sngisdn_info->ftdmchan, FTDM_LOG_INFO, "Incoming call: Called No:[%s] Calling No:[%s]\n", ftdmchan->caller_data.dnis.digits, ftdmchan->caller_data.cid_num.digits);
|
ftdm_log_chan(sngisdn_info->ftdmchan, FTDM_LOG_INFO, "Incoming call: Called No:[%s] Calling No:[%s]\n", ftdmchan->caller_data.dnis.digits, ftdmchan->caller_data.cid_num.digits);
|
||||||
|
|
||||||
|
@ -151,40 +153,34 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conEvnt->facilityStr.eh.pres) {
|
/* this should be in get_facility_ie function, fix this later */
|
||||||
if (signal_data->facility_ie_decode == SNGISDN_OPT_FALSE) {
|
if (signal_data->facility == SNGISDN_OPT_TRUE && conEvnt->facilityStr.eh.pres) {
|
||||||
get_facility_ie(ftdmchan, &conEvnt->facilityStr);
|
/* Verify whether the Caller Name will come in a subsequent FACILITY message */
|
||||||
} else if (signal_data->facility == SNGISDN_OPT_TRUE) {
|
uint16_t ret_val;
|
||||||
if (signal_data->switchtype == SNGISDN_SWITCH_NI2) {
|
char retrieved_str[255];
|
||||||
/* Verify whether the Caller Name will come in a subsequent FACILITY message */
|
|
||||||
uint16_t ret_val;
|
|
||||||
char retrieved_str[255];
|
|
||||||
|
|
||||||
ret_val = sng_isdn_retrieve_facility_caller_name(conEvnt->facilityStr.facilityStr.val, conEvnt->facilityStr.facilityStr.len, retrieved_str);
|
ret_val = sng_isdn_retrieve_facility_caller_name(conEvnt->facilityStr.facilityStr.val, conEvnt->facilityStr.facilityStr.len, retrieved_str);
|
||||||
/*
|
/*
|
||||||
return values for "sng_isdn_retrieve_facility_information_following":
|
return values for "sng_isdn_retrieve_facility_information_following":
|
||||||
If there will be no information following, or fails to decode IE, returns -1
|
If there will be no information following, or fails to decode IE, returns -1
|
||||||
If there will be no information following, but current FACILITY IE contains a caller name, returns 0
|
If there will be no information following, but current FACILITY IE contains a caller name, returns 0
|
||||||
If there will be information following, returns 1
|
If there will be information following, returns 1
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (ret_val == 1) {
|
if (ret_val == 1) {
|
||||||
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Expecting Caller name in FACILITY\n");
|
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Expecting Caller name in FACILITY\n");
|
||||||
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_GET_CALLERID);
|
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_GET_CALLERID);
|
||||||
/* Launch timer in case we never get a FACILITY msg */
|
/* Launch timer in case we never get a FACILITY msg */
|
||||||
if (signal_data->facility_timeout) {
|
if (signal_data->facility_timeout) {
|
||||||
ftdm_sched_timer(signal_data->sched, "facility_timeout", signal_data->facility_timeout,
|
ftdm_sched_timer(signal_data->sched, "facility_timeout", signal_data->facility_timeout,
|
||||||
sngisdn_facility_timeout, (void*) sngisdn_info, &sngisdn_info->timers[SNGISDN_TIMER_FACILITY]);
|
sngisdn_facility_timeout, (void*) sngisdn_info, &sngisdn_info->timers[SNGISDN_TIMER_FACILITY]);
|
||||||
}
|
|
||||||
break;
|
|
||||||
} else if (ret_val == 0) {
|
|
||||||
strcpy(ftdmchan->caller_data.cid_name, retrieved_str);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
} else if (ret_val == 0) {
|
||||||
|
strcpy(ftdmchan->caller_data.cid_name, retrieved_str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (signal_data->overlap_dial == SNGISDN_OPT_TRUE && !conEvnt->sndCmplt.eh.pres) {
|
if (signal_data->overlap_dial == SNGISDN_OPT_TRUE && !conEvnt->sndCmplt.eh.pres) {
|
||||||
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_COLLECT);
|
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_COLLECT);
|
||||||
} else {
|
} else {
|
||||||
|
@ -284,6 +280,7 @@ void sngisdn_process_con_cfm (sngisdn_event_data_t *sngisdn_event)
|
||||||
case FTDM_CHANNEL_STATE_PROGRESS_MEDIA:
|
case FTDM_CHANNEL_STATE_PROGRESS_MEDIA:
|
||||||
case FTDM_CHANNEL_STATE_DIALING:
|
case FTDM_CHANNEL_STATE_DIALING:
|
||||||
get_prog_ind_ie(ftdmchan, &cnStEvnt->progInd);
|
get_prog_ind_ie(ftdmchan, &cnStEvnt->progInd);
|
||||||
|
get_facility_ie(ftdmchan, &cnStEvnt->facilityStr);
|
||||||
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_UP);
|
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_UP);
|
||||||
break;
|
break;
|
||||||
case FTDM_CHANNEL_STATE_HANGUP_COMPLETE:
|
case FTDM_CHANNEL_STATE_HANGUP_COMPLETE:
|
||||||
|
@ -351,6 +348,7 @@ void sngisdn_process_cnst_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
case MI_PROGRESS:
|
case MI_PROGRESS:
|
||||||
case MI_ALERTING:
|
case MI_ALERTING:
|
||||||
get_prog_ind_ie(ftdmchan, &cnStEvnt->progInd);
|
get_prog_ind_ie(ftdmchan, &cnStEvnt->progInd);
|
||||||
|
get_facility_ie(ftdmchan, &cnStEvnt->facilityStr);
|
||||||
|
|
||||||
if (signal_data->ignore_cause_value != SNGISDN_OPT_TRUE &&
|
if (signal_data->ignore_cause_value != SNGISDN_OPT_TRUE &&
|
||||||
cnStEvnt->causeDgn[0].eh.pres && cnStEvnt->causeDgn[0].causeVal.pres) {
|
cnStEvnt->causeDgn[0].eh.pres && cnStEvnt->causeDgn[0].causeVal.pres) {
|
||||||
|
@ -461,7 +459,6 @@ void sngisdn_process_disc_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
uint32_t spInstId = sngisdn_event->spInstId;
|
uint32_t spInstId = sngisdn_event->spInstId;
|
||||||
sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info;
|
sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info;
|
||||||
ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan;
|
ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan;
|
||||||
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) ftdmchan->span->signal_data;
|
|
||||||
|
|
||||||
DiscEvnt *discEvnt = &sngisdn_event->event.discEvnt;
|
DiscEvnt *discEvnt = &sngisdn_event->event.discEvnt;
|
||||||
|
|
||||||
|
@ -476,14 +473,9 @@ void sngisdn_process_disc_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
case FTDM_CHANNEL_STATE_PROCEED:
|
case FTDM_CHANNEL_STATE_PROCEED:
|
||||||
case FTDM_CHANNEL_STATE_PROGRESS:
|
case FTDM_CHANNEL_STATE_PROGRESS:
|
||||||
case FTDM_CHANNEL_STATE_PROGRESS_MEDIA:
|
case FTDM_CHANNEL_STATE_PROGRESS_MEDIA:
|
||||||
case FTDM_CHANNEL_STATE_UP:
|
case FTDM_CHANNEL_STATE_UP:
|
||||||
if (discEvnt->facilityStr.eh.pres) {
|
get_facility_ie(ftdmchan, &discEvnt->facilityStr);
|
||||||
if (signal_data->facility_ie_decode == SNGISDN_OPT_FALSE) {
|
|
||||||
get_facility_ie(ftdmchan, &discEvnt->facilityStr);
|
|
||||||
} else {
|
|
||||||
/* Call libsng_isdn facility decode function and copy variables here */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (discEvnt->causeDgn[0].eh.pres && discEvnt->causeDgn[0].causeVal.pres) {
|
if (discEvnt->causeDgn[0].eh.pres && discEvnt->causeDgn[0].causeVal.pres) {
|
||||||
ftdmchan->caller_data.hangup_cause = discEvnt->causeDgn[0].causeVal.val;
|
ftdmchan->caller_data.hangup_cause = discEvnt->causeDgn[0].causeVal.val;
|
||||||
} else {
|
} else {
|
||||||
|
@ -527,7 +519,6 @@ void sngisdn_process_rel_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
uint32_t spInstId = sngisdn_event->spInstId;
|
uint32_t spInstId = sngisdn_event->spInstId;
|
||||||
sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info;
|
sngisdn_chan_data_t *sngisdn_info = sngisdn_event->sngisdn_info;
|
||||||
ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan;
|
ftdm_channel_t *ftdmchan = sngisdn_info->ftdmchan;
|
||||||
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) ftdmchan->span->signal_data;
|
|
||||||
|
|
||||||
RelEvnt *relEvnt = &sngisdn_event->event.relEvnt;
|
RelEvnt *relEvnt = &sngisdn_event->event.relEvnt;
|
||||||
|
|
||||||
|
@ -574,13 +565,7 @@ void sngisdn_process_rel_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
if (((sngisdn_chan_data_t*)ftdmchan->call_data)->suInstId == suInstId ||
|
if (((sngisdn_chan_data_t*)ftdmchan->call_data)->suInstId == suInstId ||
|
||||||
((sngisdn_chan_data_t*)ftdmchan->call_data)->spInstId == spInstId) {
|
((sngisdn_chan_data_t*)ftdmchan->call_data)->spInstId == spInstId) {
|
||||||
|
|
||||||
if (relEvnt->facilityStr.eh.pres) {
|
get_facility_ie(ftdmchan, &relEvnt->facilityStr);
|
||||||
if (signal_data->facility_ie_decode == SNGISDN_OPT_FALSE) {
|
|
||||||
get_facility_ie(ftdmchan, &relEvnt->facilityStr);
|
|
||||||
} else {
|
|
||||||
/* Call libsng_isdn facility decode function and copy variables here */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (relEvnt->causeDgn[0].eh.pres && relEvnt->causeDgn[0].causeVal.pres) {
|
if (relEvnt->causeDgn[0].eh.pres && relEvnt->causeDgn[0].causeVal.pres) {
|
||||||
ftdmchan->caller_data.hangup_cause = relEvnt->causeDgn[0].causeVal.val;
|
ftdmchan->caller_data.hangup_cause = relEvnt->causeDgn[0].causeVal.val;
|
||||||
|
@ -791,11 +776,7 @@ void sngisdn_process_fac_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
{
|
{
|
||||||
ftdm_sigmsg_t sigev;
|
ftdm_sigmsg_t sigev;
|
||||||
if (facEvnt->facElmt.facStr.pres) {
|
if (facEvnt->facElmt.facStr.pres) {
|
||||||
if (signal_data->facility_ie_decode == SNGISDN_OPT_FALSE) {
|
get_facility_ie_str(ftdmchan, &facEvnt->facElmt.facStr.val[2], facEvnt->facElmt.facStr.len);
|
||||||
get_facility_ie_str(ftdmchan, &facEvnt->facElmt.facStr.val[2], facEvnt->facElmt.facStr.len);
|
|
||||||
} else {
|
|
||||||
/* Call libsng_isdn facility decode function and copy variables here */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
memset(&sigev, 0, sizeof(sigev));
|
memset(&sigev, 0, sizeof(sigev));
|
||||||
sigev.chan_id = ftdmchan->chan_id;
|
sigev.chan_id = ftdmchan->chan_id;
|
||||||
|
|
|
@ -310,6 +310,7 @@ void sngisdn_snd_proceed(ftdm_channel_t *ftdmchan)
|
||||||
cnStEvnt.chanId.chanNmbSlotMap.val[0] = ftdmchan->physical_chan_id;
|
cnStEvnt.chanId.chanNmbSlotMap.val[0] = ftdmchan->physical_chan_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_facility_ie(ftdmchan, &cnStEvnt.facilityStr);
|
||||||
|
|
||||||
ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending PROCEED (suId:%d suInstId:%u spInstId:%u dchan:%d ces:%d)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, signal_data->dchan_id, sngisdn_info->ces);
|
ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending PROCEED (suId:%d suInstId:%u spInstId:%u dchan:%d ces:%d)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, signal_data->dchan_id, sngisdn_info->ces);
|
||||||
|
|
||||||
|
@ -341,6 +342,7 @@ void sngisdn_snd_progress(ftdm_channel_t *ftdmchan, ftdm_sngisdn_progind_t prog_
|
||||||
|
|
||||||
memset(&cnStEvnt, 0, sizeof(cnStEvnt));
|
memset(&cnStEvnt, 0, sizeof(cnStEvnt));
|
||||||
set_prog_ind_ie(ftdmchan, &cnStEvnt.progInd, prog_ind);
|
set_prog_ind_ie(ftdmchan, &cnStEvnt.progInd, prog_ind);
|
||||||
|
set_facility_ie(ftdmchan, &cnStEvnt.facilityStr);
|
||||||
|
|
||||||
ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending PROGRESS (suId:%d suInstId:%u spInstId:%u dchan:%d ces:%d)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, signal_data->dchan_id, sngisdn_info->ces);
|
ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending PROGRESS (suId:%d suInstId:%u spInstId:%u dchan:%d ces:%d)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, signal_data->dchan_id, sngisdn_info->ces);
|
||||||
if(sng_isdn_con_status(signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId,&cnStEvnt, MI_PROGRESS, signal_data->dchan_id, sngisdn_info->ces)) {
|
if(sng_isdn_con_status(signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId,&cnStEvnt, MI_PROGRESS, signal_data->dchan_id, sngisdn_info->ces)) {
|
||||||
|
@ -366,6 +368,7 @@ void sngisdn_snd_alert(ftdm_channel_t *ftdmchan, ftdm_sngisdn_progind_t prog_ind
|
||||||
memset(&cnStEvnt, 0, sizeof(cnStEvnt));
|
memset(&cnStEvnt, 0, sizeof(cnStEvnt));
|
||||||
|
|
||||||
set_prog_ind_ie(ftdmchan, &cnStEvnt.progInd, prog_ind);
|
set_prog_ind_ie(ftdmchan, &cnStEvnt.progInd, prog_ind);
|
||||||
|
set_facility_ie(ftdmchan, &cnStEvnt.facilityStr);
|
||||||
|
|
||||||
ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending ALERT (suId:%d suInstId:%u spInstId:%u dchan:%d ces:%d)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, signal_data->dchan_id, sngisdn_info->ces);
|
ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending ALERT (suId:%d suInstId:%u spInstId:%u dchan:%d ces:%d)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, signal_data->dchan_id, sngisdn_info->ces);
|
||||||
|
|
||||||
|
@ -424,6 +427,7 @@ void sngisdn_snd_connect(ftdm_channel_t *ftdmchan)
|
||||||
}
|
}
|
||||||
|
|
||||||
set_prog_ind_ie(ftdmchan, &cnStEvnt.progInd, prog_ind);
|
set_prog_ind_ie(ftdmchan, &cnStEvnt.progInd, prog_ind);
|
||||||
|
set_facility_ie(ftdmchan, &cnStEvnt.facilityStr);
|
||||||
|
|
||||||
ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending CONNECT (suId:%d suInstId:%u spInstId:%u dchan:%d ces:%d)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, signal_data->dchan_id, sngisdn_info->ces);
|
ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending CONNECT (suId:%d suInstId:%u spInstId:%u dchan:%d ces:%d)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, signal_data->dchan_id, sngisdn_info->ces);
|
||||||
if (sng_isdn_con_response(signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, &cnStEvnt, signal_data->dchan_id, sngisdn_info->ces)) {
|
if (sng_isdn_con_response(signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, &cnStEvnt, signal_data->dchan_id, sngisdn_info->ces)) {
|
||||||
|
|
|
@ -283,7 +283,7 @@ ftdm_status_t get_calling_subaddr(ftdm_channel_t *ftdmchan, CgPtySad *cgPtySad)
|
||||||
}
|
}
|
||||||
|
|
||||||
ftdm_status_t get_facility_ie(ftdm_channel_t *ftdmchan, FacilityStr *facilityStr)
|
ftdm_status_t get_facility_ie(ftdm_channel_t *ftdmchan, FacilityStr *facilityStr)
|
||||||
{
|
{
|
||||||
if (!facilityStr->eh.pres) {
|
if (!facilityStr->eh.pres) {
|
||||||
return FTDM_FAIL;
|
return FTDM_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -294,18 +294,25 @@ ftdm_status_t get_facility_ie(ftdm_channel_t *ftdmchan, FacilityStr *facilityStr
|
||||||
ftdm_status_t get_facility_ie_str(ftdm_channel_t *ftdmchan, uint8_t *data, ftdm_size_t data_len)
|
ftdm_status_t get_facility_ie_str(ftdm_channel_t *ftdmchan, uint8_t *data, ftdm_size_t data_len)
|
||||||
{
|
{
|
||||||
ftdm_caller_data_t *caller_data = &ftdmchan->caller_data;
|
ftdm_caller_data_t *caller_data = &ftdmchan->caller_data;
|
||||||
if (data_len > sizeof(caller_data->raw_data)-2) {
|
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) ftdmchan->span->signal_data;
|
||||||
ftdm_log(FTDM_LOG_CRIT, "Length of Facility IE exceeds maximum length\n");
|
|
||||||
return FTDM_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(caller_data->raw_data, 0, sizeof(caller_data->raw_data));
|
|
||||||
/* Always include Facility IE identifier + len so this can be used as a sanity check by the user */
|
|
||||||
caller_data->raw_data[0] = SNGISDN_Q931_FACILITY_IE_ID;
|
|
||||||
caller_data->raw_data[1] = data_len;
|
|
||||||
|
|
||||||
memcpy(&caller_data->raw_data[2], data, data_len);
|
if (signal_data->facility_ie_decode == SNGISDN_OPT_FALSE) {
|
||||||
caller_data->raw_data_len = data_len+2;
|
if (data_len > sizeof(caller_data->raw_data)-2) {
|
||||||
|
ftdm_log(FTDM_LOG_CRIT, "Length of Facility IE exceeds maximum length\n");
|
||||||
|
return FTDM_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(caller_data->raw_data, 0, sizeof(caller_data->raw_data));
|
||||||
|
/* Always include Facility IE identifier + len so this can be used as a sanity check by the user */
|
||||||
|
caller_data->raw_data[0] = SNGISDN_Q931_FACILITY_IE_ID;
|
||||||
|
caller_data->raw_data[1] = data_len;
|
||||||
|
|
||||||
|
memcpy(&caller_data->raw_data[2], data, data_len);
|
||||||
|
caller_data->raw_data_len = data_len+2;
|
||||||
|
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Raw Facility IE copied available\n");
|
||||||
|
} else {
|
||||||
|
/* Call libsng_isdn to process facility IE's here */
|
||||||
|
}
|
||||||
return FTDM_SUCCESS;
|
return FTDM_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -945,7 +945,10 @@ static FIO_WRITE_FUNCTION(wanpipe_write)
|
||||||
if (bsent > 0) {
|
if (bsent > 0) {
|
||||||
*datalen = bsent;
|
*datalen = bsent;
|
||||||
if (ftdm_channel_test_feature(ftdmchan, FTDM_CHANNEL_FEATURE_IO_STATS)) {
|
if (ftdm_channel_test_feature(ftdmchan, FTDM_CHANNEL_FEATURE_IO_STATS)) {
|
||||||
wanpipe_write_stats(ftdmchan, &hdrframe);
|
/* BRI cards do not support TX queues for now */
|
||||||
|
if(!FTDM_SPAN_IS_BRI(ftdmchan->span)) {
|
||||||
|
wanpipe_write_stats(ftdmchan, &hdrframe);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return FTDM_SUCCESS;
|
return FTDM_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue