Fix for receiving/transmitting facility IE
This commit is contained in:
parent
2973776b64
commit
5c747b699c
|
@ -142,21 +142,22 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
ftdmchan->caller_data.bearer_capability = sngisdn_get_infoTranCap_from_stack(conEvnt->bearCap[0].infoTranCap.val);
|
ftdmchan->caller_data.bearer_capability = sngisdn_get_infoTranCap_from_stack(conEvnt->bearCap[0].infoTranCap.val);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (signal_data->switchtype == SNGISDN_SWITCH_NI2) {
|
|
||||||
if (conEvnt->shift11.eh.pres && conEvnt->ni2OctStr.eh.pres) {
|
if (conEvnt->shift11.eh.pres && conEvnt->ni2OctStr.eh.pres) {
|
||||||
if (conEvnt->ni2OctStr.str.len == 4 && conEvnt->ni2OctStr.str.val[0] == 0x37) {
|
if (conEvnt->ni2OctStr.str.len == 4 && conEvnt->ni2OctStr.str.val[0] == 0x37) {
|
||||||
snprintf(ftdmchan->caller_data.aniII, 5, "%.2d", conEvnt->ni2OctStr.str.val[3]);
|
snprintf(ftdmchan->caller_data.aniII, 5, "%.2d", conEvnt->ni2OctStr.str.val[3]);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (conEvnt->facilityStr.eh.pres) {
|
if (conEvnt->facilityStr.eh.pres) {
|
||||||
if (signal_data->facility_ie_decode == SNGISDN_OPT_FALSE) {
|
if (signal_data->facility_ie_decode == SNGISDN_OPT_FALSE) {
|
||||||
get_facility_ie(&ftdmchan->caller_data, conEvnt->facilityStr.facilityStr.val, conEvnt->facilityStr.facilityStr.len);
|
get_facility_ie(&ftdmchan->caller_data, conEvnt->facilityStr.facilityStr.val, conEvnt->facilityStr.facilityStr.len);
|
||||||
} else if (signal_data->facility == SNGISDN_OPT_TRUE) {
|
} else if (signal_data->facility == SNGISDN_OPT_TRUE) {
|
||||||
|
if (signal_data->switchtype == SNGISDN_SWITCH_NI2) {
|
||||||
/* Verify whether the Caller Name will come in a subsequent FACILITY message */
|
/* Verify whether the Caller Name will come in a subsequent FACILITY message */
|
||||||
uint16_t ret_val;
|
uint16_t ret_val;
|
||||||
char retrieved_str[255];
|
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":
|
||||||
|
@ -170,7 +171,7 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event)
|
||||||
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;
|
break;
|
||||||
|
|
|
@ -412,7 +412,6 @@ void sngisdn_snd_connect(ftdm_channel_t *ftdmchan)
|
||||||
|
|
||||||
memset(&cnStEvnt, 0, sizeof(cnStEvnt));
|
memset(&cnStEvnt, 0, sizeof(cnStEvnt));
|
||||||
|
|
||||||
|
|
||||||
cnStEvnt.chanId.eh.pres = PRSNT_NODEF;
|
cnStEvnt.chanId.eh.pres = PRSNT_NODEF;
|
||||||
cnStEvnt.chanId.prefExc.pres = PRSNT_NODEF;
|
cnStEvnt.chanId.prefExc.pres = PRSNT_NODEF;
|
||||||
cnStEvnt.chanId.prefExc.val = IN_PE_EXCLSVE;
|
cnStEvnt.chanId.prefExc.val = IN_PE_EXCLSVE;
|
||||||
|
@ -557,7 +556,6 @@ void sngisdn_snd_disconnect(ftdm_channel_t *ftdmchan)
|
||||||
discEvnt.causeDgn[0].dgnVal.pres = NOTPRSNT;
|
discEvnt.causeDgn[0].dgnVal.pres = NOTPRSNT;
|
||||||
|
|
||||||
set_facility_ie(ftdmchan, &discEvnt.facilityStr);
|
set_facility_ie(ftdmchan, &discEvnt.facilityStr);
|
||||||
|
|
||||||
|
|
||||||
ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending DISCONNECT (suId:%d suInstId:%u spInstId:%u)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId);
|
ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "Sending DISCONNECT (suId:%d suInstId:%u spInstId:%u)\n", signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId);
|
||||||
if (sng_isdn_disc_request(signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, &discEvnt)) {
|
if (sng_isdn_disc_request(signal_data->cc_id, sngisdn_info->suInstId, sngisdn_info->spInstId, &discEvnt)) {
|
||||||
|
|
|
@ -412,14 +412,16 @@ ftdm_status_t set_calling_name(ConEvnt *conEvnt, ftdm_channel_t *ftdmchan)
|
||||||
}
|
}
|
||||||
|
|
||||||
ftdm_status_t set_facility_ie(ftdm_channel_t *ftdmchan, FacilityStr *facilityStr)
|
ftdm_status_t set_facility_ie(ftdm_channel_t *ftdmchan, FacilityStr *facilityStr)
|
||||||
{
|
{
|
||||||
if (ftdmchan->caller_data.raw_data_len &&
|
if (ftdmchan->caller_data.raw_data_len &&
|
||||||
ftdmchan->caller_data.raw_data[0] == 0x1C) {
|
ftdmchan->caller_data.raw_data[0] == 0x1C) {
|
||||||
facilityStr->eh.pres = PRSNT_NODEF;
|
facilityStr->eh.pres = PRSNT_NODEF;
|
||||||
|
facilityStr->facilityStr.pres = PRSNT_NODEF;
|
||||||
facilityStr->facilityStr.len = ftdmchan->caller_data.raw_data_len-2;
|
facilityStr->facilityStr.len = ftdmchan->caller_data.raw_data_len-2;
|
||||||
memcpy(facilityStr->facilityStr.val, &ftdmchan->caller_data.raw_data[2], facilityStr->facilityStr.len);
|
memcpy(facilityStr->facilityStr.val, &ftdmchan->caller_data.raw_data[2], facilityStr->facilityStr.len);
|
||||||
return FTDM_SUCCESS;
|
return FTDM_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FTDM_FAIL;
|
return FTDM_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue