return;
}
-void ft_to_sngss7_inf(ftdm_channel_t *ftdmchan)
+void ft_to_sngss7_inf(ftdm_channel_t *ftdmchan, SiCnStEvnt *inr)
{
SiCnStEvnt evnt;
sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
- /*
- const char *CallerId = NULL;
- const char *CallerCat = NULL;
- const char *sipvar;
- */
-
+
memset (&evnt, 0x0, sizeof (evnt));
evnt.infoInd.eh.pres = PRSNT_NODEF;
-
evnt.infoInd.cgPtyAddrRespInd.pres = PRSNT_NODEF;
- evnt.infoInd.cgPtyAddrRespInd.val=CGPRTYADDRESP_INCL;
- copy_cgPtyNum_to_sngss7 (ftdmchan, &evnt.cgPtyNum);
-
-
evnt.infoInd.cgPtyCatRespInd.pres = PRSNT_NODEF;
- evnt.infoInd.cgPtyCatRespInd.val = CGPRTYCATRESP_INCL;
- copy_cgPtyCat_to_sngss7 (ftdmchan, &evnt.cgPtyCat);
evnt.infoInd.chrgInfoRespInd.pres = PRSNT_NODEF;
evnt.infoInd.chrgInfoRespInd.val = 0;
-
evnt.infoInd.solInfoInd.pres = PRSNT_NODEF;
evnt.infoInd.solInfoInd.val = 0;
-
evnt.infoInd.holdProvInd.pres = PRSNT_NODEF;
- evnt.infoInd.holdProvInd.val = 0;
-
+ evnt.infoInd.holdProvInd.val = 0;
evnt.infoInd.spare.pres = PRSNT_NODEF;
evnt.infoInd.spare.val = 0;
-
+
+ if (inr->infoReqInd.eh.pres == PRSNT_NODEF) {
+ if ((inr->infoReqInd.holdingInd.pres == PRSNT_NODEF) && (inr->infoReqInd.holdingInd.val == HOLD_REQ)) {
+ SS7_DEBUG_CHAN(ftdmchan,"[CIC:%d]Received INR requesting holding information. Holding is not supported in INF.\n", sngss7_info->circuit->cic);
+ }
+ if ((inr->infoReqInd.chrgInfoReqInd.pres == PRSNT_NODEF) && (inr->infoReqInd.chrgInfoReqInd.val == CHRGINFO_REQ)) {
+ SS7_DEBUG_CHAN(ftdmchan,"[CIC:%d]Received INR requesting charging information. Charging is not supported in INF.\n", sngss7_info->circuit->cic);
+ }
+ if ((inr->infoReqInd.malCaIdReqInd.pres == PRSNT_NODEF) && (inr->infoReqInd.malCaIdReqInd.val == CHRGINFO_REQ)) {
+ SS7_DEBUG_CHAN(ftdmchan,"[CIC:%d]Received INR requesting malicious call id. Malicious call id is not supported in INF.\n", sngss7_info->circuit->cic);
+ }
+
+ if ((inr->infoReqInd.cgPtyAdReqInd.pres == PRSNT_NODEF) && (inr->infoReqInd.cgPtyAdReqInd.val == CGPRTYADDREQ_REQ)) {
+ evnt.infoInd.cgPtyAddrRespInd.val=CGPRTYADDRESP_INCL;
+ copy_cgPtyNum_to_sngss7 (ftdmchan, &evnt.cgPtyNum);
+ } else {
+ evnt.infoInd.cgPtyAddrRespInd.val=CGPRTYADDRESP_NOTINCL;
+ }
+
+ if ((inr->infoReqInd.cgPtyCatReqInd.pres == PRSNT_NODEF) && (inr->infoReqInd.cgPtyCatReqInd.val == CGPRTYCATREQ_REQ)) {
+ evnt.infoInd.cgPtyCatRespInd.val = CGPRTYCATRESP_INCL;
+ copy_cgPtyCat_to_sngss7 (ftdmchan, &evnt.cgPtyCat);
+ } else {
+ evnt.infoInd.cgPtyCatRespInd.val = CGPRTYCATRESP_NOTINCL;
+ }
+ }
+ else {
+ SS7_DEBUG_CHAN(ftdmchan,"[CIC:%d]Received INR with no information request. Sending back default INF.\n", sngss7_info->circuit->cic);
+ }
+
sng_cc_inf(1,
sngss7_info->suInstId,
sngss7_info->spInstId,
evnt.infoReqInd.cgPtyAdReqInd.val=CGPRTYADDREQ_REQ;
evnt.infoReqInd.holdingInd.pres = PRSNT_NODEF;
- evnt.infoReqInd.holdingInd.val = HOLD_NOTREQ;
+ evnt.infoReqInd.holdingInd.val = HOLD_REQ;
evnt.infoReqInd.cgPtyCatReqInd.pres = PRSNT_NODEF;
evnt.infoReqInd.cgPtyCatReqInd.val = CGPRTYCATREQ_REQ;
evnt.infoReqInd.chrgInfoReqInd.pres = PRSNT_NODEF;
- evnt.infoReqInd.chrgInfoReqInd.val = CHRGINFO_NOTREQ;
+ evnt.infoReqInd.chrgInfoReqInd.val = CHRGINFO_REQ;
evnt.infoReqInd.malCaIdReqInd.pres = PRSNT_NODEF;
- evnt.infoReqInd.malCaIdReqInd.val = MLBG_INFONOTREQ;
+ evnt.infoReqInd.malCaIdReqInd.val = MLBG_INFOREQ;
sng_cc_inr(1,
sngss7_info->suInstId,