ftdm_status_t copy_cdPtyNum_to_sngss7(ftdm_channel_t *ftdmchan, SiCdPtyNum *cdPtyNum)
{
- const char *cld_nadi = NULL;
+ char *val = NULL;
ftdm_caller_data_t *caller_data = &ftdmchan->caller_data;
sngss7_chan_data_t *sngss7_info = ftdmchan->call_data;
cdPtyNum->eh.pres = PRSNT_NODEF;
cdPtyNum->natAddrInd.pres = PRSNT_NODEF;
- cld_nadi = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_cld_nadi");
- if (!ftdm_strlen_zero(cld_nadi)) {
- ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Found user supplied Called NADI value \"%s\"\n", cld_nadi);
- cdPtyNum->natAddrInd.val = atoi(cld_nadi);
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_cld_nadi");
+ if (!ftdm_strlen_zero(val)) {
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Found user supplied Called NADI value \"%s\"\n", val);
+ cdPtyNum->natAddrInd.val = atoi(val);
} else {
cdPtyNum->natAddrInd.val = g_ftdm_sngss7_data.cfg.isupCkt[sngss7_info->circuit->id].cld_nadi;
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "No user supplied NADI value found for CLD, using \"%d\"\n", cdPtyNum->natAddrInd.val);
cdPtyNum->numPlan.val = 0x01;
cdPtyNum->innInd.pres = PRSNT_NODEF;
- cdPtyNum->innInd.val = 0x01;
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_cld_inn");
+ if (!ftdm_strlen_zero(val)) {
+ cdPtyNum->innInd.val = atoi(val);
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Found user supplied Called INN value \"%s\"\n", val);
+ } else {
+ cdPtyNum->innInd.val = 0x01;
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "No user supplied Called INN value, set to default value 0x01\n");
+ }
return copy_tknStr_to_sngss7(caller_data->dnis.digits, &cdPtyNum->addrSig, &cdPtyNum->oddEven);
}
ftdm_status_t copy_usrServInfoA_to_sngss7(ftdm_channel_t *ftdmchan, SiUsrServInfo *usrServInfoA)
{
- usrServInfoA->eh.pres = PRSNT_NODEF;
-
- usrServInfoA->infoTranCap.pres = PRSNT_NODEF;
-
- usrServInfoA->infoTranCap.val = get_trillium_val(bc_cap_codes, ftdmchan->caller_data.bearer_capability, ITC_SPEECH);
-
- usrServInfoA->cdeStand.pres = PRSNT_NODEF;
- usrServInfoA->cdeStand.val = 0x0; /* ITU-T standardized coding */
- usrServInfoA->tranMode.pres = PRSNT_NODEF;
- usrServInfoA->tranMode.val = 0x0; /* circuit mode */
- usrServInfoA->infoTranRate0.pres = PRSNT_NODEF;
- usrServInfoA->infoTranRate0.val = 0x10; /* 64kbps origination to destination */
- usrServInfoA->infoTranRate1.pres = PRSNT_NODEF;
- usrServInfoA->infoTranRate1.val = 0x10; /* 64kbps destination to origination */
- usrServInfoA->chanStruct.pres = PRSNT_NODEF;
- usrServInfoA->chanStruct.val = 0x1; /* 8kHz integrity */
- usrServInfoA->config.pres = PRSNT_NODEF;
- usrServInfoA->config.val = 0x0; /* point to point configuration */
- usrServInfoA->establish.pres = PRSNT_NODEF;
- usrServInfoA->establish.val = 0x0; /* on demand */
- usrServInfoA->symmetry.pres = PRSNT_NODEF;
- usrServInfoA->symmetry.val = 0x0; /* bi-directional symmetric */
- usrServInfoA->usrInfLyr1Prot.pres = PRSNT_NODEF;
- usrServInfoA->usrInfLyr1Prot.val = 0x2; /* G.711 ulaw */
- usrServInfoA->rateMultiplier.pres = PRSNT_NODEF;
- usrServInfoA->rateMultiplier.val = 0x1; /* 1x rate multipler */
+ int bProceed = 0;
+ const char *val = NULL;
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_trans_cap");
+ if (!ftdm_strlen_zero(val)) {
+ int itc_type = 0;
+ if (!strcasecmp(val, "SPEECH")) {
+ itc_type = ITC_SPEECH;
+ } else if (!strcasecmp(val, "UNRESTRICTED")) {
+ itc_type = ITC_UNRDIG;
+ } else if (!strcasecmp(val, "RESTRICTED")) {
+ itc_type = ITC_RESDIG;
+ } else if (!strcasecmp(val, "31KHZ")) {
+ itc_type = ITC_A31KHZ;
+ } else if (!strcasecmp(val, "7KHZ")) {
+ itc_type = ITC_A7KHZ;
+ } else if (!strcasecmp(val, "15KHZ")) {
+ itc_type = ITC_A15KHZ;
+ } else if (!strcasecmp(val, "VIDEO")) {
+ itc_type = ITC_VIDEO;
+ } else {
+ itc_type = ITC_SPEECH;
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI transmission capability parameter is wrong : %s. Setting to default SPEECH. \n", val );
+ }
+
+ usrServInfoA->infoTranCap.pres = PRSNT_NODEF;
+ usrServInfoA->infoTranCap.val = get_trillium_val(bc_cap_codes, ftdmchan->caller_data.bearer_capability, itc_type);
+ bProceed = 1;
+ } else {
+ usrServInfoA->infoTranCap.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_code_standard");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->cdeStand.pres = PRSNT_NODEF;
+ usrServInfoA->cdeStand.val = (int)atoi(val); /* default is 0x0 */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI coding standard = %d\n", usrServInfoA->cdeStand.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->cdeStand.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_trans_mode");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->tranMode.pres = PRSNT_NODEF;
+ usrServInfoA->tranMode.val = (int)atoi(val); /* transfer mode, default is 0x0*/
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI transfer mode = %d\n", usrServInfoA->tranMode.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->tranMode.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_trans_rate_0");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->infoTranRate0.pres = PRSNT_NODEF;
+ usrServInfoA->infoTranRate0.val = (int)atoi(val); /* default is 0x10, 64kbps origination to destination*/
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI trans rate 0 = %d\n", usrServInfoA->infoTranRate0.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->infoTranRate0.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_trans_rate_1");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->infoTranRate1.pres = PRSNT_NODEF;
+ usrServInfoA->infoTranRate1.val = (int)atoi(val); /* 64kbps destination to origination, default is 0x10 */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI trans rate 1 = %d\n", usrServInfoA->infoTranRate1.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->infoTranRate1.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_layer1_ident");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->lyr1Ident.pres = PRSNT_NODEF;
+ usrServInfoA->lyr1Ident.val = (int)atoi(val); /*default value is 0x01 */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI layer 1 indentification = %d\n", usrServInfoA->lyr1Ident.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->lyr1Ident.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_layer1_prot");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->usrInfLyr1Prot.pres = PRSNT_NODEF;
+ usrServInfoA->usrInfLyr1Prot.val = (int)atoi(val); /*default value is 0x02 */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI layer 1 protocol = %d\n", usrServInfoA->usrInfLyr1Prot.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->usrInfLyr1Prot.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_layer2_ident");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->lyr2Ident.pres = PRSNT_NODEF;
+ usrServInfoA->lyr2Ident.val = (int)atoi(val); /*default value is 0x01 */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI layer 2 indentification = %d\n", usrServInfoA->lyr2Ident.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->lyr2Ident.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_layer2_prot");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->usrInfLyr2Prot.pres = PRSNT_NODEF;
+ usrServInfoA->usrInfLyr2Prot.val = (int)atoi(val); /*default value is 0x02 */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI layer 2 protocol = %d\n", usrServInfoA->usrInfLyr2Prot.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->usrInfLyr2Prot.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_layer3_ident");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->lyr3Ident.pres = PRSNT_NODEF;
+ usrServInfoA->lyr3Ident.val = (int)atoi(val); /*default value is 0x01 */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI layer 3 indentification = %d\n", usrServInfoA->lyr3Ident.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->lyr3Ident.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_layer3_prot");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->usrInfLyr3Prot.pres = PRSNT_NODEF;
+ usrServInfoA->usrInfLyr3Prot.val = (int)atoi(val); /*default value is 0x02 */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI layer 3 protocol = %d\n", usrServInfoA->usrInfLyr3Prot.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->usrInfLyr3Prot.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_chan_struct");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->chanStruct.pres = PRSNT_NODEF;
+ usrServInfoA->chanStruct.val = (int)atoi(val); /* default value is 0x1, 8kHz integrity */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI channel structure = %d\n", usrServInfoA->chanStruct.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->chanStruct.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_config");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->config.pres = PRSNT_NODEF;
+ usrServInfoA->config.val = (int)atoi(val); /* default value is 0x0, point to point configuration */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI configuration = %d\n", usrServInfoA->config.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->config.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_establish");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->establish.pres = PRSNT_NODEF;
+ usrServInfoA->establish.val = (int)atoi(val); /* default value is 0x0, on demand */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI establishment = %d\n", usrServInfoA->establish.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->establish.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_symmetry");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->symmetry.pres = PRSNT_NODEF;
+ usrServInfoA->symmetry.val = (int)atoi(val); /* default value is 0x0, bi-directional symmetric */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI symmetry = %d\n", usrServInfoA->symmetry.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->symmetry.pres = NOTPRSNT;
+ }
+
+ val = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "ss7_iam_usi_rate_multiplier");
+ if (!ftdm_strlen_zero(val)) {
+ usrServInfoA->rateMultiplier.pres = PRSNT_NODEF;
+ usrServInfoA->rateMultiplier.val = (int)atoi(val); /* default value is 0x1, 1x rate multipler */
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "USI rate multipier = %d\n", usrServInfoA->rateMultiplier.val );
+ bProceed = 1;
+ } else {
+ usrServInfoA->rateMultiplier.pres = NOTPRSNT;
+ }
+
+ if (bProceed) {
+ usrServInfoA->eh.pres = PRSNT_NODEF;
+ } else {
+ usrServInfoA->eh.pres = NOTPRSNT;
+ }
+
return FTDM_SUCCESS;
}