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:
James Zhang 2012-07-27 11:53:00 -04:00
parent 03be3a3a74
commit a4255e140b
1 changed files with 199 additions and 30 deletions

View File

@ -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;
}