]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Sign problem calculating timestamp for iax frame leads to no audio on the receiving...
authorDavid Vossel <dvossel@digium.com>
Thu, 21 May 2009 19:04:56 +0000 (19:04 +0000)
committerDavid Vossel <dvossel@digium.com>
Thu, 21 May 2009 19:04:56 +0000 (19:04 +0000)
There are rare cases in which a frame's delivery timestamp is slightly less than the iax2_pvt's offset.  This causes the pvt's timestamp to be a small negative number, but since the timestamp value is unsigned it looks like a huge positive number.  This patch checks for this negative case and sets the ms to zero.  A similar check is already done right below this one in the 'else' statement.

(closes issue #15032)
Reported by: guillecabeza
Patches:
      chan_iax2.c.patch_timestamp uploaded by guillecabeza (license 380)
Tested by: guillecabeza

(closes issue #14216)
Reported by: Andrey Sofronov

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@195991 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_iax2.c

index bab2c0a38210b7950cd0b506fe3f780d2a829425..8ef2acc6f9e34da0d8934695752aaea038226c15 100644 (file)
@@ -4090,6 +4090,9 @@ static unsigned int calc_timestamp(struct chan_iax2_pvt *p, unsigned int ts, str
        /* If we have a time that the frame arrived, always use it to make our timestamp */
        if (delivery && !ast_tvzero(*delivery)) {
                ms = ast_tvdiff_ms(*delivery, p->offset);
+               if (ms < 0) {
+                       ms = 0;
+               }
                if (option_debug > 2 && iaxdebug)
                        ast_log(LOG_DEBUG, "calc_timestamp: call %d/%d: Timestamp slaved to delivery time\n", p->callno, iaxs[p->callno]->peercallno);
        } else {