Index: apps/app_directed_pickup.c =================================================================== --- apps/app_directed_pickup.c (revision 178448) +++ apps/app_directed_pickup.c (working copy) @@ -184,7 +184,7 @@ } /* Attempt to pick up specified extension with context */ -static int pickup_by_exten(struct ast_channel *chan, const char *exten, const char *context) +static int pickup_by_exten_trunk(struct ast_channel *chan, const char *exten, const char *context) { struct ast_channel *target = NULL; struct pickup_criteria search = { @@ -195,15 +195,39 @@ target = ast_channel_search_locked(find_by_exten, &search); if (target) { + ast_log(LOG_NOTICE, "Target Found exten=%s context=%s\n", exten, context); int res = pickup_do(chan, target); ast_channel_unlock(target); target = NULL; return res; + } else { + ast_log(LOG_NOTICE, "No Target Found exten=%s context=%s\n", exten, context); } return -1; } +static int pickup_by_exten(struct ast_channel *chan, const char *exten, const char *context) +{ + int res = -1; + struct ast_channel *target = NULL; + + while ((target = ast_channel_walk_locked(target))) { + ast_log(LOG_NOTICE, "\nmacroexten=%s targetexten=%s exten=%s \ndialcontext=%s context=%s canpickup=%d\n", target->macroexten, target->exten, exten, target->dialcontext, context, can_pickup(target)); + if ((!strcasecmp(target->macroexten, exten) || !strcasecmp(target->exten, exten)) && +// !strcasecmp(target->dialcontext, context) && + !ast_strlen_zero(target->dialcontext) && + can_pickup(target)) { + res = pickup_do(chan, target); + ast_channel_unlock(target); + break; + } + ast_channel_unlock(target); + } + return res; +} + + static int find_by_mark(struct ast_channel *c, void *data) { const char *mark = data;