From 6308c2556c54ea8a19b33bfe16bd2f81eae65e86 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Wed, 16 Oct 2013 19:32:52 +0000 Subject: -copied block-related functions from namestore to namecache --- src/include/gnunet_namecache_service.h | 163 +++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 src/include/gnunet_namecache_service.h (limited to 'src/include/gnunet_namecache_service.h') diff --git a/src/include/gnunet_namecache_service.h b/src/include/gnunet_namecache_service.h new file mode 100644 index 000000000..1a71f1ebd --- /dev/null +++ b/src/include/gnunet_namecache_service.h @@ -0,0 +1,163 @@ +/* + This file is part of GNUnet + (C) 2012, 2013 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 + by the Free Software Foundation; either version 3, 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. +*/ + +/** + * @file include/gnunet_namecache_service.h + * @brief API that can be used to store naming information on a GNUnet node; + * Naming information can either be records for which this peer/user + * is authoritative, or blocks which are cached, encrypted naming + * data from other peers. + * @author Christian Grothoff + */ +#ifndef GNUNET_NAMECACHE_SERVICE_H +#define GNUNET_NAMECACHE_SERVICE_H + +#include "gnunet_util_lib.h" +#include "gnunet_block_lib.h" +#include "gnunet_namestore_service.h" + +#ifdef __cplusplus +extern "C" +{ +#if 0 /* keep Emacsens' auto-indent happy */ +} +#endif +#endif + + +/** + * Entry in the queue. + */ +struct GNUNET_NAMECACHE_QueueEntry; + +/** + * Handle to the namecache service. + */ +struct GNUNET_NAMECACHE_Handle; + +/** + * Maximum size of a value that can be stored in the namecache. + */ +#define GNUNET_NAMECACHE_MAX_VALUE_SIZE (63 * 1024) + + +/** + * Connect to the namecache service. + * + * @param cfg configuration to use + * @return handle to use to access the service + */ +struct GNUNET_NAMECACHE_Handle * +GNUNET_NAMECACHE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg); + + +/** + * Disconnect from the namecache service (and free associated + * resources). Must not be called from within operation callbacks of + * the API. + * + * @param h handle to the namecache + */ +void +GNUNET_NAMECACHE_disconnect (struct GNUNET_NAMECACHE_Handle *h); + + +/** + * Continuation called to notify client about result of the + * operation. + * + * @param cls closure + * @param success #GNUNET_SYSERR on failure (including timeout/queue drop/failure to validate) + * #GNUNET_NO if content was already there or not found + * #GNUNET_YES (or other positive value) on success + * @param emsg NULL on success, otherwise an error message + */ +typedef void (*GNUNET_NAMECACHE_ContinuationWithStatus) (void *cls, + int32_t success, + const char *emsg); + + + +/** + * Store an item in the namecache. If the item is already present, + * it is replaced with the new record. + * + * @param h handle to the namecache + * @param block block to store + * @param cont continuation to call when done + * @param cont_cls closure for @a cont + * @return handle to abort the request + */ +struct GNUNET_NAMECACHE_QueueEntry * +GNUNET_NAMECACHE_block_cache (struct GNUNET_NAMECACHE_Handle *h, + const struct GNUNET_NAMESTORE_Block *block, + GNUNET_NAMECACHE_ContinuationWithStatus cont, + void *cont_cls); + + +/** + * Process a record that was stored in the namecache. + * + * @param cls closure + * @param block block that was stored in the namecache + */ +typedef void (*GNUNET_NAMECACHE_BlockProcessor) (void *cls, + const struct GNUNET_NAMESTORE_Block *block); + + +/** + * Get a result for a particular key from the namecache. The processor + * will only be called once. + * + * @param h handle to the namecache + * @param derived_hash hash of zone key combined with name to lookup + * then at the end once with NULL + * @param proc function to call on the matching block, or with + * NULL if there is no matching block + * @param proc_cls closure for @a proc + * @return a handle that can be used to cancel + */ +struct GNUNET_NAMECACHE_QueueEntry * +GNUNET_NAMECACHE_lookup_block (struct GNUNET_NAMECACHE_Handle *h, + const struct GNUNET_HashCode *derived_hash, + GNUNET_NAMECACHE_BlockProcessor proc, void *proc_cls); + + +/** + * Cancel a namecache operation. The final callback from the + * operation must not have been done yet. Must be called on any + * namecache operation that has not yet completed prior to calling + * #GNUNET_NAMECACHE_disconnect. + * + * @param qe operation to cancel + */ +void +GNUNET_NAMECACHE_cancel (struct GNUNET_NAMECACHE_QueueEntry *qe); + + +#if 0 /* keep Emacsens' auto-indent happy */ +{ +#endif +#ifdef __cplusplus +} +#endif + +/* end of gnunet_namecache_service.h */ +#endif -- cgit v1.2.3