-bringing copyright tags up to FSF standard
[oweals/gnunet.git] / src / transport / gnunet-service-transport_validation.c
index b2948d0869ccd28db9deccbe0e1344063588ad49..abf15debf85e7a33f77554439604e5814d5d5018 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2010-2015 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2010-2015 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -450,7 +450,7 @@ cleanup_validation_entry (void *cls,
                            validations_running,
                            GNUNET_NO);
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Validation finished, %u validation processes running\n",
+                "Validation aborted, %u validation processes running\n",
                 validations_running);
   }
   GNUNET_free (ve);
@@ -830,7 +830,7 @@ add_valid_address (void *cls,
   if (GNUNET_YES != ve->known_to_ats)
   {
     ve->known_to_ats = GNUNET_YES;
-    GST_ats_add_address (address, NULL, &ats, 1);
+    GST_ats_add_address (address, &ats, 1);
   }
   return GNUNET_OK;
 }
@@ -1229,6 +1229,35 @@ GST_validation_handle_ping (const struct GNUNET_PeerIdentity *sender,
 }
 
 
+/**
+ * Validate an individual address.
+ *
+ * @param address address we should try to validate
+ */
+void
+GST_validation_handle_address (const struct GNUNET_HELLO_Address *address)
+{
+  struct GNUNET_TRANSPORT_PluginFunctions *papi;
+  struct ValidationEntry *ve;
+
+  papi = GST_plugins_find (address->transport_name);
+  if (NULL == papi)
+  {
+    /* This plugin is currently unvailable ... ignore */
+    return;
+  }
+  ve = find_validation_entry (address);
+  if (NULL == ve->revalidation_task)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Validation process started for fresh address `%s' of %s\n",
+                GST_plugins_a2s (ve->address),
+                GNUNET_i2s (&ve->address->peer));
+    ve->revalidation_task = GNUNET_SCHEDULER_add_now (&revalidate_address, ve);
+  }
+}
+
+
 /**
  * Iterator callback to go over all addresses and try to validate them
  * (unless blocked or already validated).
@@ -1243,29 +1272,13 @@ validate_address_iterator (void *cls,
                            const struct GNUNET_HELLO_Address *address,
                            struct GNUNET_TIME_Absolute expiration)
 {
-  struct GNUNET_TRANSPORT_PluginFunctions * papi;
-  struct ValidationEntry *ve;
-
   if (0 == GNUNET_TIME_absolute_get_remaining (expiration).rel_value_us)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Skipping expired address from HELLO\n");
     return GNUNET_OK;           /* expired */
   }
-  papi = GST_plugins_find (address->transport_name);
-  if (NULL == papi)
-  {
-    /* This plugin is currently unvailable ... ignore */
-    return GNUNET_OK;
-  }
-  ve = find_validation_entry (address);
-  if (NULL == ve->revalidation_task)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                "Validation process started for fresh address `%s'\n",
-                GST_plugins_a2s (ve->address));
-    ve->revalidation_task = GNUNET_SCHEDULER_add_now (&revalidate_address, ve);
-  }
+  GST_validation_handle_address (address);
   return GNUNET_OK;
 }
 
@@ -1457,7 +1470,7 @@ GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender,
     else
     {
       ve->known_to_ats = GNUNET_YES;
-      GST_ats_add_address (ve->address, NULL, ats, 2);
+      GST_ats_add_address (ve->address, ats, 2);
     }
   }
   if (validations_running > 0)
@@ -1519,21 +1532,30 @@ GST_validation_handle_hello (const struct GNUNET_MessageHeader *hello)
       memcmp (&GST_my_identity,
              &pid,
              sizeof (struct GNUNET_PeerIdentity)))
+  {
+    /* got our own HELLO, how boring */
     return GNUNET_OK;
-  /* Add peer identity without addresses to peerinfo service */
-  h = GNUNET_HELLO_create (&pid.public_key, NULL, NULL, friend);
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              _("Validation received new %s message for peer `%s' with size %u\n"),
-              "HELLO",
-              GNUNET_i2s (&pid),
-              ntohs (hello->size));
-  GNUNET_PEERINFO_add_peer (GST_peerinfo, h, NULL, NULL);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              _("Adding `%s' without addresses for peer `%s'\n"), "HELLO",
-              GNUNET_i2s (&pid));
+  }
+  if (GNUNET_NO ==
+      GNUNET_CONTAINER_multipeermap_contains (validation_map,
+                                              &pid))
+  {
+    /* Add peer identity without addresses to peerinfo service */
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Adding HELLO without addresses for peer `%s'\n",
+                GNUNET_i2s (&pid));
+    h = GNUNET_HELLO_create (&pid.public_key, NULL, NULL, friend);
+    GNUNET_PEERINFO_add_peer (GST_peerinfo, h, NULL, NULL);
 
-  GNUNET_free (h);
+    GNUNET_free (h);
+  }
+  else
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Validation received HELLO message for peer `%s' with size %u, checking for new addresses\n",
+                GNUNET_i2s (&pid),
+                ntohs (hello->size));
+  }
   GNUNET_assert (NULL ==
                  GNUNET_HELLO_iterate_addresses (hm,
                                                 GNUNET_NO,
@@ -1644,19 +1666,21 @@ GST_validation_set_address_use (const struct GNUNET_HELLO_Address *address,
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                   "Error setting address in use for peer `%s' `%s' to USED\n",
-                  GNUNET_i2s (&address->peer), GST_plugins_a2s (address));
+                  GNUNET_i2s (&address->peer),
+                  GST_plugins_a2s (address));
     }
     if (GNUNET_NO == in_use)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                   "Error setting address in use for peer `%s' `%s' to NOT_USED\n",
-                  GNUNET_i2s (&address->peer), GST_plugins_a2s (address));
+                  GNUNET_i2s (&address->peer),
+                  GST_plugins_a2s (address));
     }
   }
 
   GNUNET_break (ve->in_use != in_use);  /* should be different... */
   ve->in_use = in_use;
-  if (in_use == GNUNET_YES)
+  if (GNUNET_YES == in_use)
   {
     /* from now on, higher frequeny, so reschedule now */
     if (NULL != ve->revalidation_task)
@@ -1666,38 +1690,6 @@ GST_validation_set_address_use (const struct GNUNET_HELLO_Address *address,
 }
 
 
-/**
- * Query validation about the latest observed latency on a given
- * address.
- *
- * @param address the address
- * @param session session
- * @return observed latency of the address, FOREVER if the address was
- *         never successfully validated
- */
-struct GNUNET_TIME_Relative
-GST_validation_get_address_latency (const struct GNUNET_HELLO_Address *address,
-                                    struct Session *session)
-{
-  struct ValidationEntry *ve;
-
-  if (NULL == address)
-  {
-    GNUNET_break (0);
-    return GNUNET_TIME_UNIT_FOREVER_REL;
-  }
-  if (NULL == GST_plugins_find (address->transport_name))
-  {
-    GNUNET_break (0); /* but we don't have the plugin! */
-    return GNUNET_TIME_UNIT_FOREVER_REL;
-  }
-
-  ve = find_validation_entry (address);
-  if (NULL == ve)
-    return GNUNET_TIME_UNIT_FOREVER_REL;
-  return ve->latency;
-}
-
 /**
  * Closure for the validation_entries_iterate function.
  */
@@ -1751,7 +1743,7 @@ validation_entries_iterate (void *cls,
  * Iterate over all iteration entries
  *
  * @param cb function to call
- * @param cb_cls closure for cb
+ * @param cb_cls closure for @a cb
  */
 void
 GST_validation_iterate (GST_ValidationChangedCallback cb,