/*
This file is part of GNUnet
- (C) 2012 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2012 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
#define GNUNET_CONSENSUS_PROTOCOL_H
#include "platform.h"
+#include "gnunet_util_lib.h"
#include "gnunet_common.h"
#include "gnunet_protocols.h"
/**
* Sent as context message for set reconciliation.
+ *
+ * Essentially contains all the fields
+ * from 'struct TaskKey', but in NBO.
*/
struct GNUNET_CONSENSUS_RoundContextMessage
{
* Type: GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ROUND_CONTEXT
*/
struct GNUNET_MessageHeader header;
- uint32_t round;
- uint32_t exp_round;
- uint32_t exp_subround;
+
+ /**
+ * A value from 'enum PhaseKind'.
+ */
+ uint16_t kind;
+
+ /**
+ * Number of the first peer
+ * in canonical order.
+ */
+ int16_t peer1;
+
+ /**
+ * Number of the second peer in canonical order.
+ */
+ int16_t peer2;
+
+ /**
+ * Repetition of the gradecast phase.
+ */
+ int16_t repetition;
+
+ /**
+ * Leader in the gradecast phase.
+ *
+ * Can be different from both peer1 and peer2.
+ */
+ int16_t leader;
+
+ /**
+ * Non-zero if this set reconciliation
+ * had elements removed because they were contested.
+ *
+ * Will be considered when grading broadcasts.
+ *
+ * Ignored for set operations that are not within gradecasts.
+ */
+ uint16_t is_contested;
+};
+
+
+enum {
+ CONSENSUS_MARKER_CONTESTED = 1,
+ CONSENSUS_MARKER_SIZE = 2,
};
+
+/**
+ * Consensus element, either marker or payload.
+ */
+struct ConsensusElement
+{
+ /**
+ * Payload element_type, only valid
+ * if this is not a marker element.
+ */
+ uint16_t payload_type;
+
+ /**
+ * Is this a marker element?
+ */
+ uint8_t marker;
+
+ /* rest: element data */
+};
+
+
+struct ConsensusSizeElement
+{
+ struct ConsensusElement ce GNUNET_PACKED;
+
+ uint64_t size GNUNET_PACKED;
+ uint8_t sender_index;
+};
+
+struct ConsensusStuffedElement
+{
+ struct ConsensusElement ce GNUNET_PACKED;
+ struct GNUNET_HashCode rand GNUNET_PACKED;
+};
+
+
GNUNET_NETWORK_STRUCT_END
#endif