diff options
Diffstat (limited to 'channels/chan_agent.c')
-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); |