X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_rps_service.h;h=f77c3dbc4e97cab725b76942776db38585c2687b;hb=ec50a665dc884f7997419d0351ae8ade9c1aeabe;hp=f7dd253e0e1b366737069d87982d44157f2efca4;hpb=3e4aaf27c74e92d5d5d8b536fe90b81c515f7772;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_rps_service.h b/src/include/gnunet_rps_service.h index f7dd253e0..f77c3dbc4 100644 --- a/src/include/gnunet_rps_service.h +++ b/src/include/gnunet_rps_service.h @@ -1,27 +1,30 @@ /* This file is part of GNUnet - (C) + Copyright (C) - 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 . */ /** - * @file include/gnunet_rps_service.h - * @brief API to the rps service * @author Julius Bünger + * + * @file + * API to the rps service + * + * @defgroup rps RPS service + * Random Peer Sampling + * @{ */ #ifndef GNUNET_RPS_SERVICE_H #define GNUNET_RPS_SERVICE_H @@ -56,25 +59,10 @@ struct GNUNET_RPS_Request_Handle; * @param num_peers the number of peers returned * @param peers array with num_peers PeerIDs */ -typedef void (* GNUNET_RPS_NotifyReadyCB) (void *cls, uint64_t num_peers, const struct GNUNET_PeerIdentity *peers); +typedef void (* GNUNET_RPS_NotifyReadyCB) (void *cls, + uint64_t num_peers, + const struct GNUNET_PeerIdentity *peers); -/** - * Request n random peers. - * - * This is a wrapper function that makes it unnecessary to have to - * (dis)connect from/to the service. - * - * @param cfg the configuration to use - * @param n number of peers to be returned - * @param ready_cb the callback to be called when the PeerIDs are available - * @param cls closure given to the callback - * @return handle to this request - */ - struct GNUNET_RPS_Request_Handle * -GNUNET_RPS_request_peers_single_call (const struct GNUNET_CONFIGURATION_Handle *cfg, - uint64_t n, - GNUNET_RPS_NotifyReadyCB ready_cb, - void *cls); /** * Connect to the rps service @@ -83,7 +71,7 @@ GNUNET_RPS_request_peers_single_call (const struct GNUNET_CONFIGURATION_Handle * * @return handle to the rps service */ struct GNUNET_RPS_Handle * -GNUNET_RPS_connect( const struct GNUNET_CONFIGURATION_Handle *cfg ); +GNUNET_RPS_connect (const struct GNUNET_CONFIGURATION_Handle *cfg); /** * Request n random peers. @@ -100,16 +88,20 @@ GNUNET_RPS_connect( const struct GNUNET_CONFIGURATION_Handle *cfg ); * @return handle to this request */ struct GNUNET_RPS_Request_Handle * -GNUNET_RPS_request_peers (struct GNUNET_RPS_Handle *h, uint64_t n, +GNUNET_RPS_request_peers (struct GNUNET_RPS_Handle *h, uint32_t n, GNUNET_RPS_NotifyReadyCB ready_cb, void *cls); /** * Seed rps service with peerIDs. + * + * @param h handle to the rps service + * @param n number of peers to seed + * @param ids the ids of the peers seeded */ void -GNUNET_RPS_seed_ids (struct GNUNET_RPS_Handle *h, uint64_t n, - struct GNUNET_PeerIdentity * ids); +GNUNET_RPS_seed_ids (struct GNUNET_RPS_Handle *h, uint32_t n, + const struct GNUNET_PeerIdentity * ids); /** * Cancle an issued request. @@ -117,7 +109,65 @@ GNUNET_RPS_seed_ids (struct GNUNET_RPS_Handle *h, uint64_t n, * @param rh handle of the pending request to be canceled */ void -GNUNET_RPS_request_cancel ( struct GNUNET_RPS_Request_Handle *rh ); +GNUNET_RPS_request_cancel (struct GNUNET_RPS_Request_Handle *rh); + + +#ifdef ENABLE_MALICIOUS +/** + * Turn RPS service to act malicious. + * + * @param h handle to the rps service + * @param type which type of malicious peer to turn to. + * 0 Don't act malicious at all + * 1 Try to maximise representation + * 2 Try to partition the network + * (isolate one peer from the rest) + * @param n number of @a ids + * @param ids the ids of the malicious peers + * if @type is 2 the last id is the id of the + * peer to be isolated from the rest + */ + void +GNUNET_RPS_act_malicious (struct GNUNET_RPS_Handle *h, + uint32_t type, + uint32_t num_peers, + const struct GNUNET_PeerIdentity *ids, + const struct GNUNET_PeerIdentity *target_peer); +#endif /* ENABLE_MALICIOUS */ + +/* Get internals for debugging/profiling purposes */ + +/** + * Request updates of view + * + * @param rps_handle handle to the rps service + * @param num_req_peers number of peers we want to receive + * (0 for infinite updates) + * @param cls a closure that will be given to the callback + * @param ready_cb the callback called when the peers are available + */ +void +GNUNET_RPS_view_request (struct GNUNET_RPS_Handle *rps_handle, + uint32_t num_updates, + GNUNET_RPS_NotifyReadyCB view_update_cb, + void *cls); + + +/** + * Request biased stream of peers that are being put into the sampler + * + * @param rps_handle handle to the rps service + * @param num_req_peers number of peers we want to receive + * (0 for infinite updates) + * @param cls a closure that will be given to the callback + * @param ready_cb the callback called when the peers are available + */ +struct GNUNET_RPS_StreamRequestHandle * +GNUNET_RPS_stream_request (struct GNUNET_RPS_Handle *rps_handle, + uint32_t num_updates, + GNUNET_RPS_NotifyReadyCB stream_input_cb, + void *cls); + /** * Disconnect from the rps service @@ -125,7 +175,8 @@ GNUNET_RPS_request_cancel ( struct GNUNET_RPS_Request_Handle *rh ); * @param h the handle to the rps service */ void -GNUNET_RPS_disconnect ( struct GNUNET_RPS_Handle *h ); +GNUNET_RPS_disconnect (struct GNUNET_RPS_Handle *h); + #if 0 /* keep Emacsens' auto-indent happy */ { @@ -135,3 +186,5 @@ GNUNET_RPS_disconnect ( struct GNUNET_RPS_Handle *h ); #endif #endif + +/** @} */ /* end of group */