From eb1a0a395f01e0d592e54006b3540d2078bbf7c6 Mon Sep 17 00:00:00 2001 From: David Yat Sin Date: Fri, 6 May 2011 16:03:14 -0400 Subject: [PATCH] freetdm: ss7 - Support for receiving Generic Number IE --- .../ftmod_sangoma_ss7_handle.c | 2 + .../ftmod_sangoma_ss7_support.c | 54 ++++++++++++++++++- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c index 57f7e4d927..3348292935 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c @@ -187,6 +187,8 @@ ftdm_status_t handle_con_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circ copy_redirgNum_from_sngss7(ftdmchan, &siConEvnt->redirgNum); + copy_genNmb_from_sngss7(ftdmchan, &siConEvnt->genNmb); + /* fill in the TMR/bearer capability */ if (siConEvnt->txMedReq.eh.pres) { if (siConEvnt->txMedReq.trMedReq.pres) { diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c index 21071e680a..5204c1b8fc 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c @@ -249,7 +249,59 @@ ftdm_status_t copy_genNmb_to_sngss7(ftdm_channel_t *ftdmchan, SiGenNum *genNmb) ftdm_status_t copy_genNmb_from_sngss7(ftdm_channel_t *ftdmchan, SiGenNum *genNmb) { - /* TODO: Implement me */ + char val[64]; + sngss7_chan_data_t *sngss7_info = ftdmchan->call_data; + SS7_FUNC_TRACE_ENTER(__FUNCTION__); + + memset(val, 0, sizeof(val)); + + if (genNmb->eh.pres != PRSNT_NODEF || genNmb->addrSig.pres != PRSNT_NODEF) { + ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "No Generic Number available\n"); + return FTDM_SUCCESS; + } + + copy_tknStr_from_sngss7(genNmb->addrSig, val, genNmb->oddEven); + + ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Generic Number:%s\n", val); + sngss7_add_var(sngss7_info, "ss7_gn_digits", val); + + if (genNmb->nmbQual.pres == PRSNT_NODEF) { + snprintf(val, sizeof(val), "%d", genNmb->nmbQual.val); + ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Generic Number \"number qualifier\" \"%s\"\n", val); + sngss7_add_var(sngss7_info, "ss7_gn_numqual", val); + } + + if (genNmb->natAddrInd.pres == PRSNT_NODEF) { + snprintf(val, sizeof(val), "%d", genNmb->natAddrInd.val); + ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Generic Number \"nature of address\" \"%s\"\n", val); + sngss7_add_var(sngss7_info, "ss7_gn_nadi", val); + } + + if (genNmb->scrnInd.pres == PRSNT_NODEF) { + snprintf(val, sizeof(val), "%d", genNmb->scrnInd.val); + ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Generic Number \"screening indicator\" \"%s\"\n", val); + sngss7_add_var(sngss7_info, "ss7_gn_screen_ind", val); + } + + if (genNmb->presRest.pres == PRSNT_NODEF) { + snprintf(val, sizeof(val), "%d", genNmb->presRest.val); + ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Generic Number \"presentation indicator\" \"%s\"\n", val); + sngss7_add_var(sngss7_info, "ss7_gn_pres_ind", val); + } + + if (genNmb->numPlan.pres == PRSNT_NODEF) { + snprintf(val, sizeof(val), "%d", genNmb->numPlan.val); + ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Generic Number \"numbering plan\" \"%s\"\n", val); + sngss7_add_var(sngss7_info, "ss7_gn_npi", val); + } + + if (genNmb->niInd.pres == PRSNT_NODEF) { + snprintf(val, sizeof(val), "%d", genNmb->niInd.val); + ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Generic Number \"number incomplete indicator\" \"%s\"\n", val); + sngss7_add_var(sngss7_info, "ss7_gn_num_inc_ind", val); + } + + SS7_FUNC_TRACE_EXIT(__FUNCTION__); return FTDM_SUCCESS; }