-only trigger check config if we actually need it
[oweals/gnunet.git] / src / ats / gnunet-service-ats_performance.c
index c3d9e78eb98bdf866ed27d69b9df2031d4832b7e..1b22039db15e33a369d5fdde025cdc8f2bc3b825 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     Copyright (C) 2011-2015 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2011-2015 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
 
      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.
 */
 /**
  * @file ats/gnunet-service-ats_performance.c
  * @brief ats service, interaction with 'performance' API
  * @author Matthias Wachs
  * @author Christian Grothoff
+ *
+ * TODO:
+ * - simplify functions by passing a `struct GNUNET_HELLO_Address`
  */
 #include "platform.h"
 #include "gnunet-service-ats.h"
@@ -55,6 +58,7 @@ static struct GNUNET_SERVER_NotificationContext *nc_pic;
  *        #GNUNET_NO if the address is not actively used;
  *        #GNUNET_SYSERR if this address is no longer available for ATS
  * @param prop performance data for the address
+ * @param local_address_info information about the local flags for the address
  * @param bandwidth_out assigned outbound bandwidth
  * @param bandwidth_in assigned inbound bandwidth
  */
@@ -66,6 +70,7 @@ notify_client (struct GNUNET_SERVER_Client *client,
                size_t plugin_addr_len,
                int active,
                const struct GNUNET_ATS_Properties *prop,
+               enum GNUNET_HELLO_AddressInfo local_address_info,
                struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
                struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
 {
@@ -76,9 +81,12 @@ notify_client (struct GNUNET_SERVER_Client *client,
     plugin_addr_len +
     plugin_name_length;
   char buf[msize] GNUNET_ALIGN;
+  struct GNUNET_SERVER_NotificationContext **uc;
   struct GNUNET_SERVER_NotificationContext *nc;
   char *addrp;
 
+  if (NULL != prop)
+    GNUNET_break (GNUNET_ATS_NET_UNSPECIFIED != prop->scope);
   GNUNET_assert (msize < GNUNET_SERVER_MAX_MESSAGE_SIZE);
   msg = (struct PeerInformationMessage *) buf;
   msg->header.size = htons (msize);
@@ -90,8 +98,14 @@ notify_client (struct GNUNET_SERVER_Client *client,
   msg->plugin_name_length = htons (plugin_name_length);
   msg->bandwidth_out = bandwidth_out;
   msg->bandwidth_in = bandwidth_in;
-  GNUNET_ATS_properties_hton (&msg->properties,
-                              prop);
+  if (NULL != prop)
+    GNUNET_ATS_properties_hton (&msg->properties,
+                                prop);
+  else
+    memset (&msg->properties,
+            0,
+            sizeof (struct GNUNET_ATS_Properties));
+  msg->address_local_info = htonl (local_address_info);
   addrp = (char *) &msg[1];
   memcpy (addrp, plugin_addr, plugin_addr_len);
   strcpy (&addrp[plugin_addr_len], plugin_name);
@@ -103,13 +117,14 @@ notify_client (struct GNUNET_SERVER_Client *client,
   }
   else
   {
-    nc = *GNUNET_SERVER_client_get_user_context (client,
+    uc = GNUNET_SERVER_client_get_user_context (client,
                                                  struct GNUNET_SERVER_NotificationContext *);
-    if (NULL == nc)
+    if (NULL == uc)
     {
       GNUNET_break (0);
       return;
     }
+    nc = *uc;
     GNUNET_SERVER_notification_context_unicast (nc,
                                                 client,
                                                 &msg->header,
@@ -131,6 +146,7 @@ notify_client (struct GNUNET_SERVER_Client *client,
  *        #GNUNET_NO if the address is not actively used;
  *        #GNUNET_SYSERR if this address is no longer available for ATS
  * @param prop performance data for the address
+ * @param local_address_info information about the local flags for the address
  * @param bandwidth_out assigned outbound bandwidth
  * @param bandwidth_in assigned inbound bandwidth
  */
@@ -141,9 +157,12 @@ GAS_performance_notify_all_clients (const struct GNUNET_PeerIdentity *peer,
                                     size_t plugin_addr_len,
                                     int active,
                                     const struct GNUNET_ATS_Properties *prop,
+                                    enum GNUNET_HELLO_AddressInfo local_address_info,
                                     struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
                                     struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
 {
+  GNUNET_break ( (NULL == prop) ||
+                 (GNUNET_ATS_NET_UNSPECIFIED != prop->scope) );
   notify_client (NULL,
                  peer,
                  plugin_name,
@@ -151,6 +170,7 @@ GAS_performance_notify_all_clients (const struct GNUNET_PeerIdentity *peer,
                  plugin_addr_len,
                  active,
                  prop,
+                 local_address_info,
                  bandwidth_out,
                  bandwidth_in);
   GNUNET_STATISTICS_update (GSA_stats,
@@ -170,6 +190,7 @@ GAS_performance_notify_all_clients (const struct GNUNET_PeerIdentity *peer,
  * @param plugin_addr_len length of @a plugin_addr
  * @param active is address actively used
  * @param prop performance information
+ * @param local_address_info information about the local flags for the address
  * @param bandwidth_out current outbound bandwidth assigned to address
  * @param bandwidth_in current inbound bandwidth assigned to address
  */
@@ -181,6 +202,7 @@ peerinfo_it (void *cls,
              size_t plugin_addr_len,
              int active,
              const struct GNUNET_ATS_Properties *prop,
+             enum GNUNET_HELLO_AddressInfo local_address_info,
              struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
              struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
 {
@@ -194,6 +216,7 @@ peerinfo_it (void *cls,
               plugin_name,
               (unsigned int) ntohl (bandwidth_out.value__),
               (unsigned int) ntohl (bandwidth_in.value__));
+  GNUNET_break (GNUNET_ATS_NET_UNSPECIFIED != prop->scope);
   notify_client (client,
                  id,
                  plugin_name,
@@ -201,6 +224,7 @@ peerinfo_it (void *cls,
                  plugin_addr_len,
                  active,
                  prop,
+                 local_address_info,
                  bandwidth_out,
                  bandwidth_in);
 }