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