aboutsummaryrefslogtreecommitdiff
path: root/src
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
parentd631dfd70fa11001460128f4ff4ea001e3e97f49 (diff)
downloadgnunet-57ce91e29030ed0608511491aaf7b4b45fedb2d4.tar.gz
gnunet-57ce91e29030ed0608511491aaf7b4b45fedb2d4.zip
added declarations for the consensus api
Diffstat (limited to 'src')
-rw-r--r--src/consensus/Makefile.am14
-rw-r--r--src/consensus/gnunet-consensus.c35
-rw-r--r--src/consensus/gnunet-service-consensus.cc56
-rw-r--r--src/include/gnunet_consensus_service.h142
4 files changed, 237 insertions, 10 deletions
diff --git a/src/consensus/Makefile.am b/src/consensus/Makefile.am
index 2041ec1ac..5929a4d97 100644
--- a/src/consensus/Makefile.am
+++ b/src/consensus/Makefile.am
@@ -15,17 +15,17 @@ if USE_COVERAGE
15 AM_CFLAGS = -fprofile-arcs -ftest-coverage 15 AM_CFLAGS = -fprofile-arcs -ftest-coverage
16endif 16endif
17 17
18#bin_PROGRAMS = \ 18bin_PROGRAMS = \
19# gnunet-consensus 19 gnunet-consensus
20 20
21libexec_PROGRAMS = \ 21libexec_PROGRAMS = \
22 gnunet-service-consensus 22 gnunet-service-consensus
23 23
24#gnunet_consensus_SOURCES = \ 24gnunet_consensus_SOURCES = \
25# gnunet-consensus.c 25 gnunet-consensus.c
26#gnunet_consensus_LDADD = \ 26gnunet_consensus_LDADD = \
27# $(top_builddir)/src/util/libgnunetutil.la \ 27 $(top_builddir)/src/util/libgnunetutil.la \
28# $(GN_LIBINTL) 28 $(GN_LIBINTL)
29 29
30gnunet_service_consensus_SOURCES = \ 30gnunet_service_consensus_SOURCES = \
31 gnunet-service-consensus.cc 31 gnunet-service-consensus.cc
diff --git a/src/consensus/gnunet-consensus.c b/src/consensus/gnunet-consensus.c
new file mode 100644
index 000000000..b2b635059
--- /dev/null
+++ b/src/consensus/gnunet-consensus.c
@@ -0,0 +1,35 @@
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 consensus/gnunet-consensus.c
23 * @brief
24 * @author Florian Dold
25 */
26
27
28#include "gnunet_consensus_service.h"
29
30
31int
32main ()
33{
34 return 0;
35}
diff --git a/src/consensus/gnunet-service-consensus.cc b/src/consensus/gnunet-service-consensus.cc
index d5e829e51..82ea5ef79 100644
--- a/src/consensus/gnunet-service-consensus.cc
+++ b/src/consensus/gnunet-service-consensus.cc
@@ -1,10 +1,60 @@
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
1#include <cstdio> 22#include <cstdio>
2#include <iostream> 23#include <iostream>
24#include <stdint.h>
25
26#include "platform.h"
27#include "gnunet_common.h"
28#include "gnunet_service_lib.h"
3 29
4using namespace std; 30using namespace std;
5 31
6int main () 32/**
33 * Process statistics requests.
34 *
35 * @param cls closure
36 * @param server the initialized server
37 * @param c configuration to use
38 */
39static void
40run (void *cls, struct GNUNET_SERVER_Handle *server,
41 const struct GNUNET_CONFIGURATION_Handle *c)
7{ 42{
8 cout << "Hello world" << endl; 43 /* TODO */
9 return 0;
10} 44}
45
46
47/**
48 * The main function for the statistics service.
49 *
50 * @param argc number of arguments from the command line
51 * @param argv command line arguments
52 * @return 0 ok, 1 on error
53 */
54int
55main (int argc, char *const *argv)
56{
57 return (GNUNET_OK ==
58 GNUNET_SERVICE_run (argc, argv, "statistics", GNUNET_SERVICE_OPTION_NONE, &run, NULL)) ? 0 : 1;
59}
60
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