[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r25142 - gnunet/src/stream
From: |
gnunet |
Subject: |
[GNUnet-SVN] r25142 - gnunet/src/stream |
Date: |
Mon, 26 Nov 2012 17:27:24 +0100 |
Author: harsha
Date: 2012-11-26 17:27:24 +0100 (Mon, 26 Nov 2012)
New Revision: 25142
Modified:
gnunet/src/stream/stream_api.c
Log:
- update bitmap not only on ACK's base number but also by looking into its
bitmap
Modified: gnunet/src/stream/stream_api.c
===================================================================
--- gnunet/src/stream/stream_api.c 2012-11-26 15:40:41 UTC (rev 25141)
+++ gnunet/src/stream/stream_api.c 2012-11-26 16:27:24 UTC (rev 25142)
@@ -2515,7 +2515,8 @@
const struct GNUNET_STREAM_AckMessage *ack,
const struct GNUNET_ATS_Information*atsi)
{
- struct GNUNET_STREAM_IOWriteHandle *write_handle;
+ struct GNUNET_STREAM_IOWriteHandle *write_handle;
+ uint64_t ack_bitmap;
unsigned int packet;
int need_retransmission;
uint32_t sequence_difference;
@@ -2571,17 +2572,13 @@
/* BS: Base sequence from ack; PS: sequence num of current packet */
sequence_difference = ntohl (ack->base_sequence_number)
- ntohl (socket->write_handle->messages[packet]->sequence_number);
- if ((0 == sequence_difference) ||
- (GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH < sequence_difference))
+ if (0 == sequence_difference)
break; /* The message in our handle is not yet received */
/* case where BS = PS + GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH */
/* sequence_difference <= GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH */
ackbitmap_modify_bit (&socket->write_handle->ack_bitmap,
packet, GNUNET_YES);
}
- /* Update the receive window remaining
- FIXME : Should update with the value from a data ack with greater
- sequence number */
if (((ntohl (ack->base_sequence_number)
- (socket->write_handle->max_ack_base_num))
<= GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH))
@@ -2602,6 +2599,15 @@
GNUNET_assert (ntohl
(socket->write_handle->messages[packet]->sequence_number)
== ntohl (ack->base_sequence_number));
+ /* Update our bitmap */
+ ack_bitmap = GNUNET_ntohll (ack->bitmap);
+ for (; packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH; packet++)
+ {
+ if (ackbitmap_is_bit_set (&ack_bitmap, ntohl
+
(socket->write_handle->messages[packet]->sequence_number)
+ - ntohl (ack->base_sequence_number)))
+ ackbitmap_modify_bit (&socket->write_handle->ack_bitmap, packet,
GNUNET_YES);
+ }
/* Check if we have received all acknowledgements */
need_retransmission = GNUNET_NO;
for (packet=0; packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH; packet++)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r25142 - gnunet/src/stream,
gnunet <=