Index: channels/chan_agent.c =================================================================== --- channels/chan_agent.c (revision 159313) +++ channels/chan_agent.c (working copy) @@ -147,6 +147,12 @@ #define GETAGENTBYCALLERID "AGENTBYCALLERID" +enum { + AGENT_FLAG_ACKCALL = (1 << 0), + AGENT_FLAG_AUTOLOGOFF = (1 << 1), + AGENT_FLAG_WRAPUPTIME = (1 << 2), +}; + /*! \brief Structure representing an agent. */ struct agent_pvt { ast_mutex_t lock; /*!< Channel private lock */ @@ -174,6 +180,7 @@ char loginchan[80]; /**< channel they logged in from */ char logincallerid[80]; /**< Caller ID they had when they logged in */ struct ast_channel *chan; /**< Channel we use */ + unsigned int flags; /**< Flags show if settings were applied with channel vars */ AST_LIST_ENTRY(agent_pvt) list; /**< Next Agent in the linked list. */ }; @@ -373,12 +380,16 @@ ast_copy_string(p->password, password ? password : "", sizeof(p->password)); ast_copy_string(p->name, name ? name : "", sizeof(p->name)); ast_copy_string(p->moh, moh, sizeof(p->moh)); - p->ackcall = ackcall; - p->autologoff = autologoff; + if (!ast_test_flag(p, AGENT_FLAG_ACKCALL)) { + p->ackcall = ackcall; + } + if (!ast_test_flag(p, AGENT_FLAG_AUTOLOGOFF)) { + 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) { + if (!ast_test_flag(p, AGENT_FLAG_WRAPUPTIME) && p->wrapuptime > wrapuptime) { struct timeval now = ast_tvnow(); /* XXX check what is this exactly */ @@ -1987,6 +1998,7 @@ p->ackcall = 0; tmpoptions=pbx_builtin_getvar_helper(chan, "AGENTACKCALL"); ast_verb(3, "Saw variable AGENTACKCALL=%s, setting ackcall to: %d for Agent '%s'.\n",tmpoptions,p->ackcall,p->agent); + ast_set_flag(p, AGENT_FLAG_ACKCALL); } if (!ast_strlen_zero(pbx_builtin_getvar_helper(chan, "AGENTAUTOLOGOFF"))) { p->autologoff = atoi(pbx_builtin_getvar_helper(chan, "AGENTAUTOLOGOFF")); @@ -1994,6 +2006,7 @@ p->autologoff = 0; tmpoptions=pbx_builtin_getvar_helper(chan, "AGENTAUTOLOGOFF"); ast_verb(3, "Saw variable AGENTAUTOLOGOFF=%s, setting autologff to: %d for Agent '%s'.\n",tmpoptions,p->autologoff,p->agent); + ast_set_flag(p, AGENT_FLAG_AUTOLOGOFF); } if (!ast_strlen_zero(pbx_builtin_getvar_helper(chan, "AGENTWRAPUPTIME"))) { p->wrapuptime = atoi(pbx_builtin_getvar_helper(chan, "AGENTWRAPUPTIME")); @@ -2001,6 +2014,7 @@ p->wrapuptime = 0; tmpoptions=pbx_builtin_getvar_helper(chan, "AGENTWRAPUPTIME"); ast_verb(3, "Saw variable AGENTWRAPUPTIME=%s, setting wrapuptime to: %d for Agent '%s'.\n",tmpoptions,p->wrapuptime,p->agent); + ast_set_flag(p, AGENT_FLAG_WRAPUPTIME); } ast_channel_unlock(chan); unlock_channel = 0;