summaryrefslogtreecommitdiff
path: root/channels/chan_iax2.c
diff options
context:
space:
mode:
authorBrett Bryant <bbryant@digium.com>2008-05-27 19:45:41 +0000
committerBrett Bryant <bbryant@digium.com>2008-05-27 19:45:41 +0000
commita06df81624c2c86ef2b8840236ea6407a00b69cc (patch)
tree66c62ce229922a74f4a63cae6478dc6881f707e4 /channels/chan_iax2.c
parentcfb40367f49b6019bda4f226434a919d1cda5342 (diff)
Remove loop from the detection of a sequence number that acknowledges
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
Diffstat (limited to 'channels/chan_iax2.c')
-rw-r--r--channels/chan_iax2.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 5d4a4e084..fcd188214 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -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 */