diff options
author | Richard Mudgett <rmudgett@digium.com> | 2011-12-16 23:58:44 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2011-12-16 23:58:44 +0000 |
commit | be74e6f16ec133cad88776ee107125aee42ad58f (patch) | |
tree | 084dc50907d5d518dd795a9e4cf04852b6bce527 /main/features.c | |
parent | 1b0741c7db397114602da1e422125ad51d598b5c (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.c | 6 |
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 */ |