Index: main/channel.c =================================================================== --- main/channel.c (revision 296306) +++ main/channel.c (working copy) @@ -9059,11 +9059,24 @@ int ast_channel_connected_line_macro(struct ast_channel *autoservice_chan, struct ast_channel *macro_chan, const void *connected_info, int is_caller, int is_frame) { + const char *blockvar; const char *macro; const char *macro_args; int retval; ast_channel_lock(macro_chan); + + /* + * If CONNECTED_LINE_*_BLOCK is set, don't update the connected line + * and tell the caller it doesn't need to, either. + */ + blockvar = pbx_builtin_getvar_helper(macro_chan, is_caller + ? "CONNECTED_LINE_CALLER_BLOCK" : "CONNECTED_LINE_CALLEE_BLOCK"); + if (blockvar && ast_true(blockvar)) { + ast_channel_unlock(macro_chan); + return 0; + } + macro = pbx_builtin_getvar_helper(macro_chan, is_caller ? "CONNECTED_LINE_CALLER_SEND_MACRO" : "CONNECTED_LINE_CALLEE_SEND_MACRO"); macro = ast_strdupa(S_OR(macro, "")); @@ -9098,11 +9111,24 @@ int ast_channel_redirecting_macro(struct ast_channel *autoservice_chan, struct ast_channel *macro_chan, const void *redirecting_info, int is_caller, int is_frame) { + const char *blockvar; const char *macro; const char *macro_args; int retval; ast_channel_lock(macro_chan); + + /* + * If REDIRECTING_*_BLOCK is set, don't update the redirecting status + * and tell the caller it doesn't need to, either. + */ + blockvar = pbx_builtin_getvar_helper(macro_chan, is_caller + ? "REDIRECTING_CALLER_BLOCK" : "REDIRECTING_CALLEE_BLOCK"); + if (blockvar && ast_true(blockvar)) { + ast_channel_unlock(macro_chan); + return 0; + } + macro = pbx_builtin_getvar_helper(macro_chan, is_caller ? "REDIRECTING_CALLER_SEND_MACRO" : "REDIRECTING_CALLEE_SEND_MACRO"); macro = ast_strdupa(S_OR(macro, ""));