[commit] r1792 - freeswitch/branches/athompson/trunk/src/mod/applications/mod_sleep
Author: athompson Date: Fri Jul 7 23:53:14 2006 New Revision: 1792 Modified: freeswitch/branches/athompson/trunk/src/mod/applications/mod_sleep/mod_sleep.c Log: Rewrite of mod_sleep to read packets/digits off the channel for the requested time instead of just stopping time with a call to sleep. Modified: freeswitch/branches/athompson/trunk/src/mod/applications/mod_sleep/mod_sleep.c ============================================================================== --- freeswitch/branches/athompson/trunk/src/mod/applications/mod_sleep/mod_sleep.c (original) +++ freeswitch/branches/athompson/trunk/src/mod/applications/mod_sleep/mod_sleep.c Fri Jul 7 23:53:14 2006 @@ -36,7 +36,12 @@ static void sleep_function(switch_core_session_t *session, char *data) { switch_channel_t *channel; + switch_status_t status; char *delay = NULL; + unsigned int timeout; + switch_time_t maxtime; + + switch_time_t started = switch_time_now(); channel = switch_core_session_get_channel(session); assert(channel != NULL); @@ -44,8 +49,23 @@ switch_channel_answer(channel); delay = switch_core_session_strdup(session, data); - /* 1000000 seems to be equiv to 1 second */ - switch_sleep(atof(delay) * 1000000); + maxtime = (atoi(delay) * 1000) + started; + + while(switch_channel_ready(channel)) { + switch_frame_t *read_frame; + + if (switch_time_now() >= maxtime) { + break; + } + + if (switch_channel_has_dtmf(channel)) { + char dtmf[128]; + switch_channel_dequeue_dtmf(channel, dtmf, sizeof(dtmf)); + } + + timeout = (unsigned int)((maxtime - switch_time_now()) / 1000); + status = switch_core_session_read_frame(session, &read_frame, timeout, 0); + } } static const switch_application_interface_t sleep_application_interface = {
participants (1)
-
Freeswitch SVN