Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
ccbc2ed9
提交
ccbc2ed9
authored
12月 15, 2010
作者:
David Yat Sin
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'davidy.mapped_raw_traces'
上级
c602e04f
53346e49
隐藏空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
205 行增加
和
64 行删除
+205
-64
mod_freetdm.c
libs/freetdm/mod_freetdm/mod_freetdm.c
+2
-2
ftdm_io.c
libs/freetdm/src/ftdm_io.c
+17
-3
ftmod_r2.c
libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c
+1
-1
ftmod_sangoma_isdn.c
...freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
+12
-2
ftmod_sangoma_isdn.h
...freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h
+7
-2
ftmod_sangoma_isdn_cfg.c
...tdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c
+4
-0
ftmod_sangoma_isdn_cntrl.c
...m/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cntrl.c
+1
-1
ftmod_sangoma_isdn_stack_rcv.c
...c/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c
+32
-32
ftmod_sangoma_isdn_trace.c
...m/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c
+75
-4
ftmod_sangoma_ss7_cli.c
...eetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
+2
-2
ftmod_sangoma_ss7_handle.c
...dm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c
+2
-2
ftmod_sangoma_ss7_main.c
...etdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
+9
-9
freetdm.h
libs/freetdm/src/include/freetdm.h
+41
-4
没有找到文件。
libs/freetdm/mod_freetdm/mod_freetdm.c
浏览文件 @
ccbc2ed9
...
...
@@ -2077,7 +2077,7 @@ static FIO_SIGNAL_CB_FUNCTION(on_r2_signal)
case
FTDM_SIGEVENT_SIGSTATUS_CHANGED
:
{
ftdm_signaling_status_t
sigstatus
=
sigmsg
->
raw_data
?
*
((
ftdm_signaling_status_t
*
)(
sigmsg
->
raw_data
))
:
sigmsg
->
sig
status
;
ftdm_signaling_status_t
sigstatus
=
sigmsg
->
raw_data
?
*
((
ftdm_signaling_status_t
*
)(
sigmsg
->
raw_data
))
:
sigmsg
->
ev_data
.
sigstatus
.
status
;
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_INFO
,
"%d:%d signalling changed to: %s
\n
"
,
spanid
,
chanid
,
ftdm_signaling_status2str
(
sigstatus
));
}
...
...
@@ -2183,7 +2183,7 @@ static FIO_SIGNAL_CB_FUNCTION(on_clear_channel_signal)
break
;
case
FTDM_SIGEVENT_SIGSTATUS_CHANGED
:
{
ftdm_signaling_status_t
sigstatus
=
sigmsg
->
raw_data
?
*
((
ftdm_signaling_status_t
*
)(
sigmsg
->
raw_data
))
:
sigmsg
->
sig
status
;
ftdm_signaling_status_t
sigstatus
=
sigmsg
->
raw_data
?
*
((
ftdm_signaling_status_t
*
)(
sigmsg
->
raw_data
))
:
sigmsg
->
ev_data
.
sigstatus
.
status
;
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_INFO
,
"%d:%d signalling changed to :%s
\n
"
,
spanid
,
chanid
,
ftdm_signaling_status2str
(
sigstatus
));
}
...
...
libs/freetdm/src/ftdm_io.c
浏览文件 @
ccbc2ed9
...
...
@@ -280,6 +280,9 @@ FTDM_STR2ENUM(ftdm_str2ftdm_chan_type, ftdm_chan_type2str, ftdm_chan_type_t, CHA
FTDM_ENUM_NAMES
(
SIGNALING_STATUS_NAMES
,
SIGSTATUS_STRINGS
)
FTDM_STR2ENUM
(
ftdm_str2ftdm_signaling_status
,
ftdm_signaling_status2str
,
ftdm_signaling_status_t
,
SIGNALING_STATUS_NAMES
,
FTDM_SIG_STATE_INVALID
)
FTDM_ENUM_NAMES
(
TRACE_DIR_NAMES
,
TRACE_DIR_STRINGS
)
FTDM_STR2ENUM
(
ftdm_str2ftdm_trace_dir
,
ftdm_trace_dir2str
,
ftdm_trace_dir_t
,
TRACE_DIR_NAMES
,
FTDM_TRACE_INVALID
)
FTDM_ENUM_NAMES
(
TON_NAMES
,
TON_STRINGS
)
FTDM_STR2ENUM
(
ftdm_str2ftdm_ton
,
ftdm_ton2str
,
ftdm_ton_t
,
TON_NAMES
,
FTDM_TON_INVALID
)
...
...
@@ -1699,6 +1702,18 @@ static ftdm_status_t __inline__ get_best_rated(ftdm_channel_t **fchan, ftdm_chan
return
FTDM_SUCCESS
;
}
FT_DECLARE
(
int
)
ftdm_channel_get_availability
(
ftdm_channel_t
*
ftdmchan
)
{
int
availability
=
-
1
;
ftdm_channel_lock
(
ftdmchan
);
if
(
ftdm_test_flag
(
ftdmchan
->
span
,
FTDM_SPAN_USE_AV_RATE
))
{
availability
=
ftdmchan
->
availability_rate
;
}
ftdm_channel_unlock
(
ftdmchan
);
return
availability
;
}
FT_DECLARE
(
ftdm_status_t
)
ftdm_channel_open_by_group
(
uint32_t
group_id
,
ftdm_direction_t
direction
,
ftdm_caller_data_t
*
caller_data
,
ftdm_channel_t
**
ftdmchan
)
{
ftdm_status_t
status
=
FTDM_FAIL
;
...
...
@@ -5292,6 +5307,7 @@ static ftdm_status_t ftdm_span_trigger_signal(const ftdm_span_t *span, ftdm_sigm
if
(
sigmsg
->
channel
)
{
ftdm_call_clear_data
(
&
(
sigmsg
->
channel
->
caller_data
));
}
ftdm_safe_free
(
sigmsg
->
raw_data
);
return
status
;
}
...
...
@@ -5299,8 +5315,6 @@ static ftdm_status_t ftdm_span_queue_signal(const ftdm_span_t *span, ftdm_sigmsg
{
ftdm_sigmsg_t
*
new_sigmsg
=
NULL
;
ftdm_assert_return
((
sigmsg
->
raw_data
==
NULL
),
FTDM_FAIL
,
"No raw data should be used with asynchronous notification
\n
"
);
new_sigmsg
=
ftdm_calloc
(
1
,
sizeof
(
*
sigmsg
));
if
(
!
new_sigmsg
)
{
return
FTDM_FAIL
;
...
...
@@ -5347,7 +5361,7 @@ FT_DECLARE(ftdm_status_t) ftdm_span_send_signal(ftdm_span_t *span, ftdm_sigmsg_t
case
FTDM_SIGEVENT_SIGSTATUS_CHANGED
:
{
ftdm_signaling_status_t
sigstatus
=
ftdm_test_flag
(
span
,
FTDM_SPAN_USE_SIGNALS_QUEUE
)
?
sigmsg
->
sig
status
:
*
((
ftdm_signaling_status_t
*
)(
sigmsg
->
raw_data
));
ftdm_signaling_status_t
sigstatus
=
ftdm_test_flag
(
span
,
FTDM_SPAN_USE_SIGNALS_QUEUE
)
?
sigmsg
->
ev_data
.
sigstatus
.
status
:
*
((
ftdm_signaling_status_t
*
)(
sigmsg
->
raw_data
));
if
(
sigstatus
==
FTDM_SIG_STATE_UP
)
{
ftdm_set_flag
(
sigmsg
->
channel
,
FTDM_CHANNEL_SIG_UP
);
}
else
{
...
...
libs/freetdm/src/ftmod/ftmod_r2/ftmod_r2.c
浏览文件 @
ccbc2ed9
...
...
@@ -255,7 +255,7 @@ static void ftdm_r2_set_chan_sig_status(ftdm_channel_t *ftdmchan, ftdm_signaling
sig
.
span_id
=
ftdmchan
->
span_id
;
sig
.
channel
=
ftdmchan
;
sig
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sig
.
sig
status
=
status
;
sig
.
ev_data
.
sigstatus
.
status
=
status
;
if
(
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sig
)
!=
FTDM_SUCCESS
)
{
ftdm_log_chan
(
ftdmchan
,
FTDM_LOG_ERROR
,
"Failed to change channel status to %s
\n
"
,
ftdm_signaling_status2str
(
status
));
}
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
浏览文件 @
ccbc2ed9
...
...
@@ -976,7 +976,8 @@ 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
)
{
{
sngisdn_span_data_t
*
signal_data
=
span
->
signal_data
;
ftdm_log
(
FTDM_LOG_INFO
,
"Starting span %s:%u.
\n
"
,
span
->
name
,
span
->
span_id
);
if
(
sngisdn_stack_start
(
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"Failed to start span %s
\n
"
,
span
->
name
);
...
...
@@ -986,6 +987,14 @@ static ftdm_status_t ftdm_sangoma_isdn_start(ftdm_span_t *span)
ftdm_clear_flag
(
span
,
FTDM_SPAN_STOP_THREAD
);
ftdm_clear_flag
(
span
,
FTDM_SPAN_IN_THREAD
);
if
(
signal_data
->
raw_trace_q921
==
SNGISDN_OPT_TRUE
)
{
sngisdn_activate_trace
(
span
,
SNGISDN_TRACE_Q921
);
}
if
(
signal_data
->
raw_trace_q931
==
SNGISDN_OPT_TRUE
)
{
sngisdn_activate_trace
(
span
,
SNGISDN_TRACE_Q931
);
}
/*start the span monitor thread*/
if
(
ftdm_thread_create_detached
(
ftdm_sangoma_isdn_run
,
span
)
!=
FTDM_SUCCESS
)
{
ftdm_log
(
FTDM_LOG_CRIT
,
"Failed to start Sangoma ISDN Span Monitor Thread!
\n
"
);
...
...
@@ -1210,6 +1219,7 @@ static FIO_API_FUNCTION(ftdm_sangoma_isdn_api)
stream
->
write_function
(
stream
,
"-ERR failed to find span by name %s
\n
"
,
argv
[
2
]);
goto
done
;
}
if
(
!
strcasecmp
(
trace_opt
,
"q921"
))
{
sngisdn_activate_trace
(
span
,
SNGISDN_TRACE_Q921
);
}
else
if
(
!
strcasecmp
(
trace_opt
,
"q931"
))
{
...
...
@@ -1218,7 +1228,7 @@ static FIO_API_FUNCTION(ftdm_sangoma_isdn_api)
sngisdn_activate_trace
(
span
,
SNGISDN_TRACE_DISABLE
);
}
else
{
stream
->
write_function
(
stream
,
"-ERR invalid trace option <q921|q931> <span name>
\n
"
);
}
}
}
if
(
!
strcasecmp
(
argv
[
0
],
"l1_stats"
))
{
ftdm_span_t
*
span
;
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.h
浏览文件 @
ccbc2ed9
...
...
@@ -261,6 +261,8 @@ typedef struct sngisdn_span_data {
int8_t
facility_timeout
;
uint8_t
num_local_numbers
;
uint8_t
ignore_cause_value
;
uint8_t
raw_trace_q931
;
uint8_t
raw_trace_q921
;
uint8_t
timer_t3
;
uint8_t
restart_opt
;
char
*
local_numbers
[
SNGISDN_NUM_LOCAL_NUMBERS
];
...
...
@@ -427,8 +429,11 @@ void sngisdn_process_rst_ind (sngisdn_event_data_t *sngisdn_event);
void
sngisdn_rcv_phy_ind
(
SuId
suId
,
Reason
reason
);
void
sngisdn_rcv_q921_ind
(
BdMngmt
*
status
);
void
sngisdn_trace_q921
(
char
*
str
,
uint8_t
*
data
,
uint32_t
data_len
);
void
sngisdn_trace_q931
(
char
*
str
,
uint8_t
*
data
,
uint32_t
data_len
);
void
sngisdn_trace_interpreted_q921
(
sngisdn_span_data_t
*
signal_data
,
ftdm_trace_dir_t
dir
,
uint8_t
*
data
,
uint32_t
data_len
);
void
sngisdn_trace_interpreted_q931
(
sngisdn_span_data_t
*
signal_data
,
ftdm_trace_dir_t
dir
,
uint8_t
*
data
,
uint32_t
data_len
);
void
sngisdn_trace_raw_q921
(
sngisdn_span_data_t
*
signal_data
,
ftdm_trace_dir_t
dir
,
uint8_t
*
data
,
uint32_t
data_len
);
void
sngisdn_trace_raw_q931
(
sngisdn_span_data_t
*
signal_data
,
ftdm_trace_dir_t
dir
,
uint8_t
*
data
,
uint32_t
data_len
);
void
get_memory_info
(
void
);
ftdm_status_t
sng_isdn_activate_trace
(
ftdm_span_t
*
span
,
sngisdn_tracetype_t
trace_opt
);
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c
浏览文件 @
ccbc2ed9
...
...
@@ -296,6 +296,10 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
parse_yesno
(
var
,
val
,
&
signal_data
->
facility_ie_decode
);
}
else
if
(
!
strcasecmp
(
var
,
"ignore-cause-value"
))
{
parse_yesno
(
var
,
val
,
&
signal_data
->
ignore_cause_value
);
}
else
if
(
!
strcasecmp
(
var
,
"q931-raw-trace"
))
{
parse_yesno
(
var
,
val
,
&
signal_data
->
raw_trace_q931
);
}
else
if
(
!
strcasecmp
(
var
,
"q921-raw-trace"
))
{
parse_yesno
(
var
,
val
,
&
signal_data
->
raw_trace_q921
);
}
else
{
ftdm_log
(
FTDM_LOG_WARNING
,
"Ignoring unknown parameter %s
\n
"
,
ftdm_parameters
[
paramindex
].
var
);
}
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cntrl.c
浏览文件 @
ccbc2ed9
...
...
@@ -47,7 +47,7 @@ void sngisdn_set_chan_sig_status(ftdm_channel_t *ftdmchan, ftdm_signaling_status
sig
.
span_id
=
ftdmchan
->
span_id
;
sig
.
channel
=
ftdmchan
;
sig
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sig
.
sig
status
=
status
;
sig
.
ev_data
.
sigstatus
.
status
=
status
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sig
);
return
;
}
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c
浏览文件 @
ccbc2ed9
...
...
@@ -34,9 +34,6 @@
#include "ftmod_sangoma_isdn.h"
#define MAX_DECODE_STR_LEN 2000
void
sngisdn_rcv_con_ind
(
int16_t
suId
,
uint32_t
suInstId
,
uint32_t
spInstId
,
ConEvnt
*
conEvnt
,
int16_t
dChan
,
uint8_t
ces
)
{
uint8_t
bchan_no
=
0
;
...
...
@@ -777,9 +774,6 @@ void sngisdn_rcv_cc_ind(CcMngmt *status)
return
;
}
#define Q931_TRC_EVENT(event) (event == TL3PKTTX)?"TX": \
(event == TL3PKTRX)?"RX":"UNKNOWN"
void
sngisdn_rcv_q931_trace
(
InMngmt
*
trc
,
Buffer
*
mBuf
)
{
MsgLen
mlen
;
...
...
@@ -788,13 +782,20 @@ void sngisdn_rcv_q931_trace(InMngmt *trc, Buffer *mBuf)
Buffer
*
tmp
;
Data
*
cptr
;
uint8_t
data
;
ftdm_trace_dir_t
dir
;
uint8_t
tdata
[
1000
];
char
*
data_str
=
ftdm_calloc
(
1
,
MAX_DECODE_STR_LEN
);
/* TODO Find a proper size */
sngisdn_span_data_t
*
signal_data
=
g_sngisdn_data
.
spans
[
trc
->
t
.
trc
.
suId
];
ftdm_assert
(
mBuf
!=
NULLP
,
"Received a Q931 trace with no buffer"
);
mlen
=
((
SsMsgInfo
*
)(
mBuf
->
b_rptr
))
->
len
;
if
(
mlen
!=
0
)
{
if
(
trc
->
t
.
trc
.
evnt
==
TL3PKTTX
)
{
dir
=
FTDM_TRACE_OUTGOING
;
}
else
{
dir
=
FTDM_TRACE_INCOMING
;
}
if
(
mlen
)
{
tmp
=
mBuf
->
b_cont
;
cptr
=
tmp
->
b_rptr
;
data
=
*
cptr
++
;
...
...
@@ -809,41 +810,40 @@ void sngisdn_rcv_q931_trace(InMngmt *trc, Buffer *mBuf)
}
data
=
*
cptr
++
;
}
sngisdn_trace_q931
(
data_str
,
tdata
,
mlen
);
ftdm_log
(
FTDM_LOG_INFO
,
"[SNGISDN Q931] s%d FRAME %s:%s
\n
"
,
trc
->
t
.
trc
.
suId
,
Q931_TRC_EVENT
(
trc
->
t
.
trc
.
evnt
),
data_str
);
if
(
signal_data
->
raw_trace_q931
==
SNGISDN_OPT_TRUE
)
{
sngisdn_trace_raw_q931
(
signal_data
,
dir
,
tdata
,
mlen
);
}
else
{
sngisdn_trace_interpreted_q931
(
signal_data
,
dir
,
tdata
,
mlen
);
}
}
ftdm_safe_free
(
data_str
);
/* We do not need to free mBuf in this case because stack does it */
/* SPutMsg(mBuf); */
return
;
}
#define Q921_TRC_EVENT(event) (event == TL2FRMRX)?"RX": \
(event == TL2FRMTX)?"TX": \
(event == TL2TMR)?"TMR EXPIRED":"UNKNOWN"
void
sngisdn_rcv_q921_trace
(
BdMngmt
*
trc
,
Buffer
*
mBuf
)
{
MsgLen
mlen
;
Buffer
*
tmp
;
MsgLen
i
;
int16_t
j
;
Buffer
*
tmp
;
Data
*
cptr
;
uint8_t
data
;
uint8_t
tdata
[
16
]
;
char
*
data_str
=
ftdm_calloc
(
1
,
200
);
/* TODO Find a proper size */
ftdm_trace_dir_t
dir
;
uint8_t
tdata
[
1000
];
sngisdn_span_data_t
*
signal_data
=
g_sngisdn_data
.
spans
[
trc
->
t
.
trc
.
lnkNmb
];
if
(
trc
->
t
.
trc
.
evnt
==
TL2TMR
)
{
goto
end_of_trace
;
return
;
}
if
(
trc
->
t
.
trc
.
evnt
==
TL2FRMTX
)
{
dir
=
FTDM_TRACE_OUTGOING
;
}
else
{
dir
=
FTDM_TRACE_INCOMING
;
}
ftdm_assert
(
mBuf
!=
NULLP
,
"Received a Q921 trace with no buffer"
);
mlen
=
((
SsMsgInfo
*
)(
mBuf
->
b_rptr
))
->
len
;
if
(
mlen
!=
0
)
{
tmp
=
mBuf
->
b_cont
;
cptr
=
tmp
->
b_rptr
;
...
...
@@ -865,12 +865,12 @@ void sngisdn_rcv_q921_trace(BdMngmt *trc, Buffer *mBuf)
}
}
sngisdn_trace_q921
(
data_str
,
tdata
,
mlen
);
ftdm_log
(
FTDM_LOG_INFO
,
"[SNGISDN Q921] s%d FRAME %s:%s
\n
"
,
trc
->
t
.
trc
.
lnkNmb
,
Q921_TRC_EVENT
(
trc
->
t
.
trc
.
evnt
),
data_str
);
if
(
signal_data
->
raw_trace_q921
==
SNGISDN_OPT_TRUE
)
{
sngisdn_trace_raw_q921
(
signal_data
,
dir
,
tdata
,
mlen
);
}
else
{
sngisdn_trace_interpreted_q921
(
signal_data
,
dir
,
tdata
,
mlen
);
}
}
end_of_trace:
ftdm_safe_free
(
data_str
);
SPutMsg
(
mBuf
);
return
;
}
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c
浏览文件 @
ccbc2ed9
...
...
@@ -36,14 +36,15 @@
#include "ftmod_sangoma_isdn_trace.h"
#define OCTET(x) (ieData[x-1] & 0xFF)
#define MAX_DECODE_STR_LEN 2000
void
print_hex_dump
(
char
*
str
,
uint32_t
*
str_len
,
uint8_t
*
data
,
uint32_t
index_start
,
uint32_t
index_end
);
void
sngisdn_trace_q921
(
char
*
str
,
uint8_t
*
data
,
uint32_t
data_len
);
void
sngisdn_trace_q931
(
char
*
str
,
uint8_t
*
data
,
uint32_t
data_len
);
uint32_t
sngisdn_decode_ie
(
char
*
str
,
uint32_t
*
str_len
,
uint8_t
current_codeset
,
uint8_t
*
data
,
uint16_t
index_start
);
uint8_t
get_bits
(
uint8_t
octet
,
uint8_t
bitLo
,
uint8_t
bitHi
);
char
*
get_code_2_str
(
int
code
,
struct
code2str
*
pCodeTable
);
void
sngisdn_decode_q921
(
char
*
str
,
uint8_t
*
data
,
uint32_t
data_len
);
void
sngisdn_decode_q931
(
char
*
str
,
uint8_t
*
data
,
uint32_t
data_len
);
char
*
get_code_2_str
(
int
code
,
struct
code2str
*
pCodeTable
)
{
...
...
@@ -97,7 +98,42 @@ uint8_t get_bits(uint8_t octet, uint8_t bitLo, uint8_t bitHi)
return
0
;
}
void
sngisdn_trace_q921
(
char
*
str
,
uint8_t
*
data
,
uint32_t
data_len
)
void
sngisdn_trace_interpreted_q921
(
sngisdn_span_data_t
*
signal_data
,
ftdm_trace_dir_t
dir
,
uint8_t
*
data
,
uint32_t
data_len
)
{
char
*
data_str
=
ftdm_calloc
(
1
,
200
);
/* TODO Find a proper size */
sngisdn_decode_q921
(
data_str
,
data
,
data_len
);
ftdm_log
(
FTDM_LOG_INFO
,
"[SNGISDN Q921] s%d FRAME %s:%s
\n
"
,
signal_data
->
ftdm_span
->
name
,
ftdm_trace_dir2str
(
dir
),
data_str
);
ftdm_safe_free
(
data_str
);
}
void
sngisdn_trace_raw_q921
(
sngisdn_span_data_t
*
signal_data
,
ftdm_trace_dir_t
dir
,
uint8_t
*
data
,
uint32_t
data_len
)
{
uint8_t
*
raw_data
;
ftdm_sigmsg_t
sigev
;
memset
(
&
sigev
,
0
,
sizeof
(
sigev
));
sigev
.
span_id
=
signal_data
->
ftdm_span
->
span_id
;
sigev
.
chan_id
=
signal_data
->
dchan
->
chan_id
;
sigev
.
channel
=
signal_data
->
dchan
;
sigev
.
event_id
=
FTDM_SIGEVENT_TRACE_RAW
;
sigev
.
ev_data
.
logevent
.
dir
=
dir
;
sigev
.
ev_data
.
logevent
.
level
=
2
;
/* TODO: Map trace to call ID here */
sigev
.
call_id
=
0
;
raw_data
=
ftdm_malloc
(
data_len
);
ftdm_assert
(
raw_data
,
"Failed to malloc"
);
memcpy
(
raw_data
,
data
,
data_len
);
sigev
.
raw_data
=
raw_data
;
sigev
.
raw_data_len
=
data_len
;
ftdm_span_send_signal
(
signal_data
->
ftdm_span
,
&
sigev
);
}
void
sngisdn_decode_q921
(
char
*
str
,
uint8_t
*
data
,
uint32_t
data_len
)
{
int
str_len
;
uint32_t
i
;
...
...
@@ -169,7 +205,42 @@ void sngisdn_trace_q921(char* str, uint8_t* data, uint32_t data_len)
return
;
}
void
sngisdn_trace_q931
(
char
*
str
,
uint8_t
*
data
,
uint32_t
data_len
)
void
sngisdn_trace_interpreted_q931
(
sngisdn_span_data_t
*
signal_data
,
ftdm_trace_dir_t
dir
,
uint8_t
*
data
,
uint32_t
data_len
)
{
char
*
data_str
=
ftdm_calloc
(
1
,
MAX_DECODE_STR_LEN
);
/* TODO Find a proper size */
sngisdn_decode_q931
(
data_str
,
data
,
data_len
);
ftdm_log
(
FTDM_LOG_INFO
,
"[SNGISDN Q931] %s FRAME %s:%s
\n
"
,
signal_data
->
ftdm_span
->
name
,
ftdm_trace_dir2str
(
dir
),
data_str
);
ftdm_safe_free
(
data_str
);
}
void
sngisdn_trace_raw_q931
(
sngisdn_span_data_t
*
signal_data
,
ftdm_trace_dir_t
dir
,
uint8_t
*
data
,
uint32_t
data_len
)
{
uint8_t
*
raw_data
;
ftdm_sigmsg_t
sigev
;
memset
(
&
sigev
,
0
,
sizeof
(
sigev
));
sigev
.
span_id
=
signal_data
->
ftdm_span
->
span_id
;
sigev
.
chan_id
=
signal_data
->
dchan
->
chan_id
;
sigev
.
channel
=
signal_data
->
dchan
;
sigev
.
event_id
=
FTDM_SIGEVENT_TRACE_RAW
;
sigev
.
ev_data
.
logevent
.
dir
=
dir
;
sigev
.
ev_data
.
logevent
.
level
=
3
;
/* TODO: Map trace to call ID here */
raw_data
=
ftdm_malloc
(
data_len
);
ftdm_assert
(
raw_data
,
"Failed to malloc"
);
memcpy
(
raw_data
,
data
,
data_len
);
sigev
.
raw_data
=
raw_data
;
sigev
.
raw_data_len
=
data_len
;
ftdm_span_send_signal
(
signal_data
->
ftdm_span
,
&
sigev
);
}
void
sngisdn_decode_q931
(
char
*
str
,
uint8_t
*
data
,
uint32_t
data_len
)
{
uint32_t
str_len
;
uint8_t
prot_disc
,
callRefFlag
;
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
浏览文件 @
ccbc2ed9
...
...
@@ -1589,7 +1589,7 @@ static ftdm_status_t handle_tx_cgb(ftdm_stream_handle_t *stream, int span, int c
sigev
.
span_id
=
ftdmchan
->
span_id
;
sigev
.
channel
=
ftdmchan
;
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_DOWN
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_DOWN
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
/* if this is the first channel in the range */
...
...
@@ -1689,7 +1689,7 @@ static ftdm_status_t handle_tx_cgu(ftdm_stream_handle_t *stream, int span, int c
sigev
.
span_id
=
ftdmchan
->
span_id
;
sigev
.
channel
=
ftdmchan
;
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_UP
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_UP
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
/* if this is the first channel in the range */
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c
浏览文件 @
ccbc2ed9
...
...
@@ -2004,7 +2004,7 @@ ftdm_status_t handle_cgb_req(uint32_t suInstId, uint32_t spInstId, uint32_t circ
/* bring the sig status down */
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_DOWN
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_DOWN
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
/* unlock the channel again before we exit */
...
...
@@ -2135,7 +2135,7 @@ ftdm_status_t handle_cgu_req(uint32_t suInstId, uint32_t spInstId, uint32_t circ
/* bring the sig status down */
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_UP
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_UP
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
/* unlock the channel again before we exit */
...
...
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
浏览文件 @
ccbc2ed9
...
...
@@ -841,7 +841,7 @@ void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
SS7_DEBUG_CHAN
(
ftdmchan
,
"All reset flags cleared %s
\n
"
,
""
);
/* all flags are down so we can bring up the sig status */
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_UP
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_UP
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
}
/* if (!ftdm_test_flag (ftdmchan, FTDM_CHANNEL_SIG_UP)) */
}
/* if !blocked */
...
...
@@ -949,7 +949,7 @@ void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
/* if the sig_status is up...bring it down */
if
(
ftdm_test_flag
(
ftdmchan
,
FTDM_CHANNEL_SIG_UP
))
{
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_DOWN
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_DOWN
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
}
...
...
@@ -1033,7 +1033,7 @@ void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
/* bring the sig status back up */
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_UP
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_UP
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
}
...
...
@@ -1046,7 +1046,7 @@ void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
/* bring the sig status down */
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_DOWN
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_DOWN
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
/* go back to the last state */
...
...
@@ -1058,7 +1058,7 @@ void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
/* bring the sig status down */
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_DOWN
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_DOWN
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
/* send a BLA */
...
...
@@ -1076,7 +1076,7 @@ void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
/* bring the sig status up */
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_UP
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_UP
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
/* send a uba */
...
...
@@ -1092,7 +1092,7 @@ void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
/* bring the sig status down */
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_DOWN
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_DOWN
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
/* send a blo */
...
...
@@ -1110,7 +1110,7 @@ void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
/* bring the sig status up */
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_UP
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_UP
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
/* send a ubl */
...
...
@@ -1149,7 +1149,7 @@ void ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
/* bring the channel signaling status to down */
sigev
.
event_id
=
FTDM_SIGEVENT_SIGSTATUS_CHANGED
;
sigev
.
sig
status
=
FTDM_SIG_STATE_DOWN
;
sigev
.
ev_data
.
sigstatus
.
status
=
FTDM_SIG_STATE_DOWN
;
ftdm_span_send_signal
(
ftdmchan
->
span
,
&
sigev
);
/* remove any reset flags */
...
...
libs/freetdm/src/include/freetdm.h
浏览文件 @
ccbc2ed9
...
...
@@ -325,12 +325,14 @@ typedef enum {
FTDM_SIGEVENT_RESTART
,
/*!< Restart has been requested. Typically you hangup your call resources here */
FTDM_SIGEVENT_SIGSTATUS_CHANGED
,
/*!< Signaling protocol status changed (ie: D-chan up), see new status in raw_data ftdm_sigmsg_t member */
FTDM_SIGEVENT_COLLISION
,
/*!< Outgoing call was dropped because an incoming call arrived at the same time */
FTDM_SIGEVENT_FACILITY
,
/* !< In call facility event */
FTDM_SIGEVENT_INVALID
FTDM_SIGEVENT_FACILITY
,
/*!< In call facility event */
FTDM_SIGEVENT_TRACE
,
/*!<Interpreted trace event */
FTDM_SIGEVENT_TRACE_RAW
,
/*!<Raw trace event */
FTDM_SIGEVENT_INVALID
,
/*!<Invalid */
}
ftdm_signal_event_t
;
#define SIGNAL_STRINGS "START", "STOP", "RELEASED", "UP", "FLASH", "PROCEED", "RINGING", "PROGRESS", \
"PROGRESS_MEDIA", "ALARM_TRAP", "ALARM_CLEAR", \
"COLLECTED_DIGIT", "ADD_CALL", "RESTART", "SIGSTATUS_CHANGED", "COLLISION", "
MSG
", "INVALID"
"COLLECTED_DIGIT", "ADD_CALL", "RESTART", "SIGSTATUS_CHANGED", "COLLISION", "
FACILITY", "TRACE", "TRACE_RAW
", "INVALID"
/*! \brief Move from string to ftdm_signal_event_t and viceversa */
FTDM_STR2ENUM_P
(
ftdm_str2ftdm_signal_event
,
ftdm_signal_event2str
,
ftdm_signal_event_t
)
...
...
@@ -381,16 +383,43 @@ typedef enum {
/*! \brief Move from string to ftdm_signaling_status_t and viceversa */
FTDM_STR2ENUM_P
(
ftdm_str2ftdm_signaling_status
,
ftdm_signaling_status2str
,
ftdm_signaling_status_t
)
typedef
struct
{
ftdm_signaling_status_t
status
;
}
ftdm_event_sigstatus_t
;
typedef
enum
{
/* This is an received frame */
FTDM_TRACE_INCOMING
,
/* This is a transmitted frame */
FTDM_TRACE_OUTGOING
,
/* Invalid */
FTDM_TRACE_INVALID
,
}
ftdm_trace_dir_t
;
#define TRACE_DIR_STRINGS "INCOMING", "OUTGOING", "INVALID"
/*! \brief Move string to ftdm_trace_dir_t and viceversa */
FTDM_STR2ENUM_P
(
ftdm_str2ftdm_trace_dir
,
ftdm_trace_dir2str
,
ftdm_trace_dir_t
)
typedef
struct
{
/* Direction - incoming or outgoing */
ftdm_trace_dir_t
dir
;
uint8_t
level
;
/* 1 for phy layer, 2 for q921/mtp2, 3 for q931/mtp3 */
}
ftdm_event_trace_t
;
/*! \brief Generic signaling message */
struct
ftdm_sigmsg
{
ftdm_signal_event_t
event_id
;
/*!< The type of message */
ftdm_channel_t
*
channel
;
/*!< Related channel */
uint32_t
chan_id
;
/*!< easy access to chan id */
uint32_t
span_id
;
/*!< easy access to span_id */
ftdm_signaling_status_t
sigstatus
;
/*!< Signaling status (valid if event_id is FTDM_SIGEVENT_SIGSTATUS_CHANGED) */
void
*
raw_data
;
/*!< Message specific data if any */
uint32_t
raw_data_len
;
/*!< Data len in case is needed */
uint32_t
call_id
;
/*!< unique call id for this call */
union
{
ftdm_event_sigstatus_t
sigstatus
;
/*!< valid if event_id is FTDM_SIGEVENT_SIGSTATUS_CHANGED */
ftdm_event_trace_t
logevent
;
/*!< valid if event_id is FTDM_SIGEVENT_TRACE or FTDM_SIGEVENT_TRACE_RAW */
}
ev_data
;
};
/*! \brief Crash policy
...
...
@@ -667,6 +696,14 @@ typedef enum {
/*! \brief Override the default queue handler */
FT_DECLARE
(
ftdm_status_t
)
ftdm_global_set_queue_handler
(
ftdm_queue_handler_t
*
handler
);
/*! \brief Return the availability rate for a channel
* \param ftdmchan Channel to get the availability from
*
* \retval > 0 if availability is supported
* \retval -1 if availability is not supported
*/
FT_DECLARE
(
int
)
ftdm_channel_get_availability
(
ftdm_channel_t
*
ftdmchan
);
/*! \brief Answer call */
#define ftdm_channel_call_answer(ftdmchan) _ftdm_channel_call_answer(__FILE__, __FUNCTION__, __LINE__, (ftdmchan))
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论