From 5a028c05614f71e6279a98e97aa32660b4c3d412 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 17 Apr 2010 16:53:42 +0000 Subject: peerinfo API redesign --- src/include/gnunet_peerinfo_service.h | 86 ++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) (limited to 'src/include/gnunet_peerinfo_service.h') diff --git a/src/include/gnunet_peerinfo_service.h b/src/include/gnunet_peerinfo_service.h index 6deed04d9..e84b2ca4e 100644 --- a/src/include/gnunet_peerinfo_service.h +++ b/src/include/gnunet_peerinfo_service.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet - (C) 2009 Christian Grothoff (and other contributing authors) + (C) 2009, 2010 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 @@ -42,6 +42,57 @@ extern "C" #endif +/** + * Handle to the peerinfo service. + */ +struct GNUNET_PEERINFO_Handle; + + +/** + * Connect to the peerinfo service. + * + * @param cfg configuration to use + * @param sched scheduler to use + * @return NULL on error (configuration related, actual connection + * etablishment may happen asynchronously). + */ +struct GNUNET_PEERINFO_Handle * +GNUNET_PEERINFO_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, + struct GNUNET_SCHEDULER_Handle *sched); + + +/** + * Disconnect from the peerinfo service. Note that all iterators must + * have completed or have been cancelled by the time this function is + * called (otherwise, calling this function is a serious error). + * Furthermore, if 'GNUNET_PEERINFO_add_peer' operations are still + * pending, they will be cancelled silently on disconnect. + * + * @param h handle to disconnect + */ +void +GNUNET_PEERINFO_disconnect (struct GNUNET_PEERINFO_Handle *h); + + +/** + * Add a host to the persistent list. This method operates in + * semi-reliable mode: if the transmission is not completed by + * the time 'GNUNET_PEERINFO_disconnect' is called, it will be + * aborted. Furthermore, if a second HELLO is added for the + * same peer before the first one was transmitted, PEERINFO may + * merge the two HELLOs prior to transmission to the service. + * + * @param h handle to the peerinfo service + * @param peer identity of the peer + * @param hello the verified (!) HELLO message + */ +void +GNUNET_PEERINFO_add_peer_new (struct GNUNET_PEERINFO_Handle *h, + const struct GNUNET_PeerIdentity *peer, + const struct GNUNET_HELLO_Message *hello); + + + /** * Add a host to the persistent list. * @@ -109,6 +160,39 @@ GNUNET_PEERINFO_iterate (const struct GNUNET_CONFIGURATION_Handle *cfg, void *callback_cls); + +/** + * Call a method for each known matching host and change its trust + * value. The callback method will be invoked once for each matching + * host and then finally once with a NULL pointer. After that final + * invocation, the iterator context must no longer be used. + * + * Note that the last call can be triggered by timeout or by simply + * being done; however, the trust argument will be set to zero if we + * are done, 1 if we timed out and 2 for fatal error. + * + * Instead of calling this function with 'peer == NULL' and 'trust == + * 0', it is often better to use 'GNUNET_PEERINFO_notify'. + * + * @param h handle to the peerinfo service + * @param peer restrict iteration to this peer only (can be NULL) + * @param trust_delta how much to change the trust in all matching peers + * @param timeout how long to wait until timing out + * @param callback the method to call for each peer + * @param callback_cls closure for callback + * @return NULL on error (in this case, 'callback' is never called!), + * otherwise an iterator context + */ +struct GNUNET_PEERINFO_IteratorContext * +GNUNET_PEERINFO_iterate_new (struct GNUNET_PEERINFO_Handle *h, + const struct GNUNET_PeerIdentity *peer, + int trust_delta, + struct GNUNET_TIME_Relative timeout, + GNUNET_PEERINFO_Processor callback, + void *callback_cls); + + + /** * Cancel an iteration over peer information. * -- cgit v1.2.3