]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
originate/call forwarding: Fix a crash when forwarding a call from originate
authorJonathan Rose <jrose@digium.com>
Fri, 20 Sep 2013 22:04:25 +0000 (22:04 +0000)
committerJonathan Rose <jrose@digium.com>
Fri, 20 Sep 2013 22:04:25 +0000 (22:04 +0000)
(closes issue ASTERISK-22487)
Reported by: David M. Lee
Review: https://reviewboard.asterisk.org/r/2868/

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

main/dial.c

index e13805ad4a06fbe9aeed98caebf64a3da1a8c635..3b720fb9ff72cba3bfaa421469aa39299dd9c4fb 100644 (file)
@@ -398,6 +398,15 @@ static int handle_call_forward(struct ast_dial *dial, struct ast_dial_channel *c
                *stuff++ = '\0';
                tech = tmp;
                device = stuff;
+       } else {
+               const char *forward_context;
+               char destination[AST_MAX_CONTEXT + AST_MAX_EXTENSION + 1];
+
+               ast_channel_lock(original);
+               forward_context = pbx_builtin_getvar_helper(original, "FORWARD_CONTEXT");
+               snprintf(destination, sizeof(destination), "%s@%s", tmp, S_OR(forward_context, ast_channel_context(original)));
+               ast_channel_unlock(original);
+               device = ast_strdupa(destination);
        }
 
        /* Drop old destination information */
@@ -409,11 +418,13 @@ static int handle_call_forward(struct ast_dial *dial, struct ast_dial_channel *c
        channel->device = ast_strdup(device);
        AST_LIST_UNLOCK(&dial->channels);
 
-       /* Finally give it a go... send it out into the world */
-       begin_dial_channel(channel, chan, chan ? 0 : 1);
 
        /* Drop the original channel */
        ast_hangup(original);
+       channel->owner = NULL;
+
+       /* Finally give it a go... send it out into the world */
+       begin_dial_channel(channel, chan, chan ? 0 : 1);
 
        return 0;
 }