Remove loop from the detection of a sequence number that acknowledges
authorBrett Bryant <bbryant@digium.com>
Tue, 27 May 2008 19:45:41 +0000 (19:45 +0000)
committerBrett Bryant <bbryant@digium.com>
Tue, 27 May 2008 19:45:41 +0000 (19:45 +0000)
the receiving of a packet that we've kept in memory just incase the
packet needs to be retransmitted.

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

channels/chan_iax2.c

index 5d4a4e0..fcd1882 100644 (file)
@@ -8156,12 +8156,11 @@ static int socket_process(struct iax2_thread *thread)
                     (f.frametype != AST_FRAME_IAX))) {
                        unsigned char x;
                        int call_to_destroy;
-                       /* XXX This code is not very efficient.  Surely there is a better way which still
-                              properly handles boundary conditions? XXX */
                        /* First we have to qualify that the ACKed value is within our window */
-                       for (x=iaxs[fr->callno]->rseqno; x != iaxs[fr->callno]->oseqno; x++)
-                               if (fr->iseqno == x)
-                                       break;
+                       if (iaxs[fr->callno]->rseqno >= iaxs[fr->callno]->oseqno || (fr->iseqno >= iaxs[fr->callno]->rseqno && fr->iseqno < iaxs[fr->callno]->oseqno))
+                               x = fr->iseqno;
+                       else 
+                               x = iaxs[fr->callno]->oseqno;
                        if ((x != iaxs[fr->callno]->oseqno) || (iaxs[fr->callno]->oseqno == fr->iseqno)) {
                                /* The acknowledgement is within our window.  Time to acknowledge everything
                                   that it says to */