[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r20058 - gnunet/src/stream
From: |
gnunet |
Subject: |
[GNUnet-SVN] r20058 - gnunet/src/stream |
Date: |
Mon, 27 Feb 2012 11:27:16 +0100 |
Author: harsha
Date: 2012-02-27 11:27:16 +0100 (Mon, 27 Feb 2012)
New Revision: 20058
Modified:
gnunet/src/stream/stream_api.c
Log:
-fixed relative boundaries in stream read
Modified: gnunet/src/stream/stream_api.c
===================================================================
--- gnunet/src/stream/stream_api.c 2012-02-27 10:20:04 UTC (rev 20057)
+++ gnunet/src/stream/stream_api.c 2012-02-27 10:27:16 UTC (rev 20058)
@@ -2056,6 +2056,8 @@
{
unsigned int packet;
struct GNUNET_STREAM_IOReadHandle *read_handle;
+ uint32_t offset_increase;
+ uint32_t sequence_increase;
/* Return NULL if there is already a read handle; the user has to cancel that
first before continuing or has to wait until it is completed */
@@ -2080,26 +2082,47 @@
break;
}
- if (0 == packet) /* The first packet is still missing */
+ sequence_increase = packet;
+
+ if (0 == sequence_increase) /* The first packet is still
missing */
{
/* We can't do anything until it arrives */
}
else
{
/* Copy data to copy buffer */
+ GNUNET_assert (0 <
socket->receive_buffer_boundaries[sequence_increase-1]);
socket->copy_buffer =
- GNUNET_malloc (socket->receive_buffer_boundaries[packet-1]);
+ GNUNET_malloc (socket->receive_buffer_boundaries[sequence_increase-1]);
+
+ /* Shift the data in the receive buffer */
+ memmove (socket->receive_buffer,
+ socket->receive_buffer
+ + socket->receive_buffer_boundaries[sequence_increase-1],
+ socket->receive_buffer_size -
socket->receive_buffer_boundaries[sequence_increase-1]);
/* Shift the bitmap */
- socket->ack_bitmap << packet;
+ socket->ack_bitmap = socket->ack_bitmap >> sequence_increase;
/* Set read_sequence_number */
- socket->read_sequence_number += packet;
+ socket->read_sequence_number += sequence_increase;
/* Set read_offset */
- socket->read_offset += packet;
-
- /* FIXME: Fix relative calucations in receive buffer management */
+ offset_increase = socket->receive_buffer_boundaries[sequence_increase-1];
+ socket->read_offset += offset_increase;
+
+ /* Fix relative boundaries */
+ for (packet=0; packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH; packet++)
+ {
+ if (packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH - sequence_increase)
+ {
+ socket->receive_buffer_boundaries[packet] =
+ socket->receive_buffer_boundaries[packet + sequence_increase]
+ - offset_increase;
+ }
+ else
+ socket->receive_buffer_boundaries[packet] = 0;
+ }
}
return read_handle;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r20058 - gnunet/src/stream,
gnunet <=