If an agent still has "wrapuptime" left after he finishes a call and the
authorMatthew Fredrickson <creslin@digium.com>
Wed, 6 Apr 2005 16:06:05 +0000 (16:06 +0000)
committerMatthew Fredrickson <creslin@digium.com>
Wed, 6 Apr 2005 16:06:05 +0000 (16:06 +0000)
wrapuptime is changed on a reload, he still waits his former wrapuptime (instead of
the new wrapuptime).  This reduces his "de facto" wrapuptime immediately to
the new value even if he has wrapuptime remaining from a previous call.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5423 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_agent.c

index 1ef0ec7..89fc396 100755 (executable)
@@ -294,7 +294,21 @@ static struct agent_pvt *add_agent(char *agent, int pending)
        strncpy(p->moh, moh, sizeof(p->moh) - 1);
        p->ackcall = ackcall;
        p->autologoff = autologoff;
        strncpy(p->moh, moh, sizeof(p->moh) - 1);
        p->ackcall = ackcall;
        p->autologoff = autologoff;
+
+       /* If someone reduces the wrapuptime and reloads, we want it
+        * to change the wrapuptime immediately on all calls */
+       if (p->wrapuptime > wrapuptime) {
+               struct timeval now;
+               gettimeofday(&now, NULL);
+
+               /* We won't be pedantic and check the tv_usec val */
+               if (p->lastdisc.tv_sec > (now.tv_sec + wrapuptime/1000)) {
+                       p->lastdisc.tv_sec = now.tv_sec + wrapuptime/1000;
+                       p->lastdisc.tv_usec = now.tv_usec;
+               }
+       }
        p->wrapuptime = wrapuptime;
        p->wrapuptime = wrapuptime;
+
        if (pending)
                p->dead = 1;
        else
        if (pending)
                p->dead = 1;
        else
@@ -1724,7 +1738,7 @@ static int __login_exec(struct ast_channel *chan, void *data, int callbackmode)
                                                                ast_log(LOG_WARNING, "Unable to set read format to %d\n", ast_best_codec(chan->nativeformats));
                                                }
                                                if (!res) {
                                                                ast_log(LOG_WARNING, "Unable to set read format to %d\n", ast_best_codec(chan->nativeformats));
                                                }
                                                if (!res) {
-                                                       ast_set_write_format(chan, ast_best_codec(chan->nativeformats));
+                                                       res = ast_set_write_format(chan, ast_best_codec(chan->nativeformats));
                                                        if (res)
                                                                ast_log(LOG_WARNING, "Unable to set write format to %d\n", ast_best_codec(chan->nativeformats));
                                                }
                                                        if (res)
                                                                ast_log(LOG_WARNING, "Unable to set write format to %d\n", ast_best_codec(chan->nativeformats));
                                                }