Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
6cbf8a01
提交
6cbf8a01
authored
11月 11, 2010
作者:
David Yat Sin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
freetdm: ISDN - Changes to used ftdm IO for d-channel
上级
adc26e63
隐藏空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
369 行增加
和
159 行删除
+369
-159
ftmod_isdn.c
libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c
+0
-1
ftmod_sangoma_boost.c
...eetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c
+4
-4
ftmod_sangoma_isdn.c
...freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
+138
-30
ftmod_sangoma_isdn.h
...freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h
+30
-21
ftmod_sangoma_isdn_cfg.c
...tdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c
+21
-12
ftmod_sangoma_isdn_stack_cfg.c
...c/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c
+46
-61
ftmod_sangoma_isdn_stack_cntrl.c
...ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c
+58
-25
ftmod_sangoma_isdn_stack_hndl.c
.../ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c
+1
-1
ftmod_sangoma_isdn_stack_out.c
...c/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c
+11
-0
ftmod_sangoma_isdn_stack_rcv.c
...c/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c
+22
-2
ftmod_sangoma_isdn_support.c
...src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c
+34
-1
ftdm_core.h
libs/freetdm/src/include/private/ftdm_core.h
+2
-0
ftdm_types.h
libs/freetdm/src/include/private/ftdm_types.h
+2
-1
没有找到文件。
libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c
浏览文件 @
6cbf8a01
...
...
@@ -53,7 +53,6 @@
//#define IODEBUG
/* helper macros */
#define FTDM_SPAN_IS_BRI(x) ((x)->trunk_type == FTDM_TRUNK_BRI || (x)->trunk_type == FTDM_TRUNK_BRI_PTMP)
#define FTDM_SPAN_IS_NT(x) (((ftdm_isdn_data_t *)(x)->signal_data)->mode == Q921_NT)
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c
浏览文件 @
6cbf8a01
...
...
@@ -1557,11 +1557,11 @@ static __inline__ ftdm_status_t state_advance(ftdm_channel_t *ftdmchan)
ftdm_set_string
(
event
.
calling_name
,
ftdmchan
->
caller_data
.
cid_name
);
ftdm_set_string
(
event
.
rdnis
.
digits
,
ftdmchan
->
caller_data
.
rdnis
.
digits
);
if
(
strlen
(
ftdmchan
->
caller_data
.
rdnis
.
digits
))
{
event
.
rdnis
.
digits_count
=
(
uint8_t
)
strlen
(
ftdmchan
->
caller_data
.
rdnis
.
digits
)
+
1
;
event
.
rdnis
.
ton
=
ftdmchan
->
caller_data
.
rdnis
.
type
;
event
.
rdnis
.
npi
=
ftdmchan
->
caller_data
.
rdnis
.
plan
;
event
.
rdnis
.
digits_count
=
(
uint8_t
)
strlen
(
ftdmchan
->
caller_data
.
rdnis
.
digits
)
+
1
;
event
.
rdnis
.
ton
=
ftdmchan
->
caller_data
.
rdnis
.
type
;
event
.
rdnis
.
npi
=
ftdmchan
->
caller_data
.
rdnis
.
plan
;
}
event
.
calling
.
screening_ind
=
ftdmchan
->
caller_data
.
screen
;
event
.
calling
.
presentation_ind
=
ftdmchan
->
caller_data
.
pres
;
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
浏览文件 @
6cbf8a01
...
...
@@ -47,6 +47,8 @@ static ftdm_status_t ftdm_sangoma_isdn_start(ftdm_span_t *span);
ftdm_channel_t
*
ftdm_sangoma_isdn_process_event_states
(
ftdm_span_t
*
span
,
sngisdn_event_data_t
*
sngisdn_event
);
static
void
ftdm_sangoma_isdn_advance_chan_states
(
ftdm_channel_t
*
ftdmchan
);
static
void
ftdm_sangoma_isdn_poll_events
(
ftdm_span_t
*
span
);
static
void
ftdm_sangoma_isdn_process_phy_events
(
ftdm_span_t
*
span
,
ftdm_oob_event_t
event
);
static
void
ftdm_sangoma_isdn_process_state_change
(
ftdm_channel_t
*
ftdmchan
);
static
void
ftdm_sangoma_isdn_process_stack_event
(
ftdm_span_t
*
span
,
sngisdn_event_data_t
*
sngisdn_event
);
...
...
@@ -56,7 +58,7 @@ static sng_isdn_event_interface_t g_sngisdn_event_interface;
ftdm_sngisdn_data_t
g_sngisdn_data
;
extern
ftdm_status_t
sng
_
isdn_activate_trace
(
ftdm_span_t
*
span
,
sngisdn_tracetype_t
trace_opt
);
extern
ftdm_status_t
sngisdn_activate_trace
(
ftdm_span_t
*
span
,
sngisdn_tracetype_t
trace_opt
);
extern
ftdm_status_t
sngisdn_check_free_ids
(
void
);
ftdm_state_map_t
sangoma_isdn_state_map
=
{
...
...
@@ -238,6 +240,106 @@ static __inline__ void ftdm_sangoma_isdn_advance_chan_states(ftdm_channel_t *ftd
}
}
static
void
ftdm_sangoma_isdn_process_phy_events
(
ftdm_span_t
*
span
,
ftdm_oob_event_t
event
)
{
switch
(
event
)
{
/* Check if the span woke up from power-saving mode */
case
FTDM_OOB_ALARM_CLEAR
:
sngisdn_snd_event
(
span
,
SNG_L1EVENT_ALARM_OFF
);
if
(
FTDM_SPAN_IS_BRI
(
span
))
{
ftdm_channel_t
*
ftdmchan
;
ftdm_iterator_t
*
chaniter
=
NULL
;
ftdm_iterator_t
*
curr
=
NULL
;
sngisdn_span_data_t
*
signal_data
=
(
sngisdn_span_data_t
*
)
span
->
signal_data
;
chaniter
=
ftdm_span_get_chan_iterator
(
span
,
NULL
);
for
(
curr
=
chaniter
;
curr
;
curr
=
ftdm_iterator_next
(
curr
))
{
ftdmchan
=
(
ftdm_channel_t
*
)
ftdm_iterator_current
(
curr
);
sngisdn_chan_data_t
*
sngisdn_info
=
ftdmchan
->
call_data
;
if
(
ftdm_test_flag
(
sngisdn_info
,
FLAG_ACTIVATING
))
{
ftdm_clear_flag
(
sngisdn_info
,
FLAG_ACTIVATING
);
ftdm_sched_timer
(
signal_data
->
sched
,
"delayed_setup"
,
1
,
sngisdn_delayed_setup
,
(
void
*
)
ftdmchan
->
call_data
,
NULL
);
}
}
ftdm_iterator_free
(
chaniter
);
}
break
;
case
FTDM_OOB_ALARM_TRAP
:
sngisdn_snd_event
(
span
,
SNG_L1EVENT_ALARM_ON
);
break
;
default:
/* Ignore other events for now */
break
;
}
}
static
void
ftdm_sangoma_isdn_poll_events
(
ftdm_span_t
*
span
)
{
ftdm_status_t
ret_status
;
ret_status
=
ftdm_span_poll_event
(
span
,
0
,
NULL
);
switch
(
ret_status
)
{
case
FTDM_SUCCESS
:
{
ftdm_event_t
*
event
;
while
(
ftdm_span_next_event
(
span
,
&
event
)
==
FTDM_SUCCESS
)
{
ftdm_sangoma_isdn_process_phy_events
(
span
,
event
->
enum_id
);
}
}
break
;
case
FTDM_TIMEOUT
:
/* No events pending */
break
;
default:
ftdm_log
(
FTDM_LOG_WARNING
,
"%s:Failed to poll span event
\n
"
,
span
->
name
);
}
}
static
void
*
ftdm_sangoma_isdn_dchan_run
(
ftdm_thread_t
*
me
,
void
*
obj
)
{
uint8_t
data
[
1000
];
ftdm_status_t
status
=
FTDM_SUCCESS
;
ftdm_wait_flag_t
wflags
=
FTDM_READ
;
ftdm_span_t
*
span
=
(
ftdm_span_t
*
)
obj
;
ftdm_channel_t
*
dchan
=
((
sngisdn_span_data_t
*
)
span
->
signal_data
)
->
dchan
;
ftdm_size_t
len
=
0
;
ftdm_assert
(
dchan
,
"Span does not have a dchannel"
);
ftdm_channel_open_chan
(
dchan
);
while
(
ftdm_running
()
&&
!
(
ftdm_test_flag
(
span
,
FTDM_SPAN_STOP_THREAD
)))
{
wflags
=
FTDM_READ
;
status
=
ftdm_channel_wait
(
dchan
,
&
wflags
,
0
);
switch
(
status
)
{
case
FTDM_FAIL
:
ftdm_log_chan_msg
(
dchan
,
FTDM_LOG_CRIT
,
"Failed to wait for d-channel
\n
"
);
break
;
case
FTDM_TIMEOUT
:
break
;
case
FTDM_SUCCESS
:
if
((
wflags
&
FTDM_READ
))
{
len
=
1000
;
status
=
ftdm_channel_read
(
dchan
,
data
,
&
len
);
if
(
status
==
FTDM_SUCCESS
)
{
sngisdn_snd_data
(
span
,
data
,
len
);
}
else
{
ftdm_log_chan_msg
(
dchan
,
FTDM_LOG_WARNING
,
"Failed to read from channel
\n
"
);
}
}
else
{
ftdm_log_chan_msg
(
dchan
,
FTDM_LOG_CRIT
,
"Failed to poll for d-channel
\n
"
);
}
break
;
default:
ftdm_log_chan_msg
(
dchan
,
FTDM_LOG_CRIT
,
"Unhandled IO event
\n
"
);
}
}
ftdm_channel_close
(
&
dchan
);
return
NULL
;
}
static
void
*
ftdm_sangoma_isdn_run
(
ftdm_thread_t
*
me
,
void
*
obj
)
{
ftdm_interrupt_t
*
ftdm_sangoma_isdn_int
[
2
];
...
...
@@ -300,21 +402,8 @@ static void *ftdm_sangoma_isdn_run(ftdm_thread_t *me, void *obj)
}
/* Poll for events, e.g HW DTMF */
ret_status
=
ftdm_span_poll_event
(
span
,
0
,
NULL
);
switch
(
ret_status
)
{
case
FTDM_SUCCESS
:
{
ftdm_event_t
*
event
;
while
(
ftdm_span_next_event
(
span
,
&
event
)
==
FTDM_SUCCESS
);
}
break
;
case
FTDM_TIMEOUT
:
/* No events pending */
break
;
default:
ftdm_log
(
FTDM_LOG_WARNING
,
"%s:Failed to poll span event
\n
"
,
span
->
name
);
}
ftdm_sangoma_isdn_poll_events
(
span
);
if
(
ftdm_sched_get_time_to_next_timer
(
signal_data
->
sched
,
&
sleep
)
==
FTDM_SUCCESS
)
{
if
(
sleep
<
0
||
sleep
>
SNGISDN_EVENT_POLL_RATE
)
{
sleep
=
SNGISDN_EVENT_POLL_RATE
;
...
...
@@ -498,8 +587,20 @@ static void ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdmchan)
}
break
;
case
FTDM_CHANNEL_STATE_DIALING
:
/* outgoing call request */
{
sngisdn_snd_setup
(
ftdmchan
);
{
if
(
FTDM_SPAN_IS_BRI
(
ftdmchan
->
span
)
&&
ftdm_test_flag
(
ftdmchan
,
FTDM_CHANNEL_IN_ALARM
)
&&
ftdm_test_flag
(
ftdmchan
->
span
,
FTDM_SPAN_PWR_SAVING
))
{
sngisdn_span_data_t
*
signal_data
=
(
sngisdn_span_data_t
*
)
ftdmchan
->
span
->
signal_data
;
ftdm_log_chan_msg
(
ftdmchan
,
FTDM_LOG_DEBUG
,
"Requesting Line activation
\n
"
);
sngisdn_set_flag
(
sngisdn_info
,
FLAG_ACTIVATING
);
sngisdn_wake_up_phy
(
ftdmchan
->
span
);
ftdm_sched_timer
(
signal_data
->
sched
,
"timer_t3"
,
signal_data
->
timer_t3
*
1000
,
sngisdn_t3_timeout
,
(
void
*
)
sngisdn_info
,
NULL
);
}
else
{
sngisdn_snd_setup
(
ftdmchan
);
}
}
break
;
case
FTDM_CHANNEL_STATE_PROGRESS
:
...
...
@@ -592,7 +693,7 @@ static void ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdmchan)
sngisdn_snd_release
(
ftdmchan
,
0
);
if
(
!
ftdm_test_flag
(
ftdmchan
,
FTDM_CHANNEL_SIG_UP
))
{
sng
_
isdn_set_avail_rate
(
ftdmchan
->
span
,
SNGISDN_AVAIL_DOWN
);
sngisdn_set_avail_rate
(
ftdmchan
->
span
,
SNGISDN_AVAIL_DOWN
);
}
}
else
{
sngisdn_snd_disconnect
(
ftdmchan
);
...
...
@@ -747,7 +848,7 @@ static FIO_SPAN_SET_SIG_STATUS_FUNCTION(ftdm_sangoma_isdn_set_span_sig_status)
static
ftdm_status_t
ftdm_sangoma_isdn_start
(
ftdm_span_t
*
span
)
{
ftdm_log
(
FTDM_LOG_INFO
,
"Starting span %s:%u.
\n
"
,
span
->
name
,
span
->
span_id
);
if
(
sng
_
isdn_stack_start
(
span
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_start
(
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"Failed to start span %s
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
...
...
@@ -761,6 +862,12 @@ static ftdm_status_t ftdm_sangoma_isdn_start(ftdm_span_t *span)
return
FTDM_FAIL
;
}
/*start the dchan monitor thread*/
if
(
ftdm_thread_create_detached
(
ftdm_sangoma_isdn_dchan_run
,
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"Failed to start Sangoma ISDN d-channel Monitor Thread!
\n
"
);
return
FTDM_FAIL
;
}
ftdm_log
(
FTDM_LOG_DEBUG
,
"Finished starting span %s
\n
"
,
span
->
name
);
return
FTDM_SUCCESS
;
}
...
...
@@ -782,7 +889,7 @@ static ftdm_status_t ftdm_sangoma_isdn_stop(ftdm_span_t *span)
ftdm_sleep
(
10
);
}
if
(
sng
_
isdn_stack_stop
(
span
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_stop
(
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"Failed to stop span %s
\n
"
,
span
->
name
);
}
...
...
@@ -834,7 +941,7 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_sangoma_isdn_span_config)
return
FTDM_FAIL
;
}
if
(
sng
_
isdn_stack_cfg
(
span
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg
(
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"Sangoma ISDN Stack configuration failed
\n
"
);
return
FTDM_FAIL
;
}
...
...
@@ -856,9 +963,8 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_sangoma_isdn_span_config)
if
(
span
->
trunk_type
==
FTDM_TRUNK_BRI_PTMP
||
span
->
trunk_type
==
FTDM_TRUNK_BRI
)
{
ftdm_set_flag
(
span
,
FTDM_SPAN_USE_AV_RATE
);
sng_isdn_set_avail_rate
(
span
,
SNGISDN_AVAIL_PWR_SAVING
);
sngisdn_set_avail_rate
(
span
,
SNGISDN_AVAIL_PWR_SAVING
);
}
/* Initialize scheduling context */
...
...
@@ -906,7 +1012,9 @@ static FIO_SIG_LOAD_FUNCTION(ftdm_sangoma_isdn_init)
g_sngisdn_event_interface
.
sta
.
sng_q921_trc_ind
=
sngisdn_rcv_q921_trace
;
g_sngisdn_event_interface
.
sta
.
sng_q931_sta_ind
=
sngisdn_rcv_q931_ind
;
g_sngisdn_event_interface
.
sta
.
sng_q931_trc_ind
=
sngisdn_rcv_q931_trace
;
g_sngisdn_event_interface
.
sta
.
sng_cc_sta_ind
=
sngisdn_rcv_cc_ind
;
g_sngisdn_event_interface
.
sta
.
sng_cc_sta_ind
=
sngisdn_rcv_cc_ind
;
g_sngisdn_event_interface
.
io
.
sng_data_req
=
sngisdn_rcv_data_req
;
for
(
i
=
1
;
i
<=
MAX_VARIANTS
;
i
++
)
{
ftdm_mutex_create
(
&
g_sngisdn_data
.
ccs
[
i
].
mutex
);
...
...
@@ -914,7 +1022,7 @@ static FIO_SIG_LOAD_FUNCTION(ftdm_sangoma_isdn_init)
/* initalize sng_isdn library */
ftdm_assert_return
(
!
sng_isdn_init
(
&
g_sngisdn_event_interface
),
FTDM_FAIL
,
"Failed to initialize stack
\n
"
);
ftdm_assert_return
(
!
sng_isdn_init
(
&
g_sngisdn_event_interface
),
FTDM_FAIL
,
"Failed to initialize stack
\n
"
);
return
FTDM_SUCCESS
;
}
...
...
@@ -968,11 +1076,11 @@ static FIO_API_FUNCTION(ftdm_sangoma_isdn_api)
goto
done
;
}
if
(
!
strcasecmp
(
trace_opt
,
"q921"
))
{
sng
_
isdn_activate_trace
(
span
,
SNGISDN_TRACE_Q921
);
sngisdn_activate_trace
(
span
,
SNGISDN_TRACE_Q921
);
}
else
if
(
!
strcasecmp
(
trace_opt
,
"q931"
))
{
sng
_
isdn_activate_trace
(
span
,
SNGISDN_TRACE_Q931
);
sngisdn_activate_trace
(
span
,
SNGISDN_TRACE_Q931
);
}
else
if
(
!
strcasecmp
(
trace_opt
,
"disable"
))
{
sng
_
isdn_activate_trace
(
span
,
SNGISDN_TRACE_DISABLE
);
sngisdn_activate_trace
(
span
,
SNGISDN_TRACE_DISABLE
);
}
else
{
stream
->
write_function
(
stream
,
"-ERR invalid trace option <q921|q931> <span name>
\n
"
);
}
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h
浏览文件 @
6cbf8a01
...
...
@@ -74,6 +74,7 @@ typedef enum {
FLAG_DELAYED_REL
=
(
1
<<
7
),
FLAG_SENT_PROCEED
=
(
1
<<
8
),
FLAG_SEND_DISC
=
(
1
<<
9
),
FLAG_ACTIVATING
=
(
1
<<
10
),
/* Used for BRI only, flag is set after we request line CONNECTED */
}
sngisdn_flag_t
;
...
...
@@ -167,6 +168,7 @@ typedef struct sngisdn_chan_data {
/* Span specific data */
typedef
struct
sngisdn_span_data
{
ftdm_span_t
*
ftdm_span
;
ftdm_channel_t
*
dchan
;
uint8_t
link_id
;
uint8_t
switchtype
;
uint8_t
signalling
;
/* SNGISDN_SIGNALING_CPE or SNGISDN_SIGNALING_NET */
...
...
@@ -181,6 +183,7 @@ typedef struct sngisdn_span_data {
uint8_t
facility
;
int8_t
facility_timeout
;
uint8_t
num_local_numbers
;
uint8_t
timer_t3
;
char
*
local_numbers
[
SNGISDN_NUM_LOCAL_NUMBERS
];
ftdm_sched_t
*
sched
;
ftdm_queue_t
*
event_queue
;
...
...
@@ -275,7 +278,7 @@ void stack_hdr_init(Header *hdr);
void
stack_pst_init
(
Pst
*
pst
);
FT_DECLARE_INLINE
(
ftdm_status_t
)
get_ftdmchan_by_spInstId
(
int16_t
cc_id
,
uint32_t
spInstId
,
sngisdn_chan_data_t
**
sngisdn_data
);
FT_DECLARE_INLINE
(
ftdm_status_t
)
get_ftdmchan_by_suInstId
(
int16_t
cc_id
,
uint32_t
suInstId
,
sngisdn_chan_data_t
**
sngisdn_data
);
FT_DECLARE_INLINE
(
ftdm_status_t
)
sng
_
isdn_set_avail_rate
(
ftdm_span_t
*
ftdmspan
,
sngisdn_avail_t
avail
);
FT_DECLARE_INLINE
(
ftdm_status_t
)
sngisdn_set_avail_rate
(
ftdm_span_t
*
ftdmspan
,
sngisdn_avail_t
avail
);
/* Outbound Call Control functions */
void
sngisdn_snd_setup
(
ftdm_channel_t
*
ftdmchan
);
...
...
@@ -290,25 +293,28 @@ void sngisdn_snd_reset(ftdm_channel_t *ftdmchan);
void
sngisdn_snd_con_complete
(
ftdm_channel_t
*
ftdmchan
);
void
sngisdn_snd_info_req
(
ftdm_channel_t
*
ftdmchan
);
void
sngisdn_snd_status_enq
(
ftdm_channel_t
*
ftdmchan
);
void
sngisdn_snd_data
(
ftdm_span_t
*
span
,
uint8_t
*
data
,
ftdm_size_t
len
);
void
sngisdn_snd_event
(
ftdm_span_t
*
span
,
sng_isdn_l1_event_t
l1_event
);
/* Inbound Call Control functions */
void
sngisdn_rcv_con_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
ConEvnt
*
conEvnt
,
int16_t
dChan
,
uint8_t
ces
);
void
sngisdn_rcv_con_cfm
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
CnStEvnt
*
cnStEvnt
,
int16_t
dChan
,
uint8_t
ces
);
void
sngisdn_rcv_cnst_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
CnStEvnt
*
cnStEvnt
,
uint8_t
evntType
,
int16_t
dChan
,
uint8_t
ces
);
void
sngisdn_rcv_disc_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
DiscEvnt
*
discEvnt
);
void
sngisdn_rcv_rel_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
RelEvnt
*
relEvnt
);
void
sngisdn_rcv_dat_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
InfoEvnt
*
infoEvnt
);
void
sngisdn_rcv_sshl_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
SsHlEvnt
*
ssHlEvnt
,
uint8_t
action
);
void
sngisdn_rcv_sshl_cfm
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
SsHlEvnt
*
ssHlEvnt
,
uint8_t
action
);
void
sngisdn_rcv_rmrt_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
RmRtEvnt
*
rmRtEvnt
,
uint8_t
action
);
void
sngisdn_rcv_rmrt_cfm
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
RmRtEvnt
*
rmRtEvnt
,
uint8_t
action
);
void
sngisdn_rcv_flc_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
StaEvnt
*
staEvnt
);
void
sngisdn_rcv_fac_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
FacEvnt
*
facEvnt
,
uint8_t
evntType
,
int16_t
dChan
,
uint8_t
ces
);
void
sngisdn_rcv_sta_cfm
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
StaEvnt
*
staEvnt
);
void
sngisdn_rcv_srv_ind
(
int16_t
suId
,
Srv
*
srvEvnt
,
int16_t
dChan
,
uint8_t
ces
);
void
sngisdn_rcv_srv_cfm
(
int16_t
suId
,
Srv
*
srvEvnt
,
int16_t
dChan
,
uint8_t
ces
);
void
sngisdn_rcv_rst_cfm
(
int16_t
suId
,
Rst
*
rstEvnt
,
int16_t
dChan
,
uint8_t
ces
,
uint8_t
evntType
);
void
sngisdn_rcv_rst_ind
(
int16_t
suId
,
Rst
*
rstEvnt
,
int16_t
dChan
,
uint8_t
ces
,
uint8_t
evntType
);
void
sngisdn_rcv_con_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
ConEvnt
*
conEvnt
,
int16_t
dChan
,
uint8_t
ces
);
void
sngisdn_rcv_con_cfm
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
CnStEvnt
*
cnStEvnt
,
int16_t
dChan
,
uint8_t
ces
);
void
sngisdn_rcv_cnst_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
CnStEvnt
*
cnStEvnt
,
uint8_t
evntType
,
int16_t
dChan
,
uint8_t
ces
);
void
sngisdn_rcv_disc_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
DiscEvnt
*
discEvnt
);
void
sngisdn_rcv_rel_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
RelEvnt
*
relEvnt
);
void
sngisdn_rcv_dat_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
InfoEvnt
*
infoEvnt
);
void
sngisdn_rcv_sshl_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
SsHlEvnt
*
ssHlEvnt
,
uint8_t
action
);
void
sngisdn_rcv_sshl_cfm
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
SsHlEvnt
*
ssHlEvnt
,
uint8_t
action
);
void
sngisdn_rcv_rmrt_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
RmRtEvnt
*
rmRtEvnt
,
uint8_t
action
);
void
sngisdn_rcv_rmrt_cfm
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
RmRtEvnt
*
rmRtEvnt
,
uint8_t
action
);
void
sngisdn_rcv_flc_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
StaEvnt
*
staEvnt
);
void
sngisdn_rcv_fac_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
FacEvnt
*
facEvnt
,
uint8_t
evntType
,
int16_t
dChan
,
uint8_t
ces
);
void
sngisdn_rcv_sta_cfm
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
StaEvnt
*
staEvnt
);
void
sngisdn_rcv_srv_ind
(
int16_t
suId
,
Srv
*
srvEvnt
,
int16_t
dChan
,
uint8_t
ces
);
void
sngisdn_rcv_srv_cfm
(
int16_t
suId
,
Srv
*
srvEvnt
,
int16_t
dChan
,
uint8_t
ces
);
void
sngisdn_rcv_rst_cfm
(
int16_t
suId
,
Rst
*
rstEvnt
,
int16_t
dChan
,
uint8_t
ces
,
uint8_t
evntType
);
void
sngisdn_rcv_rst_ind
(
int16_t
suId
,
Rst
*
rstEvnt
,
int16_t
dChan
,
uint8_t
ces
,
uint8_t
evntType
);
int16_t
sngisdn_rcv_data_req
(
uint16_t
spId
,
uint8_t
*
buff
,
uint32_t
length
);
void
sngisdn_process_con_ind
(
sngisdn_event_data_t
*
sngisdn_event
);
void
sngisdn_process_con_cfm
(
sngisdn_event_data_t
*
sngisdn_event
);
...
...
@@ -364,15 +370,18 @@ static __inline__ void sngisdn_set_flag(sngisdn_chan_data_t *sngisdn_info, sngis
void
handle_sng_log
(
uint8_t
level
,
char
*
fmt
,...);
void
sngisdn_set_span_sig_status
(
ftdm_span_t
*
ftdmspan
,
ftdm_signaling_status_t
status
);
void
sngisdn_delayed_setup
(
void
*
p_sngisdn_info
);
void
sngisdn_delayed_release
(
void
*
p_sngisdn_info
);
void
sngisdn_delayed_connect
(
void
*
p_sngisdn_info
);
void
sngisdn_delayed_disconnect
(
void
*
p_sngisdn_info
);
void
sngisdn_facility_timeout
(
void
*
p_sngisdn_info
);
void
sngisdn_t3_timeout
(
void
*
p_sngisdn_info
);
/* Stack management functions */
ftdm_status_t
sng_isdn_stack_cfg
(
ftdm_span_t
*
span
);
ftdm_status_t
sng_isdn_stack_start
(
ftdm_span_t
*
span
);
ftdm_status_t
sng_isdn_stack_stop
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_stack_cfg
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_stack_start
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_stack_stop
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_wake_up_phy
(
ftdm_span_t
*
span
);
void
sngisdn_print_phy_stats
(
ftdm_stream_handle_t
*
stream
,
ftdm_span_t
*
span
);
void
sngisdn_print_spans
(
ftdm_stream_handle_t
*
stream
);
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c
浏览文件 @
6cbf8a01
...
...
@@ -56,9 +56,11 @@ ftdm_status_t add_local_number(const char* val, ftdm_span_t *span)
ftdm_status_t
parse_switchtype
(
const
char
*
switch_name
,
ftdm_span_t
*
span
)
{
unsigned
i
;
ftdm_iterator_t
*
chaniter
=
NULL
;
ftdm_iterator_t
*
curr
=
NULL
;
sngisdn_dchan_data_t
*
dchan_data
;
sngisdn_span_data_t
*
signal_data
=
(
sngisdn_span_data_t
*
)
span
->
signal_data
;
switch
(
span
->
trunk_type
)
{
case
FTDM_TRUNK_T1
:
if
(
!
strcasecmp
(
switch_name
,
"ni2"
)
||
...
...
@@ -122,9 +124,9 @@ ftdm_status_t parse_switchtype(const char* switch_name, ftdm_span_t *span)
/* add this span to its ent_cc */
signal_data
->
cc_id
=
i
;
/* create a new dchan */
/* for NFAS - no-dchan on b-channels
only links */
/* create a new dchan */
/* for NFAS - no-dchan on b-channels
-
only links */
g_sngisdn_data
.
num_dchan
++
;
signal_data
->
dchan_id
=
g_sngisdn_data
.
num_dchan
;
signal_data
->
dchan_id
=
g_sngisdn_data
.
num_dchan
;
dchan_data
=
&
g_sngisdn_data
.
dchans
[
signal_data
->
dchan_id
];
dchan_data
->
num_spans
++
;
...
...
@@ -136,16 +138,23 @@ ftdm_status_t parse_switchtype(const char* switch_name, ftdm_span_t *span)
ftdm_log
(
FTDM_LOG_DEBUG
,
"%s: cc_id:%d dchan_id:%d span_id:%d
\n
"
,
span
->
name
,
signal_data
->
cc_id
,
signal_data
->
dchan_id
,
signal_data
->
span_id
);
/* Add the channels to the span */
for
(
i
=
1
;
i
<=
span
->
chan_count
;
i
++
)
{
unsigned
chan_id
;
ftdm_channel_t
*
ftdmchan
=
span
->
channels
[
i
];
/* NFAS is not supported on E1, so span_id will always be 1 for E1 so this will work for E1 as well */
chan_id
=
((
signal_data
->
span_id
-
1
)
*
NUM_T1_CHANNELS_PER_SPAN
)
+
ftdmchan
->
physical_chan_id
;
dchan_data
->
channels
[
chan_id
]
=
(
sngisdn_chan_data_t
*
)
ftdmchan
->
call_data
;
dchan_data
->
num_chans
++
;
chaniter
=
ftdm_span_get_chan_iterator
(
span
,
NULL
);
for
(
curr
=
chaniter
;
curr
;
curr
=
ftdm_iterator_next
(
curr
))
{
int32_t
chan_id
;
ftdm_channel_t
*
ftdmchan
=
(
ftdm_channel_t
*
)
ftdm_iterator_current
(
curr
);
if
(
ftdmchan
->
type
==
FTDM_CHAN_TYPE_DQ921
)
{
/* set the d-channel */
signal_data
->
dchan
=
ftdmchan
;
}
else
{
/* Add the channels to the span */
/* NFAS is not supported on E1, so span_id will always be 1 for E1 so this will work for E1 as well */
chan_id
=
((
signal_data
->
span_id
-
1
)
*
NUM_T1_CHANNELS_PER_SPAN
)
+
ftdmchan
->
physical_chan_id
;
dchan_data
->
channels
[
chan_id
]
=
(
sngisdn_chan_data_t
*
)
ftdmchan
->
call_data
;
dchan_data
->
num_chans
++
;
}
}
ftdm_iterator_free
(
chaniter
);
return
FTDM_SUCCESS
;
}
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c
浏览文件 @
6cbf8a01
...
...
@@ -38,52 +38,52 @@ extern ftdm_sngisdn_data_t g_sngisdn_data;
uint8_t
sng_isdn_stack_switchtype
(
sngisdn_switchtype_t
switchtype
);
ftdm_status_t
sng
_
isdn_cfg_phy
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_cfg_q921
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_cfg_q931
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_cfg_cc
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_cfg_phy
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_cfg_q921
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_cfg_q931
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_cfg_cc
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_stack_cfg_phy_gen
(
void
);
ftdm_status_t
sng
_
isdn_stack_cfg_q921_gen
(
void
);
ftdm_status_t
sng
_
isdn_stack_cfg_q931_gen
(
void
);
ftdm_status_t
sng
_
isdn_stack_cfg_cc_gen
(
void
);
ftdm_status_t
sngisdn_stack_cfg_phy_gen
(
void
);
ftdm_status_t
sngisdn_stack_cfg_q921_gen
(
void
);
ftdm_status_t
sngisdn_stack_cfg_q931_gen
(
void
);
ftdm_status_t
sngisdn_stack_cfg_cc_gen
(
void
);
ftdm_status_t
sng
_
isdn_stack_cfg_phy_psap
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_stack_cfg_q921_msap
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_stack_cfg_q921_dlsap
(
ftdm_span_t
*
span
,
uint8_t
management
);
ftdm_status_t
sng
_
isdn_stack_cfg_q931_tsap
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_stack_cfg_q931_dlsap
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_stack_cfg_q931_lce
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_stack_cfg_phy_psap
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_stack_cfg_q921_msap
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_stack_cfg_q921_dlsap
(
ftdm_span_t
*
span
,
uint8_t
management
);
ftdm_status_t
sngisdn_stack_cfg_q931_tsap
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_stack_cfg_q931_dlsap
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_stack_cfg_q931_lce
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_stack_cfg_cc_sap
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_stack_cfg_cc_sap
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_stack_cfg
(
ftdm_span_t
*
span
)
ftdm_status_t
sngisdn_stack_cfg
(
ftdm_span_t
*
span
)
{
sngisdn_span_data_t
*
signal_data
=
(
sngisdn_span_data_t
*
)
span
->
signal_data
;
if
(
!
g_sngisdn_data
.
gen_config_done
)
{
g_sngisdn_data
.
gen_config_done
=
1
;
ftdm_log
(
FTDM_LOG_DEBUG
,
"Starting general stack configuration
\n
"
);
if
(
sng
_
isdn_stack_cfg_phy_gen
()
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg_phy_gen
()
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"Failed general physical configuration
\n
"
);
return
FTDM_FAIL
;
}
ftdm_log
(
FTDM_LOG_DEBUG
,
"General stack physical done
\n
"
);
if
(
sng
_
isdn_stack_cfg_q921_gen
()
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg_q921_gen
()
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"Failed general q921 configuration
\n
"
);
return
FTDM_FAIL
;
}
ftdm_log
(
FTDM_LOG_DEBUG
,
"General stack q921 done
\n
"
);
if
(
sng
_
isdn_stack_cfg_q931_gen
()
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg_q931_gen
()
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"Failed general q921 configuration
\n
"
);
return
FTDM_FAIL
;
}
ftdm_log
(
FTDM_LOG_DEBUG
,
"General stack q931 done
\n
"
);
if
(
sng
_
isdn_stack_cfg_cc_gen
()
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg_cc_gen
()
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"Failed general CC configuration
\n
"
);
return
FTDM_FAIL
;
}
...
...
@@ -92,26 +92,26 @@ ftdm_status_t sng_isdn_stack_cfg(ftdm_span_t *span)
}
/* TODO: for NFAS, should only call these function for spans with d-chans */
if
(
sng
_
isdn_stack_cfg_phy_psap
(
span
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg_phy_psap
(
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"%s:phy_psap configuration failed
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
ftdm_log
(
FTDM_LOG_DEBUG
,
"%s:phy_psap configuration done
\n
"
,
span
->
name
);
if
(
sng
_
isdn_stack_cfg_q921_msap
(
span
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg_q921_msap
(
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"%s:q921_msap configuration failed
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
ftdm_log
(
FTDM_LOG_DEBUG
,
"%s:q921_msap configuration done
\n
"
,
span
->
name
);
if
(
sng
_
isdn_stack_cfg_q921_dlsap
(
span
,
0
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg_q921_dlsap
(
span
,
0
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"%s:q921_dlsap configuration failed
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
ftdm_log
(
FTDM_LOG_DEBUG
,
"%s:q921_dlsap configuration done
\n
"
,
span
->
name
);
if
(
span
->
trunk_type
==
FTDM_TRUNK_BRI_PTMP
)
{
if
(
sng
_
isdn_stack_cfg_q921_dlsap
(
span
,
1
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg_q921_dlsap
(
span
,
1
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"%s:q921_dlsap management configuration failed
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
...
...
@@ -119,13 +119,13 @@ ftdm_status_t sng_isdn_stack_cfg(ftdm_span_t *span)
}
if
(
sng
_
isdn_stack_cfg_q931_dlsap
(
span
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg_q931_dlsap
(
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"%s:q931_dlsap configuration failed
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
ftdm_log
(
FTDM_LOG_DEBUG
,
"%s:q931_dlsap configuration done
\n
"
,
span
->
name
);
if
(
sng
_
isdn_stack_cfg_q931_lce
(
span
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg_q931_lce
(
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"%s:q931_lce configuration failed
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
...
...
@@ -134,13 +134,13 @@ ftdm_status_t sng_isdn_stack_cfg(ftdm_span_t *span)
if
(
!
g_sngisdn_data
.
ccs
[
signal_data
->
cc_id
].
config_done
)
{
g_sngisdn_data
.
ccs
[
signal_data
->
cc_id
].
config_done
=
1
;
/* if BRI, need to configure dlsap_mgmt */
if
(
sng
_
isdn_stack_cfg_q931_tsap
(
span
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg_q931_tsap
(
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"%s:q931_tsap configuration failed
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
ftdm_log
(
FTDM_LOG_DEBUG
,
"%s:q931_tsap configuration done
\n
"
,
span
->
name
);
if
(
sng
_
isdn_stack_cfg_cc_sap
(
span
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_stack_cfg_cc_sap
(
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"%s:cc_sap configuration failed
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
...
...
@@ -153,7 +153,7 @@ ftdm_status_t sng_isdn_stack_cfg(ftdm_span_t *span)
ftdm_status_t
sng
_
isdn_stack_cfg_phy_gen
(
void
)
ftdm_status_t
sngisdn_stack_cfg_phy_gen
(
void
)
{
/*local variables*/
L1Mngmt
cfg
;
/*configuration structure*/
...
...
@@ -191,14 +191,11 @@ ftdm_status_t sng_isdn_stack_cfg_phy_gen(void)
return
FTDM_SUCCESS
;
}
ftdm_status_t
sng_isdn_stack_cfg_phy_psap
(
ftdm_span_t
*
span
)
{
ftdm_iterator_t
*
chaniter
;
ftdm_iterator_t
*
curr
;
ftdm_status_t
sngisdn_stack_cfg_phy_psap
(
ftdm_span_t
*
span
)
{
L1Mngmt
cfg
;
Pst
pst
;
int32_t
d_channel_fd
=
-
1
;
sngisdn_span_data_t
*
signal_data
=
(
sngisdn_span_data_t
*
)
span
->
signal_data
;
/* initalize the post structure */
...
...
@@ -220,25 +217,13 @@ ftdm_status_t sng_isdn_stack_cfg_phy_psap(ftdm_span_t *span)
cfg
.
hdr
.
elmId
.
elmnt
=
STPSAP
;
cfg
.
hdr
.
elmId
.
elmntInst1
=
signal_data
->
link_id
;
/* Find the d-channel */
chaniter
=
ftdm_span_get_chan_iterator
(
span
,
NULL
);
for
(
curr
=
chaniter
;
curr
;
curr
=
ftdm_iterator_next
(
curr
))
{
ftdm_channel_t
*
ftdmchan
=
(
ftdm_channel_t
*
)
ftdm_iterator_current
(
curr
);
if
(
ftdmchan
->
type
==
FTDM_CHAN_TYPE_DQ921
)
{
d_channel_fd
=
(
int32_t
)
ftdmchan
->
sockfd
;
break
;
}
}
ftdm_iterator_free
(
chaniter
);
if
(
d_channel_fd
<
0
)
{
if
(
!
signal_data
->
dchan
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"%s:No d-channels specified
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
cfg
.
t
.
cfg
.
s
.
l1PSAP
.
sockfd
=
d_channel_
fd
;
}
cfg
.
t
.
cfg
.
s
.
l1PSAP
.
sockfd
=
(
int32_t
)
signal_data
->
dchan
->
sock
fd
;
switch
(
span
->
trunk_type
)
{
case
FTDM_TRUNK_E1
:
...
...
@@ -257,7 +242,7 @@ ftdm_status_t sng_isdn_stack_cfg_phy_psap(ftdm_span_t *span)
return
FTDM_FAIL
;
}
cfg
.
t
.
cfg
.
s
.
l1PSAP
.
spId
=
signal_data
->
link_id
;
if
(
sng_isdn_phy_config
(
&
pst
,
&
cfg
))
{
return
FTDM_FAIL
;
}
...
...
@@ -265,7 +250,7 @@ ftdm_status_t sng_isdn_stack_cfg_phy_psap(ftdm_span_t *span)
}
ftdm_status_t
sng
_
isdn_stack_cfg_q921_gen
(
void
)
ftdm_status_t
sngisdn_stack_cfg_q921_gen
(
void
)
{
BdMngmt
cfg
;
Pst
pst
;
...
...
@@ -308,7 +293,7 @@ ftdm_status_t sng_isdn_stack_cfg_q921_gen(void)
return
FTDM_SUCCESS
;
}
ftdm_status_t
sng
_
isdn_stack_cfg_q921_msap
(
ftdm_span_t
*
span
)
ftdm_status_t
sngisdn_stack_cfg_q921_msap
(
ftdm_span_t
*
span
)
{
BdMngmt
cfg
;
Pst
pst
;
...
...
@@ -401,7 +386,7 @@ ftdm_status_t sng_isdn_stack_cfg_q921_msap(ftdm_span_t *span)
return
FTDM_SUCCESS
;
}
ftdm_status_t
sng
_
isdn_stack_cfg_q921_dlsap
(
ftdm_span_t
*
span
,
uint8_t
management
)
ftdm_status_t
sngisdn_stack_cfg_q921_dlsap
(
ftdm_span_t
*
span
,
uint8_t
management
)
{
BdMngmt
cfg
;
Pst
pst
;
...
...
@@ -483,7 +468,7 @@ ftdm_status_t sng_isdn_stack_cfg_q921_dlsap(ftdm_span_t *span, uint8_t managemen
return
FTDM_SUCCESS
;
}
ftdm_status_t
sng
_
isdn_stack_cfg_q931_gen
(
void
)
ftdm_status_t
sngisdn_stack_cfg_q931_gen
(
void
)
{
InMngmt
cfg
;
Pst
pst
;
...
...
@@ -538,7 +523,7 @@ ftdm_status_t sng_isdn_stack_cfg_q931_gen(void)
}
/* Link between CC and q931 */
ftdm_status_t
sng
_
isdn_stack_cfg_q931_tsap
(
ftdm_span_t
*
span
)
ftdm_status_t
sngisdn_stack_cfg_q931_tsap
(
ftdm_span_t
*
span
)
{
InMngmt
cfg
;
Pst
pst
;
...
...
@@ -601,7 +586,7 @@ ftdm_status_t sng_isdn_stack_cfg_q931_tsap(ftdm_span_t *span)
return
FTDM_SUCCESS
;
}
ftdm_status_t
sng
_
isdn_stack_cfg_q931_dlsap
(
ftdm_span_t
*
span
)
ftdm_status_t
sngisdn_stack_cfg_q931_dlsap
(
ftdm_span_t
*
span
)
{
InMngmt
cfg
;
Pst
pst
;
...
...
@@ -851,7 +836,7 @@ ftdm_status_t sng_isdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
return
FTDM_SUCCESS
;
}
ftdm_status_t
sng
_
isdn_stack_cfg_q931_lce
(
ftdm_span_t
*
span
)
ftdm_status_t
sngisdn_stack_cfg_q931_lce
(
ftdm_span_t
*
span
)
{
InMngmt
cfg
;
Pst
pst
;
...
...
@@ -927,7 +912,7 @@ ftdm_status_t sng_isdn_stack_cfg_q931_lce(ftdm_span_t *span)
}
ftdm_status_t
sng
_
isdn_stack_cfg_cc_gen
(
void
)
ftdm_status_t
sngisdn_stack_cfg_cc_gen
(
void
)
{
CcMngmt
cfg
;
Pst
pst
;
...
...
@@ -966,7 +951,7 @@ ftdm_status_t sng_isdn_stack_cfg_cc_gen(void)
}
ftdm_status_t
sng
_
isdn_stack_cfg_cc_sap
(
ftdm_span_t
*
span
)
ftdm_status_t
sngisdn_stack_cfg_cc_sap
(
ftdm_span_t
*
span
)
{
CcMngmt
cfg
;
Pst
pst
;
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c
浏览文件 @
6cbf8a01
...
...
@@ -37,27 +37,27 @@
void
stack_resp_hdr_init
(
Header
*
hdr
);
ftdm_status_t
sng
_
isdn_activate_phy
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_deactivate_phy
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_activate_phy
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_deactivate_phy
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_activate_cc
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_activate_trace
(
ftdm_span_t
*
span
,
sngisdn_tracetype_t
trace_opt
);
ftdm_status_t
sngisdn_activate_cc
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_activate_trace
(
ftdm_span_t
*
span
,
sngisdn_tracetype_t
trace_opt
);
ftdm_status_t
sng
_
isdn_cntrl_q931
(
ftdm_span_t
*
span
,
uint8_t
action
,
uint8_t
subaction
);
ftdm_status_t
sng
_
isdn_cntrl_q921
(
ftdm_span_t
*
span
,
uint8_t
action
,
uint8_t
subaction
);
ftdm_status_t
sngisdn_cntrl_q931
(
ftdm_span_t
*
span
,
uint8_t
action
,
uint8_t
subaction
);
ftdm_status_t
sngisdn_cntrl_q921
(
ftdm_span_t
*
span
,
uint8_t
action
,
uint8_t
subaction
);
extern
ftdm_sngisdn_data_t
g_sngisdn_data
;
ftdm_status_t
sng
_
isdn_stack_stop
(
ftdm_span_t
*
span
);
ftdm_status_t
sngisdn_stack_stop
(
ftdm_span_t
*
span
);
ftdm_status_t
sng
_
isdn_stack_start
(
ftdm_span_t
*
span
)
ftdm_status_t
sngisdn_stack_start
(
ftdm_span_t
*
span
)
{
sngisdn_span_data_t
*
signal_data
=
(
sngisdn_span_data_t
*
)
span
->
signal_data
;
if
(
sng
_
isdn_cntrl_q921
(
span
,
ABND_ENA
,
NOTUSED
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_cntrl_q921
(
span
,
ABND_ENA
,
NOTUSED
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"%s:Failed to activate stack q921
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
...
...
@@ -72,7 +72,7 @@ ftdm_status_t sng_isdn_stack_start(ftdm_span_t *span)
ftdm_log
(
FTDM_LOG_DEBUG
,
"%s:Stack q921 activated
\n
"
,
span
->
name
);
if
(
!
g_sngisdn_data
.
ccs
[
signal_data
->
cc_id
].
activation_done
)
{
g_sngisdn_data
.
ccs
[
signal_data
->
cc_id
].
activation_done
=
1
;
if
(
sng
_
isdn_activate_cc
(
span
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_activate_cc
(
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"%s:Failed to activate stack CC
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
...
...
@@ -80,7 +80,7 @@ ftdm_status_t sng_isdn_stack_start(ftdm_span_t *span)
}
if
(
sng
_
isdn_cntrl_q931
(
span
,
ABND_ENA
,
SAELMNT
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_cntrl_q931
(
span
,
ABND_ENA
,
SAELMNT
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"%s:Failed to activate stack q931
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
...
...
@@ -90,20 +90,20 @@ ftdm_status_t sng_isdn_stack_start(ftdm_span_t *span)
return
FTDM_SUCCESS
;
}
ftdm_status_t
sng
_
isdn_stack_stop
(
ftdm_span_t
*
span
)
ftdm_status_t
sngisdn_stack_stop
(
ftdm_span_t
*
span
)
{
/* Stop L1 first, so we do not receive any more frames */
if
(
sng
_
isdn_deactivate_phy
(
span
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_deactivate_phy
(
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"%s:Failed to deactivate stack phy
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
if
(
sng
_
isdn_cntrl_q931
(
span
,
AUBND_DIS
,
SAELMNT
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_cntrl_q931
(
span
,
AUBND_DIS
,
SAELMNT
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"%s:Failed to deactivate stack q931
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
if
(
sng
_
isdn_cntrl_q921
(
span
,
AUBND_DIS
,
SAELMNT
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_cntrl_q921
(
span
,
AUBND_DIS
,
SAELMNT
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"%s:Failed to deactivate stack q921
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
...
...
@@ -113,7 +113,7 @@ ftdm_status_t sng_isdn_stack_stop(ftdm_span_t *span)
}
ftdm_status_t
sng
_
isdn_activate_phy
(
ftdm_span_t
*
span
)
ftdm_status_t
sngisdn_activate_phy
(
ftdm_span_t
*
span
)
{
/* There is no need to start phy, as it will Q921 will send a activate request to phy when it starts */
...
...
@@ -121,7 +121,7 @@ ftdm_status_t sng_isdn_activate_phy(ftdm_span_t *span)
return
FTDM_SUCCESS
;
}
ftdm_status_t
sng
_
isdn_deactivate_phy
(
ftdm_span_t
*
span
)
ftdm_status_t
sngisdn_deactivate_phy
(
ftdm_span_t
*
span
)
{
L1Mngmt
cntrl
;
Pst
pst
;
...
...
@@ -155,8 +155,41 @@ ftdm_status_t sng_isdn_deactivate_phy(ftdm_span_t *span)
return
FTDM_SUCCESS
;
}
ftdm_status_t
sngisdn_wake_up_phy
(
ftdm_span_t
*
span
)
{
L1Mngmt
cntrl
;
Pst
pst
;
sngisdn_span_data_t
*
signal_data
=
(
sngisdn_span_data_t
*
)
span
->
signal_data
;
/* initalize the post structure */
stack_pst_init
(
&
pst
);
/* insert the destination Entity */
pst
.
dstEnt
=
ENTL1
;
/* initalize the control structure */
memset
(
&
cntrl
,
0
,
sizeof
(
cntrl
));
/* initalize the control header */
stack_hdr_init
(
&
cntrl
.
hdr
);
cntrl
.
hdr
.
msgType
=
TCNTRL
;
/* configuration */
cntrl
.
hdr
.
entId
.
ent
=
ENTL1
;
/* entity */
cntrl
.
hdr
.
entId
.
inst
=
S_INST
;
/* instance */
cntrl
.
hdr
.
elmId
.
elmnt
=
STTSAP
;
/* SAP Specific cntrl */
cntrl
.
t
.
cntrl
.
action
=
AENA
;
cntrl
.
t
.
cntrl
.
subAction
=
SAELMNT
;
cntrl
.
t
.
cntrl
.
sapId
=
signal_data
->
link_id
;
if
(
sng_isdn_phy_cntrl
(
&
pst
,
&
cntrl
))
{
return
FTDM_FAIL
;
}
return
FTDM_SUCCESS
;
}
ftdm_status_t
sng
_
isdn_activate_cc
(
ftdm_span_t
*
span
)
ftdm_status_t
sngisdn_activate_cc
(
ftdm_span_t
*
span
)
{
CcMngmt
cntrl
;
Pst
pst
;
...
...
@@ -190,7 +223,7 @@ ftdm_status_t sng_isdn_activate_cc(ftdm_span_t *span)
return
FTDM_SUCCESS
;
}
ftdm_status_t
sng
_
isdn_activate_trace
(
ftdm_span_t
*
span
,
sngisdn_tracetype_t
trace_opt
)
ftdm_status_t
sngisdn_activate_trace
(
ftdm_span_t
*
span
,
sngisdn_tracetype_t
trace_opt
)
{
sngisdn_span_data_t
*
signal_data
=
(
sngisdn_span_data_t
*
)
span
->
signal_data
;
switch
(
trace_opt
)
{
...
...
@@ -199,7 +232,7 @@ ftdm_status_t sng_isdn_activate_trace(ftdm_span_t *span, sngisdn_tracetype_t tra
ftdm_log
(
FTDM_LOG_INFO
,
"s%d Disabling q921 trace
\n
"
,
signal_data
->
link_id
);
sngisdn_clear_trace_flag
(
signal_data
,
SNGISDN_TRACE_Q921
);
if
(
sng
_
isdn_cntrl_q921
(
span
,
ADISIMM
,
SATRC
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_cntrl_q921
(
span
,
ADISIMM
,
SATRC
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"s%d Failed to disable q921 trace
\n
"
);
}
}
...
...
@@ -207,7 +240,7 @@ ftdm_status_t sng_isdn_activate_trace(ftdm_span_t *span, sngisdn_tracetype_t tra
ftdm_log
(
FTDM_LOG_INFO
,
"s%d Disabling q931 trace
\n
"
,
signal_data
->
link_id
);
sngisdn_clear_trace_flag
(
signal_data
,
SNGISDN_TRACE_Q931
);
if
(
sng
_
isdn_cntrl_q931
(
span
,
ADISIMM
,
SATRC
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_cntrl_q931
(
span
,
ADISIMM
,
SATRC
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"s%d Failed to disable q931 trace
\n
"
);
}
}
...
...
@@ -217,7 +250,7 @@ ftdm_status_t sng_isdn_activate_trace(ftdm_span_t *span, sngisdn_tracetype_t tra
ftdm_log
(
FTDM_LOG_INFO
,
"s%d Enabling q921 trace
\n
"
,
signal_data
->
link_id
);
sngisdn_set_trace_flag
(
signal_data
,
SNGISDN_TRACE_Q921
);
if
(
sng
_
isdn_cntrl_q921
(
span
,
AENA
,
SATRC
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_cntrl_q921
(
span
,
AENA
,
SATRC
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"s%d Failed to enable q921 trace
\n
"
);
}
}
...
...
@@ -227,7 +260,7 @@ ftdm_status_t sng_isdn_activate_trace(ftdm_span_t *span, sngisdn_tracetype_t tra
ftdm_log
(
FTDM_LOG_INFO
,
"s%d Enabling q931 trace
\n
"
,
signal_data
->
link_id
);
sngisdn_set_trace_flag
(
signal_data
,
SNGISDN_TRACE_Q931
);
if
(
sng
_
isdn_cntrl_q931
(
span
,
AENA
,
SATRC
)
!=
FTDM_SUCCESS
)
{
if
(
sngisdn_cntrl_q931
(
span
,
AENA
,
SATRC
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"s%d Failed to enable q931 trace
\n
"
);
}
}
...
...
@@ -237,7 +270,7 @@ ftdm_status_t sng_isdn_activate_trace(ftdm_span_t *span, sngisdn_tracetype_t tra
}
ftdm_status_t
sng
_
isdn_cntrl_q931
(
ftdm_span_t
*
span
,
uint8_t
action
,
uint8_t
subaction
)
ftdm_status_t
sngisdn_cntrl_q931
(
ftdm_span_t
*
span
,
uint8_t
action
,
uint8_t
subaction
)
{
InMngmt
cntrl
;
Pst
pst
;
...
...
@@ -276,7 +309,7 @@ ftdm_status_t sng_isdn_cntrl_q931(ftdm_span_t *span, uint8_t action, uint8_t sub
}
ftdm_status_t
sng
_
isdn_cntrl_q921
(
ftdm_span_t
*
span
,
uint8_t
action
,
uint8_t
subaction
)
ftdm_status_t
sngisdn_cntrl_q921
(
ftdm_span_t
*
span
,
uint8_t
action
,
uint8_t
subaction
)
{
BdMngmt
cntrl
;
Pst
pst
;
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c
浏览文件 @
6cbf8a01
...
...
@@ -539,7 +539,7 @@ void sngisdn_process_rel_ind (sngisdn_event_data_t *sngisdn_event)
case
FTDM_CHANNEL_STATE_DIALING
:
/* Remote side rejected our SETUP message on outbound call */
if
(
!
ftdm_test_flag
(
ftdmchan
,
FTDM_CHANNEL_SIG_UP
))
{
sng
_
isdn_set_avail_rate
(
ftdmchan
->
span
,
SNGISDN_AVAIL_DOWN
);
sngisdn_set_avail_rate
(
ftdmchan
->
span
,
SNGISDN_AVAIL_DOWN
);
}
/* fall-through */
case
FTDM_CHANNEL_STATE_PROGRESS
:
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c
浏览文件 @
6cbf8a01
...
...
@@ -600,6 +600,17 @@ void sngisdn_snd_release(ftdm_channel_t *ftdmchan, uint8_t glare)
return
;
}
void
sngisdn_snd_data
(
ftdm_span_t
*
span
,
uint8_t
*
data
,
ftdm_size_t
len
)
{
sngisdn_span_data_t
*
signal_data
=
(
sngisdn_span_data_t
*
)
span
->
signal_data
;
sng_isdn_data_ind
(
signal_data
->
link_id
,
data
,
len
);
}
void
sngisdn_snd_event
(
ftdm_span_t
*
span
,
sng_isdn_l1_event_t
l1_event
)
{
sngisdn_span_data_t
*
signal_data
=
(
sngisdn_span_data_t
*
)
span
->
signal_data
;
sng_isdn_event_ind
(
signal_data
->
link_id
,
l1_event
);
}
/* For Emacs:
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c
浏览文件 @
6cbf8a01
...
...
@@ -736,7 +736,7 @@ void sngisdn_rcv_q931_ind(InMngmt *status)
DECODE_LCM_CAUSE
(
status
->
t
.
usta
.
alarm
.
cause
),
status
->
t
.
usta
.
alarm
.
cause
);
sngisdn_set_span_sig_status
(
ftdmspan
,
FTDM_SIG_STATE_UP
);
sng
_
isdn_set_avail_rate
(
ftdmspan
,
SNGISDN_AVAIL_UP
);
sngisdn_set_avail_rate
(
ftdmspan
,
SNGISDN_AVAIL_UP
);
}
else
{
ftdm_log
(
FTDM_LOG_WARNING
,
"[SNGISDN Q931] s%d: %s: %s(%d): %s(%d)
\n
"
,
status
->
t
.
usta
.
suId
,
...
...
@@ -745,7 +745,7 @@ void sngisdn_rcv_q931_ind(InMngmt *status)
DECODE_LCM_CAUSE
(
status
->
t
.
usta
.
alarm
.
cause
),
status
->
t
.
usta
.
alarm
.
cause
);
sngisdn_set_span_sig_status
(
ftdmspan
,
FTDM_SIG_STATE_DOWN
);
sng
_
isdn_set_avail_rate
(
ftdmspan
,
SNGISDN_AVAIL_PWR_SAVING
);
sngisdn_set_avail_rate
(
ftdmspan
,
SNGISDN_AVAIL_PWR_SAVING
);
}
}
break
;
...
...
@@ -866,6 +866,26 @@ end_of_trace:
return
;
}
int16_t
sngisdn_rcv_data_req
(
uint16_t
spId
,
uint8_t
*
buff
,
uint32_t
length
)
{
ftdm_status_t
status
;
ftdm_wait_flag_t
flags
=
FTDM_WRITE
;
sngisdn_span_data_t
*
signal_data
=
g_sngisdn_data
.
spans
[
spId
];
ftdm_assert
(
signal_data
,
"Received Data request on unconfigured span
\n
"
);
status
=
signal_data
->
dchan
->
fio
->
wait
(
signal_data
->
dchan
,
&
flags
,
10
);
if
(
status
!=
FTDM_SUCCESS
)
{
ftdm_log_chan_msg
(
signal_data
->
dchan
,
FTDM_LOG_WARNING
,
"transmit timed-out
\n
"
);
return
-
1
;
}
status
=
signal_data
->
dchan
->
fio
->
write
(
signal_data
->
dchan
,
buff
,
(
ftdm_size_t
*
)
&
length
);
if
(
status
!=
FTDM_SUCCESS
)
{
ftdm_log_chan_msg
(
signal_data
->
dchan
,
FTDM_LOG_CRIT
,
"Failed to transmit frame
\n
"
);
return
-
1
;
}
return
0
;
}
void
sngisdn_rcv_sng_assert
(
char
*
message
)
{
ftdm_assert
(
0
,
message
);
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c
浏览文件 @
6cbf8a01
...
...
@@ -137,7 +137,7 @@ FT_DECLARE_INLINE(ftdm_status_t) get_ftdmchan_by_spInstId(int16_t cc_id, uint32_
return
FTDM_SUCCESS
;
}
ftdm_status_t
sng
_
isdn_set_avail_rate
(
ftdm_span_t
*
span
,
sngisdn_avail_t
avail
)
ftdm_status_t
sngisdn_set_avail_rate
(
ftdm_span_t
*
span
,
sngisdn_avail_t
avail
)
{
if
(
span
->
trunk_type
==
FTDM_TRUNK_BRI
||
...
...
@@ -382,6 +382,39 @@ ftdm_status_t cpy_calling_name_from_user(ConEvnt *conEvnt, ftdm_channel_t *ftdmc
return
FTDM_SUCCESS
;
}
void
sngisdn_t3_timeout
(
void
*
p_sngisdn_info
)
{
sngisdn_chan_data_t
*
sngisdn_info
=
(
sngisdn_chan_data_t
*
)
p_sngisdn_info
;
ftdm_channel_t
*
ftdmchan
=
sngisdn_info
->
ftdmchan
;
sngisdn_span_data_t
*
signal_data
=
(
sngisdn_span_data_t
*
)
ftdmchan
->
span
->
signal_data
;
ftdm_log_chan
(
ftdmchan
,
FTDM_LOG_DEBUG
,
"Timer T3 expired (suId:%d suInstId:%u spInstId:%u)
\n
"
,
signal_data
->
cc_id
,
sngisdn_info
->
glare
.
spInstId
,
sngisdn_info
->
glare
.
suInstId
);
ftdm_mutex_lock
(
ftdmchan
->
mutex
);
if
(
ftdm_test_flag
(
sngisdn_info
,
FLAG_ACTIVATING
)){
/* PHY layer timed-out, need to clear the call */
ftdm_log_chan
(
ftdmchan
,
FTDM_LOG_INFO
,
"Failed to Wake-Up line (suId:%d suInstId:%u spInstId:%u)
\n
"
,
signal_data
->
cc_id
,
sngisdn_info
->
glare
.
spInstId
,
sngisdn_info
->
glare
.
suInstId
);
ftdmchan
->
caller_data
.
hangup_cause
=
FTDM_CAUSE_NO_ROUTE_DESTINATION
;
ftdm_clear_flag
(
sngisdn_info
,
FLAG_ACTIVATING
);
ftdm_set_flag
(
sngisdn_info
,
FLAG_LOCAL_ABORT
);
ftdm_set_state
(
ftdmchan
,
FTDM_CHANNEL_STATE_TERMINATING
);
}
ftdm_mutex_unlock
(
ftdmchan
->
mutex
);
}
void
sngisdn_delayed_setup
(
void
*
p_sngisdn_info
)
{
sngisdn_chan_data_t
*
sngisdn_info
=
(
sngisdn_chan_data_t
*
)
p_sngisdn_info
;
ftdm_channel_t
*
ftdmchan
=
sngisdn_info
->
ftdmchan
;
ftdm_mutex_lock
(
ftdmchan
->
mutex
);
sngisdn_snd_setup
(
ftdmchan
);
ftdm_mutex_unlock
(
ftdmchan
->
mutex
);
return
;
}
void
sngisdn_delayed_release
(
void
*
p_sngisdn_info
)
{
sngisdn_chan_data_t
*
sngisdn_info
=
(
sngisdn_chan_data_t
*
)
p_sngisdn_info
;
...
...
libs/freetdm/src/include/private/ftdm_core.h
浏览文件 @
6cbf8a01
...
...
@@ -222,6 +222,8 @@ extern "C" {
#define ftdm_is_dtmf(key) ((key > 47 && key < 58) || (key > 64 && key < 69) || (key > 96 && key < 101) || key == 35 || key == 42 || key == 87 || key == 119)
#define FTDM_SPAN_IS_BRI(x) ((x)->trunk_type == FTDM_TRUNK_BRI || (x)->trunk_type == FTDM_TRUNK_BRI_PTMP)
/*!
\brief Copy flags from one arbitrary object to another
\command dest the object to copy the flags to
...
...
libs/freetdm/src/include/private/ftdm_types.h
浏览文件 @
6cbf8a01
...
...
@@ -176,10 +176,11 @@ typedef enum {
FTDM_SPAN_USE_CHAN_QUEUE
=
(
1
<<
6
),
FTDM_SPAN_SUGGEST_CHAN_ID
=
(
1
<<
7
),
FTDM_SPAN_USE_AV_RATE
=
(
1
<<
8
),
FTDM_SPAN_PWR_SAVING
=
(
1
<<
9
),
/* If you use this flag, you MUST call ftdm_span_trigger_signals to deliver the user signals
* after having called ftdm_send_span_signal(), which with this flag it will just enqueue the signal
* for later delivery */
FTDM_SPAN_USE_SIGNALS_QUEUE
=
(
1
<<
9
),
FTDM_SPAN_USE_SIGNALS_QUEUE
=
(
1
<<
10
),
}
ftdm_span_flag_t
;
/*! \brief Channel supported features */
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论