31a235b66bcbe6c17bab29e1e89183eab1d32d2e
[oweals/gnunet.git] / src / include / gnunet_namecache_plugin.h
1 /*
2      This file is part of GNUnet
3      Copyright (C) 2012, 2013 Christian Grothoff (and other contributing authors)
4
5      GNUnet is free software; you can redistribute it and/or modify
6      it under the terms of the GNU General Public License as published
7      by the Free Software Foundation; either version 3, or (at your
8      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      General Public License for more details.
14
15      You should have received a copy of the GNU General Public License
16      along with GNUnet; see the file COPYING.  If not, write to the
17      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18      Boston, MA 02110-1301, USA.
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  */
31 #ifndef GNUNET_NAMECACHE_PLUGIN_H
32 #define GNUNET_NAMECACHE_PLUGIN_H
33
34 #include "gnunet_util_lib.h"
35 #include "gnunet_namecache_service.h"
36 #include "gnunet_namestore_service.h"
37
38 #ifdef __cplusplus
39 extern "C"
40 {
41 #if 0                           /* keep Emacsens' auto-indent happy */
42 }
43 #endif
44 #endif
45
46
47 /**
48  * Function called for matching blocks.
49  *
50  * @param cls closure
51  * @param block lookup result
52  */
53 typedef void (*GNUNET_NAMECACHE_BlockCallback) (void *cls,
54                                                 const struct GNUNET_GNSRECORD_Block *block);
55
56
57 /**
58  * @brief struct returned by the initialization function of the plugin
59  */
60 struct GNUNET_NAMECACHE_PluginFunctions
61 {
62
63   /**
64    * Closure to pass to all plugin functions.
65    */
66   void *cls;
67
68   /**
69    * Cache a block in the datastore. Overwrites existing blocks
70    * for the same zone and label.
71    *
72    * @param cls closure (internal context for the plugin)
73    * @param block block to cache
74    * @return #GNUNET_OK on success, else #GNUNET_SYSERR
75    */
76   int (*cache_block) (void *cls,
77                       const struct GNUNET_GNSRECORD_Block *block);
78
79
80   /**
81    * Get the block for a particular zone and label in the
82    * datastore.  Will return at most one result to the iterator.
83    *
84    * @param cls closure (internal context for the plugin)
85    * @param query hash of public key derived from the zone and the label
86    * @param iter function to call with the result
87    * @param iter_cls closure for @a iter
88    * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error
89    */
90   int (*lookup_block) (void *cls,
91                        const struct GNUNET_HashCode *query,
92                        GNUNET_NAMECACHE_BlockCallback iter, void *iter_cls);
93
94
95 };
96
97
98 #if 0                           /* keep Emacsens' auto-indent happy */
99 {
100 #endif
101 #ifdef __cplusplus
102 }
103 #endif
104
105 #endif
106
107 /** @} */  /* end of group */