diff options
author | root <root@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-09-08 19:02:43 +0000 |
---|---|---|
committer | root <root@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-09-08 19:02:43 +0000 |
commit | 848a91959e4d0d610a079d9e75f0b347982e82f2 (patch) | |
tree | a057fee341dfdd49050ef2c83d8c98a61d8812a3 /channel.c | |
parent | b67496576978a87448462064b38d717559631e5c (diff) |
automerge commit
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2-netsec@42470 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channel.c')
-rw-r--r-- | channel.c | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -2948,6 +2948,8 @@ int ast_do_masquerade(struct ast_channel *original) void *t_pvt; struct ast_callerid tmpcid; struct ast_channel *clone = original->masq; + struct ast_channel_spy_list *spy_list; + struct ast_channel_spy *spy = NULL; int rformat = original->readformat; int wformat = original->writeformat; char newn[100]; @@ -3025,6 +3027,27 @@ int ast_do_masquerade(struct ast_channel *original) original->rawwriteformat = clone->rawwriteformat; clone->rawwriteformat = x; + /* Swap the spies */ + spy_list = original->spies; + original->spies = clone->spies; + clone->spies = spy_list; + + /* Update channel on respective spy lists if present */ + if (original->spies) { + AST_LIST_TRAVERSE(&original->spies->list, spy, list) { + ast_mutex_lock(&spy->lock); + spy->chan = original; + ast_mutex_unlock(&spy->lock); + } + } + if (clone->spies) { + AST_LIST_TRAVERSE(&clone->spies->list, spy, list) { + ast_mutex_lock(&spy->lock); + spy->chan = clone; + ast_mutex_unlock(&spy->lock); + } + } + /* Save any pending frames on both sides. Start by counting * how many we're going to need... */ prev = NULL; |