- dist fix
[oweals/gnunet.git] / src / stream / stream_api.c
index a5ca040b9e4db570940979bf48c4a7b492e47456..1aec60285a8867e5bbdaf4b003f77ce15c4e9f12 100644 (file)
@@ -877,10 +877,10 @@ write_data (struct GNUNET_STREAM_Socket *socket)
     }
   }
   /* Now send new packets if there is enough buffer space */
-  while ( (NULL != io_handle->messages[packet]) &&
-         (socket->receiver_window_available 
-           >= ntohs (io_handle->messages[packet]->header.header.size)) &&
-          (packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH))
+  while ((packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH) &&
+         (NULL != io_handle->messages[packet]) &&
+         (socket->receiver_window_available 
+          >= ntohs (io_handle->messages[packet]->header.header.size)))
   {
     socket->receiver_window_available -= 
       ntohs (io_handle->messages[packet]->header.header.size);
@@ -895,6 +895,7 @@ write_data (struct GNUNET_STREAM_Socket *socket)
     packet++;
   }
   io_handle->packets_sent = packet;
+  // FIXME: 8s is not good, should use GNUNET_TIME_STD_BACKOFF...
   if (GNUNET_SCHEDULER_NO_TASK == socket->data_retransmission_task_id)
     socket->data_retransmission_task_id = 
       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 
@@ -967,7 +968,10 @@ call_read_processor (void *cls,
   for (packet = 0; packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH; packet++)
   {
     if (socket->copy_offset == socket->receive_buffer_boundaries[packet])
-    { packet++; break; }
+    { 
+      packet++; 
+      break;
+    }
     if (socket->copy_offset < socket->receive_buffer_boundaries[packet])
       break;
   }
@@ -998,7 +1002,7 @@ call_read_processor (void *cls,
   /* Fix relative boundaries */
   for (packet=0; packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH; packet++)
   {
-    if (packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH - sequence_increase)
+    if (packet < (GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH - sequence_increase))
     {
       uint32_t ahead_buffer_boundary;
 
@@ -1107,7 +1111,7 @@ handle_data (struct GNUNET_STREAM_Socket *socket,
        expecting */
     relative_sequence_number = 
       ntohl (msg->sequence_number) - socket->read_sequence_number;
-    if ( relative_sequence_number > GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH)
+    if ( relative_sequence_number >= GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH)
     {
       LOG (GNUNET_ERROR_TYPE_DEBUG,
            "%s: Ignoring received message with sequence number %u\n",
@@ -1489,6 +1493,7 @@ control_retransmission_task (void *cls,
                      GNUNET_NO);
     else
       GNUNET_break (0);
+    break;
   default:
     GNUNET_break (0);
   }  
@@ -2103,7 +2108,7 @@ server_handle_hello (void *cls,
   GNUNET_assert (socket->tunnel == tunnel);
   LOG_DEBUG ("%s: Received HELLO from %s\n", GNUNET_i2s (&socket->other_peer),
              GNUNET_i2s (&socket->other_peer));
-  switch (socket->status)
+  switch (socket->state)
   {
   case STATE_INIT:
     reply = generate_hello_ack (socket, GNUNET_YES);
@@ -2764,6 +2769,7 @@ tunnel_cleaner (void *cls,
                 void *tunnel_ctx)
 {
   struct GNUNET_STREAM_Socket *socket = tunnel_ctx;
+  struct MessageQueue *head;
 
   GNUNET_assert (tunnel == socket->tunnel);
   GNUNET_break_op(0);
@@ -2788,8 +2794,27 @@ tunnel_cleaner (void *cls,
   {
     GNUNET_SCHEDULER_cancel (socket->data_retransmission_task_id);
     socket->data_retransmission_task_id = GNUNET_SCHEDULER_NO_TASK;
+  }  
+  /* Terminate the control retransmission tasks */
+  if (GNUNET_SCHEDULER_NO_TASK != socket->control_retransmission_task_id)
+  {
+    GNUNET_SCHEDULER_cancel (socket->control_retransmission_task_id);
+    socket->control_retransmission_task_id = GNUNET_SCHEDULER_NO_TASK;
+  }
+  /* Clear Transmit handles */
+  if (NULL != socket->transmit_handle)
+  {
+    GNUNET_MESH_notify_transmit_ready_cancel (socket->transmit_handle);
+    socket->transmit_handle = NULL;
+  }
+  /* Clear existing message queue */
+  while (NULL != (head = socket->queue_head)) {
+    GNUNET_CONTAINER_DLL_remove (socket->queue_head,
+                                socket->queue_tail,
+                                head);
+    GNUNET_free (head->message);
+    GNUNET_free (head);
   }
-  /* FIXME: Cancel all other tasks using socket->tunnel */
   socket->tunnel = NULL;
 }