summaryrefslogtreecommitdiff
path: root/main/features.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2011-12-16 23:58:44 +0000
committerRichard Mudgett <rmudgett@digium.com>2011-12-16 23:58:44 +0000
commitbe74e6f16ec133cad88776ee107125aee42ad58f (patch)
tree084dc50907d5d518dd795a9e4cf04852b6bce527 /main/features.c
parent1b0741c7db397114602da1e422125ad51d598b5c (diff)
Clean-up on isle five for __ast_request_and_dial() and ast_call_forward().
* Add locking when a channel inherits variables and datastores in __ast_request_and_dial() and ast_call_forward(). Note: The involved channels are not active so there was minimal potential for problems. * Remove calls to ast_set_callerid() in __ast_request_and_dial() and ast_call_forward() because the set information is for the wrong direction. * Don't use C++ keywords for variable names in ast_call_forward(). * Run the redirecting interception macro if defined when forwarding a call in ast_call_forward(). Note: Currently will never execute because the only callers that supply a calling channel supply a hungup or zombie channel. * Make feature_request_and_dial() put the transferee into autoservice when it calls ast_call_forward() in case a redirection interception macro is run. Note: Currently will never happen because the caller channel (Party B) is always hungup at this time. * Make feature_request_and_dial() ignore the AST_CONTROL_PROCEEDING frame to silence a log message. ........ Merged revisions 348464 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 348465 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@348466 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/features.c')
-rw-r--r--main/features.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/main/features.c b/main/features.c
index bb925f73d..ca6286bdc 100644
--- a/main/features.c
+++ b/main/features.c
@@ -3538,7 +3538,9 @@ static struct ast_channel *feature_request_and_dial(struct ast_channel *caller,
} else if (chan == active_channel) {
if (!ast_strlen_zero(chan->call_forward)) {
state = 0;
+ ast_autoservice_start(transferee);
chan = ast_call_forward(caller, chan, NULL, tmp_cap, NULL, &state);
+ ast_autoservice_stop(transferee);
if (!chan) {
break;
}
@@ -3613,7 +3615,9 @@ static struct ast_channel *feature_request_and_dial(struct ast_channel *caller,
}
ast_autoservice_stop(transferee);
}
- } else if (f->subclass.integer != -1 && f->subclass.integer != AST_CONTROL_PROGRESS) {
+ } else if (f->subclass.integer != -1
+ && f->subclass.integer != AST_CONTROL_PROGRESS
+ && f->subclass.integer != AST_CONTROL_PROCEEDING) {
ast_log(LOG_NOTICE, "Don't know what to do about control frame: %d\n", f->subclass.integer);
}
/* else who cares */