Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
c8a9c070
提交
c8a9c070
authored
7月 06, 2015
作者:
Moises Silva
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
OPENZAP-238: [freetdm] Fix gsm signaling status reporting
上级
c3e40b29
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
76 行增加
和
69 行删除
+76
-69
ftmod_gsm.c
libs/freetdm/src/ftmod/ftmod_gsm/ftmod_gsm.c
+44
-35
ftmod_wanpipe.c
libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c
+32
-34
没有找到文件。
libs/freetdm/src/ftmod/ftmod_gsm/ftmod_gsm.c
浏览文件 @
c8a9c070
...
...
@@ -126,6 +126,7 @@ typedef struct ftdm_gsm_span_data_s {
ftdm_bool_t
startup_forwarding_disabled
;
char
startup_commands
[
20
][
50
];
ftdm_gsm_flag_t
flags
;
ftdm_bool_t
sig_up
;
}
ftdm_gsm_span_data_t
;
// command handler function type.
...
...
@@ -188,17 +189,6 @@ static ftdm_io_interface_t g_ftdm_gsm_interface;
/* implementation */
/* */
/********************************************************************************/
static
int
read_channel
(
ftdm_channel_t
*
ftdm_chan
,
const
void
*
buf
,
int
size
)
{
ftdm_size_t
outsize
=
size
;
ftdm_status_t
status
=
ftdm_channel_read
(
ftdm_chan
,
(
void
*
)
buf
,
&
outsize
);
if
(
FTDM_FAIL
==
status
)
{
return
-
1
;
}
return
(
int
)
outsize
;
}
static
int
on_wat_span_write
(
unsigned
char
span_id
,
void
*
buffer
,
unsigned
len
)
{
ftdm_span_t
*
span
=
NULL
;
...
...
@@ -256,17 +246,14 @@ static void ftdm_gsm_enable_conditional_forwarding(void *data)
static
void
on_wat_span_status
(
unsigned
char
span_id
,
wat_span_status_t
*
status
)
{
ftdm_span_t
*
span
=
NULL
;
ftdm_gsm_span_data_t
*
gsm_data
=
NULL
;
if
(
!
(
span
=
get_span_by_id
(
span_id
,
&
gsm_data
)))
{
return
;
}
ftdm_span_t
*
span
=
get_span_by_id
(
span_id
,
&
gsm_data
);
switch
(
status
->
type
)
{
case
WAT_SPAN_STS_READY
:
{
int
i
=
0
;
ftdm_log
(
FTDM_LOG_INFO
,
"span %
d: Ready
\n
"
,
span_id
);
ftdm_log
(
FTDM_LOG_INFO
,
"span %
s: Ready
\n
"
,
span
->
name
);
for
(
i
=
0
;
!
ftdm_strlen_zero_buf
(
gsm_data
->
startup_commands
[
i
]);
i
++
)
{
ftdm_log
(
FTDM_LOG_INFO
,
"span %d: Executing startup command '%s'
\n
"
,
span_id
,
gsm_data
->
startup_commands
[
i
]);
if
(
WAT_SUCCESS
!=
wat_cmd_req
(
span_id
,
gsm_data
->
startup_commands
[
i
],
NULL
,
NULL
))
{
...
...
@@ -279,8 +266,10 @@ static void on_wat_span_status(unsigned char span_id, wat_span_status_t *status)
{
if
(
status
->
sts
.
sigstatus
==
WAT_SIGSTATUS_UP
)
{
ftdm_log_chan_msg
(
gsm_data
->
bchan
,
FTDM_LOG_INFO
,
"Signaling is now up
\n
"
);
gsm_data
->
sig_up
=
FTDM_TRUE
;
}
else
{
ftdm_log_chan_msg
(
gsm_data
->
bchan
,
FTDM_LOG_INFO
,
"Signaling is now down
\n
"
);
gsm_data
->
sig_up
=
FTDM_FALSE
;
}
if
(
gsm_data
->
init_conditional_forwarding
==
FTDM_TRUE
&&
!
ftdm_strlen_zero_buf
(
gsm_data
->
conditional_forward_number
))
{
ftdm_sched_timer
(
gsm_data
->
sched
,
"conditional_forwarding_delay"
,
1000
,
...
...
@@ -293,17 +282,17 @@ static void on_wat_span_status(unsigned char span_id, wat_span_status_t *status)
break
;
case
WAT_SPAN_STS_SIM_INFO_READY
:
{
ftdm_log
(
FTDM_LOG_INFO
,
"span %
d: SIM information ready
\n
"
,
span_id
);
ftdm_log
(
FTDM_LOG_INFO
,
"span %
s: SIM information ready
\n
"
,
span
->
name
);
}
break
;
case
WAT_SPAN_STS_ALARM
:
{
ftdm_log
(
FTDM_LOG_INFO
,
"span %
d: Alarm received
\n
"
,
span_id
);
ftdm_log
(
FTDM_LOG_INFO
,
"span %
s: Alarm received
\n
"
,
span
->
name
);
}
break
;
default:
{
ftdm_log
(
FTDM_LOG_INFO
,
"span %
d: Unhandled span status notification %d
\n
"
,
span_id
,
status
->
type
);
ftdm_log
(
FTDM_LOG_INFO
,
"span %
s: Unhandled span status notification %d
\n
"
,
span
->
name
,
status
->
type
);
}
break
;
}
...
...
@@ -621,31 +610,28 @@ static ftdm_status_t ftdm_gsm_destroy(ftdm_span_t *span)
static
FIO_CHANNEL_GET_SIG_STATUS_FUNCTION
(
ftdm_gsm_get_channel_sig_status
)
{
if
(
ftdm_test_flag
(
ftdmchan
,
FTDM_CHANNEL_SIG_UP
))
{
*
status
=
FTDM_SIG_STATE_UP
;
}
else
{
*
status
=
FTDM_SIG_STATE_DOWN
;
}
*
status
=
FTDM_SIG_STATE_UP
;
ftdm_gsm_span_data_t
*
gsm_data
=
ftdmchan
->
span
->
signal_data
;
*
status
=
gsm_data
->
sig_up
?
FTDM_SIG_STATE_UP
:
FTDM_SIG_STATE_DOWN
;
return
FTDM_SUCCESS
;
}
static
FIO_CHANNEL_SET_SIG_STATUS_FUNCTION
(
ftdm_gsm_set_channel_sig_status
)
{
return
FTDM_SUCCESS
;
ftdm_log
(
FTDM_LOG_ERROR
,
"You cannot set the signaling status for GSM channels (%s)
\n
"
,
ftdmchan
->
span
->
name
);
return
FTDM_FAIL
;
}
static
FIO_SPAN_GET_SIG_STATUS_FUNCTION
(
ftdm_gsm_get_span_sig_status
)
{
*
status
=
FTDM_SIG_STATE_UP
;
ftdm_gsm_span_data_t
*
gsm_data
=
span
->
signal_data
;
*
status
=
gsm_data
->
sig_up
?
FTDM_SIG_STATE_UP
:
FTDM_SIG_STATE_DOWN
;
return
FTDM_SUCCESS
;
}
static
FIO_SPAN_SET_SIG_STATUS_FUNCTION
(
ftdm_gsm_set_span_sig_status
)
{
return
FTDM_SUCCESS
;
ftdm_log
(
FTDM_LOG_ERROR
,
"You cannot set the signaling status for GSM spans (%s)
\n
"
,
span
->
name
);
return
FTDM_FAIL
;
}
static
ftdm_state_map_t
gsm_state_map
=
{
...
...
@@ -913,6 +899,12 @@ static ftdm_status_t ftdm_gsm_state_advance(ftdm_channel_t *ftdmchan)
}
break
;
case
FTDM_CHANNEL_STATE_RESET
:
{
ftdm_set_state
(
ftdmchan
,
FTDM_CHANNEL_STATE_DOWN
);
}
break
;
default:
{
ftdm_log_chan
(
ftdmchan
,
FTDM_LOG_ERROR
,
"Unhandled channel state: %s
\n
"
,
ftdm_channel_state2str
(
ftdmchan
->
state
));
...
...
@@ -1228,7 +1220,9 @@ static void *ftdm_gsm_run(ftdm_thread_t *me, void *obj)
ftdm_interrupt_t
*
data_sources
[
2
]
=
{
NULL
,
NULL
};
ftdm_wait_flag_t
flags
=
FTDM_READ
|
FTDM_EVENTS
;
ftdm_status_t
status
=
FTDM_SUCCESS
;
char
buffer
[
1025
]
=
{
0
};
ftdm_alarm_flag_t
alarms
;
char
buffer
[
1024
]
=
{
0
};
ftdm_size_t
bufsize
=
0
;
int
waitms
=
0
;
gsm_data
=
span
->
signal_data
;
...
...
@@ -1244,6 +1238,19 @@ static void *ftdm_gsm_run(ftdm_thread_t *me, void *obj)
goto
done
;
}
/* Do not start if the link layer is not ready yet */
ftdm_channel_get_alarms
(
gsm_data
->
dchan
,
&
alarms
);
if
(
alarms
!=
FTDM_ALARM_NONE
)
{
ftdm_log
(
FTDM_LOG_WARNING
,
"Delaying initialization of span %s until alarms are cleared
\n
"
,
span
->
name
);
while
(
ftdm_running
()
&&
ftdm_test_flag
(
gsm_data
,
FTDM_GSM_SPAN_STARTED
)
&&
alarms
!=
FTDM_ALARM_NONE
)
{
ftdm_channel_get_alarms
(
gsm_data
->
dchan
,
&
alarms
);
ftdm_sleep
(
100
);
}
if
(
!
ftdm_running
()
||
!
ftdm_test_flag
(
gsm_data
,
FTDM_GSM_SPAN_STARTED
))
{
goto
done
;
}
}
if
(
wat_span_start
(
span
->
span_id
))
{
ftdm_log
(
FTDM_LOG_ERROR
,
"Failed to start span %s!
\n
"
,
span
->
name
);
goto
done
;
...
...
@@ -1264,14 +1271,16 @@ static void *ftdm_gsm_run(ftdm_thread_t *me, void *obj)
/* check if this channel has a state change pending and process it if needed */
ftdm_channel_lock
(
gsm_data
->
bchan
);
ftdm_channel_advance_states
(
gsm_data
->
bchan
);
if
(
FTDM_SUCCESS
==
status
&&
(
flags
&
FTDM_READ
))
{
int
n
=
0
;
n
=
read_channel
(
gsm_data
->
dchan
,
buffer
,
sizeof
(
buffer
)
-
1
);
if
(
n
>
0
)
{
wat_span_process_read
(
span
->
span_id
,
buffer
,
n
);
bufsize
=
sizeof
(
buffer
)
;
status
=
ftdm_channel_read
(
gsm_data
->
dchan
,
buffer
,
&
bufsize
);
if
(
status
==
FTDM_SUCCESS
&&
bufsize
>
0
)
{
wat_span_process_read
(
span
->
span_id
,
buffer
,
bufsize
);
buffer
[
0
]
=
0
;
}
}
ftdm_channel_advance_states
(
gsm_data
->
bchan
);
ftdm_channel_unlock
(
gsm_data
->
bchan
);
...
...
libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c
浏览文件 @
c8a9c070
...
...
@@ -1394,13 +1394,11 @@ static FIO_GET_ALARMS_FUNCTION(wanpipe_get_alarms)
}
if
(
!
ftdmchan
->
alarm_flags
)
{
if
(
FTDM_IS_DIGITAL_CHANNEL
(
ftdmchan
))
{
ftdm_channel_hw_link_status_t
sangoma_status
=
0
;
/* there is a bug in wanpipe where alarms were not properly set when they should be
* on at application startup, until that is fixed we check the link status here too */
ftdm_channel_command
(
ftdmchan
,
FTDM_COMMAND_GET_LINK_STATUS
,
&
sangoma_status
);
ftdmchan
->
alarm_flags
=
sangoma_status
==
FTDM_HW_LINK_DISCONNECTED
?
FTDM_ALARM_RED
:
FTDM_ALARM_NONE
;
}
/* there is a bug in wanpipe where alarms were not properly set when they should be
* on at application startup, until that is fixed we check the link status here too */
ftdm_channel_hw_link_status_t
sangoma_status
=
0
;
ftdm_channel_command
(
ftdmchan
,
FTDM_COMMAND_GET_LINK_STATUS
,
&
sangoma_status
);
ftdmchan
->
alarm_flags
=
sangoma_status
==
FTDM_HW_LINK_DISCONNECTED
?
FTDM_ALARM_RED
:
FTDM_ALARM_NONE
;
}
if
(
alarms
)
{
...
...
@@ -1425,33 +1423,33 @@ static __inline__ ftdm_status_t wanpipe_channel_process_event(ftdm_channel_t *fc
case
WP_API_EVENT_LINK_STATUS
:
{
if
(
FTDM_IS_DIGITAL_CHANNEL
(
fchan
))
{
switch
(
tdm_api
->
wp_tdm_cmd
.
event
.
wp_tdm_api_event_link_status
)
{
case
WP_TDMAPI_EVENT_LINK_STATUS_CONNECTED
:
/* *event_id = FTDM_OOB_ALARM_CLEAR; */
ftdm_log_chan_msg
(
fchan
,
FTDM_LOG_DEBUG
,
"Ignoring wanpipe link connected event
\n
"
);
break
;
default
:
/* *event_id = FTDM_OOB_ALARM_TRAP; */
ftdm_log_chan_msg
(
fchan
,
FTDM_LOG_DEBUG
,
"Ignoring wanpipe link disconnected event
\n
"
);
break
;
};
/* The WP_API_EVENT_ALARM event should be used to clear alarms */
*
event_id
=
FTDM_OOB_NOOP
;
}
else
{
switch
(
tdm_api
->
wp_tdm_cmd
.
event
.
wp_tdm_api_event_link_status
)
{
case
WP_TDMAPI_EVENT_LINK_STATUS_CONNECTED
:
/* *event_id = FTDM_OOB_ALARM_CLEAR; */
ftdm_log_chan_msg
(
fchan
,
FTDM_LOG_DEBUG
,
"Using analog link connected event as alarm clear
\n
"
);
*
event_id
=
FTDM_OOB_ALARM_CLEAR
;
fchan
->
alarm_flags
=
FTDM_ALARM_NONE
;
break
;
default
:
/* *event_id = FTDM_OOB_ALARM_TRAP; */
ftdm_log_chan_msg
(
fchan
,
FTDM_LOG_DEBUG
,
"Using analog link disconnected event as alarm trap
\n
"
);
*
event_id
=
FTDM_OOB_ALARM_TRAP
;
fchan
->
alarm_flags
=
FTDM_ALARM_RED
;
break
;
};
switch
(
tdm_api
->
wp_tdm_cmd
.
event
.
wp_tdm_api_event_link_status
)
{
case
WP_TDMAPI_EVENT_LINK_STATUS_CONNECTED
:
/* *event_id = FTDM_OOB_ALARM_CLEAR; */
ftdm_log_chan_msg
(
fchan
,
FTDM_LOG_DEBUG
,
"Ignoring wanpipe link connected event
\n
"
);
break
;
default
:
/* *event_id = FTDM_OOB_ALARM_TRAP; */
ftdm_log_chan_msg
(
fchan
,
FTDM_LOG_DEBUG
,
"Ignoring wanpipe link disconnected event
\n
"
);
break
;
}
/* The WP_API_EVENT_ALARM event should be used to clear alarms */
*
event_id
=
FTDM_OOB_NOOP
;
}
else
{
switch
(
tdm_api
->
wp_tdm_cmd
.
event
.
wp_tdm_api_event_link_status
)
{
case
WP_TDMAPI_EVENT_LINK_STATUS_CONNECTED
:
/* *event_id = FTDM_OOB_ALARM_CLEAR; */
ftdm_log_chan_msg
(
fchan
,
FTDM_LOG_DEBUG
,
"Using analog link connected event as alarm clear
\n
"
);
*
event_id
=
FTDM_OOB_ALARM_CLEAR
;
fchan
->
alarm_flags
=
FTDM_ALARM_NONE
;
break
;
default
:
/* *event_id = FTDM_OOB_ALARM_TRAP; */
ftdm_log_chan_msg
(
fchan
,
FTDM_LOG_DEBUG
,
"Using analog link disconnected event as alarm trap
\n
"
);
*
event_id
=
FTDM_OOB_ALARM_TRAP
;
fchan
->
alarm_flags
=
FTDM_ALARM_RED
;
break
;
}
}
}
break
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论