- expire old keys adaptively
[oweals/gnunet.git] / src / nse / nse_api.c
index 9a44197c01fdbdafdd6163a9022c96d90e23886a..bc927f48140accd08f7e7be92a89778e0e9da8da 100644 (file)
  * @author Nathan Evans
  */
 #include "platform.h"
-#include "gnunet_client_lib.h"
 #include "gnunet_constants.h"
-#include "gnunet_container_lib.h"
 #include "gnunet_arm_service.h"
 #include "gnunet_hello_lib.h"
 #include "gnunet_protocols.h"
-#include "gnunet_server_lib.h"
-#include "gnunet_time_lib.h"
+#include "gnunet_util_lib.h"
 #include "gnunet_nse_service.h"
 #include "nse.h"
 
 #define LOG(kind,...) GNUNET_log_from (kind, "nse-api",__VA_ARGS__)
 
 /**
- * Handle for the service.
+ * Handle for talking with the NSE service.
  */
 struct GNUNET_NSE_Handle
 {
@@ -73,7 +70,7 @@ struct GNUNET_NSE_Handle
   GNUNET_NSE_Callback recv_cb;
 
   /**
-   * Closure to pass to callback.
+   * Closure to pass to @e recv_cb callback.
    */
   void *recv_cb_cls;
 
@@ -103,13 +100,14 @@ message_handler (void *cls, const struct GNUNET_MessageHeader *msg)
   struct GNUNET_NSE_Handle *h = cls;
   const struct GNUNET_NSE_ClientMessage *client_msg;
 
-  if (msg == NULL)
+  if (NULL == msg)
   {
     /* Error, timeout, death */
     GNUNET_CLIENT_disconnect (h->client);
     h->client = NULL;
     h->reconnect_task =
-        GNUNET_SCHEDULER_add_delayed (h->reconnect_delay, &reconnect, h);
+        GNUNET_SCHEDULER_add_delayed (h->reconnect_delay,
+                                     &reconnect, h);
     return;
   }
   if ((ntohs (msg->size) != sizeof (struct GNUNET_NSE_ClientMessage)) ||
@@ -120,14 +118,13 @@ message_handler (void *cls, const struct GNUNET_MessageHeader *msg)
   }
   client_msg = (const struct GNUNET_NSE_ClientMessage *) msg;
   h->recv_cb (h->recv_cb_cls, GNUNET_TIME_absolute_ntoh (client_msg->timestamp),
-              GNUNET_ntoh_double (client_msg->size_estimate), 
+              GNUNET_ntoh_double (client_msg->size_estimate),
              GNUNET_ntoh_double (client_msg->std_deviation));
   GNUNET_CLIENT_receive (h->client, &message_handler, h,
                          GNUNET_TIME_UNIT_FOREVER_REL);
 }
 
 
-
 /**
  * Reschedule a connect attempt to the service.
  *
@@ -150,30 +147,22 @@ reschedule_connect (struct GNUNET_NSE_Handle *h)
   }
 
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Scheduling task to reconnect to nse service in %llu ms.\n",
-       h->reconnect_delay.rel_value);
+       "Scheduling task to reconnect to nse service in %s.\n",
+       GNUNET_STRINGS_relative_time_to_string (h->reconnect_delay,
+                                              GNUNET_YES));
   h->reconnect_task =
       GNUNET_SCHEDULER_add_delayed (h->reconnect_delay, &reconnect, h);
-  if (h->reconnect_delay.rel_value == 0)
-  {
-    h->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-  }
-  else
-  {
-    h->reconnect_delay = GNUNET_TIME_relative_multiply (h->reconnect_delay, 2);
-    h->reconnect_delay =
-        GNUNET_TIME_relative_min (GNUNET_TIME_UNIT_SECONDS, h->reconnect_delay);
-  }
+  h->reconnect_delay = GNUNET_TIME_STD_BACKOFF (h->reconnect_delay);
 }
 
 
 /**
  * Transmit START message to service.
  *
- * @param cls unused
- * @param size number of bytes available in buf
+ * @param cls the `struct GNUNET_NSE_Handle *`
+ * @param size number of bytes available in @a buf
  * @param buf where to copy the message
- * @return number of bytes copied to buf
+ * @return number of bytes copied to @a buf
  */
 static size_t
 send_start (void *cls, size_t size, void *buf)
