summaryrefslogtreecommitdiff
path: root/code/core/rbuf_recv.c
diff options
context:
space:
mode:
authorUros Majstorovic <majstor@majstor.org>2017-09-12 18:28:41 +0200
committerUros Majstorovic <majstor@majstor.org>2017-09-12 18:28:41 +0200
commit34b378ee754f5811b1f1cb30ca55a17dd26bb9cd (patch)
treed7c91de5ca2c48d2ec105f91d949f89fadadec95 /code/core/rbuf_recv.c
parentd2aeb3b2f016860432a3451d04cceb4d871ff4ba (diff)
video test passed
Diffstat (limited to 'code/core/rbuf_recv.c')
-rw-r--r--code/core/rbuf_recv.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/code/core/rbuf_recv.c b/code/core/rbuf_recv.c
index 2217bfc..b3b48dc 100644
--- a/code/core/rbuf_recv.c
+++ b/code/core/rbuf_recv.c
@@ -149,22 +149,20 @@ static int ack_send(ECPConnection *conn) {
static int ack_shift(ECPRBRecv *buf) {
int do_ack = 0;
+ int in_rbuf = 0;
int idx;
int i;
if ((buf->flags & ECP_RBUF_FLAG_RELIABLE) && ((buf->ack_map & ACK_MASK_FIRST) == 0)) return 0;
- idx = ecp_rbuf_msg_idx(&buf->rbuf, buf->seq_ack);
- if (idx < 0) return idx;
-
while (ECP_SEQ_LT(buf->seq_ack, buf->rbuf.seq_max)) {
- idx = ECP_RBUF_IDX_MASK(idx + 1, buf->rbuf.msg_size);
buf->seq_ack++;
+ in_rbuf = ECP_SEQ_LT(buf->seq_ack, buf->rbuf.seq_start) ? 1 : buf->rbuf.msg[ECP_RBUF_IDX_MASK(buf->rbuf.msg_start + buf->seq_ack - buf->rbuf.seq_start, buf->rbuf.msg_size)].flags & ECP_RBUF_FLAG_IN_RBUF;
- if ((buf->rbuf.msg[idx].flags & ECP_RBUF_FLAG_IN_RBUF) && (buf->ack_map == ECP_ACK_FULL)) continue;
+ if (in_rbuf && (buf->ack_map == ECP_ACK_FULL)) continue;
buf->ack_map = buf->ack_map << 1;
- if (buf->rbuf.msg[idx].flags & ECP_RBUF_FLAG_IN_RBUF) {
+ if (in_rbuf & ECP_RBUF_FLAG_IN_RBUF) {
buf->ack_map |= 1;
} else if (!do_ack && ECP_SEQ_LTE(buf->seq_ack, buf->rbuf.seq_max - 2 * buf->hole_max)) {
do_ack = 1;