Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
56db4861
提交
56db4861
authored
4月 23, 2010
作者:
Moises Silva
提交者:
Moises Silva
4月 28, 2010
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
freetdm: hangup the chan call when the core fails to create the session
上级
554e4333
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
45 行增加
和
24 行删除
+45
-24
mod_freetdm.c
libs/freetdm/mod_freetdm/mod_freetdm.c
+5
-5
ftdm_io.c
libs/freetdm/src/ftdm_io.c
+23
-4
ftmod_sangoma_boost.c
...eetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c
+7
-9
sangoma_boost_client.c
...etdm/src/ftmod/ftmod_sangoma_boost/sangoma_boost_client.c
+5
-5
sangoma_boost_client.h
...etdm/src/ftmod/ftmod_sangoma_boost/sangoma_boost_client.h
+4
-0
freetdm.h
libs/freetdm/src/include/freetdm.h
+0
-1
ftdm_core.h
libs/freetdm/src/include/private/ftdm_core.h
+1
-0
没有找到文件。
libs/freetdm/mod_freetdm/mod_freetdm.c
浏览文件 @
56db4861
...
@@ -1324,7 +1324,7 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
...
@@ -1324,7 +1324,7 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
if
(
ftdm_channel_add_token
(
ftdmchan
,
switch_core_session_get_uuid
(
*
new_session
),
ftdm_channel_get_token_count
(
ftdmchan
))
!=
FTDM_SUCCESS
)
{
if
(
ftdm_channel_add_token
(
ftdmchan
,
switch_core_session_get_uuid
(
*
new_session
),
ftdm_channel_get_token_count
(
ftdmchan
))
!=
FTDM_SUCCESS
)
{
switch_core_session_destroy
(
new_session
);
switch_core_session_destroy
(
new_session
);
cause
=
SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER
;
cause
=
SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER
;
goto
fail
;
goto
fail
;
}
}
...
@@ -1337,8 +1337,8 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
...
@@ -1337,8 +1337,8 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
switch_core_codec_destroy
(
&
tech_pvt
->
write_codec
);
switch_core_codec_destroy
(
&
tech_pvt
->
write_codec
);
}
}
switch_core_session_destroy
(
new_session
);
switch_core_session_destroy
(
new_session
);
cause
=
SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER
;
cause
=
SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER
;
goto
fail
;
goto
fail
;
}
}
ftdm_channel_init
(
ftdmchan
);
ftdm_channel_init
(
ftdmchan
);
...
@@ -1346,10 +1346,10 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
...
@@ -1346,10 +1346,10 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
return
SWITCH_CAUSE_SUCCESS
;
return
SWITCH_CAUSE_SUCCESS
;
}
}
fail:
fail:
if
(
ftdmchan
)
{
if
(
ftdmchan
)
{
ftdm_channel_
done
(
ftdmchan
);
ftdm_channel_
call_hangup_with_cause
(
ftdmchan
,
FTDM_CAUSE_SWITCH_CONGESTION
);
}
}
return
cause
;
return
cause
;
...
...
libs/freetdm/src/ftdm_io.c
浏览文件 @
56db4861
...
@@ -1428,8 +1428,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_open_by_span(uint32_t span_id, ftdm_direc
...
@@ -1428,8 +1428,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_open_by_span(uint32_t span_id, ftdm_direc
ftdm_span_channel_use_count
(
span
,
&
count
);
ftdm_span_channel_use_count
(
span
,
&
count
);
if
(
count
>=
span
->
chan_count
)
{
if
(
count
>=
span
->
chan_count
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"All circuits are busy: active=%i max=%i.
\n
"
,
ftdm_log
(
FTDM_LOG_ERROR
,
"All circuits are busy: active=%i max=%i.
\n
"
,
count
,
span
->
chan_count
);
count
,
span
->
chan_count
);
*
ftdmchan
=
NULL
;
*
ftdmchan
=
NULL
;
return
FTDM_FAIL
;
return
FTDM_FAIL
;
}
}
...
@@ -1808,16 +1807,36 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_call_answer(ftdm_channel_t *ftdmchan)
...
@@ -1808,16 +1807,36 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_call_answer(ftdm_channel_t *ftdmchan)
return
FTDM_SUCCESS
;
return
FTDM_SUCCESS
;
}
}
static
ftdm_status_t
call_hangup
(
ftdm_channel_t
*
chan
)
{
if
(
chan
->
state
!=
FTDM_CHANNEL_STATE_DOWN
)
{
ftdm_set_state_wait
(
chan
,
FTDM_CHANNEL_STATE_HANGUP
);
}
else
{
/* the signaling stack did not touch the state,
* core is responsible from clearing flags and stuff */
ftdm_channel_done
(
chan
);
}
return
FTDM_SUCCESS
;
}
FT_DECLARE
(
ftdm_status_t
)
ftdm_channel_call_hangup_with_cause
(
ftdm_channel_t
*
ftdmchan
,
ftdm_call_cause_t
cause
)
FT_DECLARE
(
ftdm_status_t
)
ftdm_channel_call_hangup_with_cause
(
ftdm_channel_t
*
ftdmchan
,
ftdm_call_cause_t
cause
)
{
{
ftdm_channel_lock
(
ftdmchan
);
ftdmchan
->
caller_data
.
hangup_cause
=
cause
;
ftdmchan
->
caller_data
.
hangup_cause
=
cause
;
ftdm_set_state_locked_wait
(
ftdmchan
,
FTDM_CHANNEL_STATE_HANGUP
);
call_hangup
(
ftdmchan
);
ftdm_channel_unlock
(
ftdmchan
);
return
FTDM_SUCCESS
;
return
FTDM_SUCCESS
;
}
}
FT_DECLARE
(
ftdm_status_t
)
ftdm_channel_call_hangup
(
ftdm_channel_t
*
ftdmchan
)
FT_DECLARE
(
ftdm_status_t
)
ftdm_channel_call_hangup
(
ftdm_channel_t
*
ftdmchan
)
{
{
ftdm_set_state_locked_wait
(
ftdmchan
,
FTDM_CHANNEL_STATE_HANGUP
);
ftdm_channel_lock
(
ftdmchan
);
call_hangup
(
ftdmchan
);
ftdm_channel_unlock
(
ftdmchan
);
return
FTDM_SUCCESS
;
return
FTDM_SUCCESS
;
}
}
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c
浏览文件 @
56db4861
...
@@ -69,9 +69,6 @@ static ftdm_status_t ftdm_sangoma_boost_list_sigmods(ftdm_stream_handle_t *strea
...
@@ -69,9 +69,6 @@ static ftdm_status_t ftdm_sangoma_boost_list_sigmods(ftdm_stream_handle_t *strea
#define BOOST_SPAN(ftdmchan) ((ftdm_sangoma_boost_data_t*)(ftdmchan)->span->signal_data)->sigmod ? ftdmchan->physical_span_id : ftdmchan->physical_span_id-1
#define BOOST_SPAN(ftdmchan) ((ftdm_sangoma_boost_data_t*)(ftdmchan)->span->signal_data)->sigmod ? ftdmchan->physical_span_id : ftdmchan->physical_span_id-1
#define BOOST_CHAN(ftdmchan) ((ftdm_sangoma_boost_data_t*)(ftdmchan)->span->signal_data)->sigmod ? ftdmchan->physical_chan_id : ftdmchan->physical_chan_id-1
#define BOOST_CHAN(ftdmchan) ((ftdm_sangoma_boost_data_t*)(ftdmchan)->span->signal_data)->sigmod ? ftdmchan->physical_chan_id : ftdmchan->physical_chan_id-1
#define BOOST_EVENT_SPAN(sigmod, event) ((sigmod)? event->span:event->span+1)
#define BOOST_EVENT_CHAN(sigmod, event) ((sigmod)? event->chan:event->chan+1)
/**
/**
* \brief SANGOMA boost notification flag
* \brief SANGOMA boost notification flag
*/
*/
...
@@ -957,7 +954,8 @@ static void handle_call_answer(ftdm_span_t *span, sangomabc_connection_t *mcon,
...
@@ -957,7 +954,8 @@ static void handle_call_answer(ftdm_span_t *span, sangomabc_connection_t *mcon,
/* NC: Do nothing here because we are in process
/* NC: Do nothing here because we are in process
of stopping the call. So ignore the ANSWER. */
of stopping the call. So ignore the ANSWER. */
ftdm_log
(
FTDM_LOG_CRIT
,
"ANSWER BUT CALL IS HANGUP %d:%d
\n
"
,
event
->
span
+
1
,
event
->
chan
+
1
);
ftdm_log
(
FTDM_LOG_DEBUG
,
"ANSWER BUT CALL IS HANGUP %d:%d
\n
"
,
BOOST_EVENT_SPAN
(
mcon
->
sigmod
,
event
),
BOOST_EVENT_CHAN
(
mcon
->
sigmod
,
event
));
}
else
if
(
ftdmchan
->
state
==
FTDM_CHANNEL_STATE_HOLD
)
{
}
else
if
(
ftdmchan
->
state
==
FTDM_CHANNEL_STATE_HOLD
)
{
ftdmchan
->
init_state
=
FTDM_CHANNEL_STATE_UP
;
ftdmchan
->
init_state
=
FTDM_CHANNEL_STATE_UP
;
...
@@ -968,7 +966,7 @@ static void handle_call_answer(ftdm_span_t *span, sangomabc_connection_t *mcon,
...
@@ -968,7 +966,7 @@ static void handle_call_answer(ftdm_span_t *span, sangomabc_connection_t *mcon,
}
}
ftdm_mutex_unlock
(
ftdmchan
->
mutex
);
ftdm_mutex_unlock
(
ftdmchan
->
mutex
);
}
else
{
}
else
{
ftdm_log
(
FTDM_LOG_CRIT
,
"ANSWER CANT FIND A CHAN %d:%d
\n
"
,
BOOST_EVENT_SPAN
(
mcon
,
event
),
BOOST_EVENT_CHAN
(
mcon
,
event
));
ftdm_log
(
FTDM_LOG_CRIT
,
"ANSWER CANT FIND A CHAN %d:%d
\n
"
,
BOOST_EVENT_SPAN
(
mcon
->
sigmod
,
event
),
BOOST_EVENT_CHAN
(
mcon
->
sigmod
,
event
));
sangomabc_exec_command
(
mcon
,
sangomabc_exec_command
(
mcon
,
event
->
span
,
event
->
span
,
event
->
chan
,
event
->
chan
,
...
@@ -1234,7 +1232,7 @@ static ftdm_channel_t* event_process_states(ftdm_span_t *span, sangomabc_short_e
...
@@ -1234,7 +1232,7 @@ static ftdm_channel_t* event_process_states(ftdm_span_t *span, sangomabc_short_e
case
SIGBOOST_EVENT_CALL_RELEASED
:
case
SIGBOOST_EVENT_CALL_RELEASED
:
if
(
!
(
ftdmchan
=
find_ftdmchan
(
span
,
(
sangomabc_short_event_t
*
)
event
,
1
)))
{
if
(
!
(
ftdmchan
=
find_ftdmchan
(
span
,
(
sangomabc_short_event_t
*
)
event
,
1
)))
{
ftdm_log
(
FTDM_LOG_DEBUG
,
"PROCESS STATES CANT FIND CHAN %d:%d
\n
"
,
ftdm_log
(
FTDM_LOG_DEBUG
,
"PROCESS STATES CANT FIND CHAN %d:%d
\n
"
,
BOOST_EVENT_SPAN
(((
ftdm_sangoma_boost_data_t
*
)(
span
->
signal_data
))
->
sigmod
,
event
),
BOOST_EVENT_SPAN
(((
ftdm_sangoma_boost_data_t
*
)(
span
->
signal_data
))
->
sigmod
,
event
),
BOOST_EVENT_CHAN
(((
ftdm_sangoma_boost_data_t
*
)(
span
->
signal_data
))
->
sigmod
,
event
));
BOOST_EVENT_CHAN
(((
ftdm_sangoma_boost_data_t
*
)(
span
->
signal_data
))
->
sigmod
,
event
));
return
NULL
;
return
NULL
;
}
}
...
@@ -1733,7 +1731,7 @@ static ftdm_status_t ftdm_boost_connection_open(ftdm_span_t *span)
...
@@ -1733,7 +1731,7 @@ static ftdm_status_t ftdm_boost_connection_open(ftdm_span_t *span)
++
sangoma_boost_data
->
pcon
.
cfg
.
remote_port
)
<
0
)
{
++
sangoma_boost_data
->
pcon
.
cfg
.
remote_port
)
<
0
)
{
ftdm_log
(
FTDM_LOG_ERROR
,
"Error: Opening PCON Socket [%d] %s
\n
"
,
sangoma_boost_data
->
pcon
.
socket
,
strerror
(
errno
));
ftdm_log
(
FTDM_LOG_ERROR
,
"Error: Opening PCON Socket [%d] %s
\n
"
,
sangoma_boost_data
->
pcon
.
socket
,
strerror
(
errno
));
return
FTDM_FAIL
;
return
FTDM_FAIL
;
}
}
/* try to create the boost sockets interrupt objects */
/* try to create the boost sockets interrupt objects */
if
(
ftdm_interrupt_create
(
&
sangoma_boost_data
->
pcon
.
sock_interrupt
,
sangoma_boost_data
->
pcon
.
socket
)
!=
FTDM_SUCCESS
)
{
if
(
ftdm_interrupt_create
(
&
sangoma_boost_data
->
pcon
.
sock_interrupt
,
sangoma_boost_data
->
pcon
.
socket
)
!=
FTDM_SUCCESS
)
{
...
@@ -1924,7 +1922,7 @@ static void ftdm_cli_span_state_cmd(ftdm_span_t *span, char *state)
...
@@ -1924,7 +1922,7 @@ static void ftdm_cli_span_state_cmd(ftdm_span_t *span, char *state)
int
cnt
=
0
;
int
cnt
=
0
;
ftdm_channel_state_t
state_e
=
ftdm_str2ftdm_channel_state
(
state
);
ftdm_channel_state_t
state_e
=
ftdm_str2ftdm_channel_state
(
state
);
if
(
state_e
==
FTDM_CHANNEL_STATE_INVALID
)
{
if
(
state_e
==
FTDM_CHANNEL_STATE_INVALID
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"Checking for channels not in the INVALID state is probably not w
ah
t you want
\n
"
);
ftdm_log
(
FTDM_LOG_CRIT
,
"Checking for channels not in the INVALID state is probably not w
ha
t you want
\n
"
);
}
}
for
(
j
=
1
;
j
<=
span
->
chan_count
;
j
++
)
{
for
(
j
=
1
;
j
<=
span
->
chan_count
;
j
++
)
{
if
(
span
->
channels
[
j
]
->
state
!=
state_e
)
{
if
(
span
->
channels
[
j
]
->
state
!=
state_e
)
{
...
@@ -2187,7 +2185,7 @@ static ftdm_state_map_t boost_state_map = {
...
@@ -2187,7 +2185,7 @@ static ftdm_state_map_t boost_state_map = {
ZSM_UNACCEPTABLE
,
ZSM_UNACCEPTABLE
,
{
FTDM_CHANNEL_STATE_HOLD
,
FTDM_END
},
{
FTDM_CHANNEL_STATE_HOLD
,
FTDM_END
},
{
FTDM_CHANNEL_STATE_PROGRESS_MEDIA
,
FTDM_CHANNEL_STATE_PROGRESS
,
{
FTDM_CHANNEL_STATE_PROGRESS_MEDIA
,
FTDM_CHANNEL_STATE_PROGRESS
,
FTDM_CHANNEL_STATE_IDLE
,
FTDM_CHANNEL_STATE_TERMINATING
,
FTDM_CHANNEL_STATE_UP
,
FTDM_END
}
FTDM_CHANNEL_STATE_IDLE
,
FTDM_CHANNEL_STATE_TERMINATING
,
FTDM_CHANNEL_STATE_UP
,
FTDM_
CHANNEL_STATE_HANGUP
,
FTDM_
END
}
},
},
{
{
ZSD_OUTBOUND
,
ZSD_OUTBOUND
,
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_boost/sangoma_boost_client.c
浏览文件 @
56db4861
...
@@ -82,8 +82,8 @@ static void sangomabc_print_event_call(sangomabc_connection_t *mcon, sangomabc_e
...
@@ -82,8 +82,8 @@ static void sangomabc_print_event_call(sangomabc_connection_t *mcon, sangomabc_e
priority
?
"P"
:
"N"
,
priority
?
"P"
:
"N"
,
sangomabc_event_id_name
(
event
->
event_id
),
sangomabc_event_id_name
(
event
->
event_id
),
event
->
event_id
,
event
->
event_id
,
event
->
span
,
BOOST_EVENT_SPAN
(
mcon
->
sigmod
,
event
)
,
event
->
chan
,
BOOST_EVENT_CHAN
(
mcon
->
sigmod
,
event
)
,
event
->
call_setup_id
,
event
->
call_setup_id
,
event
->
fseqno
,
event
->
fseqno
,
strlen
(
event
->
calling_name
)
?
event
->
calling_name
:
"N/A"
,
strlen
(
event
->
calling_name
)
?
event
->
calling_name
:
"N/A"
,
...
@@ -101,8 +101,8 @@ static void sangomabc_print_event_short(sangomabc_connection_t *mcon, sangomabc_
...
@@ -101,8 +101,8 @@ static void sangomabc_print_event_short(sangomabc_connection_t *mcon, sangomabc_
priority
?
"P"
:
"N"
,
priority
?
"P"
:
"N"
,
sangomabc_event_id_name
(
event
->
event_id
),
sangomabc_event_id_name
(
event
->
event_id
),
event
->
event_id
,
event
->
event_id
,
event
->
span
,
BOOST_EVENT_SPAN
(
mcon
->
sigmod
,
event
),
event
->
chan
,
BOOST_EVENT_CHAN
(
mcon
->
sigmod
,
event
),
event
->
release_cause
,
event
->
release_cause
,
event
->
call_setup_id
,
event
->
call_setup_id
,
event
->
fseqno
);
event
->
fseqno
);
...
@@ -247,7 +247,7 @@ int sangomabc_exec_command(sangomabc_connection_t *mcon, int span, int chan, int
...
@@ -247,7 +247,7 @@ int sangomabc_exec_command(sangomabc_connection_t *mcon, int span, int chan, int
return
-
1
;
return
-
1
;
}
else
{
}
else
{
ftdm_log
(
FTDM_LOG_WARNING
,
"Failed to tx on boost socket: %s :retry %i
\n
"
,
strerror
(
errno
),
retry
);
ftdm_log
(
FTDM_LOG_WARNING
,
"Failed to tx on boost socket: %s :retry %i
\n
"
,
strerror
(
errno
),
retry
);
ftdm_sleep
(
1
);
ftdm_sleep
(
1
);
}
}
}
}
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_boost/sangoma_boost_client.h
浏览文件 @
56db4861
...
@@ -144,6 +144,10 @@ const char *sangomabc_event_id_name(uint32_t event_id);
...
@@ -144,6 +144,10 @@ const char *sangomabc_event_id_name(uint32_t event_id);
int
sangomabc_exec_command
(
sangomabc_connection_t
*
mcon
,
int
span
,
int
chan
,
int
id
,
int
cmd
,
int
cause
,
int
flags
);
int
sangomabc_exec_command
(
sangomabc_connection_t
*
mcon
,
int
span
,
int
chan
,
int
id
,
int
cmd
,
int
cause
,
int
flags
);
int
sangomabc_exec_commandp
(
sangomabc_connection_t
*
pcon
,
int
span
,
int
chan
,
int
id
,
int
cmd
,
int
cause
);
int
sangomabc_exec_commandp
(
sangomabc_connection_t
*
pcon
,
int
span
,
int
chan
,
int
id
,
int
cmd
,
int
cause
);
#define BOOST_EVENT_SPAN(sigmod, event) ((sigmod)? event->span:event->span+1)
#define BOOST_EVENT_CHAN(sigmod, event) ((sigmod)? event->chan:event->chan+1)
#endif
#endif
...
...
libs/freetdm/src/include/freetdm.h
浏览文件 @
56db4861
...
@@ -634,7 +634,6 @@ FT_DECLARE(ftdm_status_t) ftdm_conf_node_create(const char *name, ftdm_conf_node
...
@@ -634,7 +634,6 @@ FT_DECLARE(ftdm_status_t) ftdm_conf_node_create(const char *name, ftdm_conf_node
FT_DECLARE
(
ftdm_status_t
)
ftdm_conf_node_add_param
(
ftdm_conf_node_t
*
node
,
const
char
*
param
,
const
char
*
val
);
FT_DECLARE
(
ftdm_status_t
)
ftdm_conf_node_add_param
(
ftdm_conf_node_t
*
node
,
const
char
*
param
,
const
char
*
val
);
FT_DECLARE
(
ftdm_status_t
)
ftdm_conf_node_destroy
(
ftdm_conf_node_t
*
node
);
FT_DECLARE
(
ftdm_status_t
)
ftdm_conf_node_destroy
(
ftdm_conf_node_t
*
node
);
FT_DECLARE
(
ftdm_status_t
)
ftdm_configure_span_channels
(
ftdm_span_t
*
span
,
const
char
*
str
,
ftdm_channel_config_t
*
chan_config
,
unsigned
*
configured
);
FT_DECLARE
(
ftdm_status_t
)
ftdm_configure_span_channels
(
ftdm_span_t
*
span
,
const
char
*
str
,
ftdm_channel_config_t
*
chan_config
,
unsigned
*
configured
);
FT_DECLARE
(
ftdm_status_t
)
ftdm_channel_done
(
ftdm_channel_t
*
ftdmchan
);
FT_DECLARE
(
ftdm_channel_t
*
)
ftdm_span_get_channel
(
const
ftdm_span_t
*
span
,
uint32_t
chanid
);
FT_DECLARE
(
ftdm_channel_t
*
)
ftdm_span_get_channel
(
const
ftdm_span_t
*
span
,
uint32_t
chanid
);
FT_DECLARE
(
uint32_t
)
ftdm_span_get_chan_count
(
const
ftdm_span_t
*
span
);
FT_DECLARE
(
uint32_t
)
ftdm_span_get_chan_count
(
const
ftdm_span_t
*
span
);
...
...
libs/freetdm/src/include/private/ftdm_core.h
浏览文件 @
56db4861
...
@@ -559,6 +559,7 @@ FT_DECLARE(char *) ftdm_build_dso_path(const char *name, char *path, ftdm_size_t
...
@@ -559,6 +559,7 @@ FT_DECLARE(char *) ftdm_build_dso_path(const char *name, char *path, ftdm_size_t
FT_DECLARE
(
int
)
ftdm_load_module
(
const
char
*
name
);
FT_DECLARE
(
int
)
ftdm_load_module
(
const
char
*
name
);
FT_DECLARE
(
int
)
ftdm_load_module_assume
(
const
char
*
name
);
FT_DECLARE
(
int
)
ftdm_load_module_assume
(
const
char
*
name
);
FT_DECLARE
(
int
)
ftdm_vasprintf
(
char
**
ret
,
const
char
*
fmt
,
va_list
ap
);
FT_DECLARE
(
int
)
ftdm_vasprintf
(
char
**
ret
,
const
char
*
fmt
,
va_list
ap
);
FT_DECLARE
(
ftdm_status_t
)
ftdm_channel_done
(
ftdm_channel_t
*
ftdmchan
);
FIO_CODEC_FUNCTION
(
fio_slin2ulaw
);
FIO_CODEC_FUNCTION
(
fio_slin2ulaw
);
FIO_CODEC_FUNCTION
(
fio_ulaw2slin
);
FIO_CODEC_FUNCTION
(
fio_ulaw2slin
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论