From a58173d28db7e6c9f8a213b7ca8c39c86533ea9a Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 3 Mar 2008 18:05:07 +0000 Subject: [PATCH] fix FSCORE-104 git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7773 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/switch_ivr_originate.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/switch_ivr_originate.c b/src/switch_ivr_originate.c index 0080e15a79..a5fc1678f3 100644 --- a/src/switch_ivr_originate.c +++ b/src/switch_ivr_originate.c @@ -34,14 +34,27 @@ static const switch_state_handler_table_t originate_state_handlers; +static switch_status_t originate_on_hold(switch_core_session_t *session) +{ + switch_channel_t *channel = switch_core_session_get_channel(session); + + while(switch_channel_get_state(channel) == CS_HOLD) { + switch_ivr_sleep(session, 10); + } + + /* clear this handler so it only works once (next time (a.k.a. Transfer) we will do the real ring and hold states) */ + switch_channel_clear_state_handler(channel, &originate_state_handlers); + + return SWITCH_STATUS_FALSE; +} + static switch_status_t originate_on_ring(switch_core_session_t *session) { switch_channel_t *channel = switch_core_session_get_channel(session); - /* put the channel in a passive state so we can loop audio to it */ - /* clear this handler so it only works once (next time (a.k.a. Transfer) we will do the real ring state) */ - switch_channel_clear_state_handler(channel, &originate_state_handlers); + /* put the channel in a passive state until it is answered */ switch_channel_set_state(channel, CS_HOLD); + return SWITCH_STATUS_FALSE; } @@ -52,7 +65,7 @@ static const switch_state_handler_table_t originate_state_handlers = { /*.on_hangup */ NULL, /*.on_loopback */ NULL, /*.on_transmit */ NULL, - /*.on_hold */ NULL + /*.on_hold */ originate_on_hold }; typedef enum {