Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
becb9405
提交
becb9405
authored
11月 26, 2010
作者:
Konrad Hammel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chlog: freetdm: ss7 - added support for RELAY
上级
0d276e7d
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
4087 行增加
和
1685 行删除
+4087
-1685
Makefile.am
libs/freetdm/Makefile.am
+2
-1
configure.ac
libs/freetdm/configure.ac
+1
-1
mod_freetdm.c
libs/freetdm/mod_freetdm/mod_freetdm.c
+59
-3
ftmod_sangoma_ss7_cfg.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c
+389
-156
ftmod_sangoma_ss7_cli.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
+296
-85
ftmod_sangoma_ss7_cntrl.c
...tdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cntrl.c
+329
-45
ftmod_sangoma_ss7_handle.c
...dm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c
+47
-47
ftmod_sangoma_ss7_in.c
...reetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_in.c
+75
-7
ftmod_sangoma_ss7_logger.c
...dm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c
+91
-30
ftmod_sangoma_ss7_main.c
...etdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
+149
-120
ftmod_sangoma_ss7_main.h
...etdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
+218
-108
ftmod_sangoma_ss7_out.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c
+8
-9
ftmod_sangoma_ss7_relay.c
...tdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_relay.c
+318
-0
ftmod_sangoma_ss7_sta.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_sta.c
+103
-3
ftmod_sangoma_ss7_support.c
...m/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
+234
-33
ftmod_sangoma_ss7_timers.c
...dm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_timers.c
+1
-1
ftmod_sangoma_ss7_xml.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
+1767
-1036
没有找到文件。
libs/freetdm/Makefile.am
浏览文件 @
becb9405
...
...
@@ -240,7 +240,8 @@ ftmod_sangoma_ss7_la_SOURCES = \
$(SRC)
/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c
\
$(SRC)
/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_sta.c
\
$(SRC)
/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_sts.c
\
$(SRC)
/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c
$(SRC)
/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c
\
$(SRC)
/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_relay.c
ftmod_sangoma_ss7_la_CFLAGS
=
$(AM_CFLAGS)
$(FTDM_CFLAGS)
-D_GNU_SOURCE
ftmod_sangoma_ss7_la_LDFLAGS
=
-shared
-module
-avoid-version
-lsng_ss7
...
...
libs/freetdm/configure.ac
浏览文件 @
becb9405
...
...
@@ -267,7 +267,7 @@ fi
#
HAVE_SNG_SS7="no"
AC_MSG_RESULT([${as_nl}<<>> Sangoma SS7 stack])
AC_CHECK_LIB([sng_ss7], [sng_isup_init], [HAVE_SNG_SS7="yes"])
AC_CHECK_LIB([sng_ss7], [sng_isup_init
_gen
], [HAVE_SNG_SS7="yes"])
AC_MSG_RESULT([checking whether to build ftmod_sangoma_ss7... ${HAVE_SNG_SS7}])
AM_CONDITIONAL([HAVE_SNG_SS7], [test "${HAVE_SNG_SS7}" = "yes"])
...
...
libs/freetdm/mod_freetdm/mod_freetdm.c
浏览文件 @
becb9405
...
...
@@ -2360,8 +2360,9 @@ static int add_config_list_nodes(switch_xml_t swnode, ftdm_conf_node_t *rootnode
static
ftdm_conf_node_t
*
get_ss7_config_node
(
switch_xml_t
cfg
,
const
char
*
confname
)
{
switch_xml_t
signode
,
ss7configs
,
isup
;
ftdm_conf_node_t
*
rootnode
;
switch_xml_t
signode
,
ss7configs
,
isup
,
gen
,
param
;
ftdm_conf_node_t
*
rootnode
,
*
list
;
char
*
var
,
*
val
;
/* try to find the conf in the hash first */
rootnode
=
switch_core_hash_find
(
globals
.
ss7_configs
,
confname
);
...
...
@@ -2405,8 +2406,56 @@ static ftdm_conf_node_t *get_ss7_config_node(switch_xml_t cfg, const char *confn
return
NULL
;
}
/* add sng_gen */
gen
=
switch_xml_child
(
isup
,
"sng_gen"
);
if
(
gen
==
NULL
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"failed to process sng_gen for sng_isup config %s
\n
"
,
confname
);
ftdm_conf_node_destroy
(
rootnode
);
return
NULL
;
}
if
((
FTDM_SUCCESS
!=
ftdm_conf_node_create
(
"sng_gen"
,
&
list
,
rootnode
)))
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"failed to create %s node for %s
\n
"
,
"sng_gen"
,
confname
);
ftdm_conf_node_destroy
(
rootnode
);
return
NULL
;
}
for
(
param
=
switch_xml_child
(
gen
,
"param"
);
param
;
param
=
param
->
next
)
{
var
=
(
char
*
)
switch_xml_attr_soft
(
param
,
"name"
);
val
=
(
char
*
)
switch_xml_attr_soft
(
param
,
"value"
);
ftdm_conf_node_add_param
(
list
,
var
,
val
);
}
/* add relay channels */
if
(
add_config_list_nodes
(
isup
,
rootnode
,
"sng_relay"
,
"relay_channel"
,
NULL
,
NULL
))
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"failed to process sng_relay for sng_isup config %s
\n
"
,
confname
);
ftdm_conf_node_destroy
(
rootnode
);
return
NULL
;
}
/* add mtp1 links */
if
(
add_config_list_nodes
(
isup
,
rootnode
,
"mtp1_links"
,
"mtp1_link"
,
NULL
,
NULL
))
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"failed to process mtp1_links for sng_isup config %s
\n
"
,
confname
);
ftdm_conf_node_destroy
(
rootnode
);
return
NULL
;
}
/* add mtp2 links */
if
(
add_config_list_nodes
(
isup
,
rootnode
,
"mtp2_links"
,
"mtp2_link"
,
NULL
,
NULL
))
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"failed to process mtp2_links for sng_isup config %s
\n
"
,
confname
);
ftdm_conf_node_destroy
(
rootnode
);
return
NULL
;
}
/* add mtp3 links */
if
(
add_config_list_nodes
(
isup
,
rootnode
,
"mtp3_links"
,
"mtp3_link"
,
NULL
,
NULL
))
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"failed to process mtp3_links for sng_isup config %s
\n
"
,
confname
);
ftdm_conf_node_destroy
(
rootnode
);
return
NULL
;
}
/* add mtp linksets */
if
(
add_config_list_nodes
(
isup
,
rootnode
,
"mtp_linksets"
,
"mtp_linkset"
,
"mtp_links"
,
"mtp_link"
))
{
if
(
add_config_list_nodes
(
isup
,
rootnode
,
"mtp_linksets"
,
"mtp_linkset"
,
NULL
,
NULL
))
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"failed to process mtp_linksets for sng_isup config %s
\n
"
,
confname
);
ftdm_conf_node_destroy
(
rootnode
);
return
NULL
;
...
...
@@ -2426,6 +2475,13 @@ static ftdm_conf_node_t *get_ss7_config_node(switch_xml_t cfg, const char *confn
return
NULL
;
}
/* add cc spans */
if
(
add_config_list_nodes
(
isup
,
rootnode
,
"cc_spans"
,
"cc_span"
,
NULL
,
NULL
))
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"failed to process cc_spans for sng_isup config %s
\n
"
,
confname
);
ftdm_conf_node_destroy
(
rootnode
);
return
NULL
;
}
switch_core_hash_insert
(
globals
.
ss7_configs
,
confname
,
rootnode
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_INFO
,
"Added SS7 node configuration %s
\n
"
,
confname
);
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c
浏览文件 @
becb9405
差异被折叠。
点击展开。
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
浏览文件 @
becb9405
差异被折叠。
点击展开。
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cntrl.c
浏览文件 @
becb9405
差异被折叠。
点击展开。
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c
浏览文件 @
becb9405
差异被折叠。
点击展开。
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_in.c
浏览文件 @
becb9405
...
...
@@ -409,13 +409,80 @@ void sngss7_sta_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, uint
sngss7_chan_data_t
*
sngss7_info
=
NULL
;
ftdm_channel_t
*
ftdmchan
=
NULL
;
sngss7_event_data_t
*
sngss7_event
=
NULL
;
/* get the ftdmchan and ss7_chan_data from the circuit */
if
(
extract_chan_data
(
circuit
,
&
sngss7_info
,
&
ftdmchan
))
{
SS7_ERROR
(
"Failed to extract channel data for circuit = %d!
\n
"
,
circuit
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
uint32_t
intfId
;
int
x
;
/* check if the eventType is a pause/resume */
switch
(
evntType
)
{
/**************************************************************************/
case
(
SIT_STA_PAUSEIND
):
case
(
SIT_STA_RESUMEIND
):
/* the circuit for this type of event may not exist on the local system
* so first check if the circuit is local
*/
if
((
circuit
>=
(
g_ftdm_sngss7_data
.
cfg
.
procId
*
1000
))
&&
(
circuit
<
((
g_ftdm_sngss7_data
.
cfg
.
procId
+
1
)
*
1000
)))
{
/* the circuit is on the local system, handle normally */
goto
sta_ind_local
;
}
/* the circuit is not local, so find a local circuit with the same intfId
* by finding the orginial circuit in our array first, finding the intfId
* from there, then go through the local circuits to see if we find a
* match and use that circuit instead
*/
intfId
=
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
circuit
].
infId
;
x
=
(
g_ftdm_sngss7_data
.
cfg
.
procId
*
1000
)
+
1
;
while
((
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
id
!=
0
)
&&
(
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
id
<
((
g_ftdm_sngss7_data
.
cfg
.
procId
+
1
)
*
1000
)))
{
/**********************************************************************/
/* confirm this is a voice channel and not a gap/sig (no ftdmchan there) */
if
(
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
type
!=
VOICE
)
goto
move_along
;
/* compare the intfIds */
if
(
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
x
].
infId
==
intfId
)
{
/* we have a match, setup the pointers to the correct values */
circuit
=
x
;
if
(
extract_chan_data
(
circuit
,
&
sngss7_info
,
&
ftdmchan
))
{
SS7_ERROR
(
"Failed to extract channel data for circuit = %d!
\n
"
,
circuit
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
/* bounce out of the loop */
break
;
}
/* if (g_ftdm_sngss7_data.cfg.isupCkt[x].intfId == intfId) */
move_along:
/* move along ... nothing to see here */
x
++
;
/**********************************************************************/
}
/* while (g_ftdm_sngss7_data.cfg.isupCkt[x].id != 0) */
/* check if we found any circuits that are on the intfId, drop the message
* if none are found
*/
if
(
ftdmchan
==
NULL
)
goto
sta_ind_end
;
break
;
/**************************************************************************/
default:
sta_ind_local:
/* get the ftdmchan and ss7_chan_data from the circuit */
if
(
extract_chan_data
(
circuit
,
&
sngss7_info
,
&
ftdmchan
))
{
SS7_ERROR
(
"Failed to extract channel data for circuit = %d!
\n
"
,
circuit
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
break
;
/**************************************************************************/
}
/* switch (evntType) */
/* initalize the sngss7_event */
sngss7_event
=
ftdm_malloc
(
sizeof
(
*
sngss7_event
));
...
...
@@ -440,6 +507,7 @@ void sngss7_sta_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circuit, uint
/* enqueue this event */
ftdm_queue_enqueue
(((
sngss7_span_data_t
*
)
sngss7_info
->
ftdmchan
->
span
->
signal_data
)
->
event_queue
,
sngss7_event
);
sta_ind_end:
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
}
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c
浏览文件 @
becb9405
...
...
@@ -48,6 +48,8 @@ void handle_sng_mtp2_alarm(Pst *pst, SdMngmt *sta);
void
handle_sng_mtp3_alarm
(
Pst
*
pst
,
SnMngmt
*
sta
);
void
handle_sng_isup_alarm
(
Pst
*
pst
,
SiMngmt
*
sta
);
void
handle_sng_cc_alarm
(
Pst
*
pst
,
CcMngmt
*
sta
);
void
handle_sng_relay_alarm
(
Pst
*
pst
,
RyMngmt
*
sta
);
/******************************************************************************/
/* FUNCTIONS ******************************************************************/
...
...
@@ -132,17 +134,17 @@ void handle_sng_mtp2_alarm(Pst *pst, SdMngmt *sta)
/* find the name for the sap in question */
x
=
1
;
while
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
sta
->
t
.
usta
.
evntParm
[
0
])
{
while
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
==
sta
->
t
.
usta
.
evntParm
[
0
])
{
break
;
}
x
++
;
}
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
==
0
)
{
sprintf
(
buf
,
"[SAPID:%d]"
,
sta
->
t
.
usta
.
evntParm
[
0
]);
}
else
{
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
name
);
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
name
);
}
...
...
@@ -173,17 +175,17 @@ void handle_sng_mtp2_alarm(Pst *pst, SdMngmt *sta)
/* find the name for the sap in question */
x
=
1
;
while
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
sta
->
t
.
usta
.
evntParm
[
0
])
{
while
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
==
sta
->
t
.
usta
.
evntParm
[
0
])
{
break
;
}
x
++
;
}
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
==
0
)
{
sprintf
(
buf
,
"[SAPID:%d]"
,
sta
->
t
.
usta
.
evntParm
[
0
]);
}
else
{
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
name
);
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
name
);
}
ftdm_log
(
FTDM_LOG_ERROR
,
"[MTP2]%s %s : %s
\n
"
,
...
...
@@ -196,17 +198,17 @@ void handle_sng_mtp2_alarm(Pst *pst, SdMngmt *sta)
/* find the name for the sap in question */
x
=
1
;
while
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
sta
->
t
.
usta
.
evntParm
[
0
])
{
while
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
==
sta
->
t
.
usta
.
evntParm
[
0
])
{
break
;
}
x
++
;
}
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
==
0
)
{
sprintf
(
buf
,
"[SAPID:%d]"
,
sta
->
t
.
usta
.
evntParm
[
0
]);
}
else
{
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
name
);
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
name
);
}
ftdm_log
(
FTDM_LOG_ERROR
,
"[MTP2]%s %s : %s
\n
"
,
...
...
@@ -220,17 +222,17 @@ void handle_sng_mtp2_alarm(Pst *pst, SdMngmt *sta)
/* find the name for the sap in question */
x
=
1
;
while
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
sta
->
t
.
usta
.
evntParm
[
0
])
{
while
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
==
sta
->
t
.
usta
.
evntParm
[
0
])
{
break
;
}
x
++
;
}
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
==
0
)
{
sprintf
(
buf
,
"[SAPID:%d]"
,
sta
->
t
.
usta
.
evntParm
[
0
]);
}
else
{
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
name
);
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
name
);
}
ftdm_log
(
FTDM_LOG_ERROR
,
"[MTP2]%s %s : RTB Queue Len(%d)|Oldest BSN(%d)|Tx Queue Len(%d)|Outstanding Frames(%d)
\n
"
,
...
...
@@ -246,17 +248,17 @@ void handle_sng_mtp2_alarm(Pst *pst, SdMngmt *sta)
/* find the name for the sap in question */
x
=
1
;
while
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
sta
->
t
.
usta
.
evntParm
[
0
])
{
while
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
==
sta
->
t
.
usta
.
evntParm
[
0
])
{
break
;
}
x
++
;
}
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
==
0
)
{
sprintf
(
buf
,
"[SAPID:%d]"
,
sta
->
t
.
usta
.
evntParm
[
0
]);
}
else
{
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
name
);
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
name
);
}
ftdm_log
(
FTDM_LOG_ERROR
,
"[MTP2]%s %s : RTB Queue Len(%d)
\n
"
,
...
...
@@ -269,17 +271,17 @@ void handle_sng_mtp2_alarm(Pst *pst, SdMngmt *sta)
/* find the name for the sap in question */
x
=
1
;
while
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
sta
->
t
.
usta
.
evntParm
[
0
])
{
while
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
==
sta
->
t
.
usta
.
evntParm
[
0
])
{
break
;
}
x
++
;
}
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
id
==
0
)
{
sprintf
(
buf
,
"[SAPID:%d]"
,
sta
->
t
.
usta
.
evntParm
[
0
]);
}
else
{
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
name
);
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtp
2
Link
[
x
].
name
);
}
ftdm_log
(
FTDM_LOG_ERROR
,
"[MTP2]%s %s : %d
\n
"
,
...
...
@@ -290,9 +292,11 @@ void handle_sng_mtp2_alarm(Pst *pst, SdMngmt *sta)
/**********************************************************************/
case
(
LCM_EVENT_UI_INV_EVT
):
case
(
LCM_EVENT_LI_INV_EVT
):
ftdm_log
(
FTDM_LOG_ERROR
,
"[MTP2] %s
: %s
: Primitive (%d)
\n
"
,
ftdm_log
(
FTDM_LOG_ERROR
,
"[MTP2] %s
(%d) : %s(%d)
: Primitive (%d)
\n
"
,
DECODE_LSD_EVENT
(
sta
->
t
.
usta
.
alarm
.
event
),
sta
->
t
.
usta
.
alarm
.
event
,
DECODE_LCM_CAUSE
(
sta
->
t
.
usta
.
alarm
.
cause
),
sta
->
t
.
usta
.
alarm
.
cause
,
sta
->
t
.
usta
.
evntParm
[
0
]);
break
;
/**********************************************************************/
...
...
@@ -362,22 +366,23 @@ void handle_sng_mtp3_alarm(Pst *pst, SnMngmt *sta)
/* find the name for the sap in question */
x
=
1
;
while
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
sta
->
hdr
.
elmId
.
elmntInst1
)
{
while
(
g_ftdm_sngss7_data
.
cfg
.
mtp
3
Link
[
x
].
id
!=
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
3
Link
[
x
].
id
==
sta
->
hdr
.
elmId
.
elmntInst1
)
{
break
;
}
x
++
;
}
if
(
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
id
==
0
)
{
if
(
g_ftdm_sngss7_data
.
cfg
.
mtp
3
Link
[
x
].
id
==
0
)
{
sprintf
(
buf
,
"[SAPID:%d]"
,
sta
->
hdr
.
elmId
.
elmntInst1
);
}
else
{
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
x
].
name
);
sprintf
(
buf
,
"[%s]"
,
g_ftdm_sngss7_data
.
cfg
.
mtp
3
Link
[
x
].
name
);
}
switch
(
sta
->
t
.
usta
.
alarm
.
event
)
{
/**********************************************************************/
case
(
LSN_EVENT_INV_OPC_OTHER_END
):
ftdm_log
(
FTDM_LOG_ERROR
,
"[MTP3]%s %s : %s : OPC(0x%X%X%X%X)
\n
"
,
buf
,
DECODE_LSN_EVENT
(
sta
->
t
.
usta
.
alarm
.
event
),
...
...
@@ -460,7 +465,7 @@ void handle_sng_mtp3_alarm(Pst *pst, SnMngmt *sta)
break
;
/**********************************************************************/
default:
ftdm_log
(
FTDM_LOG_ERROR
,
"[MTP3][DPC:0x%
d%d%d%d
] %s : %s
\n
"
,
ftdm_log
(
FTDM_LOG_ERROR
,
"[MTP3][DPC:0x%
X%X%X%X
] %s : %s
\n
"
,
sta
->
t
.
usta
.
evntParm
[
0
],
sta
->
t
.
usta
.
evntParm
[
1
],
sta
->
t
.
usta
.
evntParm
[
2
],
...
...
@@ -744,7 +749,63 @@ void handle_sng_cc_alarm(Pst *pst, CcMngmt *sta)
return
;
}
/* handle_cc_alarm */
/******************************************************************************/
void
handle_sng_relay_alarm
(
Pst
*
pst
,
RyMngmt
*
sta
)
{
switch
(
sta
->
hdr
.
elmId
.
elmnt
)
{
/**************************************************************************/
case
(
LRY_USTA_ERR
):
/* ERROR */
ftdm_log
(
FTDM_LOG_ERROR
,
"[RELAY] Error: tx procId %d: err procId %d: channel %d: seq %s: reason %s
\n
"
,
sta
->
t
.
usta
.
s
.
ryErrUsta
.
sendPid
,
sta
->
t
.
usta
.
s
.
ryErrUsta
.
errPid
,
sta
->
t
.
usta
.
s
.
ryErrUsta
.
id
,
DECODE_LRY_SEQ
(
sta
->
t
.
usta
.
s
.
ryErrUsta
.
sequence
),
DECODE_LRY_REASON
(
sta
->
t
.
usta
.
s
.
ryErrUsta
.
reason
));
/* process the event */
handle_relay_disconnect_on_error
(
sta
);
break
;
/**************************************************************************/
case
(
LRY_USTA_CNG
):
/* Congestion */
ftdm_log
(
FTDM_LOG_ERROR
,
"[RELAY] Congestion: tx procId %d: rem procId %d: channel %d: %s
\n
"
,
sta
->
t
.
usta
.
s
.
ryCongUsta
.
sendPid
,
sta
->
t
.
usta
.
s
.
ryCongUsta
.
remPid
,
sta
->
t
.
usta
.
s
.
ryCongUsta
.
id
,
DECODE_LRY_CONG_FLAGS
(
sta
->
t
.
usta
.
s
.
ryCongUsta
.
flags
));
break
;
/**************************************************************************/
case
(
LRY_USTA_UP
):
/* channel up */
ftdm_log
(
FTDM_LOG_ERROR
,
"[RELAY] Channel UP: tx procId %d: channel %d
\n
"
,
sta
->
t
.
usta
.
s
.
ryUpUsta
.
sendPid
,
sta
->
t
.
usta
.
s
.
ryUpUsta
.
id
);
/* process the event */
handle_relay_connect
(
sta
);
break
;
/**************************************************************************/
case
(
LRY_USTA_DN
):
/* channel down */
ftdm_log
(
FTDM_LOG_ERROR
,
"[RELAY] Channel DOWN: tx procId %d: channel %d
\n
"
,
sta
->
t
.
usta
.
s
.
ryUpUsta
.
sendPid
,
sta
->
t
.
usta
.
s
.
ryUpUsta
.
id
);
/* process the event */
handle_relay_disconnect_on_down
(
sta
);
break
;
/**************************************************************************/
default:
ftdm_log
(
FTDM_LOG_ERROR
,
"Unknown Relay Alram
\n
"
);
break
;
/**************************************************************************/
}
/* switch (sta->hdr.elmId.elmnt) */
return
;
}
/******************************************************************************/
/* For Emacs:
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
浏览文件 @
becb9405
差异被折叠。
点击展开。
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
浏览文件 @
becb9405
差异被折叠。
点击展开。
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c
浏览文件 @
becb9405
...
...
@@ -125,9 +125,9 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
iam
.
txMedReq
.
trMedReq
.
pres
=
PRSNT_NODEF
;
iam
.
txMedReq
.
trMedReq
.
val
=
ftdmchan
->
caller_data
.
bearer_capability
;
if
((
g_ftdm_sngss7_data
.
cfg
.
isup
Intf
[
sngss7_info
->
circuit
->
infI
d
].
switchType
==
LSI_SW_ANS88
)
||
(
g_ftdm_sngss7_data
.
cfg
.
isup
Intf
[
sngss7_info
->
circuit
->
infI
d
].
switchType
==
LSI_SW_ANS92
)
||
(
g_ftdm_sngss7_data
.
cfg
.
isup
Intf
[
sngss7_info
->
circuit
->
infI
d
].
switchType
==
LSI_SW_ANS95
))
{
if
((
g_ftdm_sngss7_data
.
cfg
.
isup
Ckt
[
sngss7_info
->
circuit
->
i
d
].
switchType
==
LSI_SW_ANS88
)
||
(
g_ftdm_sngss7_data
.
cfg
.
isup
Ckt
[
sngss7_info
->
circuit
->
i
d
].
switchType
==
LSI_SW_ANS92
)
||
(
g_ftdm_sngss7_data
.
cfg
.
isup
Ckt
[
sngss7_info
->
circuit
->
i
d
].
switchType
==
LSI_SW_ANS95
))
{
/* include only if we're running ANSI */
iam
.
fwdCallInd
.
transCallNInd
.
pres
=
PRSNT_NODEF
;
...
...
@@ -178,7 +178,7 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
iam
.
usrServInfoA
.
rateMultiplier
.
pres
=
PRSNT_NODEF
;
iam
.
usrServInfoA
.
rateMultiplier
.
val
=
0x1
;
/* 1x rate multipler */
}
/* if ANSI */
/* copy down the called number information */
copy_cdPtyNum_to_sngss7
(
&
ftdmchan
->
caller_data
,
&
iam
.
cdPtyNum
);
...
...
@@ -192,7 +192,7 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
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
.
isup
Intf
[
sngss7_info
->
circuit
->
infI
d
].
clg_nadi
;
iam
.
cgPtyNum
.
natAddrInd
.
val
=
g_ftdm_sngss7_data
.
cfg
.
isup
Ckt
[
sngss7_info
->
circuit
->
i
d
].
clg_nadi
;
SS7_DEBUG_CHAN
(
ftdmchan
,
"No user supplied NADI value found for CLG, using
\"
%d
\"\n
"
,
iam
.
cgPtyNum
.
natAddrInd
.
val
);
}
...
...
@@ -201,7 +201,7 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
SS7_DEBUG_CHAN
(
ftdmchan
,
"Found user supplied Called NADI value
\"
%s
\"\n
"
,
cld_nadi
);
iam
.
cdPtyNum
.
natAddrInd
.
val
=
atoi
(
cld_nadi
);
}
else
{
iam
.
cdPtyNum
.
natAddrInd
.
val
=
g_ftdm_sngss7_data
.
cfg
.
isup
Intf
[
sngss7_info
->
circuit
->
infI
d
].
cld_nadi
;
iam
.
cdPtyNum
.
natAddrInd
.
val
=
g_ftdm_sngss7_data
.
cfg
.
isup
Ckt
[
sngss7_info
->
circuit
->
i
d
].
cld_nadi
;
SS7_DEBUG_CHAN
(
ftdmchan
,
"No user supplied NADI value found for CLD, using
\"
%d
\"\n
"
,
iam
.
cdPtyNum
.
natAddrInd
.
val
);
}
...
...
@@ -310,7 +310,6 @@ void ft_to_sngss7_acm (ftdm_channel_t * ftdmchan)
SS7_FUNC_TRACE_ENTER
(
__FUNCTION__
);
sngss7_chan_data_t
*
sngss7_info
=
ftdmchan
->
call_data
;
sng_isup_inf_t
*
isup_intf
=
&
g_ftdm_sngss7_data
.
cfg
.
isupIntf
[
sngss7_info
->
circuit
->
infId
];
SiCnStEvnt
acm
;
memset
(
&
acm
,
0x0
,
sizeof
(
acm
));
...
...
@@ -360,8 +359,8 @@ void ft_to_sngss7_acm (ftdm_channel_t * ftdmchan)
acm
.
bckCallInd
.
sccpMethInd
.
val
=
SCCPMTH_NOIND
;
/* fill in any optional parameters */
if
(
sngss7_test_options
(
isup_intf
,
SNGSS7_ACM_OBCI_BITA
))
{
SS7_DEBUG_CHAN
(
ftdmchan
,
"Found ACM_OBCI_BITA flag:0x%X
\n
"
,
isup_intf
->
options
);
if
(
sngss7_test_options
(
&
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
sngss7_info
->
circuit
->
id
]
,
SNGSS7_ACM_OBCI_BITA
))
{
SS7_DEBUG_CHAN
(
ftdmchan
,
"Found ACM_OBCI_BITA flag:0x%X
\n
"
,
g_ftdm_sngss7_data
.
cfg
.
isupCkt
[
sngss7_info
->
circuit
->
id
].
options
);
acm
.
optBckCalInd
.
eh
.
pres
=
PRSNT_NODEF
;
acm
.
optBckCalInd
.
inbndInfoInd
.
pres
=
PRSNT_NODEF
;
acm
.
optBckCalInd
.
inbndInfoInd
.
val
=
0x1
;
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_relay.c
0 → 100644
浏览文件 @
becb9405
差异被折叠。
点击展开。
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_sta.c
浏览文件 @
becb9405
...
...
@@ -42,12 +42,43 @@
/******************************************************************************/
/* PROTOTYPES *****************************************************************/
int
ftmod_ss7_mtplink_sta
(
uint32_t
id
,
SnMngmt
*
cfm
);
int
ftmod_ss7_mtp1link_sta
(
uint32_t
id
,
L1Mngmt
*
cfm
);
int
ftmod_ss7_mtp2link_sta
(
uint32_t
id
,
SdMngmt
*
cfm
);
int
ftmod_ss7_mtp3link_sta
(
uint32_t
id
,
SnMngmt
*
cfm
);
int
ftmod_ss7_mtplinkSet_sta
(
uint32_t
id
,
SnMngmt
*
cfm
);
int
ftmod_ss7_isup_intf_sta
(
uint32_t
id
,
uint8_t
*
status
);
int
ftmod_ss7_relay_status
(
uint32_t
id
,
RyMngmt
*
cfm
);
/******************************************************************************/
/* FUNCTIONS ******************************************************************/
int
ftmod_ss7_mtplink_sta
(
uint32_t
id
,
SnMngmt
*
cfm
)
int
ftmod_ss7_mtp1link_sta
(
uint32_t
id
,
L1Mngmt
*
cfm
)
{
return
1
;
}
/******************************************************************************/
int
ftmod_ss7_mtp2link_sta
(
uint32_t
id
,
SdMngmt
*
cfm
)
{
SdMngmt
sta
;
Pst
pst
;
memset
(
&
sta
,
0x0
,
sizeof
(
sta
));
/* initalize the post structure */
smPstInit
(
&
pst
);
/* insert the destination Entity */
pst
.
dstEnt
=
ENTSD
;
sta
.
hdr
.
elmId
.
elmnt
=
STDLSAP
;
sta
.
hdr
.
elmId
.
elmntInst1
=
g_ftdm_sngss7_data
.
cfg
.
mtp2Link
[
id
].
id
;
return
(
sng_sta_mtp2
(
&
pst
,
&
sta
,
cfm
));
}
/******************************************************************************/
int
ftmod_ss7_mtp3link_sta
(
uint32_t
id
,
SnMngmt
*
cfm
)
{
SnMngmt
sta
;
Pst
pst
;
...
...
@@ -60,8 +91,13 @@ int ftmod_ss7_mtplink_sta(uint32_t id, SnMngmt *cfm)
/* insert the destination Entity */
pst
.
dstEnt
=
ENTSN
;
/* check the for the correct ProcId and make sure it goes to the right system */
if
(
g_ftdm_sngss7_data
.
cfg
.
procId
!=
1
)
{
pst
.
dstProcId
=
1
;
}
sta
.
hdr
.
elmId
.
elmnt
=
STDLSAP
;
sta
.
hdr
.
elmId
.
elmntInst1
=
g_ftdm_sngss7_data
.
cfg
.
mtpLink
[
id
].
id
;
sta
.
hdr
.
elmId
.
elmntInst1
=
g_ftdm_sngss7_data
.
cfg
.
mtp
3
Link
[
id
].
id
;
return
(
sng_sta_mtp3
(
&
pst
,
&
sta
,
cfm
));
}
...
...
@@ -80,13 +116,77 @@ int ftmod_ss7_mtplinkSet_sta(uint32_t id, SnMngmt *cfm)
/* insert the destination Entity */
pst
.
dstEnt
=
ENTSN
;
/* check the for the correct ProcId and make sure it goes to the right system */
if
(
g_ftdm_sngss7_data
.
cfg
.
procId
!=
1
)
{
pst
.
dstProcId
=
1
;
}
sta
.
hdr
.
elmId
.
elmnt
=
STLNKSET
;
sta
.
hdr
.
elmId
.
elmntInst1
=
g_ftdm_sngss7_data
.
cfg
.
mtpLinkSet
[
id
].
id
;
sta
.
hdr
.
elmId
.
elmntInst2
=
g_ftdm_sngss7_data
.
cfg
.
mtpLinkSet
[
id
].
links
[
0
];
return
(
sng_sta_mtp3
(
&
pst
,
&
sta
,
cfm
));
}
/******************************************************************************/
int
ftmod_ss7_isup_intf_sta
(
uint32_t
id
,
uint8_t
*
status
)
{
SiMngmt
sta
;
SiMngmt
cfm
;
Pst
pst
;
int
ret
;
memset
(
&
sta
,
0x0
,
sizeof
(
sta
));
/* initalize the post structure */
smPstInit
(
&
pst
);
/* insert the destination Entity */
pst
.
dstEnt
=
ENTSI
;
/* check the for the correct ProcId and make sure it goes to the right system */
if
(
g_ftdm_sngss7_data
.
cfg
.
procId
!=
1
)
{
pst
.
dstProcId
=
1
;
}
/* request the status of an inftId */
sta
.
hdr
.
entId
.
ent
=
ENTSI
;
sta
.
hdr
.
entId
.
inst
=
S_INST
;
sta
.
hdr
.
msgType
=
TSSTA
;
sta
.
hdr
.
elmId
.
elmnt
=
SI_STINTF
;
sta
.
t
.
ssta
.
elmntId
.
intfId
=
id
;
ret
=
sng_sta_isup
(
&
pst
,
&
sta
,
&
cfm
);
*
status
=
cfm
.
t
.
ssta
.
cfm
.
s
.
intf
.
state
;
return
(
ret
);
}
/******************************************************************************/
int
ftmod_ss7_relay_status
(
uint32_t
id
,
RyMngmt
*
cfm
)
{
RyMngmt
sta
;
Pst
pst
;
memset
(
&
sta
,
0x0
,
sizeof
(
sta
));
/* initalize the post structure */
smPstInit
(
&
pst
);
/* insert the destination Entity */
pst
.
dstEnt
=
ENTRY
;
sta
.
hdr
.
entId
.
ent
=
ENTRY
;
sta
.
hdr
.
entId
.
inst
=
S_INST
;
sta
.
hdr
.
msgType
=
TSSTA
;
sta
.
hdr
.
elmId
.
elmnt
=
STCHSTA
;
sta
.
hdr
.
elmId
.
elmntInst1
=
id
;
return
(
sng_sta_relay
(
&
pst
,
&
sta
,
cfm
));
}
/******************************************************************************/
/* For Emacs:
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
浏览文件 @
becb9405
差异被折叠。
点击展开。
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_timers.c
浏览文件 @
becb9405
...
...
@@ -61,7 +61,7 @@ void handle_isup_t35(void *userdata)
SS7_ERROR
(
"[Call-Control] Timer 35 expired on CIC = %d
\n
"
,
sngss7_info
->
circuit
->
cic
);
/* set the flag to indicate this hangup is started from the local side */
sngss7_set_flag
(
sngss7_info
,
FLAG_LOCAL_REL
);
sngss7_set_
ckt_
flag
(
sngss7_info
,
FLAG_LOCAL_REL
);
/* hang up on timer expiry */
ftdmchan
->
caller_data
.
hangup_cause
=
28
;
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
浏览文件 @
becb9405
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论