ats_ril: - removed some redundantly saved plugin environment attributes
[oweals/gnunet.git] / src / ats / gnunet-service-ats_performance.c
index 3739ad63856b7d0e3c5130ccd1f49f71ee39720a..d94b0a7e62a408fe16bb2611edf45ae664da9586 100644 (file)
@@ -124,11 +124,11 @@ void
 GAS_performance_remove_client (struct GNUNET_SERVER_Client *client)
 {
   struct PerformanceClient *pc;
+
   pc = find_client (client);
   if (NULL == pc)
     return;
   GNUNET_CONTAINER_DLL_remove (pc_head, pc_tail, pc);
-  GNUNET_SERVER_client_drop (client);
   GNUNET_free (pc);
 }
 
@@ -225,7 +225,6 @@ GAS_performance_notify_all_clients (const struct GNUNET_PeerIdentity *peer,
                                 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
 {
   struct PerformanceClient *pc;
-
   for (pc = pc_head; pc != NULL; pc = pc->next)
     if (pc->flag == START_FLAG_PERFORMANCE_WITH_PIC)
     {
@@ -259,9 +258,6 @@ peerinfo_it (void *cls,
   if (NULL == id)
     return;
 
-  if (GNUNET_NO == active)
-    return;
-
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Callback for peer `%s' plugin `%s' BW out %llu, BW in %llu \n",
               GNUNET_i2s (id),
@@ -313,14 +309,18 @@ GAS_performance_add_client (struct GNUNET_SERVER_Client *client,
   pc = GNUNET_malloc (sizeof (struct PerformanceClient));
   pc->client = client;
   pc->flag = flag;
+
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Adding performance client %s PIC\n",
+      (flag == START_FLAG_PERFORMANCE_WITH_PIC) ? "with" : "without");
+
   GNUNET_SERVER_notification_context_add (nc, client);
-  GNUNET_SERVER_client_keep (client);
   GNUNET_CONTAINER_DLL_insert (pc_head, pc_tail, pc);
 
   /* Send information about clients */
   GAS_addresses_iterate_peers (GSA_addresses, &peer_it, pc);
 }
 
+
 static void transmit_req_addr (struct AddressIteration *ai,
     const struct GNUNET_PeerIdentity *id,
     const char *plugin_name,
@@ -333,7 +333,6 @@ static void transmit_req_addr (struct AddressIteration *ai,
     struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
 
 {
-
   struct GNUNET_ATS_Information *atsp;
   struct PeerInformationMessage *msg;
   char *addrp;
@@ -455,6 +454,7 @@ req_addr_peer_it (void *cls,
   }
 }
 
+
 /**
  * Handle 'address list request' messages from clients.
  *
@@ -583,7 +583,7 @@ GAS_handle_reservation_request (void *cls, struct GNUNET_SERVER_Client *client,
               "RESERVATION_REQUEST");
   amount = (int32_t) ntohl (msg->amount);
   res_delay = GAS_reservations_reserve (&msg->peer, amount);
-  if (res_delay.rel_value > 0)
+  if (res_delay.rel_value_us > 0)
     amount = 0;
   result.header.size = htons (sizeof (struct ReservationResultMessage));
   result.header.type = htons (GNUNET_MESSAGE_TYPE_ATS_RESERVATION_RESULT);
@@ -649,6 +649,59 @@ GAS_handle_preference_change (void *cls,
 }
 
 
+/**
+ * Handle 'preference feedback' messages from clients.
+ *
+ * @param cls unused, NULL
+ * @param client client that sent the request
+ * @param message the request message
+ */
+void
+GAS_handle_preference_feedback (void *cls,
+                              struct GNUNET_SERVER_Client *client,
+                              const struct GNUNET_MessageHeader *message)
+{
+  const struct FeedbackPreferenceMessage *msg;
+  const struct PreferenceInformation *pi;
+  uint16_t msize;
+  uint32_t nump;
+  uint32_t i;
+
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received `%s' message\n",
+              "PREFERENCE_FEEDBACK");
+  msize = ntohs (message->size);
+  if (msize < sizeof (struct FeedbackPreferenceMessage))
+  {
+    GNUNET_break (0);
+    GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+    return;
+  }
+  msg = (const struct FeedbackPreferenceMessage *) message;
+  nump = ntohl (msg->num_feedback);
+  if (msize !=
+      sizeof (struct FeedbackPreferenceMessage) +
+      nump * sizeof (struct PreferenceInformation))
+  {
+    GNUNET_break (0);
+    GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+    return;
+  }
+  GNUNET_STATISTICS_update (GSA_stats, "# preference feedbacks requests processed",
+                            1, GNUNET_NO);
+  pi = (const struct PreferenceInformation *) &msg[1];
+  for (i = 0; i < nump; i++)
+    GAS_addresses_preference_feedback (GSA_addresses,
+                                     client,
+                                     &msg->peer,
+                                     GNUNET_TIME_relative_ntoh(msg->scope),
+                                     (enum GNUNET_ATS_PreferenceKind)
+                                     ntohl (pi[i].preference_kind),
+                                     pi[i].preference_value);
+  GNUNET_SERVER_receive_done (client, GNUNET_OK);
+}
+
+
+
 /**
  * Initialize performance subsystem.
  *