X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fdht%2Fgnunet-service-dht_neighbours.h;h=34b76ee8a2c3d94a1ca6e46b7a820bb18c26a783;hb=79fb947eb8fba243ea65e19b40b65e04f8806865;hp=08357d7ff1e8552360fecbdfe98c46fe28b1fa55;hpb=a864897478e2ee94ab36648e7f1db6f0dd57ea43;p=oweals%2Fgnunet.git diff --git a/src/dht/gnunet-service-dht_neighbours.h b/src/dht/gnunet-service-dht_neighbours.h index 08357d7ff..34b76ee8a 100644 --- a/src/dht/gnunet-service-dht_neighbours.h +++ b/src/dht/gnunet-service-dht_neighbours.h @@ -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. */ /** @@ -27,63 +27,79 @@ #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