-add tests
[oweals/gnunet.git] / src / ats / gnunet-service-ats_plugins.c
index 712f927b53f0fe23042b6d50fd914cb135626041..f70c4cd9b84e1bb028921bbb098acaae46e9b02d 100644 (file)
@@ -1,6 +1,6 @@
 /*
  This file is part of GNUnet.
- Copyright (C) 2011-2014 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2011-2014 GNUnet e.V.
 
  GNUnet is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published
@@ -14,8 +14,8 @@
 
  You should have received a copy of the GNU General Public License
  along with GNUnet; see the file COPYING.  If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
  */
 
 /**
@@ -30,6 +30,7 @@
 #include "gnunet-service-ats_performance.h"
 #include "gnunet-service-ats_preferences.h"
 #include "gnunet-service-ats_plugins.h"
+#include "gnunet-service-ats_reservations.h"
 #include "gnunet-service-ats_scheduling.h"
 #include "gnunet-service-ats_normalization.h"
 
@@ -70,22 +71,15 @@ GAS_plugin_notify_preference_changed (const struct GNUNET_PeerIdentity *peer,
 
 
 /**
- * The relative value for a property changed
+ * The relative value for a property changed.
  *
- * @param address the peer
- * @param type the ATS type
- * @param prop_rel the new relative preference value
+ * @param address the peer for which a property changed
  */
 void
-GAS_plugin_notify_property_changed (struct ATS_Address *address,
-                                    enum GNUNET_ATS_Property type,
-                                    double prop_rel)
+GAS_plugin_notify_property_changed (struct ATS_Address *address)
 {
   sf->s_address_update_property (sf->cls,
-                                 address,
-                                 type,
-                                 0,
-                                 prop_rel);
+                                 address);
 }
 
 
@@ -138,8 +132,7 @@ solver_info_cb (void *cls,
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Solver notifies `%s' with result `%s'\n",
                 "GAS_OP_SOLVE_STOP",
-                (GAS_STAT_SUCCESS == status) ? "SUCCESS" : "FAIL",
-                add_info);
+                (GAS_STAT_SUCCESS == status) ? "SUCCESS" : "FAIL");
     return;
   case GAS_OP_SOLVE_SETUP_START:
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -190,6 +183,7 @@ solver_info_cb (void *cls,
                (GAS_STAT_SUCCESS == status) ? "SUCCESS" : "FAIL");
     return;
   default:
+    GNUNET_break (0);
     break;
   }
 }
@@ -205,28 +199,31 @@ static void
 bandwidth_changed_cb (void *cls,
                      struct ATS_Address *address)
 {
-  uint32_t diff_out;
-  uint32_t diff_in;
+  long long diff_out;
+  long long diff_in;
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Bandwidth assignment changed for peer %s \n",
-              GNUNET_i2s (&address->peer));
-
+              "Bandwidth assignment changed for peer %s to %u/%u\n",
+              GNUNET_i2s (&address->peer),
+              (unsigned int) address->assigned_bw_in,
+              (unsigned int) address->assigned_bw_out);
+  GAS_reservations_set_bandwidth (&address->peer,
+                                  GNUNET_BANDWIDTH_value_init (address->assigned_bw_in));
   /* Notify performance clients about changes to address */
   GAS_performance_notify_all_clients (&address->peer,
                                      address->plugin,
                                      address->addr,
                                      address->addr_len,
                                      address->active,
-                                     address->atsi,
-                                     address->atsi_count,
+                                     &address->properties,
+                                      address->local_address_info,
                                      GNUNET_BANDWIDTH_value_init (address->assigned_bw_out),
                                      GNUNET_BANDWIDTH_value_init (address->assigned_bw_in));
 
   if ( (0 == address->assigned_bw_in) &&
        (0 == address->assigned_bw_out) )
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                "Telling transport to disconnect peer `%s'\n",
                 GNUNET_i2s (&address->peer));
 
@@ -239,18 +236,23 @@ bandwidth_changed_cb (void *cls,
   }
 
   /* Do bandwidth stability check */
