freetdm: adding variables for ansi outgoing IAMs
. added called party number INN variable ie. <action application="export" data="freetdm_ss7_cld_inn=0"/> . added multiple variables to set User Service Information IE variables are : ss7_iam_usi_trans_cap ss7_iam_usi_code_standard ss7_iam_usi_trans_mode ss7_iam_usi_trans_rate_0 ss7_iam_usi_trans_rate_1 ss7_iam_usi_layer1_ident ss7_iam_usi_layer1_prot ss7_iam_usi_layer2_ident ss7_iam_usi_layer2_prot ss7_iam_usi_layer3_ident ss7_iam_usi_layer3_prot ss7_iam_usi_chan_struct ss7_iam_usi_config ss7_iam_usi_establish ss7_iam_usi_symmetry ss7_iam_usi_rate_multiplier . ss7_iam_usi_trans_cap is a string variable, the others are all integers . ss7_iam_usi_trans_cap has options of : - SPEECH - UNRESTRICTED - RESTRICTED - 31KHZ - 7KHZ - 15KHZ - VIDEO default value is SPEECH, if the parameter is wrong, set to SPEECH. If not set, this field is not present
This commit is contained in:
parent
03be3a3a74
commit
a4255e140b
|
@ -213,17 +213,17 @@ ftdm_status_t copy_cdPtyNum_from_sngss7(ftdm_channel_t *ftdmchan, SiCdPtyNum *cd
|
|||
|
||||
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);
|
||||
|
@ -233,7 +233,14 @@ ftdm_status_t copy_cdPtyNum_to_sngss7(ftdm_channel_t *ftdmchan, SiCdPtyNum *cdPt
|
|||
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);
|
||||
}
|
||||
|
@ -1240,32 +1247,194 @@ ftdm_status_t copy_txMedReq_to_sngss7(ftdm_channel_t *ftdmchan, SiTxMedReq *txMe
|
|||
|
||||
ftdm_status_t copy_usrServInfoA_to_sngss7(ftdm_channel_t *ftdmchan, SiUsrServInfo *usrServInfoA)
|
||||
{
|
||||
usrServInfoA->eh.pres = PRSNT_NODEF;
|
||||
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;
|
||||
}
|
||||
|
||||
usrServInfoA->infoTranCap.pres = PRSNT_NODEF;
|
||||
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;
|
||||
}
|
||||
|
||||
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 */
|
||||
return FTDM_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue