--- asterisk/apps/app_queue.c 2005-02-24 14:45:34.000000000 -0700 +++ asterisk-20050223/apps/app_queue.c 2005-02-25 22:55:26.000000000 -0700 @@ -196,6 +196,7 @@ #define QUEUE_FLAG_LEAVEWHENEMPTY (1 << 11) /* If all agents leave the queue, remove callers from the queue */ #define QUEUE_FLAG_REPORTHOLDTIME (1 << 12) /* Should we report caller hold time to answering member? */ #define QUEUE_FLAG_WRAPPED (1 << 13) /* Round Robin - wrapped around? */ +#define QUEUE_FLAG_TIMEOUTRESTART (1 << 14) /* Restart timer when member call */ /* We define a custom "local user" structure because we use it not only for keeping track of what is in use but @@ -886,6 +887,7 @@ return 0; } else { if (ast_test_flag(qe->parent, QUEUE_FLAG_EVENTWHENCALLED)) { + ast_queue_log(qe->parent->name, qe->chan->uniqueid, tmp->interface, "AGENTCALLED", "%ld", (long)time(NULL) - qe->start); manager_event(EVENT_FLAG_AGENT, "AgentCalled", "AgentCalled: %s\r\n" "ChannelCalling: %s\r\n" @@ -1165,8 +1167,11 @@ ast_cdr_busy(in->cdr); ast_hangup(o->chan); o->chan = NULL; - if (qe->parent->strategy) + if (qe->parent->strategy) { + if (ast_test_flag(qe->parent, QUEUE_FLAG_TIMEOUTRESTART)) + *to = orig; ring_one(qe, outgoing, &numbusies); + } numbusies++; break; case AST_CONTROL_CONGESTION: @@ -1177,8 +1182,11 @@ ast_cdr_busy(in->cdr); ast_hangup(o->chan); o->chan = NULL; - if (qe->parent->strategy) + if (qe->parent->strategy) { + if (ast_test_flag(qe->parent, QUEUE_FLAG_TIMEOUTRESTART)) + *to = orig; ring_one(qe, outgoing, &numbusies); + } numbusies++; break; case AST_CONTROL_RINGING: @@ -1203,8 +1211,11 @@ o->stillgoing = 0; ast_hangup(o->chan); o->chan = NULL; - if (qe->parent->strategy) + if (qe->parent->strategy) { + if (ast_test_flag(qe->parent, QUEUE_FLAG_TIMEOUTRESTART)) + *to = orig; ring_one(qe, outgoing, &numbusies); + } } } o = o->next; @@ -2607,6 +2618,8 @@ q->weight = atoi(var->value); if (q->weight) use_weight++; + } else if (!strcasecmp(var->name, "timeoutrestart")) { + ast_set2_flag(q, ast_true(var->value), QUEUE_FLAG_TIMEOUTRESTART); } else { ast_log(LOG_WARNING, "Unknown keyword in queue '%s': %s at line %d of queue.conf\n", cat, var->name, var->lineno); }