Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
6ea5f03b
提交
6ea5f03b
authored
2月 15, 2011
作者:
Moises Silva
浏览文件
操作
浏览文件
下载
差异文件
Merge remote branch 'smgfs/master'
上级
017842c8
11cc6f95
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
66 行增加
和
214 行删除
+66
-214
mod_freetdm.c
libs/freetdm/mod_freetdm/mod_freetdm.c
+7
-13
ftdm_io.c
libs/freetdm/src/ftdm_io.c
+3
-119
ftmod_r2.c
libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c
+12
-16
ftmod_sangoma_isdn.c
...freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
+1
-5
ftmod_sangoma_ss7_cli.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
+2
-2
ftmod_sangoma_ss7_out.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c
+18
-18
ftmod_sangoma_ss7_xml.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
+1
-1
freetdm.h
libs/freetdm/src/include/freetdm.h
+1
-39
ftdm_core.h
libs/freetdm/src/include/private/ftdm_core.h
+21
-1
没有找到文件。
libs/freetdm/mod_freetdm/mod_freetdm.c
浏览文件 @
6ea5f03b
...
...
@@ -1552,6 +1552,8 @@ ftdm_status_t ftdm_channel_from_event(ftdm_sigmsg_t *sigmsg, switch_core_session
switch_channel_set_variable_printf
(
channel
,
"freetdm_chan_number"
,
"%d"
,
chanid
);
switch_channel_set_variable_printf
(
channel
,
"freetdm_bearer_capability"
,
"%d"
,
channel_caller_data
->
bearer_capability
);
switch_channel_set_variable_printf
(
channel
,
"freetdm_bearer_layer1"
,
"%d"
,
channel_caller_data
->
bearer_layer1
);
switch_channel_set_variable_printf
(
channel
,
"freetdm_screening_ind"
,
ftdm_screening2str
(
channel_caller_data
->
screen
));
switch_channel_set_variable_printf
(
channel
,
"freetdm_presentation_ind"
,
ftdm_presentation2str
(
channel_caller_data
->
pres
));
if
(
globals
.
sip_headers
)
{
switch_channel_set_variable
(
channel
,
"sip_h_X-FreeTDM-SpanName"
,
ftdm_channel_get_span_name
(
sigmsg
->
channel
));
...
...
@@ -1580,21 +1582,13 @@ ftdm_status_t ftdm_channel_from_event(ftdm_sigmsg_t *sigmsg, switch_core_session
if
(
channel_caller_data
->
raw_data_len
)
{
switch_channel_set_variable_printf
(
channel
,
"freetdm_custom_call_data"
,
"%s"
,
channel_caller_data
->
raw_data
);
}
/* Add any channel variable to the dial plan */
iter
=
ftdm_channel_get_var_iterator
(
sigmsg
->
channel
,
NULL
);
for
(
curr
=
iter
;
curr
;
curr
=
ftdm_iterator_next
(
curr
))
{
ftdm_channel_get_current_var
(
curr
,
&
var_name
,
&
var_value
);
snprintf
(
name
,
sizeof
(
name
),
FREETDM_VAR_PREFIX
"%s"
,
var_name
);
switch_channel_set_variable_printf
(
channel
,
name
,
"%s"
,
var_value
);
}
/* Add any call variable to the dial plan */
iter
=
ftdm_call_get_var_iterator
(
channel_caller_data
,
iter
);
for
(
curr
=
iter
;
curr
;
curr
=
ftdm_iterator_next
(
curr
))
{
ftdm_call_get_current_var
(
curr
,
&
var_name
,
&
var_value
);
snprintf
(
name
,
sizeof
(
name
),
FREETDM_VAR_PREFIX
"%s"
,
var_name
);
switch_channel_set_variable_printf
(
channel
,
name
,
"%s"
,
var_value
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Call Variable: %s
=
%s
\n
"
,
name
,
var_value
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_DEBUG
,
"Call Variable: %s
=
%s
\n
"
,
name
,
var_value
);
}
ftdm_iterator_free
(
iter
);
...
...
@@ -2149,8 +2143,6 @@ static FIO_SIGNAL_CB_FUNCTION(on_clear_channel_signal)
switch
(
sigmsg
->
event_id
)
{
case
FTDM_SIGEVENT_START
:
{
ftdm_call_add_var
(
caller_data
,
"screening_ind"
,
ftdm_screening2str
(
caller_data
->
screen
));
ftdm_call_add_var
(
caller_data
,
"presentation_ind"
,
ftdm_presentation2str
(
caller_data
->
pres
));
return
ftdm_channel_from_event
(
sigmsg
,
&
session
);
}
break
;
...
...
@@ -2698,7 +2690,7 @@ static switch_status_t load_config(void)
ftdm_conf_parameter_t
spanparameters
[
30
];
char
*
id
=
(
char
*
)
switch_xml_attr
(
myspan
,
"id"
);
char
*
name
=
(
char
*
)
switch_xml_attr
(
myspan
,
"name"
);
char
*
configname
=
(
char
*
)
switch_xml_attr
(
myspan
,
"c
onfig
"
);
char
*
configname
=
(
char
*
)
switch_xml_attr
(
myspan
,
"c
fgprofile
"
);
ftdm_span_t
*
span
=
NULL
;
uint32_t
span_id
=
0
;
unsigned
paramindex
=
0
;
...
...
@@ -4259,7 +4251,9 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_freetdm_load)
switch_console_set_complete
(
"add ftdm gains"
);
switch_console_set_complete
(
"add ftdm dtmf on"
);
switch_console_set_complete
(
"add ftdm dtmf off"
);
switch_console_set_complete
(
"add ftdm core state"
);
switch_console_set_complete
(
"add ftdm core flag"
);
switch_console_set_complete
(
"add ftdm core calls"
);
SWITCH_ADD_APP
(
app_interface
,
"disable_ec"
,
"Disable Echo Canceller"
,
"Disable Echo Canceller"
,
disable_ec_function
,
""
,
SAF_NONE
);
SWITCH_ADD_APP
(
app_interface
,
"disable_dtmf"
,
"Disable DTMF Detection"
,
"Disable DTMF Detection"
,
disable_dtmf_function
,
""
,
SAF_NONE
);
...
...
libs/freetdm/src/ftdm_io.c
浏览文件 @
6ea5f03b
...
...
@@ -65,7 +65,6 @@ ftdm_time_t time_current_throttle_log = 0;
static
ftdm_iterator_t
*
get_iterator
(
ftdm_iterator_type_t
type
,
ftdm_iterator_t
*
iter
);
static
ftdm_status_t
ftdm_call_set_call_id
(
ftdm_channel_t
*
fchan
,
ftdm_caller_data_t
*
caller_data
);
static
ftdm_status_t
ftdm_call_clear_call_id
(
ftdm_caller_data_t
*
caller_data
);
static
ftdm_status_t
ftdm_channel_clear_vars
(
ftdm_channel_t
*
ftdmchan
);
static
ftdm_status_t
ftdm_channel_done
(
ftdm_channel_t
*
ftdmchan
);
static
int
time_is_init
=
0
;
...
...
@@ -2633,7 +2632,6 @@ static ftdm_status_t ftdm_channel_done(ftdm_channel_t *ftdmchan)
ftdm_buffer_destroy
(
&
ftdmchan
->
pre_buffer
);
ftdmchan
->
pre_buffer_size
=
0
;
ftdm_mutex_unlock
(
ftdmchan
->
pre_buffer_mutex
);
ftdm_channel_clear_vars
(
ftdmchan
);
if
(
ftdmchan
->
hangup_timer
)
{
ftdm_sched_cancel_timer
(
globals
.
timingsched
,
ftdmchan
->
hangup_timer
);
}
...
...
@@ -4033,20 +4031,13 @@ done:
}
FT_DECLARE
(
void
)
ftdm_call_clear_data
(
ftdm_caller_data_t
*
caller_data
)
{
ftdm_call_clear_vars
(
caller_data
);
memset
(
&
caller_data
->
raw_data
,
0
,
sizeof
(
caller_data
->
raw_data
));
caller_data
->
raw_data_len
=
0
;
return
;
}
FT_DECLARE
(
ftdm_status_t
)
ftdm_call_clear_vars
(
ftdm_caller_data_t
*
caller_data
)
{
if
(
caller_data
->
variables
)
{
hashtable_destroy
(
caller_data
->
variables
);
}
caller_data
->
variables
=
NULL
;
return
FTDM_SUCCESS
;
memset
(
&
caller_data
->
raw_data
,
0
,
sizeof
(
caller_data
->
raw_data
));
caller_data
->
raw_data_len
=
0
;
}
FT_DECLARE
(
ftdm_status_t
)
ftdm_call_remove_var
(
ftdm_caller_data_t
*
caller_data
,
const
char
*
var_name
)
...
...
@@ -4058,7 +4049,6 @@ FT_DECLARE(ftdm_status_t) ftdm_call_remove_var(ftdm_caller_data_t *caller_data,
return
FTDM_SUCCESS
;
}
FT_DECLARE
(
ftdm_status_t
)
ftdm_call_add_var
(
ftdm_caller_data_t
*
caller_data
,
const
char
*
var_name
,
const
char
*
value
)
{
char
*
t_name
=
0
,
*
t_val
=
0
;
...
...
@@ -4125,72 +4115,6 @@ FT_DECLARE(ftdm_status_t) ftdm_call_get_current_var(ftdm_iterator_t *iter, const
return
FTDM_SUCCESS
;
}
static
ftdm_status_t
ftdm_channel_clear_vars
(
ftdm_channel_t
*
ftdmchan
)
{
ftdm_channel_lock
(
ftdmchan
);
if
(
ftdmchan
->
variable_hash
)
{
hashtable_destroy
(
ftdmchan
->
variable_hash
);
}
ftdmchan
->
variable_hash
=
NULL
;
ftdm_channel_unlock
(
ftdmchan
);
return
FTDM_SUCCESS
;
}
FT_DECLARE
(
ftdm_status_t
)
ftdm_channel_add_var
(
ftdm_channel_t
*
ftdmchan
,
const
char
*
var_name
,
const
char
*
value
)
{
char
*
t_name
=
0
,
*
t_val
=
0
;
ftdm_status_t
status
=
FTDM_FAIL
;
if
(
!
var_name
||
!
value
)
{
return
FTDM_FAIL
;
}
ftdm_channel_lock
(
ftdmchan
);
if
(
!
ftdmchan
->
variable_hash
)
{
/* initialize on first use */
ftdmchan
->
variable_hash
=
create_hashtable
(
16
,
ftdm_hash_hashfromstring
,
ftdm_hash_equalkeys
);
if
(
!
ftdmchan
->
variable_hash
)
{
goto
done
;
}
}
t_name
=
ftdm_strdup
(
var_name
);
t_val
=
ftdm_strdup
(
value
);
hashtable_insert
(
ftdmchan
->
variable_hash
,
t_name
,
t_val
,
HASHTABLE_FLAG_FREE_KEY
|
HASHTABLE_FLAG_FREE_VALUE
);
status
=
FTDM_SUCCESS
;
done
:
ftdm_channel_unlock
(
ftdmchan
);
return
status
;
}
FT_DECLARE
(
const
char
*
)
ftdm_channel_get_var
(
ftdm_channel_t
*
ftdmchan
,
const
char
*
var_name
)
{
const
char
*
var
=
NULL
;
ftdm_channel_lock
(
ftdmchan
);
if
(
!
ftdmchan
->
variable_hash
||
!
var_name
)
{
goto
done
;
}
var
=
(
const
char
*
)
hashtable_search
(
ftdmchan
->
variable_hash
,
(
void
*
)
var_name
);
done
:
ftdm_channel_unlock
(
ftdmchan
);
return
var
;
}
static
ftdm_iterator_t
*
get_iterator
(
ftdm_iterator_type_t
type
,
ftdm_iterator_t
*
iter
)
{
int
allocated
=
0
;
...
...
@@ -4215,25 +4139,6 @@ static ftdm_iterator_t *get_iterator(ftdm_iterator_type_t type, ftdm_iterator_t
return
iter
;
}
FT_DECLARE
(
ftdm_iterator_t
*
)
ftdm_channel_get_var_iterator
(
const
ftdm_channel_t
*
ftdmchan
,
ftdm_iterator_t
*
iter
)
{
ftdm_hash_iterator_t
*
hashiter
=
NULL
;
ftdm_channel_lock
(
ftdmchan
);
hashiter
=
ftdmchan
->
variable_hash
==
NULL
?
NULL
:
hashtable_first
(
ftdmchan
->
variable_hash
);
ftdm_channel_unlock
(
ftdmchan
);
if
(
hashiter
==
NULL
)
{
return
NULL
;
}
if
(
!
(
iter
=
get_iterator
(
FTDM_ITERATOR_VARS
,
iter
)))
{
return
NULL
;
}
iter
->
pvt
.
hashiter
=
hashiter
;
return
iter
;
}
FT_DECLARE
(
ftdm_iterator_t
*
)
ftdm_span_get_chan_iterator
(
const
ftdm_span_t
*
span
,
ftdm_iterator_t
*
iter
)
{
if
(
!
(
iter
=
get_iterator
(
FTDM_ITERATOR_CHANS
,
iter
)))
{
...
...
@@ -4244,24 +4149,6 @@ FT_DECLARE(ftdm_iterator_t *) ftdm_span_get_chan_iterator(const ftdm_span_t *spa
return
iter
;
}
FT_DECLARE
(
ftdm_status_t
)
ftdm_channel_get_current_var
(
ftdm_iterator_t
*
iter
,
const
char
**
var_name
,
const
char
**
var_val
)
{
const
void
*
key
=
NULL
;
void
*
val
=
NULL
;
*
var_name
=
NULL
;
*
var_val
=
NULL
;
ftdm_assert_return
(
iter
&&
(
iter
->
type
==
FTDM_ITERATOR_VARS
)
&&
iter
->
pvt
.
hashiter
,
FTDM_FAIL
,
"Cannot get variable from invalid iterator!
\n
"
);
hashtable_this
(
iter
->
pvt
.
hashiter
,
&
key
,
NULL
,
&
val
);
*
var_name
=
key
;
*
var_val
=
val
;
return
FTDM_SUCCESS
;
}
FT_DECLARE
(
ftdm_iterator_t
*
)
ftdm_iterator_next
(
ftdm_iterator_t
*
iter
)
{
ftdm_assert_return
(
iter
&&
iter
->
type
,
NULL
,
"Invalid iterator
\n
"
);
...
...
@@ -5532,6 +5419,7 @@ FT_DECLARE(ftdm_status_t) ftdm_span_send_signal(ftdm_span_t *span, ftdm_sigmsg_t
sigmsg
->
chan_id
=
sigmsg
->
channel
->
chan_id
;
sigmsg
->
span_id
=
sigmsg
->
channel
->
span_id
;
sigmsg
->
call_id
=
sigmsg
->
channel
->
caller_data
.
call_id
;
sigmsg
->
call_priv
=
sigmsg
->
channel
->
caller_data
.
priv
;
}
/* some core things to do on special events */
...
...
@@ -5563,10 +5451,6 @@ FT_DECLARE(ftdm_status_t) ftdm_span_send_signal(ftdm_span_t *span, ftdm_sigmsg_t
}
ftdm_set_flag
(
sigmsg
->
channel
,
FTDM_CHANNEL_CALL_STARTED
);
ftdm_call_set_call_id
(
sigmsg
->
channel
,
&
sigmsg
->
channel
->
caller_data
);
if
(
sigmsg
->
channel
->
dtmfdbg
.
requested
)
{
ftdm_channel_command
(
sigmsg
->
channel
,
FTDM_COMMAND_ENABLE_DEBUG_DTMF
,
NULL
);
}
/* when cleaning up the public API I added this because mod_freetdm.c on_fxs_signal was
* doing it during SIGEVENT_START, but now that flags are private they can't, wonder if
* is needed at all?
...
...
libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c
浏览文件 @
6ea5f03b
...
...
@@ -676,12 +676,6 @@ static void ftdm_r2_on_call_offered(openr2_chan_t *r2chan, const char *ani, cons
ftdm_log_chan
(
ftdmchan
,
FTDM_LOG_NOTICE
,
"Call offered with ANI = %s, DNIS = %s, Category = %d, ANI restricted = %s
\n
"
,
ani
,
dnis
,
category
,
ani_restricted
?
"Yes"
:
"No"
);
/* nothing went wrong during call setup, MF has ended, we can and must disable the MF dump */
if
(
r2data
->
mf_dump_size
)
{
ftdm_channel_command
(
ftdmchan
,
FTDM_COMMAND_DISABLE_INPUT_DUMP
,
NULL
);
ftdm_channel_command
(
ftdmchan
,
FTDM_COMMAND_DISABLE_OUTPUT_DUMP
,
NULL
);
}
/* check if this is a collect call and if we should accept it */
if
(
!
r2data
->
allow_collect_calls
&&
category
==
OR2_CALLING_PARTY_CATEGORY_COLLECT_CALL
)
{
ftdm_log_chan_msg
(
ftdmchan
,
FTDM_LOG_NOTICE
,
"Rejecting collect call
\n
"
);
...
...
@@ -725,9 +719,10 @@ static void dump_mf(openr2_chan_t *r2chan)
if
(
r2data
->
mf_dump_size
)
{
char
*
logname
=
R2CALL
(
ftdmchan
)
->
logname
;
ftdm_log_chan
(
ftdmchan
,
FTDM_LOG_ERROR
,
"Dumping IO output in prefix %s
\n
"
,
logname
);
snprintf
(
dfile
,
sizeof
(
dfile
),
logname
?
"%s.s%dc%d.input.alaw"
:
"%s/s%dc%d.input.alaw"
,
logname
?
logname
:
r2data
->
logdir
,
ftdmchan
->
span_id
,
ftdmchan
->
chan_id
);
ftdm_log_chan
(
ftdmchan
,
FTDM_LOG_ERROR
,
"Dumping IO output in prefix %s
\n
"
,
!
ftdm_strlen_zero
(
logname
)
?
logname
:
r2data
->
logdir
);
snprintf
(
dfile
,
sizeof
(
dfile
),
!
ftdm_strlen_zero
(
logname
)
?
"%s.s%dc%d.input.alaw"
:
"%s/s%dc%d.input.alaw"
,
!
ftdm_strlen_zero
(
logname
)
?
logname
:
r2data
->
logdir
,
ftdmchan
->
span_id
,
ftdmchan
->
chan_id
);
f
=
fopen
(
dfile
,
"wb"
);
if
(
f
)
{
ftdm_log_chan
(
ftdmchan
,
FTDM_LOG_ERROR
,
"Dumping IO input in file %s
\n
"
,
dfile
);
...
...
@@ -737,8 +732,8 @@ static void dump_mf(openr2_chan_t *r2chan)
ftdm_log_chan
(
ftdmchan
,
FTDM_LOG_ERROR
,
"Could not dump IO input in file %s, error: %s"
,
dfile
,
strerror
(
errno
));
}
snprintf
(
dfile
,
sizeof
(
dfile
),
logname
?
"%s.s%dc%d.output.alaw"
:
"%s/s%dc%d.output.alaw"
,
logname
?
logname
:
r2data
->
logdir
,
ftdmchan
->
span_id
,
ftdmchan
->
chan_id
);
snprintf
(
dfile
,
sizeof
(
dfile
),
!
ftdm_strlen_zero
(
logname
)
?
"%s.s%dc%d.output.alaw"
:
"%s/s%dc%d.output.alaw"
,
!
ftdm_strlen_zero
(
logname
)
?
logname
:
r2data
->
logdir
,
ftdmchan
->
span_id
,
ftdmchan
->
chan_id
);
f
=
fopen
(
dfile
,
"wb"
);
if
(
f
)
{
ftdm_log_chan
(
ftdmchan
,
FTDM_LOG_ERROR
,
"Dumping IO output in file %s
\n
"
,
dfile
);
...
...
@@ -769,6 +764,12 @@ static void ftdm_r2_on_call_accepted(openr2_chan_t *r2chan, openr2_call_mode_t m
R2CALL
(
ftdmchan
)
->
accepted
=
1
;
/* nothing went wrong during call setup, MF has ended, we can and must disable the MF dump */
if
(
r2data
->
mf_dump_size
)
{
ftdm_channel_command
(
ftdmchan
,
FTDM_COMMAND_DISABLE_INPUT_DUMP
,
NULL
);
ftdm_channel_command
(
ftdmchan
,
FTDM_COMMAND_DISABLE_OUTPUT_DUMP
,
NULL
);
}
if
(
OR2_DIR_BACKWARD
==
openr2_chan_get_direction
(
r2chan
))
{
if
(
R2CALL
(
ftdmchan
)
->
answer_pending
)
{
ftdm_log_chan_msg
(
ftdmchan
,
FTDM_LOG_DEBUG
,
"Answer was pending, answering now.
\n
"
);
...
...
@@ -777,11 +778,6 @@ static void ftdm_r2_on_call_accepted(openr2_chan_t *r2chan, openr2_call_mode_t m
return
;
}
}
else
{
/* nothing went wrong during call setup, MF has ended, we can and must disable the MF dump */
if
(
r2data
->
mf_dump_size
)
{
ftdm_channel_command
(
ftdmchan
,
FTDM_COMMAND_DISABLE_INPUT_DUMP
,
NULL
);
ftdm_channel_command
(
ftdmchan
,
FTDM_COMMAND_DISABLE_OUTPUT_DUMP
,
NULL
);
}
ftdm_set_state
(
ftdmchan
,
FTDM_CHANNEL_STATE_PROGRESS_MEDIA
);
}
}
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
浏览文件 @
6ea5f03b
...
...
@@ -912,9 +912,6 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(ftdm_sangoma_isdn_outgoing_call)
sngisdn_chan_data_t
*
sngisdn_info
=
ftdmchan
->
call_data
;
ftdm_status_t
status
=
FTDM_FAIL
;
/* lock the channel while we check whether it is availble */
ftdm_channel_lock
(
ftdmchan
);
switch
(
ftdmchan
->
state
)
{
case
FTDM_CHANNEL_STATE_DOWN
:
...
...
@@ -939,10 +936,9 @@ static FIO_CHANNEL_OUTGOING_CALL_FUNCTION(ftdm_sangoma_isdn_outgoing_call)
ftdm_log_chan_msg
(
ftdmchan
,
FTDM_LOG_WARNING
,
"Outgoing call requested channel in already in use
\n
"
);
status
=
FTDM_BREAK
;
}
break
;
break
;
}
ftdm_channel_unlock
(
ftdmchan
);
return
status
;
}
static
FIO_CHANNEL_GET_SIG_STATUS_FUNCTION
(
ftdm_sangoma_isdn_get_chan_sig_status
)
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
浏览文件 @
6ea5f03b
...
...
@@ -680,8 +680,8 @@ static ftdm_status_t handle_print_usuage(ftdm_stream_handle_t *stream)
stream
->
write_function
(
stream
,
"ftdm ss7 set mtrace X Y
\n
"
);
stream
->
write_function
(
stream
,
"
\n
"
);
stream
->
write_function
(
stream
,
"Ftmod_sangoma_ss7 information:
\n
"
);
stream
->
write_function
(
stream
,
"ftdm ss7 show status
link
X
\n
"
);
stream
->
write_function
(
stream
,
"ftdm ss7 show status
linkset
X
\n
"
);
stream
->
write_function
(
stream
,
"ftdm ss7 show status
mtp3
X
\n
"
);
stream
->
write_function
(
stream
,
"ftdm ss7 show status
mtp2
X
\n
"
);
stream
->
write_function
(
stream
,
"ftdm ss7 show status span X chan Y
\n
"
);
stream
->
write_function
(
stream
,
"ftdm ss7 show free span X chan Y
\n
"
);
stream
->
write_function
(
stream
,
"ftdm ss7 show inuse span X chan Y
\n
"
);
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_out.c
浏览文件 @
6ea5f03b
...
...
@@ -299,7 +299,7 @@ void ft_to_sngss7_iam (ftdm_channel_t * ftdmchan)
ftdmchan
->
caller_data
.
dnis
.
digits
,
iam
.
cdPtyNum
.
natAddrInd
.
val
);
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -379,7 +379,7 @@ void ft_to_sngss7_acm (ftdm_channel_t * ftdmchan)
ADDRCMPLT
);
SS7_INFO_CHAN
(
ftdmchan
,
"[CIC:%d]Tx ACM
\n
"
,
sngss7_info
->
circuit
->
cic
);
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -403,7 +403,7 @@ void ft_to_sngss7_anm (ftdm_channel_t * ftdmchan)
5
);
SS7_INFO_CHAN
(
ftdmchan
,
"[CIC:%d]Tx ANM
\n
"
,
sngss7_info
->
circuit
->
cic
);
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -438,7 +438,7 @@ void ft_to_sngss7_rel (ftdm_channel_t * ftdmchan)
SS7_INFO_CHAN
(
ftdmchan
,
"[CIC:%d]Tx REL cause=%d
\n
"
,
sngss7_info
->
circuit
->
cic
,
ftdmchan
->
caller_data
.
hangup_cause
);
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -461,7 +461,7 @@ void ft_to_sngss7_rlc (ftdm_channel_t * ftdmchan)
&
rlc
);
SS7_INFO_CHAN
(
ftdmchan
,
"[CIC:%d]Tx RLC
\n
"
,
sngss7_info
->
circuit
->
cic
);
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -482,7 +482,7 @@ void ft_to_sngss7_rsc (ftdm_channel_t * ftdmchan)
NULL
);
SS7_INFO_CHAN
(
ftdmchan
,
"[CIC:%d]Tx RSC
\n
"
,
sngss7_info
->
circuit
->
cic
);
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -503,7 +503,7 @@ void ft_to_sngss7_rsca (ftdm_channel_t * ftdmchan)
NULL
);
SS7_INFO_CHAN
(
ftdmchan
,
"[CIC:%d]Tx RSC-RLC
\n
"
,
sngss7_info
->
circuit
->
cic
);
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -524,7 +524,7 @@ void ft_to_sngss7_blo (ftdm_channel_t * ftdmchan)
NULL
);
SS7_INFO_CHAN
(
ftdmchan
,
"[CIC:%d]Tx BLO
\n
"
,
sngss7_info
->
circuit
->
cic
);
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -545,7 +545,7 @@ void ft_to_sngss7_bla (ftdm_channel_t * ftdmchan)
NULL
);
SS7_INFO_CHAN
(
ftdmchan
,
"[CIC:%d]Tx BLA
\n
"
,
sngss7_info
->
circuit
->
cic
);
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -567,7 +567,7 @@ ft_to_sngss7_ubl (ftdm_channel_t * ftdmchan)
NULL
);
SS7_INFO_CHAN
(
ftdmchan
,
"[CIC:%d]Tx UBL
\n
"
,
sngss7_info
->
circuit
->
cic
);
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -588,7 +588,7 @@ void ft_to_sngss7_uba (ftdm_channel_t * ftdmchan)
NULL
);
SS7_INFO_CHAN
(
ftdmchan
,
"[CIC:%d]Tx UBA
\n
"
,
sngss7_info
->
circuit
->
cic
);
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -609,7 +609,7 @@ void ft_to_sngss7_lpa (ftdm_channel_t * ftdmchan)
NULL
);
SS7_INFO_CHAN
(
ftdmchan
,
"[CIC:%d]Tx LPA
\n
"
,
sngss7_info
->
circuit
->
cic
);
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -654,7 +654,7 @@ void ft_to_sngss7_gra (ftdm_channel_t * ftdmchan)
sngss7_info
->
circuit
->
cic
,
(
sngss7_info
->
circuit
->
cic
+
sngss7_span
->
rx_grs
.
range
));
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -688,7 +688,7 @@ void ft_to_sngss7_grs (ftdm_channel_t * ftdmchan)
sngss7_info
->
circuit
->
cic
,
(
sngss7_info
->
circuit
->
cic
+
sngss7_span
->
tx_grs
.
range
));
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -737,7 +737,7 @@ void ft_to_sngss7_cgba(ftdm_channel_t * ftdmchan)
/* clean out the saved data */
memset
(
&
sngss7_span
->
rx_cgb
,
0x0
,
sizeof
(
sngss7_group_data_t
));
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -787,7 +787,7 @@ void ft_to_sngss7_cgua(ftdm_channel_t * ftdmchan)
/* clean out the saved data */
memset
(
&
sngss7_span
->
rx_cgu
,
0x0
,
sizeof
(
sngss7_group_data_t
));
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -838,7 +838,7 @@ void ft_to_sngss7_cgb(ftdm_channel_t * ftdmchan)
/* clean out the saved data */
memset
(
&
sngss7_span
->
tx_cgb
,
0x0
,
sizeof
(
sngss7_group_data_t
));
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
@@ -889,7 +889,7 @@ void ft_to_sngss7_cgu(ftdm_channel_t * ftdmchan)
/* clean out the saved data */
memset
(
&
sngss7_span
->
tx_cgu
,
0x0
,
sizeof
(
sngss7_group_data_t
));
ftdm_call_clear_
vars
(
&
ftdmchan
->
caller_data
);
ftdm_call_clear_
data
(
&
ftdmchan
->
caller_data
);
SS7_FUNC_TRACE_EXIT
(
__FUNCTION__
);
return
;
}
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c
浏览文件 @
6ea5f03b
...
...
@@ -2833,7 +2833,7 @@ static int ftmod_ss7_fill_in_ccSpan(sng_ccSpan_t *ccSpan)
}
/* find a spot for this circuit in the global structure */
x
=
(
ccSpan
->
procId
*
1000
);
x
=
(
ccSpan
->
procId
*
1000
)
+
1
;
flag
=
0
;
while
(
flag
==
0
)
{
/**********************************************************************/
...
...
libs/freetdm/src/include/freetdm.h
浏览文件 @
6ea5f03b
...
...
@@ -554,6 +554,7 @@ struct ftdm_sigmsg {
uint32_t
chan_id
;
/*!< easy access to chan id */
uint32_t
span_id
;
/*!< easy access to span_id */
uint32_t
call_id
;
/*!< unique call id for this call */
void
*
call_priv
;
/*!< Private data for the FreeTDM user from ftdm_caller_data->priv */
union
{
ftdm_event_sigstatus_t
sigstatus
;
/*!< valid if event_id is FTDM_SIGEVENT_SIGSTATUS_CHANGED */
ftdm_event_trace_t
trace
;
/*!< valid if event_id is FTDM_SIGEVENT_TRACE or FTDM_SIGEVENT_TRACE_RAW */
...
...
@@ -1368,34 +1369,12 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_read(ftdm_channel_t *ftdmchan, void *data
*/
FT_DECLARE
(
ftdm_status_t
)
ftdm_channel_write
(
ftdm_channel_t
*
ftdmchan
,
void
*
data
,
ftdm_size_t
datasize
,
ftdm_size_t
*
datalen
);
/*! \brief Add a custom variable to the channel
* \note This variables may be used by signaling modules to override signaling parameters
* \todo Document which signaling variables are available
* */
FT_DECLARE
(
ftdm_status_t
)
ftdm_channel_add_var
(
ftdm_channel_t
*
ftdmchan
,
const
char
*
var_name
,
const
char
*
value
);
/*! \brief Get a custom variable from the channel.
* \note The variable pointer returned is only valid while the channel is open and it'll be destroyed when the channel is closed. */
FT_DECLARE
(
const
char
*
)
ftdm_channel_get_var
(
ftdm_channel_t
*
ftdmchan
,
const
char
*
var_name
);
/*! \brief Get an iterator to iterate over the channel variables
* \param ftdmchan The channel structure containing the variables
* \param iter Optional iterator. You can reuse an old iterator (not previously freed) to avoid the extra allocation of a new iterator.
* \note The iterator pointer returned is only valid while the channel is open and it'll be destroyed when the channel is closed.
* This iterator is completely non-thread safe, if you are adding variables or removing variables while iterating
* results are unpredictable
*/
FT_DECLARE
(
ftdm_iterator_t
*
)
ftdm_channel_get_var_iterator
(
const
ftdm_channel_t
*
ftdmchan
,
ftdm_iterator_t
*
iter
);
/*! \brief Get iterator current value (depends on the iterator type)
* \note Channel iterators return a pointer to ftdm_channel_t
* Variable iterators return a pointer to the variable name (not the variable value)
*/
FT_DECLARE
(
void
*
)
ftdm_iterator_current
(
ftdm_iterator_t
*
iter
);
/*! \brief Get variable name and value for the current iterator position */
FT_DECLARE
(
ftdm_status_t
)
ftdm_channel_get_current_var
(
ftdm_iterator_t
*
iter
,
const
char
**
var_name
,
const
char
**
var_val
);
/*! \brief Advance iterator */
FT_DECLARE
(
ftdm_iterator_t
*
)
ftdm_iterator_next
(
ftdm_iterator_t
*
iter
);
...
...
@@ -1426,23 +1405,6 @@ FT_DECLARE(ftdm_iterator_t *) ftdm_call_get_var_iterator(const ftdm_caller_data_
/*! \brief Get variable name and value for the current iterator position */
FT_DECLARE
(
ftdm_status_t
)
ftdm_call_get_current_var
(
ftdm_iterator_t
*
iter
,
const
char
**
var_name
,
const
char
**
var_val
);
/*! \brief Clear all variables attached to the call
* \note Variables are cleared at the end of each call back, so it is not necessary for the user to call this function.
* \todo Document which signaling variables are available
* */
FT_DECLARE
(
ftdm_status_t
)
ftdm_call_clear_vars
(
ftdm_caller_data_t
*
caller_data
);
/*! \brief Remove a variable attached to the call
* \note Removes a variable that was attached to the call.
* \todo Document which call variables are available
* */
FT_DECLARE
(
ftdm_status_t
)
ftdm_call_remove_var
(
ftdm_caller_data_t
*
caller_data
,
const
char
*
var_name
);
/*! \brief Clears all the temporary data attached to this call
* \note Clears caller_data->variables and caller_data->raw_data.
* */
FT_DECLARE
(
void
)
ftdm_call_clear_data
(
ftdm_caller_data_t
*
caller_data
);
/*! \brief Get the span pointer associated to the channel */
FT_DECLARE
(
ftdm_span_t
*
)
ftdm_channel_get_span
(
const
ftdm_channel_t
*
ftdmchan
);
...
...
libs/freetdm/src/include/private/ftdm_core.h
浏览文件 @
6ea5f03b
...
...
@@ -451,7 +451,6 @@ struct ftdm_channel {
struct
ftdm_caller_data
caller_data
;
struct
ftdm_span
*
span
;
struct
ftdm_io_interface
*
fio
;
ftdm_hash_t
*
variable_hash
;
unsigned
char
rx_cas_bits
;
uint32_t
pre_buffer_size
;
uint8_t
rxgain_table
[
FTDM_GAINS_TABLE_SIZE
];
...
...
@@ -629,6 +628,24 @@ FT_DECLARE(void) ftdm_channel_clear_detected_tones(ftdm_channel_t *ftdmchan);
FT_DECLARE
(
void
)
ftdm_set_echocancel_call_begin
(
ftdm_channel_t
*
chan
);
FT_DECLARE
(
void
)
ftdm_set_echocancel_call_end
(
ftdm_channel_t
*
chan
);
/*! \brief Clear all variables attached to the call
* \note Variables are cleared at the end of each call back, so it is not necessary for the user to call this function.
* \todo Document which signaling variables are available
* */
FT_DECLARE
(
ftdm_status_t
)
ftdm_call_clear_vars
(
ftdm_caller_data_t
*
caller_data
);
/*! \brief Remove a variable attached to the call
* \note Removes a variable that was attached to the call.
* \todo Document which call variables are available
* */
FT_DECLARE
(
ftdm_status_t
)
ftdm_call_remove_var
(
ftdm_caller_data_t
*
caller_data
,
const
char
*
var_name
);
/*! \brief Clears all the temporary data attached to this call
* \note Clears caller_data->variables and caller_data->raw_data.
* */
FT_DECLARE
(
void
)
ftdm_call_clear_data
(
ftdm_caller_data_t
*
caller_data
);
/*!
\brief Assert condition
*/
...
...
@@ -688,6 +705,9 @@ FT_DECLARE(void) ftdm_set_echocancel_call_end(ftdm_channel_t *chan);
if (!ftdm_test_flag((fchan), FTDM_CHANNEL_MEDIA)) { \
ftdm_set_flag((fchan), FTDM_CHANNEL_MEDIA); \
ftdm_set_echocancel_call_begin((fchan)); \
if ((fchan)->dtmfdbg.requested) { \
ftdm_channel_command((fchan), FTDM_COMMAND_ENABLE_DEBUG_DTMF, NULL); \
} \
} \
} while (0);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论