-getting rid of silly, stupid, useless, often wrong DEFAULTCONFIG setting
[oweals/gnunet.git] / src / core / core_api.c
index c3dc4c9ecae8c2d0ade942d54f0bfb45ce2319ef..4d1a5493f17729884ce386d180a7d85acbaec09f 100644 (file)
@@ -357,26 +357,26 @@ reconnect_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
  * @return GNUNET_YES (continue)
  */
 static int
-disconnect_and_free_peer_entry (void *cls, const GNUNET_HashCode * key,
+disconnect_and_free_peer_entry (void *cls, const struct GNUNET_HashCode * key,
                                 void *value)
 {
   struct GNUNET_CORE_Handle *h = cls;
   struct GNUNET_CORE_TransmitHandle *th;
   struct PeerRecord *pr = value;
 
-  if (pr->timeout_task != GNUNET_SCHEDULER_NO_TASK)
+  if (GNUNET_SCHEDULER_NO_TASK != pr->timeout_task)
   {
     GNUNET_SCHEDULER_cancel (pr->timeout_task);
     pr->timeout_task = GNUNET_SCHEDULER_NO_TASK;
   }
-  if (pr->ntr_task != GNUNET_SCHEDULER_NO_TASK)
+  if (GNUNET_SCHEDULER_NO_TASK != pr->ntr_task)
   {
     GNUNET_SCHEDULER_cancel (pr->ntr_task);
     pr->ntr_task = GNUNET_SCHEDULER_NO_TASK;
   }
-  if ((pr->prev != NULL) || (pr->next != NULL) || (h->ready_peer_head == pr))
+  if ((NULL != pr->prev) || (NULL != pr->next) || (h->ready_peer_head == pr))
     GNUNET_CONTAINER_DLL_remove (h->ready_peer_head, h->ready_peer_tail, pr);
-  if (h->disconnects != NULL)
+  if (NULL != h->disconnects)
     h->disconnects (h->cls, &pr->peer);
   /* all requests should have been cancelled, clean up anyway, just in case */
   th = &pr->th;
@@ -384,15 +384,15 @@ disconnect_and_free_peer_entry (void *cls, const GNUNET_HashCode * key,
   {
     GNUNET_break (0);
     th->peer = NULL;
-    if (th->cm != NULL)
+    if (NULL != th->cm)
       th->cm->th = NULL;
   }
   /* done with 'voluntary' cleanups, now on to normal freeing */
   GNUNET_assert (GNUNET_YES ==
                  GNUNET_CONTAINER_multihashmap_remove (h->peers, key, pr));
   GNUNET_assert (pr->ch == h);
-  GNUNET_assert (pr->timeout_task == GNUNET_SCHEDULER_NO_TASK);
-  GNUNET_assert (pr->ntr_task == GNUNET_SCHEDULER_NO_TASK);
+  GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == pr->timeout_task);
+  GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == pr->ntr_task);
   GNUNET_free (pr);
   return GNUNET_YES;
 }
@@ -410,13 +410,13 @@ reconnect_later (struct GNUNET_CORE_Handle *h)
   struct ControlMessage *cm;
   struct PeerRecord *pr;
 
-  GNUNET_assert (h->reconnect_task == GNUNET_SCHEDULER_NO_TASK);
+  GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == h->reconnect_task);
   if (NULL != h->cth)
   {
     GNUNET_CLIENT_notify_transmit_ready_cancel (h->cth);
     h->cth = NULL;
   }
