paragraph for gnunet devs that don't know how to use the web
[oweals/gnunet.git] / src / ats / ats.h
index b6750da10ef74669d48cff5919d09e8fc3452935..09542f240c314a80397690d2526dacd4116bf907 100644 (file)
@@ -1,21 +1,19 @@
 /*
      This file is part of GNUnet.
-     (C) 2010-2015 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2010-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
-     by the Free Software Foundation; either version 3, or (at your
-     option) any later version.
+     GNUnet is free software: you can redistribute it and/or modify it
+     under the terms of the GNU Affero General Public License as published
+     by the Free Software Foundation, either version 3 of the License,
+     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.
+     Affero General Public License for more details.
+    
+     You should have received a copy of the GNU Affero General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 /**
  * @file ats/ats.h
@@ -27,6 +25,8 @@
 #define ATS_H
 
 #include "gnunet_util_lib.h"
+#include "gnunet_ats_service.h"
+
 
 /**
  * Flag used to indicate which type of client is connecting
@@ -50,7 +50,12 @@ enum StartFlag
    * Performance monitoring client that does NOT want to learn
    * about changes in performance characteristics.
    */
-  START_FLAG_PERFORMANCE_NO_PIC = 2
+  START_FLAG_PERFORMANCE_NO_PIC = 2,
+
+  /**
+   * Connection suggestion handle.
+   */
+  START_FLAG_CONNECTION_SUGGESTION = 3
 };
 
 
@@ -75,7 +80,7 @@ struct ClientStartMessage
 
 
 /**
- * Scheduling client to ATS service: we would like to have
+ * Connectivity client to ATS service: we would like to have
  * address suggestions for this peer.
  */
 struct RequestAddressMessage
@@ -88,9 +93,9 @@ struct RequestAddressMessage
   struct GNUNET_MessageHeader header;
 
   /**
-   * Always zero.
+   * How "strong" is our need for an address for this peer?
    */
-  uint32_t reserved GNUNET_PACKED;
+  uint32_t strength GNUNET_PACKED;
 
   /**
    * Peer to get address suggestions for.
@@ -100,30 +105,7 @@ struct RequestAddressMessage
 
 
 /**
- * Scheduling client to ATS service: reset backoff for
- * address suggestions to this peer.
- */
-struct ResetBackoffMessage
-{
-  /**
-   * Type is #GNUNET_MESSAGE_TYPE_ATS_RESET_BACKOFF.
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Always zero.
-   */
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * Peer to reset backoff for.
-   */
-  struct GNUNET_PeerIdentity peer;
-};
-
-
-/**
- * ATS client to ATS service: here is another address you can use.
+ * Scheduling client to ATS service: here is another address you can use.
  */
 struct AddressAddMessage
 {
@@ -132,16 +114,6 @@ struct AddressAddMessage
    */
   struct GNUNET_MessageHeader header;
 
-  /**
-   * Length of the `struct GNUNET_ATS_Information` array that follows this struct.
-   */
-  uint32_t ats_count GNUNET_PACKED;
-
-  /**
-   * Identity of the peer that this address is for.
-   */
-  struct GNUNET_PeerIdentity peer;
-
   /**
    * Number of bytes in the address that follows this struct.
    */
@@ -152,6 +124,11 @@ struct AddressAddMessage
    */
   uint16_t plugin_name_length GNUNET_PACKED;
 
+  /**
+   * Identity of the peer that this address is for.
+   */
+  struct GNUNET_PeerIdentity peer;
+
   /**
    * Internal number this client will henceforth use to
    * refer to this address.
@@ -164,8 +141,12 @@ struct AddressAddMessage
    */
   uint32_t address_local_info GNUNET_PACKED;
 
+  /**
+   * Performance properties of the address.
+   */
+  struct GNUNET_ATS_PropertiesNBO properties;
+
   /* followed by:
-   * - struct GNUNET_ATS_Information [ats_count];
    * - char address[address_length]
    * - char plugin_name[plugin_name_length] (including '\0'-termination).
    */
@@ -184,41 +165,6 @@ struct AddressUpdateMessage
    */
   struct GNUNET_MessageHeader header;
 
-  /**
-   * Length of the `struct GNUNET_ATS_Information` array that follows.
-   */
-  uint32_t ats_count GNUNET_PACKED;
-
-  /**
-   * Which peer is this about? (Technically redundant, as the
-   * @e session_id should be sufficient, but enables ATS service
-   * to find the session faster).
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /**
-   * Internal number this client uses to refer to this address.
-   */
-  uint32_t session_id GNUNET_PACKED;
-
-  /* followed by:
-   * - struct GNUNET_ATS_Information [ats_count];
-   */
-
-};
-
-
-/**
- * Message sent from ATS client to ATS service to notify
- * it if we started (or stopped) using an address.
- */
-struct AddressUseMessage
-{
-  /**
-   * Type is #GNUNET_MESSAGE_TYPE_ATS_ADDRESS_IN_USE.
-   */
-  struct GNUNET_MessageHeader header;
-
   /**
    * Internal number this client uses to refer to this address.
    */
@@ -232,9 +178,9 @@ struct AddressUseMessage
   struct GNUNET_PeerIdentity peer;
 
   /**
-   * #GNUNET_YES or #GNUNET_NO.
+   * Performance properties of the address.
    */
-  uint32_t in_use GNUNET_PACKED;
+  struct GNUNET_ATS_PropertiesNBO properties;
 
 };
 
