]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
mod_callcenter: Bring up to date the max-wait-time-with-no-agent and max-wait-time...
authorMarc Olivier Chouinard <mochouinard@moctel.com>
Sun, 11 Dec 2011 01:45:25 +0000 (20:45 -0500)
committerMarc Olivier Chouinard <mochouinard@moctel.com>
Sun, 11 Dec 2011 01:45:25 +0000 (20:45 -0500)
src/mod/applications/mod_callcenter/mod_callcenter.c

index 05b7b8c635ddae618872b473fcc5218ae3c824dd..b8353fae8c6c99f7c760fdb227e25a433df84d3e 100644 (file)
@@ -2284,9 +2284,20 @@ void *SWITCH_THREAD_FUNC cc_member_thread_run(switch_thread_t *thread, void *obj
                }
 
                /* Will drop the caller if no agent was found for more than X seconds */
-               if (queue->max_wait_time_with_no_agent > 0 && m->t_member_called < queue->last_agent_exist_check - queue->max_wait_time_with_no_agent_time_reached &&
-                               queue->last_agent_exist_check - queue->last_agent_exist >= queue->max_wait_time_with_no_agent) {
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member_session), SWITCH_LOG_DEBUG, "Member %s <%s> in queue '%s' reached max wait with no agent time\n", m->member_cid_name, m->member_cid_number, m->queue_name);
+               if (queue->max_wait_time_with_no_agent > 0 &&
+                               (queue->last_agent_exist >= m->t_member_called || queue->max_wait_time_with_no_agent_time_reached == 0) &&
+                               queue->last_agent_exist_check - queue->last_agent_exist > queue->max_wait_time_with_no_agent) {
+                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member_session), SWITCH_LOG_DEBUG, "Member %s <%s> in queue '%s' reached max wait of %d sec. with no agent\n", m->member_cid_name, m->member_cid_number, m->queue_name, queue->max_wait_time_with_no_agent);
+                       m->member_cancel_reason = CC_MEMBER_CANCEL_REASON_NO_AGENT_TIMEOUT;
+                       switch_channel_set_flag_value(member_channel, CF_BREAK, 2);
+               }
+
+               /* Will drop the NEW caller if no agent was found for more than X seconds once they join */
+               if (queue->max_wait_time_with_no_agent_time_reached > 0 &&
+                               queue->last_agent_exist < m->t_member_called &&
+                               queue->last_agent_exist_check - queue->last_agent_exist > queue->max_wait_time_with_no_agent &&
+                               queue->last_agent_exist_check - m->t_member_called >= queue->max_wait_time_with_no_agent_time_reached) {
+                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member_session), SWITCH_LOG_DEBUG, "Member %s <%s> in queue '%s' reached max wait of %d sec. with no agent plus join grace period of %d sec.\n", m->member_cid_name, m->member_cid_number, m->queue_name, queue->max_wait_time_with_no_agent, queue->max_wait_time_with_no_agent_time_reached);
                        m->member_cancel_reason = CC_MEMBER_CANCEL_REASON_NO_AGENT_TIMEOUT;
                        switch_channel_set_flag_value(member_channel, CF_BREAK, 2);
                }