RPS: Forgot to add header
[oweals/gnunet.git] / src / include / gnunet_namecache_plugin.h
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  * @author Christian Grothoff
23  *
24  * @file
25  * Plugin API for the namecache database backend
26  *
27  * @defgroup namecache-plugin  Name Cache service plugin API
28  * Plugin API for the namecache database backend.
29  *
30  * @see [Documentation](https://gnunet.org/namecache-plugin-api)
31  *
32  * @{
33  */
34 #ifndef GNUNET_NAMECACHE_PLUGIN_H
35 #define GNUNET_NAMECACHE_PLUGIN_H
36
37 #include "gnunet_util_lib.h"
38 #include "gnunet_namecache_service.h"
39 #include "gnunet_namestore_service.h"
40
41 #ifdef __cplusplus
42 extern "C"
43 {
44 #if 0                           /* keep Emacsens' auto-indent happy */
45 }
46 #endif
47 #endif
48
49
50 /**
51  * Function called for matching blocks.
52  *
53  * @param cls closure
54  * @param block lookup result
55  */
56 typedef void (*GNUNET_NAMECACHE_BlockCallback) (void *cls,
57                                                 const struct GNUNET_GNSRECORD_Block *block);
58
59
60 /**
61  * @brief struct returned by the initialization function of the plugin
62  */
63 struct GNUNET_NAMECACHE_PluginFunctions
64 {
65
66   /**
67    * Closure to pass to all plugin functions.
68    */
69   void *cls;
70
71   /**
72    * Cache a block in the datastore. Overwrites existing blocks
73    * for the same zone and label.
74    *
75    * @param cls closure (internal context for the plugin)
76    * @param block block to cache
77    * @return #GNUNET_OK on success, else #GNUNET_SYSERR
78    */
79   int (*cache_block) (void *cls,
80                       const struct GNUNET_GNSRECORD_Block *block);
81
82
83   /**
84    * Get the block for a particular zone and label in the
85    * datastore.  Will return at most one result to the iterator.
86    *
87    * @param cls closure (internal context for the plugin)
88    * @param query hash of public key derived from the zone and the label
89    * @param iter function to call with the result
90    * @param iter_cls closure for @a iter
91    * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error
92    */
93   int (*lookup_block) (void *cls,
94                        const struct GNUNET_HashCode *query,
95                        GNUNET_NAMECACHE_BlockCallback iter, void *iter_cls);
96
97
98 };
99
100
101 #if 0                           /* keep Emacsens' auto-indent happy */
102 {
103 #endif
104 #ifdef __cplusplus
105 }
106 #endif
107
108 #endif
109
110 /** @} */  /* end of group */