]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 289338 via svnmerge from
authorJason Parker <jparker@digium.com>
Wed, 29 Sep 2010 21:03:47 +0000 (21:03 +0000)
committerJason Parker <jparker@digium.com>
Wed, 29 Sep 2010 21:03:47 +0000 (21:03 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r289338 | qwell | 2010-09-29 15:56:26 -0500 (Wed, 29 Sep 2010) | 8 lines

  Allow a manager originate to succeed on forwarded devices.

  The timeout to wait for an answer was being set to 0 when a device forwarded to another
  extension.  We don't always need the timeout set like this, so make it an optional
  parameter, and don't use it in this case.

  ABE-2544
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@289339 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/channel.c
main/features.c

index 51dd1d23eb71b6ef2b5de3b9ef5260b24d83911f..f60f76c789903b9d52771ce834000894afe35d16 100644 (file)
@@ -3986,6 +3986,7 @@ struct ast_channel *ast_call_forward(struct ast_channel *caller, struct ast_chan
        struct ast_channel *new = NULL;
        char *data, *type;
        int cause = 0;
+       int res;
 
        /* gather data and request the new forward channel */
        ast_copy_string(tmpchan, orig->call_forward, sizeof(tmpchan));
@@ -4041,7 +4042,11 @@ struct ast_channel *ast_call_forward(struct ast_channel *caller, struct ast_chan
        ast_channel_unlock(orig);
 
        /* call new channel */
-       if ((*timeout = ast_call(new, data, 0))) {
+       res = ast_call(new, data, 0);
+       if (timeout) {
+               *timeout = res;
+       }
+       if (res) {
                ast_log(LOG_NOTICE, "Unable to call forward to channel %s/%s\n", type, (char *)data);
                ast_hangup(orig);
                ast_hangup(new);
@@ -4104,7 +4109,7 @@ struct ast_channel *__ast_request_and_dial(const char *type, int format, void *d
                        if (timeout > -1)
                                timeout = res;
                        if (!ast_strlen_zero(chan->call_forward)) {
-                               if (!(chan = ast_call_forward(NULL, chan, &timeout, format, oh, outstate))) {
+                               if (!(chan = ast_call_forward(NULL, chan, NULL, format, oh, outstate))) {
                                        return NULL;
                                }
                                continue;
index fd78a5a292310774fa42a497e7e7ce1be1e2f263..1a81a1cbacaefa2d873857fbac0acf348c91df67 100644 (file)
@@ -2277,7 +2277,7 @@ static struct ast_channel *feature_request_and_dial(struct ast_channel *caller,
 
                if (chan && (chan == active_channel)){
                        if (!ast_strlen_zero(chan->call_forward)) {
-                               if (!(chan = ast_call_forward(caller, chan, &to, format, NULL, outstate))) {
+                               if (!(chan = ast_call_forward(caller, chan, NULL, format, NULL, outstate))) {
                                        return NULL;
                                }
                                continue;