From c9915a8f270bdfd613d8ee3a3a8b7024f263fed0 Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Mon, 9 Jun 2008 15:02:37 +0000 Subject: [PATCH] A unique situation of timeouts brought forth a failure situation for autologoff in chan_agent. If using AgentCallbackLogin-style agents, then if the timeout specified by the Dial() to reach the agent's phone was shorter than the timeout specified in queues.conf, then autologoff would only work if the caller hung up while the agent's phone was ringing. This patch allows autologoff to work in this situation when the call in queue transfers to the next available agent (as it would have if the timeout in queues.conf were less than the timeout in the Dial()). (closes issue #12754) Reported by: Rodrigo Patches: 12754.patch uploaded by putnopvut (license 60) Tested by: Rodrigo git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@121229 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_agent.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/channels/chan_agent.c b/channels/chan_agent.c index fe030261fb..f216030cf3 100644 --- a/channels/chan_agent.c +++ b/channels/chan_agent.c @@ -462,7 +462,17 @@ static struct ast_frame *agent_read(struct ast_channel *ast) if (!ast_strlen_zero(p->loginchan)) { if (p->chan) ast_log(LOG_DEBUG, "Bridge on '%s' being cleared (2)\n", p->chan->name); - + if (p->owner->_state != AST_STATE_UP) { + int howlong = time(NULL) - p->start; + if (p->autologoff && howlong > p->autologoff) { + long logintime = time(NULL) - p->loginstart; + p->loginstart = 0; + ast_log(LOG_NOTICE, "Agent '%s' didn't answer/confirm within %d seconds (waited %d)\n", p->name, p->autologoff, howlong); + agent_logoff_maintenance(p, p->loginchan, logintime, ast->uniqueid, "Autologoff"); + if (persistent_agents) + dump_agents(); + } + } status = pbx_builtin_getvar_helper(p->chan, "CHANLOCALSTATUS"); if (autologoffunavail && status && !strcasecmp(status, "CHANUNAVAIL")) { long logintime = time(NULL) - p->loginstart; -- 2.47.3