-  if (h->client != NULL)
+  if (NULL != h->client)
   {
     GNUNET_CLIENT_disconnect (h->client);
     h->client = NULL;
@@ -429,9 +429,9 @@ reconnect_later (struct GNUNET_CORE_Handle *h)
   {
     GNUNET_CONTAINER_DLL_remove (h->control_pending_head,
                                  h->control_pending_tail, cm);
-    if (cm->th != NULL)
+    if (NULL != cm->th)
       cm->th->cm = NULL;
-    if (cm->cont != NULL)
+    if (NULL != cm->cont)
       cm->cont (cm->cont_cls, GNUNET_NO);
     GNUNET_free (cm);
   }
@@ -537,9 +537,14 @@ transmission_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   struct GNUNET_CORE_TransmitHandle *th;
 
   pr->timeout_task = GNUNET_SCHEDULER_NO_TASK;
+  if (GNUNET_SCHEDULER_NO_TASK != pr->ntr_task)
+  {
+    GNUNET_SCHEDULER_cancel (pr->ntr_task);
+    pr->ntr_task = GNUNET_SCHEDULER_NO_TASK;
+  }
   th = &pr->th;
   th->peer = NULL;
-  if ((pr->prev != NULL) || (pr->next != NULL) || (pr == h->ready_peer_head))
+  if ((NULL != pr->prev) || (NULL != pr->next) || (pr == h->ready_peer_head))
   {
     /* the request that was 'approved' by core was
      * canceled before it could be transmitted; remove
@@ -554,8 +559,10 @@ transmission_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
     GNUNET_free (th->cm);
   }
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Signalling timeout of request for transmission to CORE service\n");
-  request_next_transmission (pr);
+       "Signalling timeout of request for transmission to peer `%s' via CORE\n",
+       GNUNET_i2s (&pr->peer));
+  trigger_next_request (h, GNUNET_NO);
+
   GNUNET_assert (0 == th->get_message (th->get_message_cls, 0, NULL));
 }
 
@@ -582,7 +589,7 @@ transmit_message (void *cls, size_t size, void *buf)
 
   GNUNET_assert (h->reconnect_task == GNUNET_SCHEDULER_NO_TASK);
   h->cth = NULL;
-  if (buf == NULL)
+  if (NULL == buf)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Transmission failed, initiating reconnect\n");
@@ -605,7 +612,7 @@ transmit_message (void *cls, size_t size, void *buf)
     memcpy (buf, hdr, msize);
     GNUNET_CONTAINER_DLL_remove (h->control_pending_head,
                                  h->control_pending_tail, cm);
-    if (cm->th != NULL)
+    if (NULL != cm->th)
       cm->th->cm = NULL;
     if (NULL != cm->cont)
       cm->cont (cm->cont_cls, GNUNET_OK);
@@ -614,65 +621,63 @@ transmit_message (void *cls, size_t size, void *buf)
     return msize;
   }
   /* now check for 'ready' P2P messages */
-  if (NULL != (pr = h->ready_peer_head))
+  if (NULL == (pr = h->ready_peer_head))
+    return 0;
+  GNUNET_assert (NULL != pr->th.peer);
+  th = &pr->th;
+  if (size < th->msize + sizeof (struct SendMessage))
+  {
+    trigger_next_request (h, GNUNET_NO);
+    return 0;
+  }
+  GNUNET_CONTAINER_DLL_remove (h->ready_peer_head, h->ready_peer_tail, pr);
+  th->peer = NULL;
+  if (GNUNET_SCHEDULER_NO_TASK != pr->timeout_task)
+  {
+    GNUNET_SCHEDULER_cancel (pr->timeout_task);
+    pr->timeout_task = GNUNET_SCHEDULER_NO_TASK;
+  }
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Transmitting SEND request to `%s' with %u bytes.\n",
+       GNUNET_i2s (&pr->peer), (unsigned int) th->msize);
+  sm = (struct SendMessage *) buf;
+  sm->header.type = htons (GNUNET_MESSAGE_TYPE_CORE_SEND);
+  sm->priority = htonl (th->priority);
+  sm->deadline = GNUNET_TIME_absolute_hton (th->timeout);
+  sm->peer = pr->peer;
+  sm->cork = htonl ((uint32_t) th->cork);
+  sm->reserved = htonl (0);
+  ret =
+    th->get_message (th->get_message_cls,
+                    size - sizeof (struct SendMessage), &sm[1]);
+  
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Transmitting SEND request to `%s' yielded %u bytes.\n",
+       GNUNET_i2s (&pr->peer), ret);
+  if (0 == ret)
   {
-    GNUNET_assert (NULL != pr->th.peer);
-    th = &pr->th;
-    if (size < th->msize + sizeof (struct SendMessage))
-    {
-      trigger_next_request (h, GNUNET_NO);
-      return 0;
-    }
-    GNUNET_CONTAINER_DLL_remove (h->ready_peer_head, h->ready_peer_tail, pr);
-    th->peer = NULL;
-    if (pr->timeout_task != GNUNET_SCHEDULER_NO_TASK)
-    {
-      GNUNET_SCHEDULER_cancel (pr->timeout_task);
-      pr->timeout_task = GNUNET_SCHEDULER_NO_TASK;
-    }
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Transmitting SEND request to `%s' with %u bytes.\n",
-         GNUNET_i2s (&pr->peer), (unsigned int) th->msize);
-    sm = (struct SendMessage *) buf;
-    sm->header.type = htons (GNUNET_MESSAGE_TYPE_CORE_SEND);
-    sm->priority = htonl (th->priority);
-    sm->deadline = GNUNET_TIME_absolute_hton (th->timeout);
-    sm->peer = pr->peer;
-    sm->cork = htonl ((uint32_t) th->cork);
-    sm->reserved = htonl (0);
-    ret =
-        th->get_message (th->get_message_cls,
-                         size - sizeof (struct SendMessage), &sm[1]);
-
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Transmitting SEND request to `%s' yielded %u bytes.\n",
-         GNUNET_i2s (&pr->peer), ret);
-    if (0 == ret)
-    {
-      LOG (GNUNET_ERROR_TYPE_DEBUG,
-           "Size of clients message to peer %s is 0!\n",
-           GNUNET_i2s (&pr->peer));
-      /* client decided to send nothing! */
-      request_next_transmission (pr);
-      return 0;
-    }
     LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Produced SEND message to core with %u bytes payload\n",
-         (unsigned int) ret);
-    GNUNET_assert (ret >= sizeof (struct GNUNET_MessageHeader));
-    if (ret + sizeof (struct SendMessage) >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
-    {
-      GNUNET_break (0);
-      request_next_transmission (pr);
-      return 0;
-    }
-    ret += sizeof (struct SendMessage);
-    sm->header.size = htons (ret);
-    GNUNET_assert (ret <= size);
+        "Size of clients message to peer %s is 0!\n",
+        GNUNET_i2s (&pr->peer));
+    /* client decided to send nothing! */
     request_next_transmission (pr);