-  diff_out = abs (address->assigned_bw_out - address->last_notified_bw_out);
-  diff_in = abs (address->assigned_bw_in - address->last_notified_bw_in);
-
-  if ( (diff_out < htonl(GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT.value__)) &&
-       (diff_in < htonl(GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT.value__)) )
+  diff_out = llabs ((long long) address->assigned_bw_out -
+                    (long long) address->last_notified_bw_out);
+  diff_in = llabs ((long long) address->assigned_bw_in -
+                   (long long) address->last_notified_bw_in);
+  if ( (diff_out < htonl (GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT.value__)) &&
+       (diff_in < htonl (GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT.value__)) )
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Bandwidth change too small, not notifying client\n");
     return;
+  }
 
-  GNUNET_log(GNUNET_ERROR_TYPE_INFO,
-             "Sending bandwidth update for peer `%s': %u/%u\n",
-             GNUNET_i2s (&address->peer),
-             address->assigned_bw_out,
-             address->assigned_bw_out);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Sending bandwidth update for peer `%s': %u/%u\n",
+              GNUNET_i2s (&address->peer),
+              address->assigned_bw_out,
+              address->assigned_bw_out);
 
   /* *Notify scheduling clients about suggestion */
   GAS_scheduling_transmit_address_suggestion (&address->peer,
@@ -303,7 +305,7 @@ parse_quota (const char *quota_str,
                 direction,
                 GNUNET_ATS_print_network_type (network),
                 quota_str,
-                GNUNET_ATS_DefaultBandwidth);
+                (unsigned long long) GNUNET_ATS_DefaultBandwidth);
     ret = GNUNET_ATS_DefaultBandwidth;
   }
   else
@@ -357,7 +359,7 @@ load_quota (const struct GNUNET_CONFIGURATION_Handle *cfg,
                 _("No %s-quota configured for network `%s', assigning default bandwidth %llu\n"),
                 direction,
                 GNUNET_ATS_print_network_type (type),
-                GNUNET_ATS_DefaultBandwidth);
+                (unsigned long long) GNUNET_ATS_DefaultBandwidth);
     ret = GNUNET_ATS_DefaultBandwidth;
   }
   GNUNET_free (entry);
@@ -473,15 +475,13 @@ GAS_plugin_done ()
  * for talking to the respective peer.
  *
  * @param new_address the new address
- * @param addr_net network scope the address is in
  */
 void
-GAS_plugin_new_address (struct ATS_Address *new_address,
-                       enum GNUNET_ATS_Network_Type addr_net)
+GAS_plugin_new_address (struct ATS_Address *new_address)
 {
   sf->s_add (sf->cls,
              new_address,
-             addr_net);
+             new_address->properties.scope); /* FIXME: remove 3rd arg here! */
 }
 
 
@@ -510,7 +510,7 @@ GAS_plugin_delete_address (struct ATS_Address *address)
  * @param score_abs degree of the appreciation
  */
 void
-GAS_plugin_notify_feedback (struct GNUNET_SERVER_Client *application,
+GAS_plugin_notify_feedback (struct GNUNET_SERVICE_Client *application,
                             const struct GNUNET_PeerIdentity *peer,
                             const struct GNUNET_TIME_Relative scope,
                             enum GNUNET_ATS_PreferenceKind kind,
@@ -542,7 +542,7 @@ GAS_plugin_solver_lock ()
 void
 GAS_plugin_solver_unlock ()
 {
-  sf->s_bulk_start (sf->cls);
+  sf->s_bulk_stop (sf->cls);
 }
 
 
@@ -555,24 +555,8 @@ GAS_plugin_solver_unlock ()
 void
 GAS_plugin_request_connect_start (const struct GNUNET_PeerIdentity *pid)
 {
-  const struct ATS_Address *aa;
-
-  aa = sf->s_get (sf->cls, pid);
-  if (NULL == aa)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-               "Cannot suggest address for peer `%s'\n",
-               GNUNET_i2s (pid));
-    return;
-  }
-  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
-            "Suggesting address %p for peer `%s'\n",
-            aa,
-            GNUNET_i2s (pid));
-  GAS_scheduling_transmit_address_suggestion (pid,
-                                              aa->session_id,
-                                              GNUNET_BANDWIDTH_value_init (aa->assigned_bw_out),
-                                              GNUNET_BANDWIDTH_value_init (aa->assigned_bw_in));
+  sf->s_get (sf->cls,
+             pid);
 }