Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
c219a73c
提交
c219a73c
authored
9月 07, 2010
作者:
Konrad Hammel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
freetdm: ss7- added support for incoming group blocks, started adding support for ansi
上级
d7141be3
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
588 行增加
和
123 行删除
+588
-123
ftmod_sangoma_ss7_cfg.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c
+46
-21
ftmod_sangoma_ss7_handle.c
...dm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c
+266
-5
ftmod_sangoma_ss7_main.c
...etdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
+3
-67
ftmod_sangoma_ss7_main.h
...etdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
+22
-14
ftmod_sangoma_ss7_out.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c
+164
-16
ftmod_sangoma_ss7_support.c
...m/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
+73
-0
ftmod_sangoma_ss7_xml.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
+14
-0
没有找到文件。
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c
浏览文件 @
c219a73c
...
...
@@ -444,8 +444,8 @@ int ftmod_ss7_mtp3_gen_config(void)
cfg
.
t
.
cfg
.
s
.
snGen
.
tmr
.
t21
.
enb
=
TRUE
;
/* t21 - waiting to restart traffic routed through adjacent SP */
cfg
.
t
.
cfg
.
s
.
snGen
.
tmr
.
t21
.
val
=
650
;
# if (SS7_ANS92 || SS7_ANS88 || SS7_ANS96 || defined(TDS_ROLL_UPGRADE_SUPPORT))
cfg
.
t
.
cfg
.
s
.
snGen
.
t26
.
enb
=
TRUE
;
/* t26 - waiting to repeat traffic restart waiting message for ANSI */
cfg
.
t
.
cfg
.
s
.
snGen
.
t26
.
val
=
600
;
cfg
.
t
.
cfg
.
s
.
snGen
.
t
mr
.
t
26
.
enb
=
TRUE
;
/* t26 - waiting to repeat traffic restart waiting message for ANSI */
cfg
.
t
.
cfg
.
s
.
snGen
.
t
mr
.
t
26
.
val
=
600
;
# endif
#endif
...
...
@@ -744,10 +744,6 @@ int ftmod_ss7_mtp3_dlsap_config(int id)
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
msgPrior
=
0
;
/* management message priority */
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
lnkType
=
k
->
mtp3
.
linkType
;
/* link type ANSI, ITU, BICI or CHINA */
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
upSwtch
=
k
->
mtp3
.
switchType
;
/* user part switch type */
# if (SS7_ANS92 || SS7_ANS88 || SS7_ANS96 || SS7_CHINA)
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
l2Type
=
LSN_MTP2_56KBPS
;
/* layer 2 type - 56kbps MTP2 link, 1.536Mbps MTP2 link or QSAAL link */
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
isCLink
=
FALSE
;
/* identifies if the link is a C type link.Required to check if sls has to be rotated.*/
# endif
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
maxSLTtry
=
MAX_SLTM_RETRIES
;
/* maximun times to retry SLTM */
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
p0QLen
=
32
;
/* size of the priority 0 Q */
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
p1QLen
=
32
;
/* size of the priority 1 Q */
...
...
@@ -775,17 +771,46 @@ int ftmod_ss7_mtp3_dlsap_config(int id)
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
selector
=
0
;
/* lower layer selector */
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
mem
.
region
=
S_REG
;
/* memory region id */
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
mem
.
pool
=
S_POOL
;
/* memory pool id */
#if( SS7_ANS92 || SS7_ANS88 || SS7_ANS96 || SS7_CHINA )
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
dpcLen
=
DPC24
;
/* dpc length 24 bits */
#else
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
dpcLen
=
DPC14
;
/* dpc length 14 bits */
#endif
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
spId
=
k
->
mtp3
.
mtp2Id
;
/* service provider id */
#if (SS7_ITU88 || SS7_CHINA || SS7_TTC || SS7_NTT || SS7_BICI )
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
flushContFlag
=
FALSE
;
/* flush continue handling */
#else
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
flushContFlag
=
TRUE
;
/* flush continue handling */
#endif
switch
(
k
->
mtp3
.
linkType
)
{
/**************************************************************************/
case
(
LSN_SW_ANS
):
case
(
LSN_SW_ANS96
):
case
(
LSN_SW_CHINA
):
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
dpcLen
=
DPC24
;
/* dpc length 24 bits */
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
l2Type
=
LSN_MTP2_56KBPS
;
/* layer 2 type - 56kbps MTP2 link, 1.536Mbps MTP2 link or QSAAL link */
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
isCLink
=
FALSE
;
/* identifies if the link is a C type link.Required to check if sls has to be rotated.*/
break
;
/**************************************************************************/
case
(
LSN_SW_ITU
):
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
dpcLen
=
DPC14
;
/* dpc length 14 bits */
break
;
/**************************************************************************/
default:
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
dpcLen
=
DPC14
;
/* dpc length 14 bits */
break
;
/**************************************************************************/
}
/* switch (k->mtp3.linkType) */
switch
(
k
->
mtp3
.
linkType
)
{
/**************************************************************************/
case
(
LSN_SW_ANS
):
case
(
LSN_SW_ANS96
):
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
flushContFlag
=
TRUE
;
/* flush continue handling */
break
;
/**************************************************************************/
case
(
LSN_SW_ITU
):
case
(
LSN_SW_CHINA
):
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
flushContFlag
=
FALSE
;
/* flush continue handling */
break
;
/**************************************************************************/
default:
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
flushContFlag
=
FALSE
;
/* flush continue handling */
break
;
/**************************************************************************/
}
/* switch (k->mtp3.linkType) */
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
tmr
.
t1
.
enb
=
TRUE
;
/* t1 - delay to avoid missequencing on changeover */
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
tmr
.
t1
.
val
=
k
->
mtp3
.
t1
;
cfg
.
t
.
cfg
.
s
.
snDLSAP
.
tmr
.
t2
.
enb
=
TRUE
;
/* t2 - waiting for changeover ack */
...
...
@@ -1209,12 +1234,12 @@ int ftmod_ss7_isup_ckt_config(int id)
cfg
.
t
.
cfg
.
s
.
siCir
.
typeCntrl
=
k
->
typeCntrl
;
/* type of control */
cfg
.
t
.
cfg
.
s
.
siCir
.
contReq
=
FALSE
;
/* continuity check required */
#if (SI_218_COMP || SS7_ANS88 || SS7_ANS92 || SS7_ANS95 || SS7_BELL)
cfg
.
t
.
cfg
.
s
.
siCir
.
firstCic
=
;
/* First cic in the circuit group */
cfg
.
t
.
cfg
.
s
.
siCir
.
numCir
=
;
/* Number of circuits in the circuit group */
cfg
.
t
.
cfg
.
s
.
siCir
.
firstCic
=
1
;
/* First cic in the circuit group */
cfg
.
t
.
cfg
.
s
.
siCir
.
numCir
=
24
;
/* Number of circuits in the circuit group */
cfg
.
t
.
cfg
.
s
.
siCir
.
nonSS7Con
=
TRUE
;
/* connecting to non SS7 network */
cfg
.
t
.
cfg
.
s
.
siCir
.
outTrkGrpN
=
;
/* outgoing trunk group number (For EXM) */
cfg
.
t
.
cfg
.
s
.
siCir
.
cvrTrkClli
=
;
/* Trunk Group number (For CVR validation) */
cfg
.
t
.
cfg
.
s
.
siCir
.
clli
=
;
/* common language location identifier */
cfg
.
t
.
cfg
.
s
.
siCir
.
outTrkGrpN
.
length
=
0
;
/* outgoing trunk group number (For EXM) */
cfg
.
t
.
cfg
.
s
.
siCir
.
cvrTrkClli
.
length
=
0
;
/* Trunk Group number (For CVR validation) */
cfg
.
t
.
cfg
.
s
.
siCir
.
clli
.
length
=
0
;
/* common language location identifier */
#endif
cfg
.
t
.
cfg
.
s
.
siCir
.
cirTmr
.
t3
.
enb
=
TRUE
;
/* t3 timer - overload received */
cfg
.
t
.
cfg
.
s
.
siCir
.
cirTmr
.
t3
.
val
=
k
->
t3
;
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c
浏览文件 @
c219a73c
差异被折叠。
点击展开。
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
浏览文件 @
c219a73c
...
...
@@ -272,10 +272,8 @@ static void *ftdm_sangoma_ss7_run(ftdm_thread_t * me, void *obj)
ftdm_interrupt_t
*
ftdm_sangoma_ss7_int
[
2
];
ftdm_span_t
*
ftdmspan
=
(
ftdm_span_t
*
)
obj
;
ftdm_channel_t
*
ftdmchan
=
NULL
;
sngss7_chan_data_t
*
sngss7_info
=
NULL
;
sngss7_event_data_t
*
sngss7_event
=
NULL
;
sngss7_span_data_t
*
sngss7_span
=
(
sngss7_span_data_t
*
)
ftdmspan
->
mod_data
;
int
i
;
ftdm_log
(
FTDM_LOG_INFO
,
"ftmod_sangoma_ss7 monitor thread for span=%u started.
\n
"
,
ftdmspan
->
span_id
);
...
...
@@ -344,73 +342,11 @@ static void *ftdm_sangoma_ss7_run(ftdm_thread_t * me, void *obj)
/**********************************************************************/
}
/* switch ((ftdm_interrupt_wait(ftdm_sangoma_ss7_int, 100))) */
/* extract the span data structure */
sngss7_span
=
(
sngss7_span_data_t
*
)
ftdmspan
->
mod_data
;
/* check if there is a GRS being processed on the span */
if
(
sngss7_span
->
rx_grs
.
range
>
0
)
{
ftdm_log
(
FTDM_LOG_DEBUG
,
"Found Rx GRS on span %d...checking circuits
\n
"
,
ftdmspan
->
span_id
);
/*SS7_DEBUG("Found Rx GRS on span %d...checking circuits\n", ftdmspan->span_id);*/
/* check all the circuits in the range to see if they are done resetting */
for
(
i
=
sngss7_span
->
rx_grs
.
circuit
;
i
<
(
sngss7_span
->
rx_grs
.
circuit
+
sngss7_span
->
rx_grs
.
range
+
1
);
i
++
)
{
/* extract the channel in question */
if
(
extract_chan_data
(
i
,
&
sngss7_info
,
&
ftdmchan
))
{
SS7_ERROR
(
"Failed to extract channel data for circuit = %d!
\n
"
,
i
);
SS7_ASSERT
;
}
/* lock the channel */
ftdm_mutex_lock
(
ftdmchan
->
mutex
);
/* check if there is a state change pending on the channel */
if
(
!
ftdm_test_flag
(
ftdmchan
,
FTDM_CHANNEL_STATE_CHANGE
))
{
/* check the state to the GRP_RESET_RX_DN flag */
if
(
!
sngss7_test_flag
(
sngss7_info
,
FLAG_GRP_RESET_RX_DN
))
{
/* this channel is still resetting...do nothing */
goto
GRS_UNLOCK_ALL
;
}
/* if (!sngss7_test_flag(sngss7_info, FLAG_GRP_RESET_RX_DN)) */
}
else
{
/* state change pending */
goto
GRS_UNLOCK_ALL
;
}
}
/* for ( i = circuit; i < (circuit + range + 1); i++) */
SS7_DEBUG
(
"All circuits out of reset for GRS: circuit=%d, range=%d
\n
"
,
sngss7_span
->
rx_grs
.
circuit
,
sngss7_span
->
rx_grs
.
range
);
/* check all the circuits in the range to see if they are done resetting */
for
(
i
=
sngss7_span
->
rx_grs
.
circuit
;
i
<
(
sngss7_span
->
rx_grs
.
circuit
+
sngss7_span
->
rx_grs
.
range
+
1
);
i
++
)
{
/* extract the channel in question */
if
(
extract_chan_data
(
i
,
&
sngss7_info
,
&
ftdmchan
))
{
SS7_ERROR
(
"Failed to extract channel data for circuit = %d!
\n
"
,
i
);
SS7_ASSERT
;
}
/* throw the GRP reset flag complete flag */
sngss7_set_flag
(
sngss7_info
,
FLAG_GRP_RESET_RX_CMPLT
);
/* move the channel to the down state */
ftdm_set_state_locked
(
ftdmchan
,
FTDM_CHANNEL_STATE_DOWN
);
}
/* for ( i = circuit; i < (circuit + range + 1); i++) */
GRS_UNLOCK_ALL:
for
(
i
=
sngss7_span
->
rx_grs
.
circuit
;
i
<
(
sngss7_span
->
rx_grs
.
circuit
+
sngss7_span
->
rx_grs
.
range
+
1
);
i
++
)
{
/* extract the channel in question */
if
(
extract_chan_data
(
i
,
&
sngss7_info
,
&
ftdmchan
))
{
SS7_ERROR
(
"Failed to extract channel data for circuit = %d!
\n
"
,
i
);
SS7_ASSERT
;
}
/* unlock the channel */
ftdm_mutex_unlock
(
ftdmchan
->
mutex
);
}
}
/* if (ftdmspan->grs.range > 0) */
/* check if the rx_grs has cleared */
check_if_rx_grs_processed
(
ftdmspan
);
}
/* if (sngss7_span->rx_grs.range > 0) */
}
/* master while loop */
/* clear the IN_THREAD flag so that we know the thread is done */
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
浏览文件 @
c219a73c
...
...
@@ -139,7 +139,6 @@ typedef struct sng_mtp_link {
uint32_t
t23
;
uint32_t
t24
;
uint32_t
t25
;
uint32_t
t26
;
uint32_t
t27
;
uint32_t
t28
;
uint32_t
t29
;
...
...
@@ -188,6 +187,7 @@ typedef struct sng_route {
uint32_t
t19
;
uint32_t
t21
;
uint32_t
t25
;
uint32_t
t26
;
}
sng_route_t
;
typedef
struct
sng_isup_intf
{
...
...
@@ -329,6 +329,8 @@ typedef struct sngss7_glare_data {
typedef
struct
sngss7_group_data
{
uint32_t
circuit
;
uint32_t
range
;
uint8_t
status
[
255
];
uint8_t
type
;
}
sngss7_group_data_t
;
typedef
struct
sngss7_chan_data
{
...
...
@@ -348,6 +350,10 @@ typedef struct sngss7_span_data {
ftdm_sched_t
*
sched
;
sngss7_group_data_t
rx_grs
;
sngss7_group_data_t
tx_grs
;
sngss7_group_data_t
rx_cgb
;
sngss7_group_data_t
tx_cgb
;
sngss7_group_data_t
rx_cgu
;
sngss7_group_data_t
tx_cgu
;
ftdm_queue_t
*
event_queue
;
}
sngss7_span_data_t
;
...
...
@@ -376,8 +382,8 @@ typedef struct sngss7_event_data
typedef
enum
{
FLAG_RESET_RX
=
(
1
<<
0
),
FLAG_RESET_TX
=
(
1
<<
1
),
FLAG_RESET_RX
=
(
1
<<
0
),
FLAG_RESET_TX
=
(
1
<<
1
),
FLAG_RESET_SENT
=
(
1
<<
2
),
FLAG_RESET_TX_RSP
=
(
1
<<
3
),
FLAG_GRP_RESET_RX
=
(
1
<<
4
),
...
...
@@ -387,27 +393,25 @@ typedef enum {
FLAG_GRP_RESET_TX
=
(
1
<<
8
),
FLAG_GRP_RESET_SENT
=
(
1
<<
9
),
FLAG_GRP_RESET_TX_RSP
=
(
1
<<
10
),
FLAG_REMOTE_REL
=
(
1
<<
11
),
FLAG_LOCAL_REL
=
(
1
<<
12
),
FLAG_GLARE
=
(
1
<<
13
),
FLAG_INFID_RESUME
=
(
1
<<
14
),
FLAG_INFID_PAUSED
=
(
1
<<
15
),
FLAG_REMOTE_REL
=
(
1
<<
11
),
FLAG_LOCAL_REL
=
(
1
<<
12
),
FLAG_GLARE
=
(
1
<<
13
),
FLAG_INFID_RESUME
=
(
1
<<
14
),
FLAG_INFID_PAUSED
=
(
1
<<
15
),
FLAG_CKT_UCIC_BLOCK
=
(
1
<<
16
),
FLAG_CKT_UCIC_UNBLK
=
(
1
<<
17
),
FLAG_CKT_LC_BLOCK_RX
=
(
1
<<
18
),
FLAG_CKT_LC_UNBLK_RX
=
(
1
<<
19
),
FLAG_CKT_MN_BLOCK_RX
=
(
1
<<
20
),
FLAG_CKT_MN_
BLOCK_T
X
=
(
1
<<
21
),
FLAG_CKT_MN_
UNBLK_R
X
=
(
1
<<
22
),
FLAG_CKT_MN_
UNBLK_R
X
=
(
1
<<
21
),
FLAG_CKT_MN_
BLOCK_T
X
=
(
1
<<
22
),
FLAG_CKT_MN_UNBLK_TX
=
(
1
<<
23
),
FLAG_GRP_HW_BLOCK_RX
=
(
1
<<
24
),
FLAG_GRP_HW_BLOCK_TX
=
(
1
<<
25
),
FLAG_GRP_MN_BLOCK_RX
=
(
1
<<
26
),
FLAG_GRP_MN_BLOCK_TX
=
(
1
<<
27
),
FLAG_GRP_HW_UNBLK_RX
=
(
1
<<
28
),
FLAG_GRP_HW_UNBLK_TX
=
(
1
<<
29
),
FLAG_GRP_MN_UNBLK_RX
=
(
1
<<
30
),
FLAG_GRP_MN_UNBLK_TX
=
(
1
<<
31
)
FLAG_GRP_HW_UNBLK_TX
=
(
1
<<
28
),
FLAG_GRP_MN_UNBLK_TX
=
(
1
<<
29
)
}
flag_t
;
/******************************************************************************/
...
...
@@ -465,6 +469,8 @@ void ft_to_sngss7_uba(ftdm_channel_t *ftdmchan);
void
ft_to_sngss7_lpa
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_gra
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_grs
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_cgba
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_cgua
(
ftdm_channel_t
*
ftdmchan
);
void
sngss7_sta_ind
(
uint32_t
suInstId
,
uint32_t
spInstId
,
uint32_t
circuit
,
uint8_t
globalFlg
,
uint8_t
evntType
,
SiStaEvnt
*
siStaEvnt
);
void
sngss7_con_ind
(
uint32_t
suInstId
,
uint32_t
spInstId
,
uint32_t
circuit
,
SiConEvnt
*
siConEvnt
);
...
...
@@ -524,6 +530,8 @@ int ftmod_ss7_parse_xml(ftdm_conf_parameter_t *ftdm_parameters, ftdm_span_t *spa
void
handle_isup_t35
(
void
*
userdata
);
ftdm_status_t
ftdm_sngss7_handle_cli_cmd
(
ftdm_stream_handle_t
*
stream
,
const
char
*
data
);
ftdm_status_t
check_if_rx_grs_processed
(
ftdm_span_t
*
ftdmspan
);
/******************************************************************************/
/* MACROS *********************************************************************/
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c
浏览文件 @
c219a73c
...
...
@@ -42,24 +42,27 @@
/******************************************************************************/
/* PROTOTYPES *****************************************************************/
void
ft_to_sngss7_iam
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_acm
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_anm
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_rel
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_rlc
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_iam
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_acm
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_anm
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_rel
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_rlc
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_rsc
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_rsca
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_rsc
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_rsca
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_blo
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_bla
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_ubl
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_uba
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_blo
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_bla
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_ubl
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_uba
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_lpa
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_lpa
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_gra
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_grs
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_gra
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_grs
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_cgba
(
ftdm_channel_t
*
ftdmchan
);
void
ft_to_sngss7_cgua
(
ftdm_channel_t
*
ftdmchan
);
/******************************************************************************/
/* FUNCTIONS ******************************************************************/
...
...
@@ -113,6 +116,56 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
iam
.
txMedReq
.
eh
.
pres
=
PRSNT_NODEF
;
iam
.
txMedReq
.
trMedReq
.
pres
=
PRSNT_NODEF
;
iam
.
txMedReq
.
trMedReq
.
val
=
ftdmchan
->
caller_data
.
bearer_capability
;
if
((
g_ftdm_sngss7_data
.
cfg
.
isupIntf
[
sngss7_info
->
circuit
->
infId
].
switchType
==
LSI_SW_ANS88
)
||
(
g_ftdm_sngss7_data
.
cfg
.
isupIntf
[
sngss7_info
->
circuit
->
infId
].
switchType
==
LSI_SW_ANS92
)
||
(
g_ftdm_sngss7_data
.
cfg
.
isupIntf
[
sngss7_info
->
circuit
->
infId
].
switchType
==
LSI_SW_ANS95
))
{
iam
.
usrServInfoA
.
eh
.
pres
=
PRSNT_NODEF
;
iam
.
usrServInfoA
.
infoTranCap
.
pres
=
PRSNT_NODEF
;
switch
(
ftdmchan
->
caller_data
.
bearer_capability
)
{
/**********************************************************************/
case
(
FTDM_BEARER_CAP_SPEECH
):
iam
.
usrServInfoA
.
infoTranCap
.
val
=
0x0
;
/* speech as per ATIS-1000113.3.2005 */
break
;
/**********************************************************************/
case
(
FTDM_BEARER_CAP_64K_UNRESTRICTED
):
iam
.
usrServInfoA
.
infoTranCap
.
val
=
0x8
;
/* unrestricted digital as per ATIS-1000113.3.2005 */
break
;
/**********************************************************************/
case
(
FTDM_BEARER_CAP_3_1KHZ_AUDIO
):
iam
.
usrServInfoA
.
infoTranCap
.
val
=
0x10
;
/* 3.1kHz audio as per ATIS-1000113.3.2005 */
break
;
/**********************************************************************/
default:
SS7_ERROR_CHAN
(
ftdmchan
,
"Unknown Bearer capability falling back to speech%s
\n
"
,
" "
);
iam
.
usrServInfoA
.
infoTranCap
.
val
=
0x0
;
/* speech as per ATIS-1000113.3.2005 */
break
;
/**********************************************************************/
}
/* switch (ftdmchan->caller_data.bearer_capability) */
iam
.
usrServInfoA
.
cdeStand
.
pres
=
PRSNT_NODEF
;
iam
.
usrServInfoA
.
cdeStand
.
val
=
0x0
;
/* ITU-T standardized coding */
iam
.
usrServInfoA
.
tranMode
.
pres
=
PRSNT_NODEF
;
iam
.
usrServInfoA
.
tranMode
.
val
=
0x0
;
/* circuit mode */
iam
.
usrServInfoA
.
infoTranRate0
.
pres
=
PRSNT_NODEF
;
iam
.
usrServInfoA
.
infoTranRate0
.
val
=
0x10
;
/* 64kbps origination to destination */
iam
.
usrServInfoA
.
infoTranRate1
.
pres
=
PRSNT_NODEF
;
iam
.
usrServInfoA
.
infoTranRate1
.
val
=
0x10
;
/* 64kbps destination to origination */
iam
.
usrServInfoA
.
chanStruct
.
pres
=
PRSNT_NODEF
;
iam
.
usrServInfoA
.
chanStruct
.
val
=
0x1
;
/* 8kHz integrity */
iam
.
usrServInfoA
.
config
.
pres
=
PRSNT_NODEF
;
iam
.
usrServInfoA
.
config
.
val
=
0x0
;
/* point to point configuration */
iam
.
usrServInfoA
.
establish
.
pres
=
PRSNT_NODEF
;
iam
.
usrServInfoA
.
establish
.
val
=
0x0
;
/* on demand */
iam
.
usrServInfoA
.
symmetry
.
pres
=
PRSNT_NODEF
;
iam
.
usrServInfoA
.
symmetry
.
val
=
0x0
;
/* bi-directional symmetric */
iam
.
usrServInfoA
.
usrInfLyr1Prot
.
pres
=
PRSNT_NODEF
;
iam
.
usrServInfoA
.
usrInfLyr1Prot
.
val
=
0x2
;
/* G.711 ulaw */
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
);
...
...
@@ -126,7 +179,7 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
sngss7_info
->
circuit
->
id
,
&
iam
,
0
);
SS7_MSG_TRACE
(
ftdmchan
,
sngss7_info
,
"Tx IAM
\n
"
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
...
...
@@ -463,7 +516,7 @@ void ft_to_sngss7_grs (ftdm_channel_t * ftdmchan)
SiStaEvnt
grs
;
memset
(
&
grs
,
0x0
,
sizeof
(
grs
));
memset
(
&
grs
,
0x0
,
sizeof
(
grs
));
grs
.
rangStat
.
eh
.
pres
=
PRSNT_NODEF
;
grs
.
rangStat
.
range
.
pres
=
PRSNT_NODEF
;
...
...
@@ -485,6 +538,101 @@ void ft_to_sngss7_grs (ftdm_channel_t * ftdmchan)
return
;
}
/******************************************************************************/
void
ft_to_sngss7_cgba
(
ftdm_channel_t
*
ftdmchan
)
{
SS7_FUNC_TRACE_ENTER
(
__FUNCTION__
);
sngss7_span_data_t
*
sngss7_span
=
ftdmchan
->
span
->
mod_data
;
sngss7_chan_data_t
*
sngss7_info
=
ftdmchan
->
call_data
;
int
x
=
0
;
SiStaEvnt
cgba
;
memset
(
&
cgba
,
0x0
,
sizeof
(
cgba
));
/* fill in the circuit group supervisory message */
cgba
.
cgsmti
.
eh
.
pres
=
PRSNT_NODEF
;
cgba
.
cgsmti
.
typeInd
.
pres
=
PRSNT_NODEF
;
cgba
.
cgsmti
.
typeInd
.
val
=
sngss7_span
->
rx_cgb
.
type
;
cgba
.
rangStat
.
eh
.
pres
=
PRSNT_NODEF
;
/* fill in the range */
cgba
.
rangStat
.
range
.
pres
=
PRSNT_NODEF
;
cgba
.
rangStat
.
range
.
val
=
sngss7_span
->
rx_cgb
.
range
;
/* fill in the status */
cgba
.
rangStat
.
status
.
pres
=
PRSNT_NODEF
;
cgba
.
rangStat
.
status
.
len
=
((
sngss7_span
->
rx_cgb
.
range
+
1
)
>>
3
)
+
(((
sngss7_span
->
rx_cgb
.
range
+
1
)
&
0x07
)
?
1
:
0
);
for
(
x
=
0
;
x
<
cgba
.
rangStat
.
status
.
len
;
x
++
){
cgba
.
rangStat
.
status
.
val
[
x
]
=
sngss7_span
->
rx_cgb
.
status
[
x
];
}
sng_cc_sta_request
(
1
,
0
,
0
,
sngss7_span
->
rx_cgb
.
circuit
,
0
,
SIT_STA_CGBRSP
,
&
cgba
);
SS7_INFO_CHAN
(
ftdmchan
,
"Tx CGBA (%d:%d)
\n
"
,
sngss7_info
->
circuit
->
cic
,
(
sngss7_info
->
circuit
->
cic
+
sngss7_span
->
rx_cgb
.
range
));
/* clean out the saved data */
memset
(
&
sngss7_span
->
rx_cgb
,
0x0
,
sizeof
(
sngss7_group_data_t
));
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
/******************************************************************************/
void
ft_to_sngss7_cgua
(
ftdm_channel_t
*
ftdmchan
)
{
SS7_FUNC_TRACE_ENTER
(
__FUNCTION__
);
sngss7_span_data_t
*
sngss7_span
=
ftdmchan
->
span
->
mod_data
;
sngss7_chan_data_t
*
sngss7_info
=
ftdmchan
->
call_data
;
int
x
=
0
;
SiStaEvnt
cgua
;
memset
(
&
cgua
,
0x0
,
sizeof
(
cgua
));
/* fill in the circuit group supervisory message */
cgua
.
cgsmti
.
eh
.
pres
=
PRSNT_NODEF
;
cgua
.
cgsmti
.
typeInd
.
pres
=
PRSNT_NODEF
;
cgua
.
cgsmti
.
typeInd
.
val
=
sngss7_span
->
rx_cgu
.
type
;
cgua
.
rangStat
.
eh
.
pres
=
PRSNT_NODEF
;
/* fill in the range */
cgua
.
rangStat
.
range
.
pres
=
PRSNT_NODEF
;
cgua
.
rangStat
.
range
.
val
=
sngss7_span
->
rx_cgu
.
range
;
/* fill in the status */
cgua
.
rangStat
.
status
.
pres
=
PRSNT_NODEF
;
cgua
.
rangStat
.
status
.
len
=
((
sngss7_span
->
rx_cgu
.
range
+
1
)
>>
3
)
+
(((
sngss7_span
->
rx_cgu
.
range
+
1
)
&
0x07
)
?
1
:
0
);
for
(
x
=
0
;
x
<
cgua
.
rangStat
.
status
.
len
;
x
++
){
cgua
.
rangStat
.
status
.
val
[
x
]
=
sngss7_span
->
rx_cgu
.
status
[
x
];
}
sng_cc_sta_request
(
1
,
0
,
0
,
sngss7_span
->
rx_cgu
.
circuit
,
0
,
SIT_STA_CGURSP
,
&
cgua
);
SS7_INFO_CHAN
(
ftdmchan
,
"Tx CGUA (%d:%d)
\n
"
,
sngss7_info
->
circuit
->
cic
,
(
sngss7_info
->
circuit
->
cic
+
sngss7_span
->
rx_cgu
.
range
));
/* clean out the saved data */
memset
(
&
sngss7_span
->
rx_cgu
,
0x0
,
sizeof
(
sngss7_group_data_t
));
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
/******************************************************************************/
/* For Emacs:
* Local Variables:
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
浏览文件 @
c219a73c
...
...
@@ -57,6 +57,7 @@ unsigned long get_unique_id(void);
ftdm_status_t
extract_chan_data
(
uint32_t
circuit
,
sngss7_chan_data_t
**
sngss7_info
,
ftdm_channel_t
**
ftdmchan
);
ftdm_status_t
check_if_rx_grs_processed
(
ftdm_span_t
*
ftdmspan
);
/******************************************************************************/
/* FUNCTIONS ******************************************************************/
...
...
@@ -451,6 +452,78 @@ unsigned long get_unique_id(void)
}
/******************************************************************************/
ftdm_status_t
check_if_rx_grs_processed
(
ftdm_span_t
*
ftdmspan
)
{
ftdm_channel_t
*
ftdmchan
=
NULL
;
sngss7_chan_data_t
*
sngss7_info
=
NULL
;
sngss7_span_data_t
*
sngss7_span
=
(
sngss7_span_data_t
*
)
ftdmspan
->
mod_data
;
int
i
;
ftdm_log
(
FTDM_LOG_DEBUG
,
"Found Rx GRS on span %d...checking circuits
\n
"
,
ftdmspan
->
span_id
);
/* check all the circuits in the range to see if they are done resetting */
for
(
i
=
sngss7_span
->
rx_grs
.
circuit
;
i
<
(
sngss7_span
->
rx_grs
.
circuit
+
sngss7_span
->
rx_grs
.
range
+
1
);
i
++
)
{
/* extract the channel in question */
if
(
extract_chan_data
(
i
,
&
sngss7_info
,
&
ftdmchan
))
{
SS7_ERROR
(
"Failed to extract channel data for circuit = %d!
\n
"
,
i
);
SS7_ASSERT
;
}
/* lock the channel */
ftdm_mutex_lock
(
ftdmchan
->
mutex
);
/* check if there is a state change pending on the channel */
if
(
!
ftdm_test_flag
(
ftdmchan
,
FTDM_CHANNEL_STATE_CHANGE
))
{
/* check the state to the GRP_RESET_RX_DN flag */
if
(
!
sngss7_test_flag
(
sngss7_info
,
FLAG_GRP_RESET_RX_DN
))
{
/* this channel is still resetting...do nothing */
goto
GRS_UNLOCK_ALL
;
}
/* if (!sngss7_test_flag(sngss7_info, FLAG_GRP_RESET_RX_DN)) */
}
else
{
/* state change pending */
goto
GRS_UNLOCK_ALL
;
}
}
/* for ( i = circuit; i < (circuit + range + 1); i++) */
SS7_DEBUG
(
"All circuits out of reset for GRS: circuit=%d, range=%d
\n
"
,
sngss7_span
->
rx_grs
.
circuit
,
sngss7_span
->
rx_grs
.
range
);
/* check all the circuits in the range to see if they are done resetting */
for
(
i
=
sngss7_span
->
rx_grs
.
circuit
;
i
<
(
sngss7_span
->
rx_grs
.
circuit
+
sngss7_span
->
rx_grs
.
range
+
1
);
i
++
)
{
/* extract the channel in question */
if
(
extract_chan_data
(
i
,
&
sngss7_info
,
&
ftdmchan
))
{
SS7_ERROR
(
"Failed to extract channel data for circuit = %d!
\n
"
,
i
);
SS7_ASSERT
;
}
/* throw the GRP reset flag complete flag */
sngss7_set_flag
(
sngss7_info
,
FLAG_GRP_RESET_RX_CMPLT
);
/* move the channel to the down state */
ftdm_set_state_locked
(
ftdmchan
,
FTDM_CHANNEL_STATE_DOWN
);
}
/* for ( i = circuit; i < (circuit + range + 1); i++) */
GRS_UNLOCK_ALL:
for
(
i
=
sngss7_span
->
rx_grs
.
circuit
;
i
<
(
sngss7_span
->
rx_grs
.
circuit
+
sngss7_span
->
rx_grs
.
range
+
1
);
i
++
)
{
/* extract the channel in question */
if
(
extract_chan_data
(
i
,
&
sngss7_info
,
&
ftdmchan
))
{
SS7_ERROR
(
"Failed to extract channel data for circuit = %d!
\n
"
,
i
);
SS7_ASSERT
;
}
/* unlock the channel */
ftdm_mutex_unlock
(
ftdmchan
->
mutex
);
}
return
FTDM_SUCCESS
;
}
/******************************************************************************/
/******************************************************************************/
/* For Emacs:
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
浏览文件 @
c219a73c
...
...
@@ -551,6 +551,15 @@ static int ftmod_ss7_parse_mtp_link(ftdm_conf_node_t *mtp_link, sng_mtp_link_t *
}
else
if
(
!
strcasecmp
(
parm
->
val
,
"INDIA"
))
{
mtpLink
->
mtp3
.
switchType
=
LSI_SW_INDIA
;
SS7_DEBUG
(
"
\t
FoundmtpLink->switchType =
\"
INDIA
\"\n
"
);
}
else
if
(
!
strcasecmp
(
parm
->
val
,
"ansi88"
))
{
mtpLink
->
mtp3
.
switchType
=
LSI_SW_ANS88
;
SS7_DEBUG
(
"
\t
FoundmtpLink->switchType =
\"
ANSI88
\"\n
"
);
}
else
if
(
!
strcasecmp
(
parm
->
val
,
"ansi92"
))
{
mtpLink
->
mtp3
.
switchType
=
LSI_SW_ANS92
;
SS7_DEBUG
(
"
\t
FoundmtpLink->switchType =
\"
ANSI92
\"\n
"
);
}
else
if
(
!
strcasecmp
(
parm
->
val
,
"ansi95"
))
{
mtpLink
->
mtp3
.
switchType
=
LSI_SW_ANS95
;
SS7_DEBUG
(
"
\t
FoundmtpLink->switchType =
\"
ANSI95
\"\n
"
);
}
else
{
SS7_ERROR
(
"
\t
Found an invalid linktype of
\"
%s
\"
!
\n
"
,
parm
->
val
);
return
FTDM_FAIL
;
...
...
@@ -1159,6 +1168,11 @@ static int ftmod_ss7_fill_in_mtp3_route(sng_route_t *mtp3_route)
}
else
{
g_ftdm_sngss7_data
.
cfg
.
mtpRoute
[
i
].
t25
=
100
;
}
if
(
mtp3_route
->
t26
!=
0
)
{
g_ftdm_sngss7_data
.
cfg
.
mtpRoute
[
i
].
t26
=
mtp3_route
->
t26
;
}
else
{
g_ftdm_sngss7_data
.
cfg
.
mtpRoute
[
i
].
t26
=
100
;
}
return
0
;
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论