diff --git a/channel.c b/channel.c index 72540bc53f6a767cfcccbfc396ded1154b695f7d..9e6495533c546c623a13b5a903a43334775a735b 100755 --- a/channel.c +++ b/channel.c @@ -1929,7 +1929,7 @@ static int ast_do_masquerade(struct ast_channel *original) int x,i; int res=0; char *tmp; - void *tmpv; + struct ast_var_t *varptr; struct ast_frame *cur, *prev; struct ast_channel_pvt *p; struct ast_channel *clone = original->masq; @@ -2037,10 +2037,19 @@ static int ast_do_masquerade(struct ast_channel *original) for (x=0;x<AST_MAX_FDS;x++) { original->fds[x] = clone->fds[x]; } - /* Move the variables */ - tmpv = original->varshead.first; + /* Append variables from clone channel into original channel */ + /* XXX Is this always correct? We have to in order to keep MACROS working XXX */ + varptr = original->varshead.first; + if (varptr) { + while(varptr->entries.next) { + varptr = varptr->entries.next; + } + varptr->entries.next = clone->varshead.first; + } else { + original->varshead.first = clone->varshead.first; + } + clone->varshead.first = NULL; original->varshead.first = clone->varshead.first; - clone->varshead.first = tmpv; /* Presense of ADSI capable CPE follows clone */ original->adsicpe = clone->adsicpe; /* Bridge remains the same */