-fix leak
[oweals/gnunet.git] / src / dht / gnunet-service-dht_nse.c
index 0715465f56f185a6a90d5d319d601e6056c0b944..11c02e1572e59a8a240848f6d39f3c8cdeb2b930 100644 (file)
@@ -23,6 +23,8 @@
  * @brief GNUnet DHT integration with NSE
  * @author Christian Grothoff
  */
+#include "platform.h"
+#include "gnunet_nse_service.h"
 #include "gnunet-service-dht.h"
 #include "gnunet-service-dht_nse.h"
 
@@ -53,10 +55,19 @@ static void
 update_network_size_estimate (void *cls, struct GNUNET_TIME_Absolute timestamp,
                               double logestimate, double std_dev)
 {
-  log_of_network_size_estimate = logestimate;
+  GNUNET_STATISTICS_update (GDS_stats,
+                            gettext_noop ("# Network size estimates received"),
+                            1, GNUNET_NO);
+  /* do not allow estimates < 0.5 */
+  log_of_network_size_estimate = GNUNET_MAX (0.5, logestimate);
 }
 
 
+/**
+ * Return the log of the current network size estimate.
+ *
+ * @return log of NSE
+ */
 double
 GDS_NSE_get ()
 {
@@ -64,18 +75,39 @@ GDS_NSE_get ()
 }
 
 
+/**
+ * Initialize NSE subsystem.
+ */
 void
 GDS_NSE_init ()
 {
+  unsigned long long hops;
+
+  if ( (GNUNET_YES ==
+       GNUNET_CONFIGURATION_have_value (GDS_cfg,
+                                        "dht",
+                                        "FORCE_NSE")) &&
+       (GNUNET_OK ==
+       GNUNET_CONFIGURATION_get_value_number (GDS_cfg,
+                                              "dht",
+                                              "FORCE_NSE",
+                                              &hops)) )
+  {
+    log_of_network_size_estimate = (double) hops;
+    return;
+  }
   nse = GNUNET_NSE_connect (GDS_cfg, &update_network_size_estimate, NULL);
 }
 
 
+/**
+ * Shutdown NSE subsystem.
+ */
 void
 GDS_NSE_done ()
-{  
+{
   if (NULL != nse)
-    {
+  {
     GNUNET_NSE_disconnect (nse);
     nse = NULL;
   }