diff --git a/res/res_features.c b/res/res_features.c index b863be921c..0cf317843d 100644 --- a/res/res_features.c +++ b/res/res_features.c @@ -479,6 +479,7 @@ int ast_masq_park_call(struct ast_channel *rchan, struct ast_channel *peer, int #define FEATURE_RETURN_PASSDIGITS 21 #define FEATURE_RETURN_STOREDIGITS 22 #define FEATURE_RETURN_SUCCESS 23 +#define FEATURE_RETURN_KEEPTRYING 24 #define FEATURE_SENSE_CHAN (1 << 0) #define FEATURE_SENSE_PEER (1 << 1) @@ -966,7 +967,7 @@ static int feature_exec_app(struct ast_channel *chan, struct ast_channel *peer, if (sense == FEATURE_SENSE_CHAN) { if (!ast_test_flag(feature, AST_FEATURE_FLAG_BYCALLER)) - return FEATURE_RETURN_PASSDIGITS; + return FEATURE_RETURN_KEEPTRYING; if (ast_test_flag(feature, AST_FEATURE_FLAG_ONSELF)) { work = chan; idle = peer; @@ -976,7 +977,7 @@ static int feature_exec_app(struct ast_channel *chan, struct ast_channel *peer, } } else { if (!ast_test_flag(feature, AST_FEATURE_FLAG_BYCALLEE)) - return FEATURE_RETURN_PASSDIGITS; + return FEATURE_RETURN_KEEPTRYING; if (ast_test_flag(feature, AST_FEATURE_FLAG_ONSELF)) { work = peer; idle = chan; @@ -1090,8 +1091,11 @@ static int ast_feature_interpret(struct ast_channel *chan, struct ast_channel *p if (option_verbose > 2) ast_verbose(VERBOSE_PREFIX_3 " Feature Found: %s exten: %s\n",feature->sname, tok); res = feature->operation(chan, peer, config, code, sense, feature); - AST_LIST_UNLOCK(&feature_list); - break; + if (res != FEATURE_RETURN_KEEPTRYING) { + AST_LIST_UNLOCK(&feature_list); + break; + } + res = FEATURE_RETURN_PASSDIGITS; } else if (!strncmp(feature->exten, code, strlen(code))) res = FEATURE_RETURN_STOREDIGITS;