Diff
Modified: freeswitch/trunk/src/include/switch_types.h (15180 => 15181)
--- freeswitch/trunk/src/include/switch_types.h 2009-10-20 01:36:33 UTC (rev 15180)
+++ freeswitch/trunk/src/include/switch_types.h 2009-10-20 17:03:03 UTC (rev 15181)
@@ -868,7 +868,8 @@
typedef enum {
CC_MEDIA_ACK = 1,
- CC_BYPASS_MEDIA = 1,
+ CC_BYPASS_MEDIA,
+ CC_PROXY_MEDIA,
/* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
CC_FLAG_MAX
} switch_channel_cap_t;
@@ -914,6 +915,7 @@
CF_ORIGINATOR,
CF_XFER_ZOMBIE,
CF_MEDIA_ACK,
+ CF_THREAD_SLEEPING,
/* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
CF_FLAG_MAX
} switch_channel_flag_t;
Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (15180 => 15181)
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c 2009-10-20 01:36:33 UTC (rev 15180)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c 2009-10-20 17:03:03 UTC (rev 15181)
@@ -523,6 +523,7 @@
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_BYPASS_MEDIA);
+ switch_channel_set_cap(tech_pvt->channel, CC_PROXY_MEDIA);
switch_core_session_set_private(session, tech_pvt);
Modified: freeswitch/trunk/src/switch_core_session.c (15180 => 15181)
--- freeswitch/trunk/src/switch_core_session.c 2009-10-20 01:36:33 UTC (rev 15180)
+++ freeswitch/trunk/src/switch_core_session.c 2009-10-20 17:03:03 UTC (rev 15181)
@@ -507,19 +507,25 @@
if (switch_channel_test_flag(channel, CF_PROXY_MODE)) {
if (switch_channel_test_cap(peer_channel, CC_BYPASS_MEDIA)) {
- 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);
- }
+ switch_channel_set_flag(peer_channel, CF_PROXY_MODE);
+ } 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_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_MODE);
switch_channel_clear_flag(channel, CF_PROXY_MEDIA);
}
}
@@ -703,7 +709,9 @@
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);
}
}
Modified: freeswitch/trunk/src/switch_core_state_machine.c (15180 => 15181)
--- freeswitch/trunk/src/switch_core_state_machine.c 2009-10-20 01:36:33 UTC (rev 15180)
+++ freeswitch/trunk/src/switch_core_state_machine.c 2009-10-20 17:03:03 UTC (rev 15181)
@@ -381,8 +381,10 @@
switch_core_session_receive_message(session, message);
message = NULL;
}
-
+
+ switch_channel_set_flag(session->channel, CF_THREAD_SLEEPING);
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) {
switch_core_session_receive_message(session, message);