@@ -270,7 +216,7 @@ struct AddressDestroyedMessage
  * Message sent by ATS service to client to confirm that it is done
  * using the given session ID.
  */
-struct SessionReleaseMessage
+struct GNUNET_ATS_SessionReleaseMessage
 {
   /**
    * Type is #GNUNET_MESSAGE_TYPE_ATS_SESSION_RELEASE.
@@ -330,30 +276,63 @@ struct AddressSuggestionMessage
 };
 
 
-
-
+/**
+ *
+ */
 struct PeerInformationMessage
 {
+  /**
+   * Type is #GNUNET_MESSAGE_TYPE_ATS_PEER_INFORMATION
+   */
   struct GNUNET_MessageHeader header;
 
-  uint32_t ats_count GNUNET_PACKED;
-
-  uint32_t address_active GNUNET_PACKED;
+  /**
+   *
+   */
+  uint16_t address_length GNUNET_PACKED;
 
-  uint32_t id GNUNET_PACKED;
+  /**
+   *
+   */
+  uint16_t plugin_name_length GNUNET_PACKED;
 
+  /**
+   *
+   */
   struct GNUNET_PeerIdentity peer;
 
-  uint16_t address_length GNUNET_PACKED;
+  /**
+   *
+   */
+  uint32_t address_active GNUNET_PACKED;
 
-  uint16_t plugin_name_length GNUNET_PACKED;
+  /**
+   *
+   */
+  uint32_t id GNUNET_PACKED;
 
+  /**
+   *
+   */
   struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out;
 
+  /**
+   *
+   */
   struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in;
 
+  /**
+   * Performance properties of the address.
+   */
+  struct GNUNET_ATS_PropertiesNBO properties;
+
+  /**
+   * Local-only information of the address, see
+   * `enum GNUNET_HELLO_AddressInfo`.
+   */
+  uint32_t address_local_info GNUNET_PACKED;
+
   /* followed by:
-   * - struct GNUNET_ATS_Information [ats_count];
    * - char address[address_length]
    * - char plugin_name[plugin_name_length] (including '\0'-termination).
    */
@@ -390,44 +369,95 @@ struct AddressListRequestMessage
 };
 
 
+/**
+ *
+ */
 struct ReservationRequestMessage
 {
+  /**
+   * Type is #GNUNET_MESSAGE_TYPE_ATS_RESERVATION_REQUEST
+   */
   struct GNUNET_MessageHeader header;
 
+  /**
+   *
+   */
   int32_t amount GNUNET_PACKED;
 
+  /**
+   *
+   */
   struct GNUNET_PeerIdentity peer;
 };
 
 
-
+/**
+ *
+ */
 struct ReservationResultMessage
 {
+  /**
+   * Type is #GNUNET_MESSAGE_TYPE_ATS_RESERVATION_RESULT
+   */
   struct GNUNET_MessageHeader header;
 
+  /**
+   *
+   */
   int32_t amount GNUNET_PACKED;
 
+  /**
+   *
+   */
   struct GNUNET_PeerIdentity peer;
 
+  /**
+   *
+   */
   struct GNUNET_TIME_RelativeNBO res_delay;
 };
 
+
+/**
+ * Variable-size entry in a `struct ChangePreferenceMessage` or
+ * `struct FeedbackPreferenceMessage`.
+ */
 struct PreferenceInformation
 {
 
+  /**
+   * An `enum GNUNET_ATS_PreferenceKind` in NBO.
+   */
   uint32_t preference_kind GNUNET_PACKED;
 
+  /**
+   * Degree of preference (or appreciation) for this @e
+   * preference_kind being expressed.
+   */
   float preference_value GNUNET_PACKED;
 
 };
 
 
+/**
+ * Client to ATS: I have a performance preference for a peer.
+ */
 struct ChangePreferenceMessage
 {
+  /**
+   * Type is #GNUNET_MESSAGE_TYPE_ATS_PREFERENCE_CHANGE.
+   */
   struct GNUNET_MessageHeader header;
 
+  /**
+   * How many `struct PreferenceInformation` entries follow
+   * this struct?
+   */
   uint32_t num_preferences GNUNET_PACKED;
 
+  /**
+   * Which peer is the preference being expressed for?
+   */
   struct GNUNET_PeerIdentity peer;
 
   /* followed by 'num_preferences'
@@ -440,6 +470,9 @@ struct ChangePreferenceMessage
  */
 struct FeedbackPreferenceMessage
 {
+  /**
+   * Type is #GNUNET_MESSAGE_TYPE_ATS_PREFERENCE_FEEDBACK.
+   */
   struct GNUNET_MessageHeader header;
 
   /**