/* This file is part of GNUnet. (C) 2011 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 by the Free Software Foundation; either version 3, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 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. */ /** * @file ats/plugin_ats_proportional.h * @brief ATS proportional solver * @author Matthias Wachs * @author Christian Grothoff */ #include "platform.h" #include "gnunet_statistics_service.h" #include "gnunet_ats_plugin.h" #include "gnunet-service-ats_addresses.h" /** * ATS proportional solver * * General description */ /** * Changes the preferences for a peer in the problem * * @param solver the solver handle * @param peer the peer to change the preference for * @param kind the kind to change the preference * @param pref_rel the normalized preference value for this kind over all clients */ void GAS_proportional_address_change_preference (void *solver, const struct GNUNET_PeerIdentity *peer, enum GNUNET_ATS_PreferenceKind kind, double pref_rel); /** * Get application feedback for a peer * * @param solver the solver handle * @param application the application * @param peer the peer to change the preference for * @param scope the time interval for this feedback: [now - scope .. now] * @param kind the kind to change the preference * @param score the score */ void GAS_proportional_address_preference_feedback (void *solver, void *application, const struct GNUNET_PeerIdentity *peer, const struct GNUNET_TIME_Relative scope, enum GNUNET_ATS_PreferenceKind kind, double score); /** * Shutdown the proportional problem solver * * @param solver the respective handle to shutdown */ void GAS_proportional_done (void * solver); /** * Add a single address within a network to the solver * * @param solver the solver Handle * @param address the address to add * @param network network type of this address */ void GAS_proportional_address_add (void *solver, struct ATS_Address *address, uint32_t network); /** * Transport properties for this address have changed * * @param solver solver handle * @param address the address * @param type the ATSI type in HBO * @param abs_value the absolute value of the property * @param rel_value the normalized value */ void GAS_proportional_address_property_changed (void *solver, struct ATS_Address *address, uint32_t type, uint32_t abs_value, double rel_value); /** * Transport session for this address has changed * * NOTE: values in addresses are already updated * * @param solver solver handle * @param address the address * @param cur_session the current session * @param new_session the new session */ void GAS_proportional_address_session_changed (void *solver, struct ATS_Address *address, uint32_t cur_session, uint32_t new_session); /** * Usage for this address has changed * * NOTE: values in addresses are already updated * * @param solver solver handle * @param address the address * @param in_use usage state */ void GAS_proportional_address_inuse_changed (void *solver, struct ATS_Address *address, int in_use); /** * Network scope for this address has changed * * NOTE: values in addresses are already updated * * @param solver solver handle * @param address the address * @param current_network the current network * @param new_network the new network */ void GAS_proportional_address_change_network (void *solver, struct ATS_Address *address, uint32_t current_network, uint32_t new_network); /** * Remove an address from the solver * * @param solver the solver handle * @param address the address to remove * @param session_only delete only session not whole address */ void GAS_proportional_address_delete (void *solver, struct ATS_Address *address, int session_only); /** * Start a bulk operation * * @param solver the solver */ void GAS_proportional_bulk_start (void *solver); /** * Bulk operation done */ void GAS_proportional_bulk_stop (void *solver); /** * Stop notifying about address and bandwidth changes for this peer * * @param solver the proportional handle * @param peer the peer */ void GAS_proportional_stop_get_preferred_address (void *solver, const struct GNUNET_PeerIdentity *peer); /** * Get the prefered address for a specific peer * * @param solver the solver handle * @param peer the identity of the peer */ const struct ATS_Address * GAS_proportional_get_preferred_address (void *solver, const struct GNUNET_PeerIdentity *peer); /* end of plugin_ats_proportional.h */