void ft_to_sngss7_acm (ftdm_channel_t * ftdmchan) { SS7_FUNC_TRACE_ENTER (__FUNCTION__); sngss7_chan_data_t *sngss7_info = ftdmchan->call_data; SiCnStEvnt acm; memset (&acm, 0x0, sizeof (acm)); /* fill in the needed information for the ACM */ acm.bckCallInd.eh.pres = PRSNT_NODEF; acm.bckCallInd.chrgInd.pres = PRSNT_NODEF; acm.bckCallInd.chrgInd.val = CHRG_CHRG; acm.bckCallInd.cadPtyStatInd.pres = PRSNT_NODEF; acm.bckCallInd.cadPtyStatInd.val = 0x01; acm.bckCallInd.cadPtyCatInd.pres = PRSNT_NODEF; acm.bckCallInd.cadPtyCatInd.val = CADCAT_ORDSUBS; acm.bckCallInd.end2EndMethInd.pres = PRSNT_NODEF; acm.bckCallInd.end2EndMethInd.val = E2EMTH_NOMETH; acm.bckCallInd.intInd.pres = PRSNT_NODEF; acm.bckCallInd.intInd.val = INTIND_NOINTW; acm.bckCallInd.end2EndInfoInd.pres = PRSNT_NODEF; acm.bckCallInd.end2EndInfoInd.val = E2EINF_NOINFO; acm.bckCallInd.isdnUsrPrtInd.pres = PRSNT_NODEF; acm.bckCallInd.isdnUsrPrtInd.val = ISUP_USED; acm.bckCallInd.holdInd.pres = PRSNT_NODEF; acm.bckCallInd.holdInd.val = HOLD_NOTREQD; acm.bckCallInd.isdnAccInd.pres = PRSNT_NODEF; acm.bckCallInd.isdnAccInd.val = ISDNACC_NONISDN; acm.bckCallInd.echoCtrlDevInd.pres = PRSNT_NODEF; acm.bckCallInd.echoCtrlDevInd.val = 0x1; /* ec device present */ acm.bckCallInd.sccpMethInd.pres = PRSNT_NODEF; acm.bckCallInd.sccpMethInd.val = SCCPMTH_NOIND; /* send the ACM request to LibSngSS7 */ sng_cc_con_status (1, sngss7_info->suInstId, sngss7_info->spInstId, sngss7_info->circuit->id, &acm, ADDRCMPLT); SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ACM\n", sngss7_info->circuit->cic); SS7_FUNC_TRACE_EXIT (__FUNCTION__); return; }
/* French SPIROU send Charging Acknowledgement */ void ft_to_sngss7_txa (ftdm_channel_t * ftdmchan) { #ifndef SANGOMA_SPIROU SS7_FUNC_TRACE_ENTER (__FUNCTION__); ftdm_log_chan_msg(ftdmchan, FTDM_LOG_CRIT, "TXA message not supported!, please update your libsng_ss7\n"); #else SiCnStEvnt txa; sngss7_chan_data_t *sngss7_info = ftdmchan->call_data; SS7_FUNC_TRACE_ENTER (__FUNCTION__); memset (&txa, 0x0, sizeof(txa)); sng_cc_con_status(1, sngss7_info->suInstId, sngss7_info->spInstId, sngss7_info->circuit->id, &txa, CHARGE_ACK); SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx TXA\n", sngss7_info->circuit->cic); #endif SS7_FUNC_TRACE_EXIT (__FUNCTION__); return; }
/* No one calls this function yet, but it has been implemented to complement TXA messages */ void ft_to_sngss7_itx (ftdm_channel_t * ftdmchan) { #ifndef SANGOMA_SPIROU SS7_FUNC_TRACE_ENTER (__FUNCTION__); ftdm_log_chan_msg(ftdmchan, FTDM_LOG_CRIT, "ITX message not supported!, please update your libsng_ss7\n"); #else const char* var = NULL; sngss7_chan_data_t *sngss7_info = ftdmchan->call_data; SiCnStEvnt itx; SS7_FUNC_TRACE_ENTER (__FUNCTION__); memset (&itx, 0x0, sizeof (itx)); itx.msgNum.eh.pres = PRSNT_NODEF; itx.msgNum.msgNum.pres = PRSNT_NODEF; var = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_itx_msg_num"); if (!ftdm_strlen_zero(var)) { itx.msgNum.msgNum.val = atoi(var); } else { itx.msgNum.msgNum.val = 0x1; } itx.chargUnitNum.eh.pres = PRSNT_NODEF; itx.chargUnitNum.chargUnitNum.pres = PRSNT_NODEF; var = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_itx_charge_unit"); if (!ftdm_strlen_zero(var)) { itx.chargUnitNum.chargUnitNum.val = atoi(var); } else { itx.chargUnitNum.chargUnitNum.val = 0x1; } ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "ITX Charging Unit:%d Msg Num:%d\n", itx.chargUnitNum.chargUnitNum.val, itx.msgNum.msgNum.val); sng_cc_con_status (1, sngss7_info->suInstId, sngss7_info->spInstId, sngss7_info->circuit->id, &itx, CHARGE_UNIT); SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ITX\n", sngss7_info->circuit->cic); #endif SS7_FUNC_TRACE_EXIT (__FUNCTION__); return; }
void ft_to_sngss7_acm (ftdm_channel_t * ftdmchan) { SS7_FUNC_TRACE_ENTER (__FUNCTION__); sngss7_chan_data_t *sngss7_info = ftdmchan->call_data; SiCnStEvnt acm; memset (&acm, 0x0, sizeof (acm)); /* fill in the needed information for the ACM */ acm.bckCallInd.eh.pres = PRSNT_NODEF; acm.bckCallInd.chrgInd.pres = PRSNT_NODEF; acm.bckCallInd.chrgInd.val = CHRG_CHRG; acm.bckCallInd.cadPtyStatInd.pres = PRSNT_NODEF; acm.bckCallInd.cadPtyStatInd.val = 0x01; acm.bckCallInd.cadPtyCatInd.pres = PRSNT_NODEF; acm.bckCallInd.cadPtyCatInd.val = CADCAT_ORDSUBS; acm.bckCallInd.end2EndMethInd.pres = PRSNT_NODEF; acm.bckCallInd.end2EndMethInd.val = E2EMTH_NOMETH; acm.bckCallInd.intInd.pres = PRSNT_NODEF; acm.bckCallInd.intInd.val = INTIND_NOINTW; acm.bckCallInd.end2EndInfoInd.pres = PRSNT_NODEF; acm.bckCallInd.end2EndInfoInd.val = E2EINF_NOINFO; acm.bckCallInd.isdnUsrPrtInd.pres = PRSNT_NODEF; acm.bckCallInd.isdnUsrPrtInd.val = ISUP_USED; acm.bckCallInd.holdInd.pres = PRSNT_NODEF; acm.bckCallInd.holdInd.val = HOLD_NOTREQD; acm.bckCallInd.isdnAccInd.pres = PRSNT_NODEF; acm.bckCallInd.isdnAccInd.val = ISDNACC_NONISDN; acm.bckCallInd.echoCtrlDevInd.pres = PRSNT_NODEF; switch (ftdmchan->caller_data.bearer_capability) { /**********************************************************************/ case (FTDM_BEARER_CAP_SPEECH): acm.bckCallInd.echoCtrlDevInd.val = 0x1; break; /**********************************************************************/ case (FTDM_BEARER_CAP_UNRESTRICTED): acm.bckCallInd.echoCtrlDevInd.val = 0x0; break; /**********************************************************************/ case (FTDM_BEARER_CAP_3_1KHZ_AUDIO): acm.bckCallInd.echoCtrlDevInd.val = 0x1; break; /**********************************************************************/ default: SS7_ERROR_CHAN(ftdmchan, "Unknown Bearer capability falling back to speech%s\n", " "); acm.bckCallInd.echoCtrlDevInd.val = 0x1; break; /**********************************************************************/ } /* switch (ftdmchan->caller_data.bearer_capability) */ acm.bckCallInd.sccpMethInd.pres = PRSNT_NODEF; acm.bckCallInd.sccpMethInd.val = SCCPMTH_NOIND; /* fill in any optional parameters */ if (sngss7_test_options(&g_ftdm_sngss7_data.cfg.isupCkt[sngss7_info->circuit->id], SNGSS7_ACM_OBCI_BITA)) { SS7_DEBUG_CHAN(ftdmchan, "Found ACM_OBCI_BITA flag:0x%X\n", g_ftdm_sngss7_data.cfg.isupCkt[sngss7_info->circuit->id].options); acm.optBckCalInd.eh.pres = PRSNT_NODEF; acm.optBckCalInd.inbndInfoInd.pres = PRSNT_NODEF; acm.optBckCalInd.inbndInfoInd.val = 0x1; acm.optBckCalInd.caFwdMayOcc.pres = PRSNT_DEF; acm.optBckCalInd.simpleSegmInd.pres = PRSNT_DEF; acm.optBckCalInd.mlppUserInd.pres = PRSNT_DEF; acm.optBckCalInd.usrNetIneractInd.pres = PRSNT_DEF; } /* if (sngss7_test_options(isup_intf, SNGSS7_ACM_OBCI_BITA)) */ /* send the ACM request to LibSngSS7 */ sng_cc_con_status (1, sngss7_info->suInstId, sngss7_info->spInstId, sngss7_info->circuit->id, &acm, ADDRCMPLT); SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Tx ACM\n", sngss7_info->circuit->cic); SS7_FUNC_TRACE_EXIT (__FUNCTION__); return; }