fix build issues
[oweals/gnunet.git] / src / dht / gnunet-service-dht_neighbours.h
index 08357d7ff1e8552360fecbdfe98c46fe28b1fa55..34b76ee8a2c3d94a1ca6e46b7a820bb18c26a783 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2009, 2010, 2011 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.
 */
 
 /**
 #ifndef GNUNET_SERVICE_DHT_NEIGHBOURS_H
 #define GNUNET_SERVICE_DHT_NEIGHBOURS_H
 
+#include "gnunet_util_lib.h"
+#include "gnunet_block_lib.h"
+#include "gnunet_dht_service.h"
 
 /**
- * Perform a PUT operation.
+ * Perform a PUT operation.  Forwards the given request to other
+ * peers.   Does not store the data locally.  Does not give the
+ * data to local clients.  May do nothing if this is the only
+ * peer in the network (or if we are the closest peer in the
+ * network).
  *
  * @param type type of the block
  * @param options routing options
- * @param desired_replication_level desired replication count
+ * @param desired_replication_level desired replication level
  * @param expiration_time when does the content expire
+ * @param hop_count how many hops has this message traversed so far
+ * @param bf Bloom filter of peers this PUT has already traversed
  * @param key key for the content
  * @param put_path_length number of entries in put_path
  * @param put_path peers this request has traversed so far (if tracked)
  * @param data payload to store
  * @param data_size number of bytes in data
+ * @return #GNUNET_OK if the request was forwarded, #GNUNET_NO if not
  */
-void
-GST_NEIGHBOURS_handle_put (uint32_t type,
-                          uint32_t options,
-                          uint32_t desired_replication_level,
-                          GNUNET_TIME_Absolute expiration_time,
-                          const GNUNET_HashCode *key,
-                          unsigned int put_path_length,
-                          struct GNUNET_PeerIdentity *put_path,
-                          const void *data,
-                          size_t data_size);
+int
+GDS_NEIGHBOURS_handle_put (enum GNUNET_BLOCK_Type type,
+                           enum GNUNET_DHT_RouteOption options,
+                           uint32_t desired_replication_level,
+                           struct GNUNET_TIME_Absolute expiration_time,
+                           uint32_t hop_count,
+                           struct GNUNET_CONTAINER_BloomFilter *bf,
+                           const struct GNUNET_HashCode *key,
+                           unsigned int put_path_length,
+                           struct GNUNET_PeerIdentity *put_path,
+                           const void *data, size_t data_size);
 
 
 /**
- * Perform a GET operation.
- *
+ * Perform a GET operation.  Forwards the given request to other
+ * peers.  Does not lookup the key locally.  May do nothing if this is
+ * the only peer in the network (or if we are the closest peer in the
+ * network).
  *
  * @param type type of the block
  * @param options routing options
  * @param desired_replication_level desired replication count
+ * @param hop_count how many hops did this request traverse so far?
  * @param key key for the content
  * @param xquery extended query
- * @param xquery_size number of bytes in xquery
- * @param reply_bf bloomfilter to filter duplicates
- * @param reply_bf_mutator mutator for reply_bf
- * @param peer_bf filter for peers not to select (again)
+ * @param xquery_size number of bytes in @a xquery
+ * @param bg block group to filter replies
+ * @param peer_bf filter for peers not to select (again, updated)
+ * @return #GNUNET_OK if the request was forwarded, #GNUNET_NO if not
  */
-void
-GST_NEIGHBOURS_handle_get (uint32_t type,
-                          uint32_t options,
-                          uint32_t desired_replication_level,
-                          const GNUNET_HashCode *key,
-                          const void *xquery,
-                          size_t xquery_size,
-                          const struct GNUNET_CONTAINER_BloomFilter *reply_bf,
-                          uint32_t reply_bf_mutator,
-                          const struct GNUNET_CONTAINER_BloomFilter *peer_bf);
+int
+GDS_NEIGHBOURS_handle_get (enum GNUNET_BLOCK_Type type,
+                           enum GNUNET_DHT_RouteOption options,
+                           uint32_t desired_replication_level,
+                           uint32_t hop_count,
+                           const struct GNUNET_HashCode *key,
+                           const void *xquery,
+                           size_t xquery_size,
+                           struct GNUNET_BLOCK_Group *bg,
+                           struct GNUNET_CONTAINER_BloomFilter *peer_bf);
 
 
 /**
- * Handle a reply (route to origin).
+ * Handle a reply (route to origin).  Only forwards the reply back to
+ * other peers waiting for it.  Does not do local caching or
+ * forwarding to local clients.
  *
+ * @param target neighbour that should receive the block (if still connected)
  * @param type type of the block
- * @param options routing options
  * @param expiration_time when does the content expire
  * @param key key for the content
  * @param put_path_length number of entries in put_path
@@ -94,29 +110,41 @@ GST_NEIGHBOURS_handle_get (uint32_t type,
  * @param data_size number of bytes in data
  */
 void
-GST_NEIGHBOURS_handle_reply (uint32_t type,
-                            uint32_t options,
-                            GNUNET_TIME_Absolute expiration_time,
-                            const GNUNET_HashCode *key,
-                            unsigned int put_path_length,
-                            struct GNUNET_PeerIdentity *put_path,
-                            unsigned int get_path_length,
-                            struct GNUNET_PeerIdentity *get_path,
-                            const void *data,
-                            size_t data_size);
+GDS_NEIGHBOURS_handle_reply (const struct GNUNET_PeerIdentity *target,
+                             enum GNUNET_BLOCK_Type type,
+                             struct GNUNET_TIME_Absolute expiration_time,
+                             const struct GNUNET_HashCode *key,
+                             unsigned int put_path_length,
+                             const struct GNUNET_PeerIdentity *put_path,
+                             unsigned int get_path_length,
+                             const struct GNUNET_PeerIdentity *get_path,
+                             const void *data,
+                             size_t data_size);
 
 
 /**
  * Initialize neighbours subsystem.
+ *
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
  */
-void
-GST_NEIGHBOURS_init (void);
+int
+GDS_NEIGHBOURS_init (void);
+
 
 /**
  * Shutdown neighbours subsystem.
  */
 void
-GST_NEIGHBOURS_done (void);
+GDS_NEIGHBOURS_done (void);
+
+
+/**
+ * Get the ID of the local node.
+ *
+ * @return identity of the local node
+ */
+struct GNUNET_PeerIdentity *
+GDS_NEIGHBOURS_get_id (void);
 
 
 #endif