-    return ret;
+    return 0;
+  }
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Produced SEND message to core with %u bytes payload\n",
+       (unsigned int) ret);
+  GNUNET_assert (ret >= sizeof (struct GNUNET_MessageHeader));
+  if (ret + sizeof (struct SendMessage) >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
+  {
+    GNUNET_break (0);
+    request_next_transmission (pr);
+    return 0;
   }
-  return 0;
+  ret += sizeof (struct SendMessage);
+  sm->header.size = htons (ret);
+  GNUNET_assert (ret <= size);
+  request_next_transmission (pr);
+  return ret;
 }
 
 
@@ -699,7 +704,7 @@ trigger_next_request (struct GNUNET_CORE_Handle *h, int ignore_currently_down)
     LOG (GNUNET_ERROR_TYPE_DEBUG, "Request pending, not processing queue\n");
     return;
   }
-  if (h->control_pending_head != NULL)
+  if (NULL != h->control_pending_head)
     msize =
         ntohs (((struct GNUNET_MessageHeader *) &h->
                 control_pending_head[1])->size);
@@ -917,9 +922,9 @@ main_notify_handler (void *cls, const struct GNUNET_MessageHeader *msg)
         continue;
       if ((mh->expected_size != ntohs (em->size)) && (mh->expected_size != 0))
       {
-        GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                    "Unexpected message size %u for message of type %u from peer `%4s'\n",
-                    htons (em->size), mh->type, GNUNET_i2s (&ntm->peer));
+        LOG (GNUNET_ERROR_TYPE_ERROR,
+            "Unexpected message size %u for message of type %u from peer `%4s'\n",
+            htons (em->size), mh->type, GNUNET_i2s (&ntm->peer));
         GNUNET_break_op (0);
         continue;
       }
@@ -1168,7 +1173,7 @@ GNUNET_CORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
   h->handlers = handlers;
   h->hcnt = 0;
   h->currently_down = GNUNET_YES;
-  h->peers = GNUNET_CONTAINER_multihashmap_create (128);
+  h->peers = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO);
   h->retry_backoff = GNUNET_TIME_UNIT_MILLISECONDS;
   if (NULL != handlers)
     while (handlers[h->hcnt].callback != NULL)
@@ -1285,6 +1290,10 @@ GNUNET_CORE_notify_transmit_ready (struct GNUNET_CORE_Handle *handle, int cork,
   struct GNUNET_CORE_TransmitHandle *th;
 
   GNUNET_assert (NULL != notify);
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Asking core for transmission of %u bytes to `%s'\n",
+       (unsigned int) notify_size,
+       GNUNET_i2s (target));
   pr = GNUNET_CONTAINER_multihashmap_get (handle->peers, &target->hashPubKey);
   if (NULL == pr)
   {
@@ -1309,6 +1318,7 @@ GNUNET_CORE_notify_transmit_ready (struct GNUNET_CORE_Handle *handle, int cork,
   th->priority = priority;
   th->msize = notify_size;
   th->cork = cork;
+  GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == pr->ntr_task);
   pr->ntr_task =
     GNUNET_SCHEDULER_add_now (&run_request_next_transmission, pr);
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Transmission request added to queue\n");
@@ -1328,6 +1338,10 @@ GNUNET_CORE_notify_transmit_ready_cancel (struct GNUNET_CORE_TransmitHandle *th)
   struct GNUNET_CORE_Handle *h;
 
   GNUNET_assert (NULL != pr);
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Aborting transmission request to core for %u bytes to `%s'\n",
+       (unsigned int) th->msize,
+       GNUNET_i2s (&pr->peer));
   th->peer = NULL;
   h = pr->ch;
   if (NULL != th->cm)
@@ -1345,6 +1359,11 @@ GNUNET_CORE_notify_transmit_ready_cancel (struct GNUNET_CORE_TransmitHandle *th)
      * us from the 'ready' list */
     GNUNET_CONTAINER_DLL_remove (h->ready_peer_head, h->ready_peer_tail, pr);
   }
+  if (GNUNET_SCHEDULER_NO_TASK != pr->ntr_task)
+  {
+    GNUNET_SCHEDULER_cancel (pr->ntr_task);
+    pr->ntr_task = GNUNET_SCHEDULER_NO_TASK;
+  }
 }