aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_agent.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-08-19 21:14:16 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-08-19 21:14:16 +0000
commit2751b576c2389f74417009e0dd595145ef664527 (patch)
tree67372d65c3cbcea5e1c9cd6b1b272a945c4c5841 /channels/chan_agent.c
parent19a20ea45546e5454de098ec48f5691da7d6ca60 (diff)
Create/dial channel if availability is on callback channel
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1379 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_agent.c')
-rwxr-xr-xchannels/chan_agent.c16
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);