@ -243,7 +243,7 @@ static int _macro_exec(struct ast_channel *chan, const char *data, int exclusive
int setmacrocontext = 0 ;
int autoloopflag , inhangup = 0 ;
struct ast_str * tmp_subst = NULL ;
const char * my_macro_exten = NULL ;
char * save_macro_exten ;
char * save_macro_context ;
char * save_macro_priority ;
@ -303,12 +303,32 @@ static int _macro_exec(struct ast_channel *chan, const char *data, int exclusive
}
snprintf ( fullmacro , sizeof ( fullmacro ) , " macro-%s " , macro ) ;
if ( ! ast_exists_extension ( chan , fullmacro , " s " , 1 ,
S_COR ( ast_channel_caller ( chan ) - > id . number . valid , ast_channel_caller ( chan ) - > id . number . str , NULL ) ) ) {
if ( ! ast_context_find ( fullmacro ) )
ast_log ( LOG_WARNING , " No such context '%s' for macro '%s'. Was called by %s@%s \n " , fullmacro , macro , ast_channel_exten ( chan ) , ast_channel_context ( chan ) ) ;
else
ast_log ( LOG_WARNING , " Context '%s' for macro '%s' lacks 's' extension, priority 1 \n " , fullmacro , macro ) ;
/* first search for the macro */
if ( ! ast_context_find ( fullmacro ) ) {
ast_log ( LOG_WARNING , " No such context '%s' for macro '%s'. Was called by %s@%s \n " ,
fullmacro , macro , ast_channel_exten ( chan ) , ast_channel_context ( chan ) ) ;
return 0 ;
}
/* now search for the right extension */
if ( ast_exists_extension ( chan , fullmacro , " s " , 1 ,
S_COR ( ast_channel_caller ( chan ) - > id . number . valid ,
ast_channel_caller ( chan ) - > id . number . str , NULL ) ) ) {
/* We have a normal macro */
my_macro_exten = " s " ;
} else if ( ast_exists_extension ( chan , fullmacro , " ~~s~~ " , 1 ,
S_COR ( ast_channel_caller ( chan ) - > id . number . valid ,
ast_channel_caller ( chan ) - > id . number . str , NULL ) ) ) {
/* We have an AEL generated macro */
my_macro_exten = " ~~s~~ " ;
}
/* do we have a valid exten? */
if ( ! my_macro_exten ) {
ast_log ( LOG_WARNING ,
" Context '%s' for macro '%s' lacks 's' extension, priority 1 \n " ,
fullmacro , macro ) ;
return 0 ;
}
@ -357,7 +377,7 @@ static int _macro_exec(struct ast_channel *chan, const char *data, int exclusive
pbx_builtin_setvar_helper ( chan , " MACRO_DEPTH " , depthc ) ;
/* Setup environment for new run */
ast_channel_exten_set ( chan , " s " ) ;
ast_channel_exten_set ( chan , my_macro_exten ) ;
ast_channel_context_set ( chan , fullmacro ) ;
ast_channel_priority_set ( chan , 1 ) ;