Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
4f9402c0
提交
4f9402c0
authored
2月 01, 2014
作者:
Peter Olsson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
mod_v8: Fixed line endings, and removed old code.
上级
04005dfa
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
264 行增加
和
276 行删除
+264
-276
fseventhandler.cpp
src/mod/languages/mod_v8/src/fseventhandler.cpp
+264
-276
没有找到文件。
src/mod/languages/mod_v8/src/fseventhandler.cpp
浏览文件 @
4f9402c0
...
...
@@ -37,13 +37,13 @@
using
namespace
std
;
using
namespace
v8
;
typedef
struct
{
char
*
cmd
;
char
*
arg
;
char
uuid_str
[
SWITCH_UUID_FORMATTED_LENGTH
+
1
];
int
ack
;
switch_memory_pool_t
*
pool
;
}
api_command_struct_t
;
typedef
struct
{
char
*
cmd
;
char
*
arg
;
char
uuid_str
[
SWITCH_UUID_FORMATTED_LENGTH
+
1
];
int
ack
;
switch_memory_pool_t
*
pool
;
}
api_command_struct_t
;
static
const
char
js_class_name
[]
=
"EventHandler"
;
...
...
@@ -98,87 +98,77 @@ void FSEventHandler::QueueEvent(switch_event_t *event)
switch_mutex_lock
(
_mutex
);
if
(
_event_list
[
SWITCH_EVENT_ALL
])
{
send
=
1
;
}
else
if
((
_event_list
[
event
->
event_id
]))
{
if
(
event
->
event_id
!=
SWITCH_EVENT_CUSTOM
||
!
event
->
subclass_name
||
(
switch_core_hash_find
(
_event_hash
,
event
->
subclass_name
)))
{
send
=
1
;
}
}
if
(
send
)
{
if
(
_filters
&&
_filters
->
headers
)
{
switch_event_header_t
*
hp
;
const
char
*
hval
;
send
=
0
;
for
(
hp
=
_filters
->
headers
;
hp
;
hp
=
hp
->
next
)
{
if
((
hval
=
switch_event_get_header
(
event
,
hp
->
name
)))
{
const
char
*
comp_to
=
hp
->
value
;
int
pos
=
1
,
cmp
=
0
;
while
(
comp_to
&&
*
comp_to
)
{
if
(
*
comp_to
==
'+'
)
{
pos
=
1
;
}
else
if
(
*
comp_to
==
'-'
)
{
pos
=
0
;
}
else
if
(
*
comp_to
!=
' '
)
{
break
;
}
comp_to
++
;
}
if
(
send
&&
pos
)
{
continue
;
}
if
(
!
comp_to
)
{
continue
;
}
if
(
*
hp
->
value
==
'/'
)
{
switch_regex_t
*
re
=
NULL
;
int
ovector
[
30
];
cmp
=
!!
switch_regex_perform
(
hval
,
comp_to
,
&
re
,
ovector
,
sizeof
(
ovector
)
/
sizeof
(
ovector
[
0
]));
switch_regex_safe_free
(
re
);
}
else
{
cmp
=
!
strcasecmp
(
hval
,
comp_to
);
}
if
(
cmp
)
{
if
(
pos
)
{
send
=
1
;
}
else
{
send
=
0
;
break
;
}
}
}
}
}
}
if
(
_event_list
[
SWITCH_EVENT_ALL
])
{
send
=
1
;
}
else
if
((
_event_list
[
event
->
event_id
]))
{
if
(
event
->
event_id
!=
SWITCH_EVENT_CUSTOM
||
!
event
->
subclass_name
||
(
switch_core_hash_find
(
_event_hash
,
event
->
subclass_name
)))
{
send
=
1
;
}
}
if
(
send
)
{
if
(
_filters
&&
_filters
->
headers
)
{
switch_event_header_t
*
hp
;
const
char
*
hval
;
send
=
0
;
for
(
hp
=
_filters
->
headers
;
hp
;
hp
=
hp
->
next
)
{
if
((
hval
=
switch_event_get_header
(
event
,
hp
->
name
)))
{
const
char
*
comp_to
=
hp
->
value
;
int
pos
=
1
,
cmp
=
0
;
while
(
comp_to
&&
*
comp_to
)
{
if
(
*
comp_to
==
'+'
)
{
pos
=
1
;
}
else
if
(
*
comp_to
==
'-'
)
{
pos
=
0
;
}
else
if
(
*
comp_to
!=
' '
)
{
break
;
}
comp_to
++
;
}
if
(
send
&&
pos
)
{
continue
;
}
if
(
!
comp_to
)
{
continue
;
}
if
(
*
hp
->
value
==
'/'
)
{
switch_regex_t
*
re
=
NULL
;
int
ovector
[
30
];
cmp
=
!!
switch_regex_perform
(
hval
,
comp_to
,
&
re
,
ovector
,
sizeof
(
ovector
)
/
sizeof
(
ovector
[
0
]));
switch_regex_safe_free
(
re
);
}
else
{
cmp
=
!
strcasecmp
(
hval
,
comp_to
);
}
if
(
cmp
)
{
if
(
pos
)
{
send
=
1
;
}
else
{
send
=
0
;
break
;
}
}
}
}
}
}
switch_mutex_unlock
(
_mutex
);
if
(
send
)
{
if
(
switch_event_dup
(
&
clone
,
event
)
==
SWITCH_STATUS_SUCCESS
)
{
if
(
switch_queue_trypush
(
_event_queue
,
clone
)
==
SWITCH_STATUS_SUCCESS
)
{
// TODO
/*if (l->lost_events) {
int le = l->lost_events;
l->lost_events = 0;
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(l->session), SWITCH_LOG_CRIT, "Lost %d events!\n", le);
}*/
}
else
{
/*if (++l->lost_events > MAX_MISSED) {
kill_listener(l, NULL);
}*/
if
(
switch_queue_trypush
(
_event_queue
,
clone
)
!=
SWITCH_STATUS_SUCCESS
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_WARNING
,
"Lost event to JS EventHandler, you must read the events faster!
\n
"
);
switch_event_destroy
(
&
clone
);
}
}
else
{
////switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(l->session)
, SWITCH_LOG_ERROR, "Memory Error!\n");
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"Memory Error!
\n
"
);
}
}
}
...
...
@@ -194,28 +184,28 @@ void FSEventHandler::DoSubscribe(const v8::FunctionCallbackInfo<v8::Value>& info
String
::
Utf8Value
str
(
info
[
i
]);
switch_event_types_t
etype
;
if
(
custom
)
{
switch_mutex_lock
(
_mutex
);
switch_core_hash_insert
(
_event_hash
,
js_safe_str
(
*
str
),
MARKER
);
switch_mutex_unlock
(
_mutex
);
}
else
if
(
switch_name_event
(
js_safe_str
(
*
str
),
&
etype
)
==
SWITCH_STATUS_SUCCESS
)
{
ret
=
true
;
if
(
etype
==
SWITCH_EVENT_ALL
)
{
uint32_t
x
=
0
;
for
(
x
=
0
;
x
<
SWITCH_EVENT_ALL
;
x
++
)
{
_event_list
[
x
]
=
1
;
}
}
if
(
etype
<=
SWITCH_EVENT_ALL
)
{
_event_list
[
etype
]
=
1
;
}
if
(
etype
==
SWITCH_EVENT_CUSTOM
)
{
custom
++
;
}
}
if
(
custom
)
{
switch_mutex_lock
(
_mutex
);
switch_core_hash_insert
(
_event_hash
,
js_safe_str
(
*
str
),
MARKER
);
switch_mutex_unlock
(
_mutex
);
}
else
if
(
switch_name_event
(
js_safe_str
(
*
str
),
&
etype
)
==
SWITCH_STATUS_SUCCESS
)
{
ret
=
true
;
if
(
etype
==
SWITCH_EVENT_ALL
)
{
uint32_t
x
=
0
;
for
(
x
=
0
;
x
<
SWITCH_EVENT_ALL
;
x
++
)
{
_event_list
[
x
]
=
1
;
}
}
if
(
etype
<=
SWITCH_EVENT_ALL
)
{
_event_list
[
etype
]
=
1
;
}
if
(
etype
==
SWITCH_EVENT_CUSTOM
)
{
custom
++
;
}
}
}
info
.
GetReturnValue
().
Set
(
ret
);
...
...
@@ -242,30 +232,30 @@ JS_EVENTHANDLER_FUNCTION_IMPL(UnSubscribe)
String
::
Utf8Value
str
(
info
[
i
]);
switch_event_types_t
etype
;
if
(
custom
)
{
switch_mutex_lock
(
_mutex
);
switch_core_hash_delete
(
_event_hash
,
js_safe_str
(
*
str
));
switch_mutex_unlock
(
_mutex
);
}
else
if
(
switch_name_event
(
js_safe_str
(
*
str
),
&
etype
)
==
SWITCH_STATUS_SUCCESS
)
{
uint32_t
x
=
0
;
ret
=
true
;
if
(
etype
==
SWITCH_EVENT_CUSTOM
)
{
custom
++
;
}
else
if
(
etype
==
SWITCH_EVENT_ALL
)
{
for
(
x
=
0
;
x
<=
SWITCH_EVENT_ALL
;
x
++
)
{
_event_list
[
x
]
=
0
;
}
}
else
{
if
(
_event_list
[
SWITCH_EVENT_ALL
])
{
_event_list
[
SWITCH_EVENT_ALL
]
=
0
;
for
(
x
=
0
;
x
<
SWITCH_EVENT_ALL
;
x
++
)
{
_event_list
[
x
]
=
1
;
}
}
_event_list
[
etype
]
=
0
;
}
}
if
(
custom
)
{
switch_mutex_lock
(
_mutex
);
switch_core_hash_delete
(
_event_hash
,
js_safe_str
(
*
str
));
switch_mutex_unlock
(
_mutex
);
}
else
if
(
switch_name_event
(
js_safe_str
(
*
str
),
&
etype
)
==
SWITCH_STATUS_SUCCESS
)
{
uint32_t
x
=
0
;
ret
=
true
;
if
(
etype
==
SWITCH_EVENT_CUSTOM
)
{
custom
++
;
}
else
if
(
etype
==
SWITCH_EVENT_ALL
)
{
for
(
x
=
0
;
x
<=
SWITCH_EVENT_ALL
;
x
++
)
{
_event_list
[
x
]
=
0
;
}
}
else
{
if
(
_event_list
[
SWITCH_EVENT_ALL
])
{
_event_list
[
SWITCH_EVENT_ALL
]
=
0
;
for
(
x
=
0
;
x
<
SWITCH_EVENT_ALL
;
x
++
)
{
_event_list
[
x
]
=
1
;
}
}
_event_list
[
etype
]
=
0
;
}
}
}
info
.
GetReturnValue
().
Set
(
ret
);
...
...
@@ -279,27 +269,27 @@ JS_EVENTHANDLER_FUNCTION_IMPL(DeleteFilter)
String
::
Utf8Value
str
(
info
[
0
]);
const
char
*
headerName
=
js_safe_str
(
*
str
);
if
(
zstr
(
headerName
))
{
info
.
GetReturnValue
().
Set
(
false
);
return
;
}
if
(
zstr
(
headerName
))
{
info
.
GetReturnValue
().
Set
(
false
);
return
;
}
switch_mutex_lock
(
_mutex
);
if
(
!
_filters
)
{
switch_event_create_plain
(
&
_filters
,
SWITCH_EVENT_CLONE
);
}
if
(
!
strcasecmp
(
headerName
,
"all"
))
{
switch_event_destroy
(
&
_filters
);
switch_event_create_plain
(
&
_filters
,
SWITCH_EVENT_CLONE
);
}
else
{
switch_event_del_header
(
_filters
,
headerName
);
}
info
.
GetReturnValue
().
Set
(
true
);
switch_mutex_unlock
(
_mutex
);
if
(
!
_filters
)
{
switch_event_create_plain
(
&
_filters
,
SWITCH_EVENT_CLONE
);
}
if
(
!
strcasecmp
(
headerName
,
"all"
))
{
switch_event_destroy
(
&
_filters
);
switch_event_create_plain
(
&
_filters
,
SWITCH_EVENT_CLONE
);
}
else
{
switch_event_del_header
(
_filters
,
headerName
);
}
info
.
GetReturnValue
().
Set
(
true
);
switch_mutex_unlock
(
_mutex
);
}
}
...
...
@@ -313,22 +303,22 @@ JS_EVENTHANDLER_FUNCTION_IMPL(AddFilter)
const
char
*
headerName
=
js_safe_str
(
*
str1
);
const
char
*
headerVal
=
js_safe_str
(
*
str2
);
if
(
zstr
(
headerName
)
||
zstr
(
headerVal
))
{
info
.
GetReturnValue
().
Set
(
false
);
return
;
}
if
(
zstr
(
headerName
)
||
zstr
(
headerVal
))
{
info
.
GetReturnValue
().
Set
(
false
);
return
;
}
switch_mutex_lock
(
_mutex
);
if
(
!
_filters
)
{
switch_event_create_plain
(
&
_filters
,
SWITCH_EVENT_CLONE
);
}
switch_event_add_header_string
(
_filters
,
SWITCH_STACK_BOTTOM
,
headerName
,
headerVal
);
info
.
GetReturnValue
().
Set
(
true
);
switch_mutex_unlock
(
_mutex
);
if
(
!
_filters
)
{
switch_event_create_plain
(
&
_filters
,
SWITCH_EVENT_CLONE
);
}
switch_event_add_header_string
(
_filters
,
SWITCH_STACK_BOTTOM
,
headerName
,
headerVal
);
info
.
GetReturnValue
().
Set
(
true
);
switch_mutex_unlock
(
_mutex
);
}
}
...
...
@@ -397,21 +387,19 @@ JS_EVENTHANDLER_FUNCTION_IMPL(SendEvent)
switch_core_session_t
*
session
;
switch_status_t
status
=
SWITCH_STATUS_FALSE
;
if
((
session
=
switch_core_session_locate
(
session_uuid
.
c_str
())))
{
if
((
status
=
switch_core_session_queue_private_event
(
session
,
event
,
SWITCH_FALSE
))
==
SWITCH_STATUS_SUCCESS
)
{
info
.
GetReturnValue
().
Set
(
true
);
}
else
{
info
.
GetReturnValue
().
Set
(
false
);
}
switch_core_session_rwunlock
(
session
);
}
else
{
info
.
GetReturnValue
().
Set
(
false
);
// TODO LOGGING
//switch_snprintf(reply, reply_len, "-ERR invalid session id [%s]", switch_str_nil(uuid));
}
if
((
session
=
switch_core_session_locate
(
session_uuid
.
c_str
())))
{
if
((
status
=
switch_core_session_queue_private_event
(
session
,
event
,
SWITCH_FALSE
))
==
SWITCH_STATUS_SUCCESS
)
{
info
.
GetReturnValue
().
Set
(
true
);
}
else
{
info
.
GetReturnValue
().
Set
(
false
);
}
switch_core_session_rwunlock
(
session
);
}
else
{
info
.
GetReturnValue
().
Set
(
false
);
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"Invalid session id [%s]
\n
"
,
switch_str_nil
(
session_uuid
.
c_str
()));
}
}
else
{
/* "Normal" event */
// TODO LOGGING
switch_event_fire
(
event
);
}
}
...
...
@@ -448,78 +436,78 @@ JS_EVENTHANDLER_FUNCTION_IMPL(ExecuteApi)
}
}
static
void
*
SWITCH_THREAD_FUNC
api_exec
(
switch_thread_t
*
thread
,
void
*
obj
)
{
api_command_struct_t
*
acs
=
(
api_command_struct_t
*
)
obj
;
switch_stream_handle_t
stream
=
{
0
};
char
*
reply
,
*
freply
=
NULL
;
switch_status_t
status
;
switch_event_t
*
event
;
if
(
!
acs
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"Internal error.
\n
"
);
return
NULL
;
}
acs
->
ack
=
1
;
SWITCH_STANDARD_STREAM
(
stream
);
status
=
switch_api_execute
(
acs
->
cmd
,
acs
->
arg
,
NULL
,
&
stream
);
if
(
status
==
SWITCH_STATUS_SUCCESS
)
{
reply
=
(
char
*
)
stream
.
data
;
}
else
{
freply
=
switch_mprintf
(
"-ERR %s Command not found!
\n
"
,
acs
->
cmd
);
reply
=
freply
;
}
if
(
!
reply
)
{
reply
=
"Command returned no output!"
;
}
if
(
switch_event_create
(
&
event
,
SWITCH_EVENT_BACKGROUND_JOB
)
==
SWITCH_STATUS_SUCCESS
)
{
switch_event_add_header_string
(
event
,
SWITCH_STACK_BOTTOM
,
"Job-UUID"
,
acs
->
uuid_str
);
switch_event_add_header_string
(
event
,
SWITCH_STACK_BOTTOM
,
"Job-Command"
,
acs
->
cmd
);
if
(
acs
->
arg
)
{
switch_event_add_header_string
(
event
,
SWITCH_STACK_BOTTOM
,
"Job-Command-Arg"
,
acs
->
arg
);
}
switch_event_add_body
(
event
,
"%s"
,
reply
);
switch_event_fire
(
&
event
);
}
switch_safe_free
(
stream
.
data
);
switch_safe_free
(
freply
);
switch_memory_pool_t
*
pool
=
acs
->
pool
;
if
(
acs
->
ack
==
-
1
)
{
int
sanity
=
2000
;
while
(
acs
->
ack
==
-
1
)
{
switch_cond_next
();
if
(
--
sanity
<=
0
)
break
;
}
}
acs
=
NULL
;
switch_core_destroy_memory_pool
(
&
pool
);
pool
=
NULL
;
return
NULL
;
}
static
void
*
SWITCH_THREAD_FUNC
api_exec
(
switch_thread_t
*
thread
,
void
*
obj
)
{
api_command_struct_t
*
acs
=
(
api_command_struct_t
*
)
obj
;
switch_stream_handle_t
stream
=
{
0
};
char
*
reply
,
*
freply
=
NULL
;
switch_status_t
status
;
switch_event_t
*
event
;
if
(
!
acs
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG
,
SWITCH_LOG_ERROR
,
"Internal error.
\n
"
);
return
NULL
;
}
acs
->
ack
=
1
;
SWITCH_STANDARD_STREAM
(
stream
);
status
=
switch_api_execute
(
acs
->
cmd
,
acs
->
arg
,
NULL
,
&
stream
);
if
(
status
==
SWITCH_STATUS_SUCCESS
)
{
reply
=
(
char
*
)
stream
.
data
;
}
else
{
freply
=
switch_mprintf
(
"-ERR %s Command not found!
\n
"
,
acs
->
cmd
);
reply
=
freply
;
}
if
(
!
reply
)
{
reply
=
"Command returned no output!"
;
}
if
(
switch_event_create
(
&
event
,
SWITCH_EVENT_BACKGROUND_JOB
)
==
SWITCH_STATUS_SUCCESS
)
{
switch_event_add_header_string
(
event
,
SWITCH_STACK_BOTTOM
,
"Job-UUID"
,
acs
->
uuid_str
);
switch_event_add_header_string
(
event
,
SWITCH_STACK_BOTTOM
,
"Job-Command"
,
acs
->
cmd
);
if
(
acs
->
arg
)
{
switch_event_add_header_string
(
event
,
SWITCH_STACK_BOTTOM
,
"Job-Command-Arg"
,
acs
->
arg
);
}
switch_event_add_body
(
event
,
"%s"
,
reply
);
switch_event_fire
(
&
event
);
}
switch_safe_free
(
stream
.
data
);
switch_safe_free
(
freply
);
switch_memory_pool_t
*
pool
=
acs
->
pool
;
if
(
acs
->
ack
==
-
1
)
{
int
sanity
=
2000
;
while
(
acs
->
ack
==
-
1
)
{
switch_cond_next
();
if
(
--
sanity
<=
0
)
break
;
}
}
acs
=
NULL
;
switch_core_destroy_memory_pool
(
&
pool
);
pool
=
NULL
;
return
NULL
;
}
JS_EVENTHANDLER_FUNCTION_IMPL
(
ExecuteBgApi
)
{
string
cmd
;
string
arg
;
string
jobuuid
;
api_command_struct_t
*
acs
=
NULL
;
switch_memory_pool_t
*
pool
;
switch_thread_t
*
thread
;
switch_threadattr_t
*
thd_attr
=
NULL
;
switch_uuid_t
uuid
;
int
sanity
=
2000
;
string
cmd
;
string
arg
;
string
jobuuid
;
api_command_struct_t
*
acs
=
NULL
;
switch_memory_pool_t
*
pool
;
switch_thread_t
*
thread
;
switch_threadattr_t
*
thd_attr
=
NULL
;
switch_uuid_t
uuid
;
int
sanity
=
2000
;
if
(
info
.
Length
()
>
0
)
{
String
::
Utf8Value
str
(
info
[
0
]);
cmd
=
js_safe_str
(
*
str
);
...
...
@@ -542,42 +530,42 @@ JS_EVENTHANDLER_FUNCTION_IMPL(ExecuteBgApi)
info
.
GetReturnValue
().
Set
(
false
);
return
;
}
switch_core_new_memory_pool
(
&
pool
);
acs
=
(
api_command_struct_t
*
)
switch_core_alloc
(
pool
,
sizeof
(
*
acs
));
switch_assert
(
acs
);
acs
->
pool
=
pool
;
acs
->
cmd
=
switch_core_strdup
(
acs
->
pool
,
cmd
.
c_str
());
if
(
arg
.
c_str
())
{
acs
->
arg
=
switch_core_strdup
(
acs
->
pool
,
arg
.
c_str
());
}
switch_threadattr_create
(
&
thd_attr
,
acs
->
pool
);
switch_threadattr_detach_set
(
thd_attr
,
1
);
switch_threadattr_stacksize_set
(
thd_attr
,
SWITCH_THREAD_STACKSIZE
);
if
(
jobuuid
.
length
()
>
0
)
{
switch_copy_string
(
acs
->
uuid_str
,
jobuuid
.
c_str
(),
sizeof
(
acs
->
uuid_str
));
}
else
{
switch_uuid_get
(
&
uuid
);
switch_uuid_format
(
acs
->
uuid_str
,
&
uuid
);
}
info
.
GetReturnValue
().
Set
(
String
::
NewFromUtf8
(
info
.
GetIsolate
(),
acs
->
uuid_str
));
switch_thread_create
(
&
thread
,
thd_attr
,
api_exec
,
acs
,
acs
->
pool
);
while
(
!
acs
->
ack
)
{
switch_cond_next
();
if
(
--
sanity
<=
0
)
break
;
}
if
(
acs
->
ack
==
-
1
)
{
acs
->
ack
--
;
}
switch_core_new_memory_pool
(
&
pool
);
acs
=
(
api_command_struct_t
*
)
switch_core_alloc
(
pool
,
sizeof
(
*
acs
));
switch_assert
(
acs
);
acs
->
pool
=
pool
;
acs
->
cmd
=
switch_core_strdup
(
acs
->
pool
,
cmd
.
c_str
());
if
(
arg
.
c_str
())
{
acs
->
arg
=
switch_core_strdup
(
acs
->
pool
,
arg
.
c_str
());
}
switch_threadattr_create
(
&
thd_attr
,
acs
->
pool
);
switch_threadattr_detach_set
(
thd_attr
,
1
);
switch_threadattr_stacksize_set
(
thd_attr
,
SWITCH_THREAD_STACKSIZE
);
if
(
jobuuid
.
length
()
>
0
)
{
switch_copy_string
(
acs
->
uuid_str
,
jobuuid
.
c_str
(),
sizeof
(
acs
->
uuid_str
));
}
else
{
switch_uuid_get
(
&
uuid
);
switch_uuid_format
(
acs
->
uuid_str
,
&
uuid
);
}
info
.
GetReturnValue
().
Set
(
String
::
NewFromUtf8
(
info
.
GetIsolate
(),
acs
->
uuid_str
));
switch_thread_create
(
&
thread
,
thd_attr
,
api_exec
,
acs
,
acs
->
pool
);
while
(
!
acs
->
ack
)
{
switch_cond_next
();
if
(
--
sanity
<=
0
)
break
;
}
if
(
acs
->
ack
==
-
1
)
{
acs
->
ack
--
;
}
}
JS_EVENTHANDLER_FUNCTION_IMPL_STATIC
(
Destroy
)
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论