gnunet_namecache_plugin.h (3101B)
1 /* 2 This file is part of GNUnet 3 Copyright (C) 2012, 2013 GNUnet e.V. 4 5 GNUnet is free software: you can redistribute it and/or modify it 6 under the terms of the GNU Affero General Public License as published 7 by the Free Software Foundation, either version 3 of the License, 8 or (at your option) any later version. 9 10 GNUnet is distributed in the hope that it will be useful, but 11 WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Affero General Public License for more details. 14 15 You should have received a copy of the GNU Affero General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 SPDX-License-Identifier: AGPL3.0-or-later 19 */ 20 21 /** 22 * @addtogroup GNS 23 * @{ 24 * 25 * @author Christian Grothoff 26 * 27 * @file 28 * Plugin API for the namecache database backend 29 * 30 * @defgroup namecache-plugin Name Cache service plugin API 31 * Plugin API for the namecache database backend. 32 * 33 * @see [Documentation](https://gnunet.org/namecache-plugin-api) 34 * 35 * @{ 36 */ 37 #ifndef GNUNET_NAMECACHE_PLUGIN_H 38 #define GNUNET_NAMECACHE_PLUGIN_H 39 40 41 #include "gnunet_util_lib.h" 42 #include "gnunet_namecache_service.h" 43 #include "gnunet_namestore_service.h" 44 45 #ifdef __cplusplus 46 extern "C" 47 { 48 #if 0 /* keep Emacsens' auto-indent happy */ 49 } 50 #endif 51 #endif 52 53 54 /** 55 * Function called for matching blocks. 56 * 57 * @param cls closure 58 * @param block lookup result 59 */ 60 typedef void (*GNUNET_NAMECACHE_BlockCallback) (void *cls, 61 const struct 62 GNUNET_GNSRECORD_Block *block); 63 64 65 /** 66 * @brief struct returned by the initialization function of the plugin 67 */ 68 struct GNUNET_NAMECACHE_PluginFunctions 69 { 70 /** 71 * Closure to pass to all plugin functions. 72 */ 73 void *cls; 74 75 /** 76 * Cache a block in the datastore. Overwrites existing blocks 77 * for the same zone and label. 78 * 79 * @param cls closure (internal context for the plugin) 80 * @param block block to cache 81 * @return #GNUNET_OK on success, else #GNUNET_SYSERR 82 */ 83 int (*cache_block) (void *cls, 84 const struct GNUNET_GNSRECORD_Block *block); 85 86 87 /** 88 * Get the block for a particular zone and label in the 89 * datastore. Will return at most one result to the iterator. 90 * 91 * @param cls closure (internal context for the plugin) 92 * @param query hash of public key derived from the zone and the label 93 * @param iter function to call with the result 94 * @param iter_cls closure for @a iter 95 * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error 96 */ 97 int (*lookup_block) (void *cls, 98 const struct GNUNET_HashCode *query, 99 GNUNET_NAMECACHE_BlockCallback iter, void *iter_cls); 100 }; 101 102 103 #if 0 /* keep Emacsens' auto-indent happy */ 104 { 105 #endif 106 #ifdef __cplusplus 107 } 108 #endif 109 110 #endif 111 112 /** @} */ /* end of group */ 113 114 /** @} */ /* end of group addition */