gnunet-svn
[Top][All Lists]
Advanced

[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;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]