Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
358e9aab
提交
358e9aab
authored
4月 06, 2011
作者:
David Yat Sin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chlog:FreeTDM - SS7 Support for transmitting Redirecting Number
上级
95072fee
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
204 行增加
和
34 行删除
+204
-34
mod_freetdm.c
libs/freetdm/mod_freetdm/mod_freetdm.c
+21
-1
ftmod_sangoma_ss7_main.h
...etdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
+9
-2
ftmod_sangoma_ss7_out.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c
+3
-11
ftmod_sangoma_ss7_support.c
...m/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
+158
-16
ftmod_sangoma_ss7_xml.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
+13
-4
没有找到文件。
libs/freetdm/mod_freetdm/mod_freetdm.c
浏览文件 @
358e9aab
...
@@ -1264,6 +1264,12 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
...
@@ -1264,6 +1264,12 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
caller_data
.
ani
.
plan
=
(
uint8_t
)
atoi
(
sipvar
);
caller_data
.
ani
.
plan
=
(
uint8_t
)
atoi
(
sipvar
);
}
}
/* Used by ftmod_sangoma_ss7 only */
sipvar
=
switch_channel_get_variable
(
channel
,
"sip_h_X-FreeTDM-ANI-NADI"
);
if
(
sipvar
)
{
ftdm_usrmsg_add_var
(
&
usrmsg
,
"ss7_clg_nadi"
,
sipvar
);
}
sipvar
=
switch_channel_get_variable
(
channel
,
"sip_h_X-FreeTDM-ANI2"
);
sipvar
=
switch_channel_get_variable
(
channel
,
"sip_h_X-FreeTDM-ANI2"
);
if
(
sipvar
)
{
if
(
sipvar
)
{
ftdm_set_string
(
caller_data
.
aniII
,
sipvar
);
ftdm_set_string
(
caller_data
.
aniII
,
sipvar
);
...
@@ -1284,6 +1290,12 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
...
@@ -1284,6 +1290,12 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
caller_data
.
dnis
.
plan
=
(
uint8_t
)
atoi
(
sipvar
);
caller_data
.
dnis
.
plan
=
(
uint8_t
)
atoi
(
sipvar
);
}
}
/* Used by ftmod_sangoma_ss7 only */
sipvar
=
switch_channel_get_variable
(
channel
,
"sip_h_X-FreeTDM-DNIS-NADI"
);
if
(
sipvar
)
{
ftdm_usrmsg_add_var
(
&
usrmsg
,
"ss7_clg_nadi"
,
sipvar
);
}
sipvar
=
switch_channel_get_variable
(
channel
,
"sip_h_X-FreeTDM-RDNIS"
);
sipvar
=
switch_channel_get_variable
(
channel
,
"sip_h_X-FreeTDM-RDNIS"
);
if
(
sipvar
)
{
if
(
sipvar
)
{
ftdm_set_string
(
caller_data
.
rdnis
.
digits
,
sipvar
);
ftdm_set_string
(
caller_data
.
rdnis
.
digits
,
sipvar
);
...
@@ -1299,6 +1311,12 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
...
@@ -1299,6 +1311,12 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
caller_data
.
rdnis
.
plan
=
(
uint8_t
)
atoi
(
sipvar
);
caller_data
.
rdnis
.
plan
=
(
uint8_t
)
atoi
(
sipvar
);
}
}
/* Used by ftmod_sangoma_ss7 only */
sipvar
=
switch_channel_get_variable
(
channel
,
"sip_h_X-FreeTDM-RDNIS-NADI"
);
if
(
sipvar
)
{
ftdm_usrmsg_add_var
(
&
usrmsg
,
"ss7_rdnis_nadi"
,
sipvar
);
}
sipvar
=
switch_channel_get_variable
(
channel
,
"sip_h_X-FreeTDM-Screen"
);
sipvar
=
switch_channel_get_variable
(
channel
,
"sip_h_X-FreeTDM-Screen"
);
if
(
sipvar
)
{
if
(
sipvar
)
{
caller_data
.
screen
=
(
uint8_t
)
atoi
(
sipvar
);
caller_data
.
screen
=
(
uint8_t
)
atoi
(
sipvar
);
...
@@ -1308,6 +1326,8 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
...
@@ -1308,6 +1326,8 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
if
(
sipvar
)
{
if
(
sipvar
)
{
caller_data
.
pres
=
(
uint8_t
)
atoi
(
sipvar
);
caller_data
.
pres
=
(
uint8_t
)
atoi
(
sipvar
);
}
}
}
}
if
(
switch_test_flag
(
outbound_profile
,
SWITCH_CPF_SCREEN
))
{
if
(
switch_test_flag
(
outbound_profile
,
SWITCH_CPF_SCREEN
))
{
...
@@ -1568,7 +1588,7 @@ ftdm_status_t ftdm_channel_from_event(ftdm_sigmsg_t *sigmsg, switch_core_session
...
@@ -1568,7 +1588,7 @@ ftdm_status_t ftdm_channel_from_event(ftdm_sigmsg_t *sigmsg, switch_core_session
switch_channel_set_variable_printf
(
channel
,
"sip_h_X-FreeTDM-RDNIS"
,
"%s"
,
channel_caller_data
->
rdnis
.
digits
);
switch_channel_set_variable_printf
(
channel
,
"sip_h_X-FreeTDM-RDNIS"
,
"%s"
,
channel_caller_data
->
rdnis
.
digits
);
switch_channel_set_variable_printf
(
channel
,
"sip_h_X-FreeTDM-RDNIS-TON"
,
"%d"
,
channel_caller_data
->
rdnis
.
type
);
switch_channel_set_variable_printf
(
channel
,
"sip_h_X-FreeTDM-RDNIS-TON"
,
"%d"
,
channel_caller_data
->
rdnis
.
type
);
switch_channel_set_variable_printf
(
channel
,
"sip_h_X-FreeTDM-RDNIS-Plan"
,
"%d"
,
channel_caller_data
->
rdnis
.
plan
);
switch_channel_set_variable_printf
(
channel
,
"sip_h_X-FreeTDM-RDNIS-Plan"
,
"%d"
,
channel_caller_data
->
rdnis
.
plan
);
switch_channel_set_variable_printf
(
channel
,
"sip_h_X-FreeTDM-Screen"
,
"%d"
,
channel_caller_data
->
screen
);
switch_channel_set_variable_printf
(
channel
,
"sip_h_X-FreeTDM-Screen"
,
"%d"
,
channel_caller_data
->
screen
);
switch_channel_set_variable_printf
(
channel
,
"sip_h_X-FreeTDM-Presentation"
,
"%d"
,
channel_caller_data
->
pres
);
switch_channel_set_variable_printf
(
channel
,
"sip_h_X-FreeTDM-Presentation"
,
"%d"
,
channel_caller_data
->
pres
);
}
}
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
浏览文件 @
358e9aab
...
@@ -316,8 +316,11 @@ typedef struct sng_isup_ckt {
...
@@ -316,8 +316,11 @@ typedef struct sng_isup_ckt {
uint32_t
typeCntrl
;
uint32_t
typeCntrl
;
uint32_t
ssf
;
uint32_t
ssf
;
uint32_t
switchType
;
uint32_t
switchType
;
uint32_t
clg_nadi
;
uint32_t
clg_nadi
;
uint32_t
cld_nadi
;
uint32_t
cld_nadi
;
uint8_t
rdnis_nadi
;
uint32_t
min_digits
;
uint32_t
min_digits
;
void
*
obj
;
void
*
obj
;
uint16_t
t3
;
uint16_t
t3
;
...
@@ -786,8 +789,12 @@ uint8_t copy_cgPtyNum_from_sngss7(ftdm_caller_data_t *ftdm, SiCgPtyNum *cgPtyNum
...
@@ -786,8 +789,12 @@ uint8_t copy_cgPtyNum_from_sngss7(ftdm_caller_data_t *ftdm, SiCgPtyNum *cgPtyNum
uint8_t
copy_cgPtyNum_to_sngss7
(
ftdm_caller_data_t
*
ftdm
,
SiCgPtyNum
*
cgPtyNum
);
uint8_t
copy_cgPtyNum_to_sngss7
(
ftdm_caller_data_t
*
ftdm
,
SiCgPtyNum
*
cgPtyNum
);
uint8_t
copy_cdPtyNum_from_sngss7
(
ftdm_caller_data_t
*
ftdm
,
SiCdPtyNum
*
cdPtyNum
);
uint8_t
copy_cdPtyNum_from_sngss7
(
ftdm_caller_data_t
*
ftdm
,
SiCdPtyNum
*
cdPtyNum
);
uint8_t
copy_cdPtyNum_to_sngss7
(
ftdm_caller_data_t
*
ftdm
,
SiCdPtyNum
*
cdPtyNum
);
uint8_t
copy_cdPtyNum_to_sngss7
(
ftdm_caller_data_t
*
ftdm
,
SiCdPtyNum
*
cdPtyNum
);
uint8_t
copy_tknStr_from_sngss7
(
TknStr
str
,
char
*
ftdm
,
TknU8
oddEven
);
ftdm_status_t
copy_redirgNum_to_sngss7
(
ftdm_channel_t
*
ftdmchan
,
SiRedirNum
*
redirgNum
);
uint8_t
append_tknStr_from_sngss7
(
TknStr
str
,
char
*
ftdm
,
TknU8
oddEven
);
ftdm_status_t
copy_tknStr_from_sngss7
(
TknStr
str
,
char
*
ftdm
,
TknU8
oddEven
);
ftdm_status_t
append_tknStr_from_sngss7
(
TknStr
str
,
char
*
ftdm
,
TknU8
oddEven
);
ftdm_status_t
copy_tknStr_to_sngss7
(
char
*
str
,
TknStr
*
tknStr
,
TknU8
*
oddEven
);
int
check_for_state_change
(
ftdm_channel_t
*
ftdmchan
);
int
check_for_state_change
(
ftdm_channel_t
*
ftdmchan
);
int
check_cics_in_range
(
sngss7_chan_data_t
*
sngss7_info
);
int
check_cics_in_range
(
sngss7_chan_data_t
*
sngss7_info
);
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c
浏览文件 @
358e9aab
...
@@ -182,19 +182,9 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
...
@@ -182,19 +182,9 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
/* copy down the called number information */
/* copy down the called number information */
copy_cdPtyNum_to_sngss7
(
&
ftdmchan
->
caller_data
,
&
iam
.
cdPtyNum
);
copy_cdPtyNum_to_sngss7
(
&
ftdmchan
->
caller_data
,
&
iam
.
cdPtyNum
);
/* copy down the calling number information */
/* copy down the calling number information */
copy_cgPtyNum_to_sngss7
(
&
ftdmchan
->
caller_data
,
&
iam
.
cgPtyNum
);
copy_cgPtyNum_to_sngss7
(
&
ftdmchan
->
caller_data
,
&
iam
.
cgPtyNum
);
/* check if the user would like a custom NADI value for the calling Pty Num */
clg_nadi
=
ftdm_usrmsg_get_var
(
ftdmchan
->
usrmsg
,
"ss7_clg_nadi"
);
if
((
clg_nadi
!=
NULL
)
&&
(
*
clg_nadi
))
{
SS7_DEBUG_CHAN
(
ftdmchan
,
"Found user supplied Calling NADI value
\"
%s
\"\n
"
,
clg_nadi
);
iam
.
cgPtyNum
.
natAddrInd
.
val
=
atoi
(
clg_nadi
);
}
else
{
iam
.
cgPtyNum
.
natAddrInd
.
val
=
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
sngss7_info
->
circuit
->
id
].
clg_nadi
;
SS7_DEBUG_CHAN
(
ftdmchan
,
"No user supplied NADI value found for CLG, using
\"
%d
\"\n
"
,
iam
.
cgPtyNum
.
natAddrInd
.
val
);
}
cld_nadi
=
ftdm_usrmsg_get_var
(
ftdmchan
->
usrmsg
,
"ss7_cld_nadi"
);
cld_nadi
=
ftdm_usrmsg_get_var
(
ftdmchan
->
usrmsg
,
"ss7_cld_nadi"
);
if
((
cld_nadi
!=
NULL
)
&&
(
*
cld_nadi
))
{
if
((
cld_nadi
!=
NULL
)
&&
(
*
cld_nadi
))
{
...
@@ -244,6 +234,8 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
...
@@ -244,6 +234,8 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
}
/* if (subAddrIE[0] != '0') */
}
/* if (subAddrIE[0] != '0') */
}
}
copy_redirgNum_to_sngss7
(
ftdmchan
,
&
iam
.
redirgNum
);
/* check if the user would like us to send a cld_sub-address */
/* check if the user would like us to send a cld_sub-address */
cld_subAddr
=
ftdm_usrmsg_get_var
(
ftdmchan
->
usrmsg
,
"ss7_cld_subaddr"
);
cld_subAddr
=
ftdm_usrmsg_get_var
(
ftdmchan
->
usrmsg
,
"ss7_cld_subaddr"
);
if
((
cld_subAddr
!=
NULL
)
&&
(
*
cld_subAddr
))
{
if
((
cld_subAddr
!=
NULL
)
&&
(
*
cld_subAddr
))
{
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
浏览文件 @
358e9aab
...
@@ -43,13 +43,6 @@ uint32_t sngss7_id;
...
@@ -43,13 +43,6 @@ uint32_t sngss7_id;
/******************************************************************************/
/******************************************************************************/
/* PROTOTYPES *****************************************************************/
/* PROTOTYPES *****************************************************************/
uint8_t
copy_tknStr_from_sngss7
(
TknStr
str
,
char
*
ftdm
,
TknU8
oddEven
);
uint8_t
append_tknStr_from_sngss7
(
TknStr
str
,
char
*
ftdm
,
TknU8
oddEven
);
uint8_t
copy_cgPtyNum_from_sngss7
(
ftdm_caller_data_t
*
ftdm
,
SiCgPtyNum
*
cgPtyNum
);
uint8_t
copy_cgPtyNum_to_sngss7
(
ftdm_caller_data_t
*
ftdm
,
SiCgPtyNum
*
cgPtyNum
);
uint8_t
copy_cdPtyNum_from_sngss7
(
ftdm_caller_data_t
*
ftdm
,
SiCdPtyNum
*
cdPtyNum
);
uint8_t
copy_cdPtyNum_to_sngss7
(
ftdm_caller_data_t
*
ftdm
,
SiCdPtyNum
*
cdPtyNum
);
int
check_for_state_change
(
ftdm_channel_t
*
ftdmchan
);
int
check_for_state_change
(
ftdm_channel_t
*
ftdmchan
);
int
check_cics_in_range
(
sngss7_chan_data_t
*
sngss7_info
);
int
check_cics_in_range
(
sngss7_chan_data_t
*
sngss7_info
);
int
check_for_reset
(
sngss7_chan_data_t
*
sngss7_info
);
int
check_for_reset
(
sngss7_chan_data_t
*
sngss7_info
);
...
@@ -134,11 +127,12 @@ uint8_t copy_cgPtyNum_to_sngss7(ftdm_caller_data_t *ftdm, SiCgPtyNum *cgPtyNum)
...
@@ -134,11 +127,12 @@ uint8_t copy_cgPtyNum_to_sngss7(ftdm_caller_data_t *ftdm, SiCgPtyNum *cgPtyNum)
cgPtyNum
->
niInd
.
val
=
0x00
;
cgPtyNum
->
niInd
.
val
=
0x00
;
/**************************************************************************/
/**************************************************************************/
cgPtyNum
->
addrSig
.
pres
=
PRSNT_NODEF
;
cgPtyNum
->
addrSig
.
pres
=
PRSNT_NODEF
;
/* atoi will search through memory starting from the pointer it is given until
/* atoi will search through memory starting from the pointer it is given until
* it finds the \0...since tmp is on the stack it will start going through the
* it finds the \0...since tmp is on the stack it will start going through the
* possibly causing corruption. Hard code a \0 to prevent this
* possibly causing corruption. Hard code a \0 to prevent this
*/
*/
tmp
[
1
]
=
'\0'
;
tmp
[
1
]
=
'\0'
;
k
=
0
;
k
=
0
;
j
=
0
;
j
=
0
;
...
@@ -334,8 +328,68 @@ uint8_t copy_cdPtyNum_to_sngss7(ftdm_caller_data_t *ftdm, SiCdPtyNum *cdPtyNum)
...
@@ -334,8 +328,68 @@ uint8_t copy_cdPtyNum_to_sngss7(ftdm_caller_data_t *ftdm, SiCdPtyNum *cdPtyNum)
return
0
;
return
0
;
}
}
/******************************************************************************/
uint8_t
copy_tknStr_from_sngss7
(
TknStr
str
,
char
*
ftdm
,
TknU8
oddEven
)
ftdm_status_t
copy_redirgNum_to_sngss7
(
ftdm_channel_t
*
ftdmchan
,
SiRedirNum
*
redirgNum
)
{
const
char
*
val
=
NULL
;
sngss7_chan_data_t
*
sngss7_info
=
ftdmchan
->
call_data
;
ftdm_caller_data_t
*
caller_data
=
&
ftdmchan
->
caller_data
;
uint8_t
len
=
strlen
(
caller_data
->
rdnis
.
digits
);
if
(
!
len
)
{
return
FTDM_SUCCESS
;
}
SS7_DEBUG_CHAN
(
ftdmchan
,
"Redirecting Number %s
\n
"
,
caller_data
->
rdnis
.
digits
);
redirgNum
->
eh
.
pres
=
PRSNT_NODEF
;
/* Nature of address indicator */
redirgNum
->
natAddr
.
pres
=
PRSNT_NODEF
;
val
=
ftdm_usrmsg_get_var
(
ftdmchan
->
usrmsg
,
"ss7_rdnis_nadi"
);
if
(
!
ftdm_strlen_zero
(
val
))
{
redirgNum
->
natAddr
.
val
=
atoi
(
val
);
}
else
{
redirgNum
->
natAddr
.
val
=
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
sngss7_info
->
circuit
->
id
].
rdnis_nadi
;
}
SS7_DEBUG_CHAN
(
ftdmchan
,
"Redirecting Number NADI:%d
\n
"
,
redirgNum
->
natAddr
.
val
);
/* Screening indicator */
redirgNum
->
scrInd
.
pres
=
PRSNT_NODEF
;
val
=
ftdm_usrmsg_get_var
(
ftdmchan
->
usrmsg
,
"ss7_rdnis_screen_ind"
);
if
(
!
ftdm_strlen_zero
(
val
))
{
redirgNum
->
scrInd
.
val
=
atoi
(
val
);
}
else
{
redirgNum
->
scrInd
.
val
=
FTDM_SCREENING_VERIFIED_PASSED
;
}
SS7_DEBUG_CHAN
(
ftdmchan
,
"Redirecting Number Screening Ind:%d
\n
"
,
redirgNum
->
scrInd
.
val
);
/* Address presentation restricted ind */
redirgNum
->
presRest
.
pres
=
PRSNT_NODEF
;
val
=
ftdm_usrmsg_get_var
(
ftdmchan
->
usrmsg
,
"ss7_rdnis_pres_ind"
);
if
(
!
ftdm_strlen_zero
(
val
))
{
redirgNum
->
presRest
.
val
=
atoi
(
val
);
}
else
{
redirgNum
->
presRest
.
val
=
FTDM_PRES_ALLOWED
;
}
SS7_DEBUG_CHAN
(
ftdmchan
,
"Redirecting Number Address Presentation Restricted Ind:%d
\n
"
,
redirgNum
->
presRest
.
val
);
/* Numbering plan */
redirgNum
->
numPlan
.
pres
=
PRSNT_NODEF
;
val
=
ftdm_usrmsg_get_var
(
ftdmchan
->
usrmsg
,
"ss7_rdnis_plan"
);
if
(
!
ftdm_strlen_zero
(
val
))
{
redirgNum
->
numPlan
.
val
=
atoi
(
val
);
}
else
{
redirgNum
->
numPlan
.
val
=
caller_data
->
rdnis
.
plan
;
}
SS7_DEBUG_CHAN
(
ftdmchan
,
"Redirecting Number Numbering plan:%d
\n
"
,
redirgNum
->
numPlan
.
val
);
return
copy_tknStr_to_sngss7
(
caller_data
->
rdnis
.
digits
,
&
redirgNum
->
addrSig
,
&
redirgNum
->
oddEven
);
}
ftdm_status_t
copy_tknStr_from_sngss7
(
TknStr
str
,
char
*
ftdm
,
TknU8
oddEven
)
{
{
uint8_t
i
;
uint8_t
i
;
uint8_t
j
;
uint8_t
j
;
...
@@ -362,14 +416,14 @@ uint8_t copy_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven)
...
@@ -362,14 +416,14 @@ uint8_t copy_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven)
}
else
{
}
else
{
SS7_ERROR
(
"Asked to copy tknStr that is not present!
\n
"
);
SS7_ERROR
(
"Asked to copy tknStr that is not present!
\n
"
);
return
1
;
return
FTDM_FAIL
;
}
}
return
0
;
return
FTDM_SUCCESS
;
}
}
/******************************************************************************/
/******************************************************************************/
uint8
_t
append_tknStr_from_sngss7
(
TknStr
str
,
char
*
ftdm
,
TknU8
oddEven
)
ftdm_status
_t
append_tknStr_from_sngss7
(
TknStr
str
,
char
*
ftdm
,
TknU8
oddEven
)
{
{
int
i
=
0
;
int
i
=
0
;
int
j
=
0
;
int
j
=
0
;
...
@@ -382,7 +436,7 @@ uint8_t append_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven)
...
@@ -382,7 +436,7 @@ uint8_t append_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven)
/* confirm that we found an acceptable length */
/* confirm that we found an acceptable length */
if
(
j
>
25
)
{
if
(
j
>
25
)
{
SS7_ERROR
(
"string length exceeds maxium value...aborting append!
\n
"
);
SS7_ERROR
(
"string length exceeds maxium value...aborting append!
\n
"
);
return
1
;
return
FTDM_FAIL
;
}
/* if ( j > 25 ) */
}
/* if ( j > 25 ) */
/* copy in digits */
/* copy in digits */
...
@@ -405,12 +459,100 @@ uint8_t append_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven)
...
@@ -405,12 +459,100 @@ uint8_t append_tknStr_from_sngss7(TknStr str, char *ftdm, TknU8 oddEven)
}
/* if ((oddEven.pres == 1) && (oddEven.val == 1)) */
}
/* if ((oddEven.pres == 1) && (oddEven.val == 1)) */
}
else
{
}
else
{
SS7_ERROR
(
"Asked to copy tknStr that is not present!
\n
"
);
SS7_ERROR
(
"Asked to copy tknStr that is not present!
\n
"
);
return
1
;
return
FTDM_FAIL
;
}
/* if (str.pres == 1) */
}
/* if (str.pres == 1) */
return
0
;
return
FTDM_SUCCESS
;
}
ftdm_status_t
copy_tknStr_to_sngss7
(
char
*
val
,
TknStr
*
tknStr
,
TknU8
*
oddEven
)
{
char
tmp
[
2
];
int
k
=
0
;
int
j
=
0
;
uint8_t
flag
=
0
;
uint8_t
odd
=
0
;
uint8_t
lower
=
0x0
;
uint8_t
upper
=
0x0
;
tknStr
->
pres
=
PRSNT_NODEF
;
/* atoi will search through memory starting from the pointer it is given until
* it finds the \0...since tmp is on the stack it will start going through the
* possibly causing corruption. Hard code a \0 to prevent this
*/
tmp
[
1
]
=
'\0'
;
while
(
1
)
{
/* grab a digit from the ftdm digits */
tmp
[
0
]
=
val
[
k
];
/* check if the digit is a number and that is not null */
while
(
!
(
isxdigit
(
tmp
[
0
]))
&&
(
tmp
[
0
]
!=
'\0'
))
{
SS7_INFO
(
"Dropping invalid digit: %c
\n
"
,
tmp
[
0
]);
/* move on to the next value */
k
++
;
tmp
[
0
]
=
val
[
k
];
}
/* while(!(isdigit(tmp))) */
/* check if tmp is null or a digit */
if
(
tmp
[
0
]
!=
'\0'
)
{
/* push it into the lower nibble */
lower
=
strtol
(
&
tmp
[
0
],
(
char
**
)
NULL
,
16
);
/* move to the next digit */
k
++
;
/* grab a digit from the ftdm digits */
tmp
[
0
]
=
val
[
k
];
/* check if the digit is a number and that is not null */
while
(
!
(
isxdigit
(
tmp
[
0
]))
&&
(
tmp
[
0
]
!=
'\0'
))
{
SS7_INFO
(
"Dropping invalid digit: %c
\n
"
,
tmp
[
0
]);
k
++
;
tmp
[
0
]
=
val
[
k
];
}
/* while(!(isdigit(tmp))) */
/* check if tmp is null or a digit */
if
(
tmp
[
0
]
!=
'\0'
)
{
/* push the digit into the upper nibble */
upper
=
(
strtol
(
&
tmp
[
0
],
(
char
**
)
NULL
,
16
))
<<
4
;
}
else
{
/* there is no upper ... fill in 0 */
upper
=
0x0
;
/* throw the odd flag */
odd
=
1
;
/* throw the end flag */
flag
=
1
;
}
/* if (tmp != '\0') */
}
else
{
/* keep the odd flag down */
odd
=
0
;
/* break right away since we don't need to write the digits */
break
;
}
/* push the digits into the trillium structure */
tknStr
->
val
[
j
]
=
upper
|
lower
;
/* increment the trillium pointer */
j
++
;
/* if the flag is up we're through all the digits */
if
(
flag
)
break
;
/* move to the next digit */
k
++
;
}
/* while(1) */
tknStr
->
len
=
j
;
oddEven
->
pres
=
PRSNT_NODEF
;
oddEven
->
val
=
odd
;
return
FTDM_SUCCESS
;
}
}
/******************************************************************************/
/******************************************************************************/
int
check_for_state_change
(
ftdm_channel_t
*
ftdmchan
)
int
check_for_state_change
(
ftdm_channel_t
*
ftdmchan
)
{
{
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
浏览文件 @
358e9aab
...
@@ -122,6 +122,7 @@ typedef struct sng_ccSpan
...
@@ -122,6 +122,7 @@ typedef struct sng_ccSpan
uint32_t
ssf
;
uint32_t
ssf
;
uint32_t
clg_nadi
;
uint32_t
clg_nadi
;
uint32_t
cld_nadi
;
uint32_t
cld_nadi
;
uint32_t
rdnis_nadi
;
uint32_t
min_digits
;
uint32_t
min_digits
;
uint32_t
t3
;
uint32_t
t3
;
uint32_t
t12
;
uint32_t
t12
;
...
@@ -1841,6 +1842,7 @@ static int ftmod_ss7_parse_cc_span(ftdm_conf_node_t *cc_span)
...
@@ -1841,6 +1842,7 @@ static int ftmod_ss7_parse_cc_span(ftdm_conf_node_t *cc_span)
int
num_parms
=
cc_span
->
n_parameters
;
int
num_parms
=
cc_span
->
n_parameters
;
int
flag_clg_nadi
=
0
;
int
flag_clg_nadi
=
0
;
int
flag_cld_nadi
=
0
;
int
flag_cld_nadi
=
0
;
int
flag_rdnis_nadi
=
0
;
int
i
;
int
i
;
int
ret
;
int
ret
;
...
@@ -1912,16 +1914,17 @@ static int ftmod_ss7_parse_cc_span(ftdm_conf_node_t *cc_span)
...
@@ -1912,16 +1914,17 @@ static int ftmod_ss7_parse_cc_span(ftdm_conf_node_t *cc_span)
flag_clg_nadi
=
1
;
flag_clg_nadi
=
1
;
sng_ccSpan
.
clg_nadi
=
atoi
(
parm
->
val
);
sng_ccSpan
.
clg_nadi
=
atoi
(
parm
->
val
);
SS7_DEBUG
(
"Found default CLG_NADI parm->value = %d
\n
"
,
sng_ccSpan
.
clg_nadi
);
SS7_DEBUG
(
"Found default CLG_NADI parm->value = %d
\n
"
,
sng_ccSpan
.
clg_nadi
);
/**********************************************************************/
}
else
if
(
!
strcasecmp
(
parm
->
var
,
"cld_nadi"
))
{
}
else
if
(
!
strcasecmp
(
parm
->
var
,
"cld_nadi"
))
{
/**********************************************************************/
/* throw the flag so that we know we got this optional parameter */
/* throw the flag so that we know we got this optional parameter */
flag_cld_nadi
=
1
;
flag_cld_nadi
=
1
;
sng_ccSpan
.
cld_nadi
=
atoi
(
parm
->
val
);
sng_ccSpan
.
cld_nadi
=
atoi
(
parm
->
val
);
SS7_DEBUG
(
"Found default CLD_NADI parm->value = %d
\n
"
,
sng_ccSpan
.
cld_nadi
);
SS7_DEBUG
(
"Found default CLD_NADI parm->value = %d
\n
"
,
sng_ccSpan
.
cld_nadi
);
/**********************************************************************/
}
else
if
(
!
strcasecmp
(
parm
->
var
,
"rdnis_nadi"
))
{
/* throw the flag so that we know we got this optional parameter */
flag_rdnis_nadi
=
1
;
sng_ccSpan
.
rdnis_nadi
=
atoi
(
parm
->
val
);
SS7_DEBUG
(
"Found default RDNIS_NADI parm->value = %d
\n
"
,
sng_ccSpan
.
rdnis_nadi
);
}
else
if
(
!
strcasecmp
(
parm
->
var
,
"obci_bita"
))
{
}
else
if
(
!
strcasecmp
(
parm
->
var
,
"obci_bita"
))
{
/**********************************************************************/
if
(
*
parm
->
val
==
'1'
)
{
if
(
*
parm
->
val
==
'1'
)
{
sngss7_set_options
(
&
sng_ccSpan
,
SNGSS7_ACM_OBCI_BITA
);
sngss7_set_options
(
&
sng_ccSpan
,
SNGSS7_ACM_OBCI_BITA
);
SS7_DEBUG
(
"Found Optional Backwards Indicator: Bit A (early media) enable option
\n
"
);
SS7_DEBUG
(
"Found Optional Backwards Indicator: Bit A (early media) enable option
\n
"
);
...
@@ -2012,6 +2015,11 @@ static int ftmod_ss7_parse_cc_span(ftdm_conf_node_t *cc_span)
...
@@ -2012,6 +2015,11 @@ static int ftmod_ss7_parse_cc_span(ftdm_conf_node_t *cc_span)
sng_ccSpan
.
clg_nadi
=
0x03
;
sng_ccSpan
.
clg_nadi
=
0x03
;
}
}
if
(
!
flag_rdnis_nadi
)
{
/* default the nadi value to national */
sng_ccSpan
.
rdnis_nadi
=
0x03
;
}
/* pull up the SSF and Switchtype from the isup interface */
/* pull up the SSF and Switchtype from the isup interface */
sng_ccSpan
.
ssf
=
g_ftdm_sngss7_data
.
cfg
.
isupIntf
[
sng_ccSpan
.
isupInf
].
ssf
;
sng_ccSpan
.
ssf
=
g_ftdm_sngss7_data
.
cfg
.
isupIntf
[
sng_ccSpan
.
isupInf
].
ssf
;
sng_ccSpan
.
switchType
=
g_ftdm_sngss7_data
.
cfg
.
isupIntf
[
sng_ccSpan
.
isupInf
].
switchType
;
sng_ccSpan
.
switchType
=
g_ftdm_sngss7_data
.
cfg
.
isupIntf
[
sng_ccSpan
.
isupInf
].
switchType
;
...
@@ -2901,6 +2909,7 @@ static int ftmod_ss7_fill_in_ccSpan(sng_ccSpan_t *ccSpan)
...
@@ -2901,6 +2909,7 @@ static int ftmod_ss7_fill_in_ccSpan(sng_ccSpan_t *ccSpan)
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
ssf
=
ccSpan
->
ssf
;
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
ssf
=
ccSpan
->
ssf
;
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
cld_nadi
=
ccSpan
->
cld_nadi
;
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
cld_nadi
=
ccSpan
->
cld_nadi
;
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
clg_nadi
=
ccSpan
->
clg_nadi
;
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
clg_nadi
=
ccSpan
->
clg_nadi
;
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
rdnis_nadi
=
ccSpan
->
rdnis_nadi
;
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
options
=
ccSpan
->
options
;
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
options
=
ccSpan
->
options
;
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
switchType
=
ccSpan
->
switchType
;
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
switchType
=
ccSpan
->
switchType
;
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
min_digits
=
ccSpan
->
min_digits
;
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
min_digits
=
ccSpan
->
min_digits
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论