Index: channels/chan_agent.c =================================================================== --- channels/chan_agent.c (revision 7924) +++ channels/chan_agent.c (working copy) @@ -1269,6 +1269,26 @@ return res; } +/* return 0 if there are no same loginchan name */ +static int check_extension(char *chan, char *context) +{ + struct agent_pvt *p; + char loginchan[80]; + + if(!chan || !context) + return 0; + + snprintf(loginchan, sizeof(loginchan), "%s@%s", chan, !ast_strlen_zero(context) ? context : "default"); + + p = agents; + while(p) { + if(!strcasecmp(loginchan, p->loginchan)) + return -1; + p = p->next; + } + return 0; +} + /*--- agent_request: Part of the Asterisk PBX interface ---*/ static struct ast_channel *agent_request(const char *type, int format, void *data, int *cause) { @@ -1837,9 +1857,11 @@ res = 0; } else res = ast_app_getdata(chan, "agent-newlocation", tmpchan+pos, sizeof(tmpchan) - 2, 0); - if (ast_strlen_zero(tmpchan) || ast_exists_extension(chan, !ast_strlen_zero(context) ? context : "default", tmpchan, - 1, NULL)) + if (ast_strlen_zero(tmpchan)) break; + + if (!check_extension(chan, context) && ast_exists_extension(chan, !ast_strlen_zero(context) ? context : "default", tmpchan, 1, NULL)) + break; if (args.extension) { ast_log(LOG_WARNING, "Extension '%s' is not valid for automatic login of agent '%s'\n", args.extension, p->agent); args.extension = NULL;