i am a dumb dummy
[oweals/gnunet.git] / src / core / gnunet-service-core.c
index 53eee200090a4ed5d0b8fc1b974399bae72f6a46..76e26cc8f962ef02022ae18c26cb473c865e7a37 100644 (file)
@@ -1015,7 +1015,7 @@ handle_peer_status_change (struct Neighbour *n)
              GNUNET_i2s (&n->peer));
 #endif
   size = sizeof (struct PeerStatusNotifyMessage) +
-    (n->ats_count+1) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
+    n->ats_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
   if (size >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
     {
       GNUNET_break (0);
@@ -1024,7 +1024,7 @@ handle_peer_status_change (struct Neighbour *n)
                         n->ats_count,
                         0);
       size = sizeof (struct PeerStatusNotifyMessage) +
-       (n->ats_count+1) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
+       n->ats_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
     }
   psnm = (struct PeerStatusNotifyMessage*) buf;
   psnm->header.size = htons (size);
@@ -1277,7 +1277,7 @@ handle_client_init (void *cls,
       while (n != NULL)
        {
          size = sizeof (struct ConnectNotifyMessage) +
-           (n->ats_count+1) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
+           (n->ats_count) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
          if (size >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
            {
              GNUNET_break (0);
@@ -1286,7 +1286,7 @@ handle_client_init (void *cls,
                                 n->ats_count,
                                 0);
              size = sizeof (struct ConnectNotifyMessage) +
-               (n->ats_count+1) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
+               (n->ats_count) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
            }
          cnm = (struct ConnectNotifyMessage*) buf;       
          cnm->header.size = htons (size);
@@ -1419,7 +1419,7 @@ handle_client_iterate_peers (void *cls,
       if (n->status == PEER_STATE_KEY_CONFIRMED)
         {
          size = sizeof (struct ConnectNotifyMessage) +
-           (n->ats_count+1) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
+           (n->ats_count) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
          if (size >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
            {
              GNUNET_break (0);
@@ -1428,7 +1428,7 @@ handle_client_iterate_peers (void *cls,
                                 n->ats_count,
                                 0);
              size = sizeof (struct PeerStatusNotifyMessage) +
-               (n->ats_count+1) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
+               n->ats_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
            }
          cnm = (struct ConnectNotifyMessage*) buf;
          cnm->header.size = htons (size);
@@ -1438,7 +1438,7 @@ handle_client_iterate_peers (void *cls,
          memcpy (ats,
                  n->ats,
                  n->ats_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information));
-         ats[n->ats_count].type = htonl (0);
+         ats[n->ats_count].type = htonl (GNUNET_TRANSPORT_ATS_ARRAY_TERMINATOR);
          ats[n->ats_count].value = htonl (0);    
 #if DEBUG_CORE_CLIENT
           GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1452,7 +1452,7 @@ handle_client_iterate_peers (void *cls,
       n = n->next;
     }
   done_msg.size = htons (sizeof (struct GNUNET_MessageHeader));
-  done_msg.type = htons (GNUNET_MESSAGE_TYPE_CORE_NOTIFY_CONNECT);
+  done_msg.type = htons (GNUNET_MESSAGE_TYPE_CORE_ITERATE_PEERS_END);
   GNUNET_SERVER_transmit_context_append_message (tc, &done_msg);
   GNUNET_SERVER_transmit_context_run (tc,
                                       GNUNET_TIME_UNIT_FOREVER_REL);
@@ -3296,9 +3296,9 @@ update_neighbour_performance (struct Neighbour *n,
 
   if (ats_count == 0)
     return;
-  for (i=0;i<ats_count;i++)
+  for (i = 0; i < ats_count; i++)
     {
-      for (j=0;j<n->ats_count;j++)
+      for (j=0;j < n->ats_count; j++)
        {
          if (n->ats[j].type == ats[i].type)
            {
@@ -3306,10 +3306,12 @@ update_neighbour_performance (struct Neighbour *n,
              break;
            }
        }
-      if (j == n->ats_count)   
-       GNUNET_array_append (n->ats,
-                            n->ats_count,
-                            *ats);     
+      if (j == n->ats_count)
+        {
+          GNUNET_array_append (n->ats,
+                               n->ats_count,
+                               ats[i]);
+        }
     }
 }
 
@@ -3526,7 +3528,7 @@ handle_pong (struct Neighbour *n,
         }      
       update_neighbour_performance (n, ats, ats_count);      
       size = sizeof (struct ConnectNotifyMessage) +
-       (n->ats_count+1) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
+       (n->ats_count) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
       if (size >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
        {
          GNUNET_break (0);
@@ -3535,17 +3537,18 @@ handle_pong (struct Neighbour *n,
                             n->ats_count,
                             0);
          size = sizeof (struct PeerStatusNotifyMessage) +
-           (n->ats_count+1) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
+           n->ats_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
        }
       cnm = (struct ConnectNotifyMessage*) buf;
       cnm->header.size = htons (size);
       cnm->header.type = htons (GNUNET_MESSAGE_TYPE_CORE_NOTIFY_CONNECT);
       cnm->ats_count = htonl (n->ats_count);
+      cnm->peer = n->peer;
       mats = &cnm->ats;
       memcpy (mats,
              n->ats,
              n->ats_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information));
-      mats[n->ats_count].type = htonl (0);
+      mats[n->ats_count].type = htonl (GNUNET_TRANSPORT_ATS_ARRAY_TERMINATOR);
       mats[n->ats_count].value = htonl (0);      
       send_to_all_clients (&cnm->header, 
                           GNUNET_NO, 
@@ -3762,7 +3765,7 @@ send_p2p_message_to_client (struct Neighbour *sender,
                             const void *m, size_t msize)
 {
   size_t size = msize + sizeof (struct NotifyTrafficMessage) +
-    (sender->ats_count+1) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
+    (sender->ats_count) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
   char buf[size];
   struct NotifyTrafficMessage *ntm;
   struct GNUNET_TRANSPORT_ATS_Information *ats;
@@ -3775,7 +3778,7 @@ send_p2p_message_to_client (struct Neighbour *sender,
                         sender->ats_count,
                         0);
       size = msize + sizeof (struct NotifyTrafficMessage) +
-       (sender->ats_count+1) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
+       (sender->ats_count) * sizeof (struct GNUNET_TRANSPORT_ATS_Information);
     }
 #if DEBUG_CORE
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -4407,11 +4410,14 @@ handle_transport_notify_disconnect (void *cls,
       cnm.peer = *peer;
       send_to_all_clients (&cnm.header, GNUNET_NO, GNUNET_CORE_OPTION_SEND_DISCONNECT);
     }
-  if (NULL != n->th)
+
+  /* On transport disconnect transport doesn't cancel requests, so must do so here. */
+  if (n->th != NULL)
     {
-      GNUNET_TRANSPORT_notify_transmit_ready_cancel (n->th);
-      n->th = NULL;
+      GNUNET_TRANSPORT_notify_transmit_ready_cancel(n->th);
     }
+  n->th = NULL;
+
   n->is_connected = GNUNET_NO;
   n->status = PEER_STATE_DOWN;
   while (NULL != (car = n->active_client_request_head))