make clang static analysis happy
[oweals/gnunet.git] / src / hostlist / hostlist-client.c
index 1dc74ad506e38e3ea25d260ccbe01115db33ce32..90fdfb63a3d35e59525b8217490c45c91b937c11 100644 (file)
@@ -193,7 +193,7 @@ static struct Hostlist * linked_list_tail;
  */
 static struct Hostlist * current_hostlist;
 
-/*
+/**
  *  Size of the linke list  used to store hostlists
  */
 static unsigned int linked_list_size;
@@ -486,6 +486,7 @@ static uint64_t checked_sub (uint64_t val1, uint64_t val2)
  */
 static void update_hostlist ( )
 {
+  char *stat;
   if ( (use_preconfigured_list == GNUNET_NO) && ( NULL != current_hostlist ) )
   {
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -497,6 +498,15 @@ static void update_hostlist ( )
      {
        current_hostlist->times_used++;
        current_hostlist->quality = checked_add ( current_hostlist->quality, HOSTLIST_SUCCESSFUL_DOWNLOAD);
+       GNUNET_asprintf (&stat,
+                        gettext_noop("# advertised URI `%s' downloaded"),
+                        current_hostlist->hostlist_uri);
+
+       GNUNET_STATISTICS_update ( stats,
+                                  stat,
+                                  1,
+                                  GNUNET_YES);
+       GNUNET_free (stat);
      }
      else
        current_hostlist->quality = checked_sub ( current_hostlist->quality, HOSTLIST_FAILED_DOWNLOAD );
@@ -1067,6 +1077,11 @@ advertisement_handler (void *cls,
   GNUNET_CONTAINER_DLL_insert(linked_list_head, linked_list_tail, hostlist);
   linked_list_size++;
   
+  GNUNET_STATISTICS_set (stats,
+                         gettext_noop("# advertised hostlist URIs"),
+                         linked_list_size,
+                         GNUNET_NO);
+
   if (MAX_NUMBER_HOSTLISTS >= linked_list_size)
     return GNUNET_OK;
 
@@ -1080,6 +1095,12 @@ advertisement_handler (void *cls,
              (unsigned long long) lowest_quality->quality);
   GNUNET_CONTAINER_DLL_remove (linked_list_head, linked_list_tail, lowest_quality);
   linked_list_size--;
+
+  GNUNET_STATISTICS_set (stats,
+                         gettext_noop("# advertised hostlist URIs"),
+                         linked_list_size,
+                         GNUNET_NO);
+
   GNUNET_free (lowest_quality);
   return GNUNET_OK;
 }
@@ -1152,6 +1173,13 @@ load_hostlist_file ()
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               _("Loading saved hostlist entries from file `%s' \n"), filename);
+  if ( GNUNET_NO == GNUNET_DISK_file_test (filename) )
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                _("Hostlist file `%s' is not existing\n"), filename);
+    GNUNET_free ( filename );
+    return;
+  }
 
   struct GNUNET_BIO_ReadHandle * rh = GNUNET_BIO_read_open (filename);
   if (NULL == rh)
@@ -1192,9 +1220,13 @@ load_hostlist_file ()
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               _("%u hostlist URIs loaded from file\n"), counter);
   GNUNET_STATISTICS_set (stats,
-                         gettext_noop("# hostlis URIs read from file"),
+                         gettext_noop("# hostlist URIs read from file"),
                          counter,
                          GNUNET_YES);
+  GNUNET_STATISTICS_set (stats,
+                         gettext_noop("# advertised hostlist URIs"),
+                         linked_list_size,
+                         GNUNET_NO);
 
   GNUNET_free_non_null (uri);
   emsg = NULL;
@@ -1206,7 +1238,7 @@ load_hostlist_file ()
 
 
 /**
- * Method to load persistent hostlist file during hostlist client shutdown
+ * Method to save persistent hostlist file during hostlist client shutdown
  * @param shutdown set if called because of shutdown, entries in linked list will be destroyed
  */
 static void save_hostlist_file ( int shutdown )
@@ -1226,7 +1258,6 @@ static void save_hostlist_file ( int shutdown )
       GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
                   _("No `%s' specified in `%s' configuration, cannot save hostlists to file.\n"),
                   "HOSTLISTFILE", "HOSTLIST");
-                  GNUNET_free (filename);
       return;
     }
   wh = GNUNET_BIO_write_open (filename);
@@ -1236,7 +1267,7 @@ static void save_hostlist_file ( int shutdown )
                   _("Could not open file `%s' for writing to save hostlists: %s\n"),
                   filename,
                  STRERROR (errno));
-                  GNUNET_free (filename);
+      GNUNET_free (filename);
       return;
     }
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -1327,18 +1358,16 @@ GNUNET_HOSTLIST_client_start (const struct GNUNET_CONFIGURATION_Handle *c,
                                             "HTTP-PROXY", 
                                             &proxy))
     proxy = NULL;
+  learning = learn;
   *ch = &connect_handler;
   *dh = &disconnect_handler;
-  if (learn)
-    *msgh = &advertisement_handler;
-  else
-    *msgh = NULL;
   linked_list_head = NULL;
   linked_list_tail = NULL;
   use_preconfigured_list = GNUNET_YES;
-  learning = learn;
+
   if ( GNUNET_YES == learning )
   {
+    *msgh = &advertisement_handler;
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               _("Learning is enabled on this peer\n"));
     load_hostlist_file ();
@@ -1354,6 +1383,7 @@ GNUNET_HOSTLIST_client_start (const struct GNUNET_CONFIGURATION_Handle *c,
   {
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               _("Learning is not enabled on this peer\n"));
+    *msgh = NULL;
     if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (cfg,
                                                             "HOSTLIST",
                                                             "HOSTLISTFILE",
@@ -1393,7 +1423,8 @@ GNUNET_HOSTLIST_client_stop ()
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
              "Hostlist client shutdown\n");
 #endif
-  save_hostlist_file ( GNUNET_YES );
+  if ( GNUNET_YES == learning )
+    save_hostlist_file ( GNUNET_YES );
 
   if (current_task != GNUNET_SCHEDULER_NO_TASK)
     {