diff options
Diffstat (limited to 'channels/chan_agent.c')
-rw-r--r-- | channels/chan_agent.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/channels/chan_agent.c b/channels/chan_agent.c index fe030261f..f216030cf 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; |