RPS: Change cosmetics - fix indentation
[oweals/gnunet.git] / src / consensus / consensus_protocol.h
1 /*
2       This file is part of GNUnet
3       Copyright (C) 2012 GNUnet e.V.
4
5       GNUnet is free software: you can redistribute it and/or modify it
6       under the terms of the GNU Affero General Public License as published
7       by the Free Software Foundation, either version 3 of the License,
8       or (at your 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       Affero General Public License for more details.
14      
15       You should have received a copy of the GNU Affero General Public License
16       along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18
19
20 /**
21  * @file consensus/consensus_protocol.h
22  * @brief p2p message definitions for consensus
23  * @author Florian Dold
24  */
25
26 #ifndef GNUNET_CONSENSUS_PROTOCOL_H
27 #define GNUNET_CONSENSUS_PROTOCOL_H
28
29 #include "platform.h"
30 #include "gnunet_util_lib.h"
31 #include "gnunet_common.h"
32 #include "gnunet_protocols.h"
33
34
35 GNUNET_NETWORK_STRUCT_BEGIN
36
37 /**
38  * Sent as context message for set reconciliation.
39  *
40  * Essentially contains all the fields
41  * from 'struct TaskKey', but in NBO.
42  */
43 struct GNUNET_CONSENSUS_RoundContextMessage
44 {
45   /**
46    * Type: #GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ROUND_CONTEXT
47    */
48   struct GNUNET_MessageHeader header;
49
50   /**
51    * A value from 'enum PhaseKind'.
52    */
53   uint16_t kind GNUNET_PACKED;
54
55   /**
56    * Number of the first peer
57    * in canonical order.
58    */
59   int16_t peer1 GNUNET_PACKED;
60
61   /**
62    * Number of the second peer in canonical order.
63    */
64   int16_t peer2 GNUNET_PACKED;
65
66   /**
67    * Repetition of the gradecast phase.
68    */
69   int16_t repetition GNUNET_PACKED;
70
71   /**
72    * Leader in the gradecast phase.
73    *
74    * Can be different from both peer1 and peer2.
75    */
76   int16_t leader GNUNET_PACKED;
77
78   /**
79    * Non-zero if this set reconciliation
80    * had elements removed because they were contested.
81    *
82    * Will be considered when grading broadcasts.
83    *
84    * Ignored for set operations that are not within gradecasts.
85    */
86   uint16_t is_contested GNUNET_PACKED;
87 };
88
89
90 enum {
91   CONSENSUS_MARKER_CONTESTED = 1,
92   CONSENSUS_MARKER_SIZE = 2,
93 };
94
95
96 /**
97  * Consensus element, either marker or payload.
98  */
99 struct ConsensusElement
100 {
101   /**
102    * Payload element_type, only valid
103    * if this is not a marker element.
104    */
105   uint16_t payload_type GNUNET_PACKED;
106
107   /**
108    * Is this a marker element?
109    */
110   uint8_t marker;
111
112   /* rest: element data */
113 };
114
115
116 struct ConsensusSizeElement
117 {
118   struct ConsensusElement ce;
119
120   uint64_t size GNUNET_PACKED;
121   uint8_t sender_index;
122 };
123
124 struct ConsensusStuffedElement
125 {
126   struct ConsensusElement ce;
127   struct GNUNET_HashCode rand GNUNET_PACKED;
128 };
129
130
131 GNUNET_NETWORK_STRUCT_END
132
133 #endif