@@ -182,15 +171,18 @@ send_start (void *cls, size_t size, void *buf)
   struct GNUNET_MessageHeader *msg;
 
   h->th = NULL;
-  if (buf == NULL)
+  if (NULL == buf)
   {
     /* Connect error... */
     LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Shutdown while trying to transmit `%s' request.\n", "START");
+         "Error while trying to transmit `%s' request.\n",
+        "START");
     reschedule_connect (h);
     return 0;
   }
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Transmitting `%s' request.\n", "START");
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Transmitting `%s' request.\n",
+       "START");
   GNUNET_assert (size >= sizeof (struct GNUNET_MessageHeader));
 
   msg = (struct GNUNET_MessageHeader *) buf;
@@ -205,32 +197,28 @@ send_start (void *cls, size_t size, void *buf)
 /**
  * Try again to connect to network size estimation service.
  *
- * @param cls the handle to the transport service
+ * @param cls the `struct GNUNET_NSE_Handle *`
  * @param tc scheduler context
  */
 static void
-reconnect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+reconnect (void *cls,
+          const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct GNUNET_NSE_Handle *h = cls;
 
   h->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
-  if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
-  {
-    /* shutdown, just give up */
-    return;
-  }
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Connecting to network size estimation service.\n");
-  GNUNET_assert (h->client == NULL);
+  GNUNET_assert (NULL == h->client);
   h->client = GNUNET_CLIENT_connect ("nse", h->cfg);
-  GNUNET_assert (h->client != NULL);
-
+  GNUNET_assert (NULL != h->client);
+  GNUNET_assert (NULL == h->th);
   h->th =
       GNUNET_CLIENT_notify_transmit_ready (h->client,
                                            sizeof (struct GNUNET_MessageHeader),
                                            GNUNET_TIME_UNIT_FOREVER_REL,
                                            GNUNET_NO, &send_start, h);
-  GNUNET_assert (h->th != NULL);
+  GNUNET_assert (NULL != h->th);
 }
 
 
@@ -239,8 +227,7 @@ reconnect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
  *
  * @param cfg the configuration to use
  * @param func funtion to call with network size estimate
- * @param func_cls closure to pass for network size estimate callback
- *
+ * @param func_cls closure to pass to @a func
  * @return handle to use
  */
 struct GNUNET_NSE_Handle *
@@ -250,7 +237,7 @@ GNUNET_NSE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
   struct GNUNET_NSE_Handle *ret;
 
   GNUNET_assert (func != NULL);
-  ret = GNUNET_malloc (sizeof (struct GNUNET_NSE_Handle));
+  ret = GNUNET_new (struct GNUNET_NSE_Handle);
   ret->cfg = cfg;
   ret->recv_cb = func;
   ret->recv_cb_cls = func_cls;
@@ -268,18 +255,18 @@ GNUNET_NSE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
 void
 GNUNET_NSE_disconnect (struct GNUNET_NSE_Handle *h)
 {
-  GNUNET_assert (h != NULL);
+  GNUNET_assert (NULL != h);
   if (h->reconnect_task != GNUNET_SCHEDULER_NO_TASK)
   {
     GNUNET_SCHEDULER_cancel (h->reconnect_task);
     h->reconnect_task = GNUNET_SCHEDULER_NO_TASK;
   }
-  if (h->th != NULL)
+  if (NULL != h->th)
   {
     GNUNET_CLIENT_notify_transmit_ready_cancel (h->th);
     h->th = NULL;
   }
-  if (h->client != NULL)
+  if (NULL != h->client)
   {
     GNUNET_CLIENT_disconnect (h->client);
     h->client = NULL;