Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
28d431ae
提交
28d431ae
authored
3月 07, 2009
作者:
Anthony Minessale
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
performance tuning
git-svn-id:
http://svn.openzap.org/svn/openzap/trunk@684
a93c3328-9c30-0410-af19-c9cd2b2d52af
上级
845235de
显示空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
99 行增加
和
45 行删除
+99
-45
openzap.h
libs/freetdm/src/include/openzap.h
+1
-0
lpwrap_pri.c
libs/freetdm/src/ozmod/ozmod_libpri/lpwrap_pri.c
+25
-13
lpwrap_pri.h
libs/freetdm/src/ozmod/ozmod_libpri/lpwrap_pri.h
+2
-1
ozmod_libpri.c
libs/freetdm/src/ozmod/ozmod_libpri/ozmod_libpri.c
+69
-31
zap_io.c
libs/freetdm/src/zap_io.c
+2
-0
没有找到文件。
libs/freetdm/src/include/openzap.h
浏览文件 @
28d431ae
...
@@ -87,6 +87,7 @@
...
@@ -87,6 +87,7 @@
#pragma comment(lib, "Winmm")
#pragma comment(lib, "Winmm")
#endif
#endif
#define ZAP_THREAD_STACKSIZE 240 * 1024
#define ZAP_ENUM_NAMES(_NAME, _STRINGS) static const char * _NAME [] = { _STRINGS , NULL };
#define ZAP_ENUM_NAMES(_NAME, _STRINGS) static const char * _NAME [] = { _STRINGS , NULL };
#define ZAP_STR2ENUM_P(_FUNC1, _FUNC2, _TYPE) _TYPE _FUNC1 (const char *name); const char * _FUNC2 (_TYPE type);
#define ZAP_STR2ENUM_P(_FUNC1, _FUNC2, _TYPE) _TYPE _FUNC1 (const char *name); const char * _FUNC2 (_TYPE type);
#define ZAP_STR2ENUM(_FUNC1, _FUNC2, _TYPE, _STRINGS, _MAX) \
#define ZAP_STR2ENUM(_FUNC1, _FUNC2, _TYPE, _STRINGS, _MAX) \
...
...
libs/freetdm/src/ozmod/ozmod_libpri/lpwrap_pri.c
浏览文件 @
28d431ae
...
@@ -97,7 +97,8 @@ static struct lpwrap_pri_event_list LPWRAP_PRI_EVENT_LIST[] = {
...
@@ -97,7 +97,8 @@ static struct lpwrap_pri_event_list LPWRAP_PRI_EVENT_LIST[] = {
{
15
,
LPWRAP_PRI_EVENT_HANGUP_REQ
,
"HANGUP_REQ"
},
{
15
,
LPWRAP_PRI_EVENT_HANGUP_REQ
,
"HANGUP_REQ"
},
{
16
,
LPWRAP_PRI_EVENT_NOTIFY
,
"NOTIFY"
},
{
16
,
LPWRAP_PRI_EVENT_NOTIFY
,
"NOTIFY"
},
{
17
,
LPWRAP_PRI_EVENT_PROGRESS
,
"PROGRESS"
},
{
17
,
LPWRAP_PRI_EVENT_PROGRESS
,
"PROGRESS"
},
{
18
,
LPWRAP_PRI_EVENT_KEYPAD_DIGIT
,
"KEYPAD_DIGIT"
}
{
18
,
LPWRAP_PRI_EVENT_KEYPAD_DIGIT
,
"KEYPAD_DIGIT"
},
{
19
,
LPWRAP_PRI_EVENT_IO_FAIL
,
"IO_FAIL"
}
};
};
#define LINE "--------------------------------------------------------------------------------"
#define LINE "--------------------------------------------------------------------------------"
...
@@ -114,8 +115,9 @@ static int __pri_lpwrap_read(struct pri *pri, void *buf, int buflen)
...
@@ -114,8 +115,9 @@ static int __pri_lpwrap_read(struct pri *pri, void *buf, int buflen)
int
res
;
int
res
;
if
(
zap_channel_read
(
spri
->
zdchan
,
buf
,
&
len
)
!=
ZAP_SUCCESS
)
{
if
(
zap_channel_read
(
spri
->
zdchan
,
buf
,
&
len
)
!=
ZAP_SUCCESS
)
{
printf
(
"D-READ FAIL! [%s]
\n
"
,
spri
->
zdchan
->
last_error
);
zap_log
(
ZAP_LOG_CRIT
,
"span %d D-READ FAIL! [%s]
\n
"
,
spri
->
span
,
spri
->
zdchan
->
last_error
);
return
0
;
zap_clear_flag
(
spri
,
LPWRAP_PRI_READY
);
return
-
1
;
}
}
res
=
(
int
)
len
;
res
=
(
int
)
len
;
memset
(
&
((
unsigned
char
*
)
buf
)[
res
],
0
,
2
);
memset
(
&
((
unsigned
char
*
)
buf
)[
res
],
0
,
2
);
...
@@ -133,8 +135,9 @@ static int __pri_lpwrap_write(struct pri *pri, void *buf, int buflen)
...
@@ -133,8 +135,9 @@ static int __pri_lpwrap_write(struct pri *pri, void *buf, int buflen)
zap_size_t
len
=
buflen
-
2
;
zap_size_t
len
=
buflen
-
2
;
if
(
zap_channel_write
(
spri
->
zdchan
,
buf
,
buflen
,
&
len
)
!=
ZAP_SUCCESS
)
{
if
(
zap_channel_write
(
spri
->
zdchan
,
buf
,
buflen
,
&
len
)
!=
ZAP_SUCCESS
)
{
printf
(
"D-WRITE FAIL! [%s]
\n
"
,
spri
->
zdchan
->
last_error
);
zap_log
(
ZAP_LOG_CRIT
,
"span %d D-WRITE FAIL! [%s]
\n
"
,
spri
->
span
,
spri
->
zdchan
->
last_error
);
return
0
;
zap_clear_flag
(
spri
,
LPWRAP_PRI_READY
);
return
-
1
;
}
}
//print_bits(buf, (int)buflen-2, bb, sizeof(bb), 1, 0);
//print_bits(buf, (int)buflen-2, bb, sizeof(bb), 1, 0);
...
@@ -155,6 +158,7 @@ int lpwrap_init_pri(struct lpwrap_pri *spri, int span, zap_channel_t *dchan, int
...
@@ -155,6 +158,7 @@ int lpwrap_init_pri(struct lpwrap_pri *spri, int span, zap_channel_t *dchan, int
spri
->
span
=
span
;
spri
->
span
=
span
;
pri_set_debug
(
spri
->
pri
,
debug
);
pri_set_debug
(
spri
->
pri
,
debug
);
ret
=
0
;
ret
=
0
;
zap_set_flag
(
spri
,
LPWRAP_PRI_READY
);
}
else
{
}
else
{
fprintf
(
stderr
,
"Unable to create PRI
\n
"
);
fprintf
(
stderr
,
"Unable to create PRI
\n
"
);
}
}
...
@@ -168,6 +172,7 @@ int lpwrap_one_loop(struct lpwrap_pri *spri)
...
@@ -168,6 +172,7 @@ int lpwrap_one_loop(struct lpwrap_pri *spri)
fd_set
rfds
,
efds
;
fd_set
rfds
,
efds
;
struct
timeval
now
=
{
0
,
0
},
*
next
;
struct
timeval
now
=
{
0
,
0
},
*
next
;
pri_event
*
event
;
pri_event
*
event
;
event_handler
handler
;
int
sel
;
int
sel
;
if
(
spri
->
on_loop
)
{
if
(
spri
->
on_loop
)
{
...
@@ -210,7 +215,6 @@ int lpwrap_one_loop(struct lpwrap_pri *spri)
...
@@ -210,7 +215,6 @@ int lpwrap_one_loop(struct lpwrap_pri *spri)
}
}
if
(
event
)
{
if
(
event
)
{
event_handler
handler
;
/* 0 is catchall event handler */
/* 0 is catchall event handler */
if
((
handler
=
spri
->
eventmap
[
event
->
e
]
?
spri
->
eventmap
[
event
->
e
]
:
spri
->
eventmap
[
0
]
?
spri
->
eventmap
[
0
]
:
NULL
))
{
if
((
handler
=
spri
->
eventmap
[
event
->
e
]
?
spri
->
eventmap
[
event
->
e
]
:
spri
->
eventmap
[
0
]
?
spri
->
eventmap
[
0
]
:
NULL
))
{
handler
(
spri
,
event
->
e
,
event
);
handler
(
spri
,
event
->
e
,
event
);
...
@@ -219,7 +223,15 @@ int lpwrap_one_loop(struct lpwrap_pri *spri)
...
@@ -219,7 +223,15 @@ int lpwrap_one_loop(struct lpwrap_pri *spri)
}
}
}
}
if
(
zap_test_flag
(
spri
,
LPWRAP_PRI_READY
))
{
return
sel
;
return
sel
;
}
if
((
handler
=
spri
->
eventmap
[
LPWRAP_PRI_EVENT_IO_FAIL
]
?
spri
->
eventmap
[
LPWRAP_PRI_EVENT_IO_FAIL
]
:
spri
->
eventmap
[
0
]
?
spri
->
eventmap
[
0
]
:
NULL
))
{
handler
(
spri
,
LPWRAP_PRI_EVENT_IO_FAIL
,
NULL
);
}
return
-
1
;
}
}
int
lpwrap_run_pri
(
struct
lpwrap_pri
*
spri
)
int
lpwrap_run_pri
(
struct
lpwrap_pri
*
spri
)
...
@@ -227,8 +239,9 @@ int lpwrap_run_pri(struct lpwrap_pri *spri)
...
@@ -227,8 +239,9 @@ int lpwrap_run_pri(struct lpwrap_pri *spri)
int
ret
=
0
;
int
ret
=
0
;
for
(;;){
for
(;;){
ret
=
lpwrap_one_loop
(
spri
);
ret
=
lpwrap_one_loop
(
spri
);
if
(
ret
<
0
){
if
(
ret
<
0
)
{
#ifndef WIN32 //This needs to be adressed fror WIN32 still
#ifndef WIN32 //This needs to be adressed fror WIN32 still
if
(
errno
==
EINTR
){
if
(
errno
==
EINTR
){
...
@@ -236,8 +249,7 @@ int lpwrap_run_pri(struct lpwrap_pri *spri)
...
@@ -236,8 +249,7 @@ int lpwrap_run_pri(struct lpwrap_pri *spri)
continue
;
continue
;
}
}
#endif
#endif
printf
(
"Error = %i
\n
"
,
ret
);
zap_log
(
ZAP_LOG_CRIT
,
"Error = %i [%s]
\n
"
,
ret
,
strerror
(
errno
));
perror
(
"Lpwrap Run Pri: "
);
break
;
break
;
}
}
}
}
...
...
libs/freetdm/src/ozmod/ozmod_libpri/lpwrap_pri.h
浏览文件 @
28d431ae
...
@@ -58,7 +58,8 @@ typedef enum {
...
@@ -58,7 +58,8 @@ typedef enum {
LPWRAP_PRI_EVENT_HANGUP_REQ
=
PRI_EVENT_HANGUP_REQ
,
LPWRAP_PRI_EVENT_HANGUP_REQ
=
PRI_EVENT_HANGUP_REQ
,
LPWRAP_PRI_EVENT_NOTIFY
=
PRI_EVENT_NOTIFY
,
LPWRAP_PRI_EVENT_NOTIFY
=
PRI_EVENT_NOTIFY
,
LPWRAP_PRI_EVENT_PROGRESS
=
PRI_EVENT_PROGRESS
,
LPWRAP_PRI_EVENT_PROGRESS
=
PRI_EVENT_PROGRESS
,
LPWRAP_PRI_EVENT_KEYPAD_DIGIT
=
PRI_EVENT_KEYPAD_DIGIT
LPWRAP_PRI_EVENT_KEYPAD_DIGIT
=
PRI_EVENT_KEYPAD_DIGIT
,
LPWRAP_PRI_EVENT_IO_FAIL
=
19
}
lpwrap_pri_event_t
;
}
lpwrap_pri_event_t
;
typedef
enum
{
typedef
enum
{
...
...
libs/freetdm/src/ozmod/ozmod_libpri/ozmod_libpri.c
浏览文件 @
28d431ae
...
@@ -704,10 +704,44 @@ static int on_anything(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_ev
...
@@ -704,10 +704,44 @@ static int on_anything(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_ev
static
int
on_io_fail
(
lpwrap_pri_t
*
spri
,
lpwrap_pri_event_t
event_type
,
pri_event
*
pevent
)
{
zap_log
(
ZAP_LOG_DEBUG
,
"Caught Event span %d %u (%s)
\n
"
,
spri
->
span
,
event_type
,
lpwrap_pri_event_str
(
event_type
));
return
0
;
}
static
void
*
zap_libpri_run
(
zap_thread_t
*
me
,
void
*
obj
)
static
void
*
zap_libpri_run
(
zap_thread_t
*
me
,
void
*
obj
)
{
{
zap_span_t
*
span
=
(
zap_span_t
*
)
obj
;
zap_span_t
*
span
=
(
zap_span_t
*
)
obj
;
zap_libpri_data_t
*
isdn_data
=
span
->
signal_data
;
zap_libpri_data_t
*
isdn_data
=
span
->
signal_data
;
int
x
,
i
;
while
(
zap_running
())
{
x
=
0
;
for
(
i
=
1
;
i
<=
span
->
chan_count
;
i
++
)
{
if
(
span
->
channels
[
i
]
->
type
==
ZAP_CHAN_TYPE_DQ921
)
{
if
(
zap_channel_open
(
span
->
span_id
,
i
,
&
isdn_data
->
dchan
)
==
ZAP_SUCCESS
)
{
zap_log
(
ZAP_LOG_DEBUG
,
"opening d-channel #%d %d:%d
\n
"
,
x
,
isdn_data
->
dchan
->
span_id
,
isdn_data
->
dchan
->
chan_id
);
isdn_data
->
dchan
->
state
=
ZAP_CHANNEL_STATE_UP
;
x
++
;
break
;
}
}
}
if
(
x
&&
lpwrap_init_pri
(
&
isdn_data
->
spri
,
span
->
span_id
,
// span
isdn_data
->
dchan
,
// dchan
isdn_data
->
pswitch
,
isdn_data
->
node
,
isdn_data
->
debug
)
<
0
)
{
snprintf
(
span
->
last_error
,
sizeof
(
span
->
last_error
),
"PRI init FAIL!"
);
}
else
{
LPWRAP_MAP_PRI_EVENT
(
isdn_data
->
spri
,
LPWRAP_PRI_EVENT_ANY
,
on_anything
);
LPWRAP_MAP_PRI_EVENT
(
isdn_data
->
spri
,
LPWRAP_PRI_EVENT_ANY
,
on_anything
);
LPWRAP_MAP_PRI_EVENT
(
isdn_data
->
spri
,
LPWRAP_PRI_EVENT_RING
,
on_ring
);
LPWRAP_MAP_PRI_EVENT
(
isdn_data
->
spri
,
LPWRAP_PRI_EVENT_RING
,
on_ring
);
...
@@ -721,11 +755,19 @@ static void *zap_libpri_run(zap_thread_t *me, void *obj)
...
@@ -721,11 +755,19 @@ static void *zap_libpri_run(zap_thread_t *me, void *obj)
LPWRAP_MAP_PRI_EVENT
(
isdn_data
->
spri
,
LPWRAP_PRI_EVENT_HANGUP
,
on_hangup
);
LPWRAP_MAP_PRI_EVENT
(
isdn_data
->
spri
,
LPWRAP_PRI_EVENT_HANGUP
,
on_hangup
);
LPWRAP_MAP_PRI_EVENT
(
isdn_data
->
spri
,
LPWRAP_PRI_EVENT_INFO_RECEIVED
,
on_info
);
LPWRAP_MAP_PRI_EVENT
(
isdn_data
->
spri
,
LPWRAP_PRI_EVENT_INFO_RECEIVED
,
on_info
);
LPWRAP_MAP_PRI_EVENT
(
isdn_data
->
spri
,
LPWRAP_PRI_EVENT_RESTART
,
on_restart
);
LPWRAP_MAP_PRI_EVENT
(
isdn_data
->
spri
,
LPWRAP_PRI_EVENT_RESTART
,
on_restart
);
LPWRAP_MAP_PRI_EVENT
(
isdn_data
->
spri
,
LPWRAP_PRI_EVENT_IO_FAIL
,
on_io_fail
);
isdn_data
->
spri
.
on_loop
=
check_flags
;
isdn_data
->
spri
.
on_loop
=
check_flags
;
isdn_data
->
spri
.
private_info
=
span
;
isdn_data
->
spri
.
private_info
=
span
;
lpwrap_run_pri
(
&
isdn_data
->
spri
);
lpwrap_run_pri
(
&
isdn_data
->
spri
);
zap_channel_close
(
&
isdn_data
->
dchan
);
}
zap_log
(
ZAP_LOG_CRIT
,
"PRI down on span %d
\n
"
,
isdn_data
->
spri
.
span
);
zap_sleep
(
5000
);
}
return
NULL
;
return
NULL
;
...
@@ -736,9 +778,10 @@ static zap_status_t zap_libpri_start(zap_span_t *span)
...
@@ -736,9 +778,10 @@ static zap_status_t zap_libpri_start(zap_span_t *span)
zap_status_t
ret
;
zap_status_t
ret
;
zap_libpri_data_t
*
isdn_data
=
span
->
signal_data
;
zap_libpri_data_t
*
isdn_data
=
span
->
signal_data
;
zap_set_flag
(
isdn_data
,
OZMOD_LIBPRI_RUNNING
);
zap_set_flag
(
isdn_data
,
OZMOD_LIBPRI_RUNNING
);
ret
=
zap_thread_create_detached
(
zap_libpri_run
,
span
);
ret
=
zap_thread_create_detached
(
zap_libpri_run
,
span
);
if
(
ret
!=
ZAP_SUCCESS
)
{
if
(
ret
!=
ZAP_SUCCESS
)
{
return
ret
;
return
ret
;
}
}
...
@@ -806,7 +849,7 @@ static int str2dp(char *dp)
...
@@ -806,7 +849,7 @@ static int str2dp(char *dp)
static
ZIO_SIG_CONFIGURE_FUNCTION
(
zap_libpri_configure_span
)
static
ZIO_SIG_CONFIGURE_FUNCTION
(
zap_libpri_configure_span
)
{
{
uint32_t
i
,
x
=
0
;
uint32_t
i
,
x
=
0
;
zap_channel_t
*
dchans
[
2
]
=
{
0
};
//
zap_channel_t *dchans[2] = {0};
zap_libpri_data_t
*
isdn_data
;
zap_libpri_data_t
*
isdn_data
;
char
*
var
,
*
val
;
char
*
var
,
*
val
;
int32_t
opts
=
0
;
int32_t
opts
=
0
;
...
@@ -823,19 +866,23 @@ static ZIO_SIG_CONFIGURE_FUNCTION(zap_libpri_configure_span)
...
@@ -823,19 +866,23 @@ static ZIO_SIG_CONFIGURE_FUNCTION(zap_libpri_configure_span)
snprintf
(
span
->
last_error
,
sizeof
(
span
->
last_error
),
"Span has more than 2 D-Channels!"
);
snprintf
(
span
->
last_error
,
sizeof
(
span
->
last_error
),
"Span has more than 2 D-Channels!"
);
return
ZAP_FAIL
;
return
ZAP_FAIL
;
}
else
{
}
else
{
#if 0
if (zap_channel_open(span->span_id, i, &dchans[x]) == ZAP_SUCCESS) {
if (zap_channel_open(span->span_id, i, &dchans[x]) == ZAP_SUCCESS) {
zap_log(ZAP_LOG_DEBUG, "opening d-channel #%d %d:%d\n", x, dchans[x]->span_id, dchans[x]->chan_id);
zap_log(ZAP_LOG_DEBUG, "opening d-channel #%d %d:%d\n", x, dchans[x]->span_id, dchans[x]->chan_id);
dchans[x]->state = ZAP_CHANNEL_STATE_UP;
dchans[x]->state = ZAP_CHANNEL_STATE_UP;
x++;
x++;
}
}
#endif
}
}
}
}
}
}
#if 0
if (!x) {
if (!x) {
snprintf(span->last_error, sizeof(span->last_error), "Span has no D-Channels!");
snprintf(span->last_error, sizeof(span->last_error), "Span has no D-Channels!");
return ZAP_FAIL;
return ZAP_FAIL;
}
}
#endif
isdn_data
=
malloc
(
sizeof
(
*
isdn_data
));
isdn_data
=
malloc
(
sizeof
(
*
isdn_data
));
assert
(
isdn_data
!=
NULL
);
assert
(
isdn_data
!=
NULL
);
...
@@ -888,21 +935,12 @@ static ZIO_SIG_CONFIGURE_FUNCTION(zap_libpri_configure_span)
...
@@ -888,21 +935,12 @@ static ZIO_SIG_CONFIGURE_FUNCTION(zap_libpri_configure_span)
span
->
start
=
zap_libpri_start
;
span
->
start
=
zap_libpri_start
;
isdn_data
->
sig_cb
=
sig_cb
;
isdn_data
->
sig_cb
=
sig_cb
;
isdn_data
->
dchans
[
0
]
=
dchans
[
0
];
//
isdn_data->dchans[0] = dchans[0];
isdn_data
->
dchans
[
1
]
=
dchans
[
1
];
//
isdn_data->dchans[1] = dchans[1];
isdn_data
->
dchan
=
isdn_data
->
dchans
[
0
];
//
isdn_data->dchan = isdn_data->dchans[0];
isdn_data
->
debug
=
parse_debug
(
debug
);
isdn_data
->
debug
=
parse_debug
(
debug
);
if
(
lpwrap_init_pri
(
&
isdn_data
->
spri
,
span
->
span_id
,
// span
isdn_data
->
dchan
,
// dchan
isdn_data
->
pswitch
,
isdn_data
->
node
,
isdn_data
->
debug
)
<
0
)
{
snprintf
(
span
->
last_error
,
sizeof
(
span
->
last_error
),
"PRI init FAIL!"
);
return
ZAP_FAIL
;
}
span
->
signal_data
=
isdn_data
;
span
->
signal_data
=
isdn_data
;
span
->
signal_type
=
ZAP_SIGTYPE_ISDN
;
span
->
signal_type
=
ZAP_SIGTYPE_ISDN
;
...
...
libs/freetdm/src/zap_io.c
浏览文件 @
28d431ae
...
@@ -2563,6 +2563,8 @@ zap_status_t zap_global_init(void)
...
@@ -2563,6 +2563,8 @@ zap_status_t zap_global_init(void)
time_init
();
time_init
();
zap_thread_override_default_stacksize
(
ZAP_THREAD_STACKSIZE
);
memset
(
&
interfaces
,
0
,
sizeof
(
interfaces
));
memset
(
&
interfaces
,
0
,
sizeof
(
interfaces
));
globals
.
interface_hash
=
create_hashtable
(
16
,
zap_hash_hashfromstring
,
zap_hash_equalkeys
);
globals
.
interface_hash
=
create_hashtable
(
16
,
zap_hash_hashfromstring
,
zap_hash_equalkeys
);
globals
.
module_hash
=
create_hashtable
(
16
,
zap_hash_hashfromstring
,
zap_hash_equalkeys
);
globals
.
module_hash
=
create_hashtable
(
16
,
zap_hash_hashfromstring
,
zap_hash_equalkeys
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论