提交 66866fb1 authored 作者: Anthony Minessale's avatar Anthony Minessale

fix proxy-media issue regression

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15181 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 f489f91e
...@@ -868,7 +868,8 @@ CF_STOP_BROADCAST - Signal to stop broadcast ...@@ -868,7 +868,8 @@ CF_STOP_BROADCAST - Signal to stop broadcast
typedef enum { typedef enum {
CC_MEDIA_ACK = 1, CC_MEDIA_ACK = 1,
CC_BYPASS_MEDIA = 1, CC_BYPASS_MEDIA,
CC_PROXY_MEDIA,
/* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */ /* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
CC_FLAG_MAX CC_FLAG_MAX
} switch_channel_cap_t; } switch_channel_cap_t;
...@@ -914,6 +915,7 @@ typedef enum { ...@@ -914,6 +915,7 @@ typedef enum {
CF_ORIGINATOR, CF_ORIGINATOR,
CF_XFER_ZOMBIE, CF_XFER_ZOMBIE,
CF_MEDIA_ACK, CF_MEDIA_ACK,
CF_THREAD_SLEEPING,
/* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */ /* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
CF_FLAG_MAX CF_FLAG_MAX
} switch_channel_flag_t; } switch_channel_flag_t;
......
...@@ -523,6 +523,7 @@ void sofia_glue_attach_private(switch_core_session_t *session, sofia_profile_t * ...@@ -523,6 +523,7 @@ void sofia_glue_attach_private(switch_core_session_t *session, sofia_profile_t *
tech_pvt->channel = switch_core_session_get_channel(session); tech_pvt->channel = switch_core_session_get_channel(session);
switch_channel_set_cap(tech_pvt->channel, CC_MEDIA_ACK); switch_channel_set_cap(tech_pvt->channel, CC_MEDIA_ACK);
switch_channel_set_cap(tech_pvt->channel, CC_BYPASS_MEDIA); switch_channel_set_cap(tech_pvt->channel, CC_BYPASS_MEDIA);
switch_channel_set_cap(tech_pvt->channel, CC_PROXY_MEDIA);
switch_core_session_set_private(session, tech_pvt); switch_core_session_set_private(session, tech_pvt);
......
...@@ -507,19 +507,25 @@ SWITCH_DECLARE(switch_call_cause_t) switch_core_session_outgoing_channel(switch_ ...@@ -507,19 +507,25 @@ SWITCH_DECLARE(switch_call_cause_t) switch_core_session_outgoing_channel(switch_
if (switch_channel_test_flag(channel, CF_PROXY_MODE)) { if (switch_channel_test_flag(channel, CF_PROXY_MODE)) {
if (switch_channel_test_cap(peer_channel, CC_BYPASS_MEDIA)) { if (switch_channel_test_cap(peer_channel, CC_BYPASS_MEDIA)) {
switch_channel_set_flag(peer_channel, CF_PROXY_MODE); switch_channel_set_flag(peer_channel, CF_PROXY_MODE);
if (switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
switch_channel_set_flag(peer_channel, CF_PROXY_MEDIA);
if (switch_channel_test_flag(channel, CF_VIDEO)) {
switch_channel_set_flag(peer_channel, CF_VIDEO);
}
}
} else { } else {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING,
"%s does not support the proxy feature, disabling.\n", "%s does not support the proxy feature, disabling.\n",
switch_channel_get_name(peer_channel)); switch_channel_get_name(peer_channel));
switch_channel_clear_flag(channel, CF_PROXY_MODE); switch_channel_clear_flag(channel, CF_PROXY_MODE);
}
}
if (switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
if (switch_channel_test_cap(peer_channel, CC_PROXY_MEDIA)) {
switch_channel_set_flag(peer_channel, CF_PROXY_MEDIA);
if (switch_channel_test_flag(channel, CF_VIDEO)) {
switch_channel_set_flag(peer_channel, CF_VIDEO);
}
} else {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING,
"%s does not support the proxy feature, disabling.\n",
switch_channel_get_name(peer_channel));
switch_channel_clear_flag(channel, CF_PROXY_MEDIA); switch_channel_clear_flag(channel, CF_PROXY_MEDIA);
} }
} }
...@@ -703,7 +709,9 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_queue_message(switch_core_se ...@@ -703,7 +709,9 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_queue_message(switch_core_se
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
} }
if (switch_channel_test_flag(session->channel, CF_PROXY_MODE)) { switch_core_session_kill_channel(session, SWITCH_SIG_BREAK);
if (switch_channel_test_flag(session->channel, CF_PROXY_MODE) || switch_channel_test_flag(session->channel, CF_THREAD_SLEEPING)) {
switch_core_session_wake_session_thread(session); switch_core_session_wake_session_thread(session);
} }
} }
......
...@@ -381,8 +381,10 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session) ...@@ -381,8 +381,10 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session)
switch_core_session_receive_message(session, message); switch_core_session_receive_message(session, message);
message = NULL; message = NULL;
} }
switch_channel_set_flag(session->channel, CF_THREAD_SLEEPING);
switch_thread_cond_wait(session->cond, session->mutex); switch_thread_cond_wait(session->cond, session->mutex);
switch_channel_clear_flag(session->channel, CF_THREAD_SLEEPING);
while (switch_core_session_dequeue_message(session, &message) == SWITCH_STATUS_SUCCESS) { while (switch_core_session_dequeue_message(session, &message) == SWITCH_STATUS_SUCCESS) {
switch_core_session_receive_message(session, message); switch_core_session_receive_message(session, message);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论