Merged revisions 287685 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ........ r287685 | alecdavis | 2010-09-21 11:16:45 +1200 (Tue, 21 Sep 2010) | 18 lines ast_channel_masquerade: Avoid recursive masquerades. Check all 4 combinations of (original/clonechan) * (masq/masqr). Initially original->masq and clonechan->masqr were only checked. It's possible with multiple masq's planned - and not yet executed, that the 'original' chan could already have another masq'd into it - thus original->masqr would be set, that masqr would lost. Likewise for the clonechan->masq. (closes issue #16057;#17363) Reported by: amorsen;davidw,alecdavis Patches: based on bug16057.diff4.txt uploaded by alecdavis (license 585) Tested by: ramonpeek, davidw, alecdavis ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@287756 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
f92fd39b5c
commit
c65de13046
|
@ -5617,19 +5617,27 @@ retrymasq:
|
||||||
|
|
||||||
ast_debug(1, "Planning to masquerade channel %s into the structure of %s\n",
|
ast_debug(1, "Planning to masquerade channel %s into the structure of %s\n",
|
||||||
clonechan->name, original->name);
|
clonechan->name, original->name);
|
||||||
if (original->masq) {
|
|
||||||
ast_log(LOG_WARNING, "%s is already going to masquerade as %s\n",
|
if (!original->masqr && !original->masq && !clonechan->masq && !clonechan->masqr) {
|
||||||
original->masq->name, original->name);
|
|
||||||
} else if (clonechan->masqr) {
|
|
||||||
ast_log(LOG_WARNING, "%s is already going to masquerade as %s\n",
|
|
||||||
clonechan->name, clonechan->masqr->name);
|
|
||||||
} else {
|
|
||||||
original->masq = clonechan;
|
original->masq = clonechan;
|
||||||
clonechan->masqr = original;
|
clonechan->masqr = original;
|
||||||
ast_queue_frame(original, &ast_null_frame);
|
ast_queue_frame(original, &ast_null_frame);
|
||||||
ast_queue_frame(clonechan, &ast_null_frame);
|
ast_queue_frame(clonechan, &ast_null_frame);
|
||||||
ast_debug(1, "Done planning to masquerade channel %s into the structure of %s\n", clonechan->name, original->name);
|
ast_debug(1, "Done planning to masquerade channel %s into the structure of %s\n", clonechan->name, original->name);
|
||||||
res = 0;
|
res = 0;
|
||||||
|
} else if (original->masq) {
|
||||||
|
ast_log(LOG_WARNING, "%s is already going to masquerade as %s\n",
|
||||||
|
original->masq->name, original->name);
|
||||||
|
} else if (original->masqr) {
|
||||||
|
/* not yet as a previously planned masq hasn't yet happened */
|
||||||
|
ast_log(LOG_WARNING, "%s is already going to masquerade as %s\n",
|
||||||
|
original->name, original->masqr->name);
|
||||||
|
} else if (clonechan->masq) {
|
||||||
|
ast_log(LOG_WARNING, "%s is already going to masquerade as %s\n",
|
||||||
|
clonechan->masq->name, clonechan->name);
|
||||||
|
} else { /* (clonechan->masqr) */
|
||||||
|
ast_log(LOG_WARNING, "%s is already going to masquerade as %s\n",
|
||||||
|
clonechan->name, clonechan->masqr->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
ast_channel_unlock(clonechan);
|
ast_channel_unlock(clonechan);
|
||||||
|
|
Loading…
Reference in New Issue