Preserve queued frames

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1328 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.0
Mark Spencer 22 years ago
parent 46171bc538
commit 1b1917f4b3

@ -1834,10 +1834,11 @@ void ast_change_name(struct ast_channel *chan, char *newname)
static int ast_do_masquerade(struct ast_channel *original)
{
int x;
int x,i;
int res=0;
char *tmp;
void *tmpv;
struct ast_frame *cur, *prev;
struct ast_channel_pvt *p;
struct ast_channel *clone = original->masq;
int rformat = original->readformat;
@ -1893,6 +1894,27 @@ static int ast_do_masquerade(struct ast_channel *original)
original->pvt = clone->pvt;
clone->pvt = p;
/* Save any pending frames on both sides. Start by counting
* how many we're going to need... */
prev = NULL;
cur = clone->pvt->readq;
x = 0;
while(cur) {
x++;
prev = cur;
cur = cur->next;
}
/* If we had any, prepend them to the ones already in the queue, and
* load up the alertpipe */
if (prev) {
prev->next = original->pvt->readq;
original->pvt->readq = clone->pvt->readq;
clone->pvt->readq = NULL;
if (original->pvt->alertpipe[1] > -1) {
for (i=0;i<x;i++)
write(original->pvt->alertpipe[1], &x, sizeof(x));
}
}
clone->_softhangup = AST_SOFTHANGUP_DEV;

Loading…
Cancel
Save