/*
This file is part of GNUnet
- Copyright (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
#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_repetition;
- 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