]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix FSCORE-104
authorAnthony Minessale <anthony.minessale@gmail.com>
Mon, 3 Mar 2008 18:05:07 +0000 (18:05 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Mon, 3 Mar 2008 18:05:07 +0000 (18:05 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7773 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_ivr_originate.c

index 0080e15a792e5d45e88a24ed60666250e3adfd0e..a5fc1678f365289b0602ecb13b0d3a0c7a76bd93 100644 (file)
 
 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 {