Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
98a092b3
提交
98a092b3
authored
9月 09, 2013
作者:
Anthony Minessale
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
FS-5766 --resolve
上级
6a842ab2
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
28 行增加
和
13 行删除
+28
-13
switch_core_media.c
src/switch_core_media.c
+28
-13
没有找到文件。
src/switch_core_media.c
浏览文件 @
98a092b3
...
@@ -3238,6 +3238,8 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
...
@@ -3238,6 +3238,8 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
int
changed
=
0
;
int
changed
=
0
;
switch_rtp_engine_t
*
a_engine
;
//, *v_engine;
switch_rtp_engine_t
*
a_engine
;
//, *v_engine;
switch_media_handle_t
*
smh
;
switch_media_handle_t
*
smh
;
switch_core_session_t
*
b_session
=
NULL
;
switch_channel_t
*
b_channel
=
NULL
;
switch_assert
(
session
);
switch_assert
(
session
);
...
@@ -3248,16 +3250,26 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
...
@@ -3248,16 +3250,26 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
a_engine
=
&
smh
->
engines
[
SWITCH_MEDIA_TYPE_AUDIO
];
a_engine
=
&
smh
->
engines
[
SWITCH_MEDIA_TYPE_AUDIO
];
//v_engine = &smh->engines[SWITCH_MEDIA_TYPE_VIDEO];
//v_engine = &smh->engines[SWITCH_MEDIA_TYPE_VIDEO];
if
(
switch_channel_test_flag
(
session
->
channel
,
CF_SLA_BARGE
)
||
switch_channel_test_flag
(
session
->
channel
,
CF_SLA_BARGING
))
{
switch_channel_mark_hold
(
session
->
channel
,
sendonly
);
if
(
switch_core_session_get_partner
(
session
,
&
b_session
)
==
SWITCH_STATUS_SUCCESS
)
{
return
0
;
b_channel
=
switch_core_session_get_channel
(
b_session
)
;
}
}
if
(
sendonly
&&
switch_channel_test_flag
(
session
->
channel
,
CF_ANSWERED
))
{
if
(
sendonly
&&
switch_channel_test_flag
(
session
->
channel
,
CF_ANSWERED
))
{
if
(
!
switch_channel_test_flag
(
session
->
channel
,
CF_PROTO_HOLD
))
{
if
(
!
switch_channel_test_flag
(
session
->
channel
,
CF_PROTO_HOLD
))
{
const
char
*
stream
;
const
char
*
stream
;
const
char
*
msg
=
"hold"
;
const
char
*
msg
=
"hold"
;
const
char
*
info
=
switch_channel_get_variable
(
session
->
channel
,
"presence_call_info"
);
const
char
*
info
;
if
((
switch_channel_test_flag
(
session
->
channel
,
CF_SLA_BARGE
)
||
switch_channel_test_flag
(
session
->
channel
,
CF_SLA_BARGING
))
&&
(
!
b_channel
||
switch_channel_test_flag
(
b_channel
,
CF_BROADCAST
)))
{
switch_channel_mark_hold
(
session
->
channel
,
sendonly
);
switch_channel_set_flag
(
session
->
channel
,
CF_PROTO_HOLD
);
changed
=
0
;
goto
end
;
}
info
=
switch_channel_get_variable
(
session
->
channel
,
"presence_call_info"
);
if
(
info
)
{
if
(
info
)
{
if
(
switch_stristr
(
"private"
,
info
))
{
if
(
switch_stristr
(
"private"
,
info
))
{
...
@@ -3265,7 +3277,6 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
...
@@ -3265,7 +3277,6 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
}
}
}
}
switch_channel_set_flag
(
session
->
channel
,
CF_PROTO_HOLD
);
switch_channel_set_flag
(
session
->
channel
,
CF_PROTO_HOLD
);
switch_channel_mark_hold
(
session
->
channel
,
SWITCH_TRUE
);
switch_channel_mark_hold
(
session
->
channel
,
SWITCH_TRUE
);
switch_channel_presence
(
session
->
channel
,
"unknown"
,
msg
,
NULL
);
switch_channel_presence
(
session
->
channel
,
"unknown"
,
msg
,
NULL
);
...
@@ -3279,7 +3290,8 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
...
@@ -3279,7 +3290,8 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
stream
=
"local_stream://moh"
;
stream
=
"local_stream://moh"
;
}
}
if
(
stream
&&
strcasecmp
(
stream
,
"silence"
))
{
if
(
stream
&&
strcasecmp
(
stream
,
"silence"
)
&&
(
!
b_channel
||
!
switch_channel_test_flag
(
b_channel
,
CF_BROADCAST
)))
{
if
(
!
strcasecmp
(
stream
,
"indicate_hold"
))
{
if
(
!
strcasecmp
(
stream
,
"indicate_hold"
))
{
switch_channel_set_flag
(
session
->
channel
,
CF_SUSPEND
);
switch_channel_set_flag
(
session
->
channel
,
CF_SUSPEND
);
switch_channel_set_flag
(
session
->
channel
,
CF_HOLD
);
switch_channel_set_flag
(
session
->
channel
,
CF_HOLD
);
...
@@ -3290,6 +3302,7 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
...
@@ -3290,6 +3302,7 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
switch_yield
(
250000
);
switch_yield
(
250000
);
}
}
}
}
}
}
}
else
{
}
else
{
if
(
switch_channel_test_flag
(
session
->
channel
,
CF_HOLD_LOCK
))
{
if
(
switch_channel_test_flag
(
session
->
channel
,
CF_HOLD_LOCK
))
{
...
@@ -3301,9 +3314,6 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
...
@@ -3301,9 +3314,6 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
switch_channel_clear_flag
(
session
->
channel
,
CF_HOLD_LOCK
);
switch_channel_clear_flag
(
session
->
channel
,
CF_HOLD_LOCK
);
if
(
switch_channel_test_flag
(
session
->
channel
,
CF_PROTO_HOLD
))
{
if
(
switch_channel_test_flag
(
session
->
channel
,
CF_PROTO_HOLD
))
{
const
char
*
uuid
;
switch_core_session_t
*
b_session
;
switch_yield
(
250000
);
switch_yield
(
250000
);
if
(
a_engine
->
max_missed_packets
)
{
if
(
a_engine
->
max_missed_packets
)
{
...
@@ -3311,9 +3321,7 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
...
@@ -3311,9 +3321,7 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
switch_rtp_set_max_missed_packets
(
a_engine
->
rtp_session
,
a_engine
->
max_missed_packets
);
switch_rtp_set_max_missed_packets
(
a_engine
->
rtp_session
,
a_engine
->
max_missed_packets
);
}
}
if
((
uuid
=
switch_channel_get_partner_uuid
(
session
->
channel
))
&&
(
b_session
=
switch_core_session_locate
(
uuid
)))
{
if
(
b_channel
)
{
switch_channel_t
*
b_channel
=
switch_core_session_get_channel
(
b_session
);
if
(
switch_channel_test_flag
(
session
->
channel
,
CF_HOLD
))
{
if
(
switch_channel_test_flag
(
session
->
channel
,
CF_HOLD
))
{
switch_ivr_unhold
(
b_session
);
switch_ivr_unhold
(
b_session
);
switch_channel_clear_flag
(
session
->
channel
,
CF_SUSPEND
);
switch_channel_clear_flag
(
session
->
channel
,
CF_SUSPEND
);
...
@@ -3322,7 +3330,6 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
...
@@ -3322,7 +3330,6 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
switch_channel_stop_broadcast
(
b_channel
);
switch_channel_stop_broadcast
(
b_channel
);
switch_channel_wait_for_flag
(
b_channel
,
CF_BROADCAST
,
SWITCH_FALSE
,
5000
,
NULL
);
switch_channel_wait_for_flag
(
b_channel
,
CF_BROADCAST
,
SWITCH_FALSE
,
5000
,
NULL
);
}
}
switch_core_session_rwunlock
(
b_session
);
}
}
switch_channel_clear_flag
(
session
->
channel
,
CF_PROTO_HOLD
);
switch_channel_clear_flag
(
session
->
channel
,
CF_PROTO_HOLD
);
...
@@ -3332,6 +3339,14 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
...
@@ -3332,6 +3339,14 @@ SWITCH_DECLARE(int) switch_core_media_toggle_hold(switch_core_session_t *session
}
}
}
}
end
:
if
(
b_session
)
{
switch_core_session_rwunlock
(
b_session
);
}
return
changed
;
return
changed
;
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论