diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-08-01 02:39:32 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-08-01 02:39:32 +0000 |
commit | c1413a658d54a624677358053a3c07c914664d9f (patch) | |
tree | 7d793bfe0725535f0e1af0d06bb18a2f8f25c7d1 /channels/chan_agent.c | |
parent | bca09ec25b88f623ce55a6034d8e3c58bb471faf (diff) |
Uhm, that should be 0!
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@3556 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_agent.c')
-rwxr-xr-x | channels/chan_agent.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/channels/chan_agent.c b/channels/chan_agent.c index 6371e0727..8c66015ef 100755 --- a/channels/chan_agent.c +++ b/channels/chan_agent.c @@ -515,6 +515,17 @@ static int agent_hangup(struct ast_channel *ast) if (p->chan) { /* If they're dead, go ahead and hang up on the agent now */ if (!ast_strlen_zero(p->loginchan)) { + /* Store last disconnect time */ + if (p->wrapuptime) { + gettimeofday(&p->lastdisc, NULL); + p->lastdisc.tv_usec += (p->wrapuptime % 1000) * 1000; + if (p->lastdisc.tv_usec >= 1000000) { + p->lastdisc.tv_usec -= 1000000; + p->lastdisc.tv_sec++; + } + p->lastdisc.tv_sec += (p->wrapuptime / 1000); + } else + memset(&p->lastdisc, 0, sizeof(p->lastdisc)); if (p->chan) { /* Recognize the hangup and pass it along immediately */ ast_hangup(p->chan); @@ -1023,7 +1034,8 @@ static struct ast_channel *agent_request(char *type, int format, void *data) if (!p->pending && ((groupmatch && (p->group & groupmatch)) || !strcmp(data, p->agent))) { if (p->chan || !ast_strlen_zero(p->loginchan)) hasagent++; - if (!p->lastdisc.tv_sec) { + if (!p->lastdisc.tv_sec || (time(NULL) > p->lastdisc.tv_sec)) { + memset(&p->lastdisc, 0, sizeof(p->lastdisc)); /* Agent must be registered, but not have any active call, and not be in a waiting state */ if (!p->owner && p->chan) { /* Could still get a fixed agent */ |