-add ticket DB for IdP
[oweals/gnunet.git] / src / include / gnunet_identity_provider_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
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 Martin Schanzenbach
23  *
24  * @file
25  * Plugin API for the idp database backend
26  *
27  * @defgroup identity-provider-plugin  IdP service plugin API
28  * Plugin API for the idp database backend
29  * @{
30  */
31 #ifndef GNUNET_IDENTITY_PROVIDER_PLUGIN_H
32 #define GNUNET_IDENTITY_PROVIDER_PLUGIN_H
33
34 #include "gnunet_util_lib.h"
35 #include "gnunet_identity_provider_service.h"
36
37 #ifdef __cplusplus
38 extern "C"
39 {
40 #if 0                           /* keep Emacsens' auto-indent happy */
41 }
42 #endif
43 #endif
44
45
46 /**
47  * Function called by for each matching ticket.
48  *
49  * @param cls closure
50  * @param ticket the ticket
51  * @prarm attrs the attributes
52  */
53 typedef void (*GNUNET_IDENTITY_PROVIDER_TicketIterator) (void *cls,
54                                                  const struct GNUNET_IDENTITY_PROVIDER_Ticket2 *ticket,
55                                                  const struct GNUNET_IDENTITY_PROVIDER_AttributeList *attrs);
56
57
58 /**
59  * @brief struct returned by the initialization function of the plugin
60  */
61 struct GNUNET_IDENTITY_PROVIDER_PluginFunctions
62 {
63
64   /**
65    * Closure to pass to all plugin functions.
66    */
67   void *cls;
68
69   /**
70    * Store a ticket in the database.
71    *
72    * @param cls closure (internal context for the plugin)
73    * @param ticket the ticket to store
74    * @param attrs the attributes shared with the ticket
75    * @return #GNUNET_OK on success, else #GNUNET_SYSERR
76    */
77   int (*store_ticket) (void *cls,
78                         const struct GNUNET_IDENTITY_PROVIDER_Ticket2 *ticket,
79       const struct GNUNET_IDENTITY_PROVIDER_AttributeList *attrs);
80
81   /**
82    * Delete a ticket from the database.
83    *
84    * @param cls closure (internal context for the plugin)
85    * @param ticket the ticket to store
86    * @return #GNUNET_OK on success, else #GNUNET_SYSERR
87    */
88   int (*delete_ticket) (void *cls,
89                         const struct GNUNET_IDENTITY_PROVIDER_Ticket2 *ticket);
90
91
92
93   /**
94    * Iterate over all tickets
95    *
96    * @param cls closure (internal context for the plugin)
97    * @param identity the identity
98    * @param audience GNUNET_YES if the identity is the audience of the ticket
99    *                 else it is considered the issuer
100    * @param iter function to call with the result
101    * @param iter_cls closure for @a iter
102    * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error
103    */
104   int (*iterate_tickets) (void *cls,
105                           const struct GNUNET_CRYPTO_EcdsaPublicKey *identity,
106         int audience,
107                           uint64_t offset,
108                           GNUNET_IDENTITY_PROVIDER_TicketIterator iter, void *iter_cls);
109
110
111 };
112
113
114 #if 0                           /* keep Emacsens' auto-indent happy */
115 {
116 #endif
117 #ifdef __cplusplus
118 }
119 #endif
120
121 #endif
122
123 /** @} */  /* end of group */