diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-05-15 00:07:42 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-05-15 00:07:42 +0000 |
commit | df5d834a6e89dc352d73c6997da337c4eecc5285 (patch) | |
tree | 98683a7b3639ef1750270145731b4dd28a85e1b3 /channels/chan_iax2.c | |
parent | 5f6e5e37b881ff550443f17eeafc30ea16f5a64e (diff) |
Fix one way audio problem with iax trunking (bug #4221)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5656 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_iax2.c')
-rwxr-xr-x | channels/chan_iax2.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 61e6c3a45..1cf3d5850 100755 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -6187,9 +6187,10 @@ static int socket_read(int *id, int fd, short events, void *cbdata) f.data = ptr; else f.data = NULL; - if(trunked_ts) + if(trunked_ts) { fr.ts = trunked_ts; - else + fr.ts = (iaxs[fr.callno]->last & 0xFFFF0000L) | (fr.ts & 0xffff); + } else fr.ts = fix_peerts(&rxtrunktime, fr.callno, ts); /* Don't pass any packets until we're started */ if ((iaxs[fr.callno]->state & IAX_STATE_STARTED)) { @@ -6207,11 +6208,22 @@ static int socket_read(int *id, int fd, short events, void *cbdata) if (iaxs[fr.callno]->bridgecallno) { forward_delivery(&fr); } else { - schedule_delivery(iaxfrdup2(&fr), 1, updatehistory, 1); + duped_fr = iaxfrdup2(&fr); + schedule_delivery(duped_fr, 1, updatehistory, 1); + fr.ts = duped_fr->ts; } #else - schedule_delivery(iaxfrdup2(&fr), 1, updatehistory, 1); + duped_fr = iaxfrdup2(&fr); + schedule_delivery(duped_fr, 1, updatehistory, 1); + fr.ts = duped_fr->ts; +#endif + if (iaxs[fr.callno]->last < fr.ts) { + iaxs[fr.callno]->last = fr.ts; +#if 1 + if (option_debug) + ast_log(LOG_DEBUG, "For call=%d, set last=%d\n", fr.callno, fr.ts); #endif + } } } else { ast_log(LOG_WARNING, "Datalen < 0?\n"); |