mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-13 00:04:53 +00:00
Handle the case where there are multiple dynamic features with the same digit
mapping, but won't always match the activated on/by access controls. In that case, the code needs to keep trying features for a match. (reported by Atis on the asterisk-dev list, patched by me) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@82594 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user