aboutsummaryrefslogtreecommitdiff
path: root/src/include/gnunet_consensus_service.h
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2012-11-15 10:44:47 +0000
committerFlorian Dold <florian.dold@gmail.com>2012-11-15 10:44:47 +0000
commit57ce91e29030ed0608511491aaf7b4b45fedb2d4 (patch)
treecde9bd82034a24bc92c617a542d2a2afbfc23cec /src/include/gnunet_consensus_service.h
parentd631dfd70fa11001460128f4ff4ea001e3e97f49 (diff)
downloadgnunet-57ce91e29030ed0608511491aaf7b4b45fedb2d4.tar.gz
gnunet-57ce91e29030ed0608511491aaf7b4b45fedb2d4.zip
added declarations for the consensus api
Diffstat (limited to 'src/include/gnunet_consensus_service.h')
-rw-r--r--src/include/gnunet_consensus_service.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/src/include/gnunet_consensus_service.h b/src/include/gnunet_consensus_service.h
new file mode 100644
index 000000000..f20e0ca54
--- /dev/null
+++ b/src/include/gnunet_consensus_service.h
@@ -0,0 +1,142 @@
1/*
2 This file is part of GNUnet
3 (C) 2012 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 2, 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_consensus_service.h
23 * @brief
24 * @author Florian Dold
25 */
26
27#ifndef GNUNET_CONSENSUS_SERVICE_H
28#define GNUNET_CONSENSUS_SERVICE_H
29
30#ifdef __cplusplus
31extern "C"
32{
33#if 0 /* keep Emacsens' auto-indent happy */
34}
35#endif
36#endif
37
38#include "platform.h"
39#include "gnunet_common.h"
40#include "gnunet_time_lib.h"
41
42
43/**
44 * Called when a new element was received from another peer.
45 *
46 * @return GNUNET_YES to keep the new value, GNUNET_NO to discard it
47 */
48typedef int (*GNUNET_CONSENSUS_NewElementCallback) (void *cls,
49 struct GNUNET_PeerIdentity *source,
50 uint8_t *new_data);
51
52
53/**
54 * Called when a conclusion was successful.
55 *
56 * TODO: A way to get to the set elements at the point of conclusion
57 */
58typedef void (*GNUNET_CONSENSUS_ConcludeCallback) (void *cls, int success);
59
60/**
61 * Opaque handle for the consensus service.
62 */
63struct GNUNET_CONSENSUS_Handle;
64
65
66/**
67 * Opaque handle for the consensus service.
68 */
69struct GNUNET_CONSENSUS_ConcludeHandle;
70
71
72/**
73 * Create a consensus session.
74 *
75 * @param peers zero-terminated list of peers participating in this consensus session
76 * @param session_id session identifier
77 * Allows a group of peers to have more than consensus session.
78 * @param element_size size of the elements in the reconciled set in bytes
79 * @param new_element callback, called when a new element is added to the set by
80 * another peer
81 * @param cls closure for new_element
82 *
83 * @return handle to use
84 */
85struct GNUNET_CONSENSUS_Handle *
86GNUNET_CONSENSUS_create (struct GNUNET_PeerIdentity *peers,
87 uint32_t session_id,
88 int element_size,
89 uint8_t **initial_elements,
90 GNUNET_CONSENSUS_NewElementCallback new_element,
91 void *cls);
92
93
94/**
95 * Try to reach a short-term consensus with all other peers in the consensus session.
96 *
97 * @param consensus consensus session
98 * @param timeout timeout after which the conculde callback
99 * will be called with success=GNUNET_NO
100 * @param conclude called when the conclusion was successful
101 * @param cls closure for the conclude callback
102 *
103 */
104struct GNUNET_CONSENSUS_ConcludeHandle
105GNUNET_CONSENSUS_conclude(struct GNUNET_CONSENSUS_Handle *consensus,
106 struct GNUNET_TIME_Relative timeout,
107 GNUNET_CONSENSUS_ConcludeCallback conclude,
108 void *cls);
109
110
111/**
112 * Insert an element in the set being reconsiled.
113 *
114 * @param handle handle for the consensus session
115 * @param element the element to be inserted
116 *
117 */
118void
119GNUNET_CONSENSUS_insert(struct GNUNET_CONSENSUS_Handle, uint8_t *element);
120
121
122/**
123 * Destroy a consensus handle (free all state associated with
124 * it).
125 *
126 * @param h consensus handle to destroy
127 */
128void
129GNUNET_CONSENSUS_destroy (struct GNUNET_CONSENSUS_Handle *h);
130
131
132
133
134
135#if 0 /* keep Emacsens' auto-indent happy */
136{
137#endif
138#ifdef __cplusplus
139}
140#endif
141
142#endif