diff options
author | Mark Spencer <markster@digium.com> | 2003-08-19 21:14:16 +0000 |
---|---|---|
committer | Mark Spencer <markster@digium.com> | 2003-08-19 21:14:16 +0000 |
commit | 789a8be69959f6680574e32df0bbc5860d204dba (patch) | |
tree | 67372d65c3cbcea5e1c9cd6b1b272a945c4c5841 | |
parent | 326456653b2c273e4ada57ff4c80a67c55b6257f (diff) |
Create/dial channel if availability is on callback channel
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1379 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rwxr-xr-x | channels/chan_agent.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/channels/chan_agent.c b/channels/chan_agent.c index 0ebfdb337..85dd349c0 100755 --- a/channels/chan_agent.c +++ b/channels/chan_agent.c @@ -707,7 +707,21 @@ static int check_availability(struct agent_pvt *newlyavailable, int needlock) if (!p->abouttograb && p->pending && ((p->group && (newlyavailable->group & p->group)) || !strcmp(p->agent, newlyavailable->agent))) { ast_log(LOG_DEBUG, "Call '%s' looks like a winner for agent '%s'\n", p->owner->name, newlyavailable->agent); /* We found a pending call, time to merge */ - chan = agent_new(newlyavailable, AST_STATE_DOWN); + if (strlen(newlyavailable->loginchan)) { + /* Adjustable agent */ + newlyavailable->chan = ast_request("Local", AST_FORMAT_SLINEAR, newlyavailable->loginchan); + if (newlyavailable->chan) { + if (agent_call(newlyavailable->chan, newlyavailable->loginchan, 0)) + ast_log(LOG_WARNING, "Call failed on channel '%s'\n", newlyavailable->chan->name); + chan = agent_new(p, AST_STATE_DOWN); + } else { + ast_log(LOG_WARNING, "I didn't expect to ever get here...\n"); + ast_mutex_unlock(&p->lock); + p = p->next; + continue; + } + } else + chan = agent_new(newlyavailable, AST_STATE_DOWN); parent = p->owner; p->abouttograb = 1; ast_mutex_unlock(&p->lock); |