*/
struct GNUNET_HashCode session_id;
- /**
- * Number of peers in the consensus. Optionally includes the local peer.
- */
- int num_peers;
-
- /**
- * Peer identities of peers participating in the consensus, includes the local peer.
- */
- struct GNUNET_PeerIdentity **peers;
-
/**
* GNUNES_YES iff the join message has been sent to the service.
*/
consensus->cfg = cfg;
consensus->new_element_cb = new_element_cb;
consensus->new_element_cls = new_element_cls;
- consensus->num_peers = num_peers;
consensus->session_id = *session_id;
-
- if (0 == num_peers)
- consensus->peers = NULL;
- else if (num_peers > 0)
- consensus->peers =
- GNUNET_memdup (peers, num_peers * sizeof (struct GNUNET_PeerIdentity));
-
consensus->client = GNUNET_CLIENT_connect ("consensus", cfg);
consensus->mq = GNUNET_MQ_queue_for_connection_client (consensus->client,
mq_handlers, NULL, consensus);
GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_JOIN);
join_msg->session_id = consensus->session_id;
- join_msg->num_peers = htonl (consensus->num_peers);
+ join_msg->num_peers = htonl (num_peers);
memcpy(&join_msg[1],
- consensus->peers,
- consensus->num_peers * sizeof (struct GNUNET_PeerIdentity));
+ peers,
+ num_peers * sizeof (struct GNUNET_PeerIdentity));
GNUNET_MQ_send (consensus->mq, ev);
return consensus;
GNUNET_CLIENT_disconnect (consensus->client);
consensus->client = NULL;
}
- if (NULL != consensus->peers)
- GNUNET_free (consensus->peers);
GNUNET_free (consensus);
}
}
if (session->num_peers <= 1)
{
- /* FIXME: what to do here? */
- //send_client_conclude_done (session);
+ session->current_round = CONSENSUS_ROUND_FINISH;
+ GNUNET_SET_iterate (session->element_set, send_to_client_iter, session);
}
else
{
static struct GNUNET_HashCode session_id;
+static unsigned int elements_received;
-static int
-conclude_done (void *cls, const struct GNUNET_CONSENSUS_Group *group)
+
+static void
+conclude_done (void *cls)
{
- if (NULL == group)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, "conclude over\n");
- GNUNET_SCHEDULER_shutdown ();
- return GNUNET_NO;
- }
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, "concluded\n");
- return GNUNET_YES;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO, "conclude over\n");
+ if (2 != elements_received)
+ GNUNET_abort ();
+ GNUNET_SCHEDULER_shutdown ();
}
-static int
+static void
on_new_element (void *cls,
- struct GNUNET_CONSENSUS_Element *element)
+ const struct GNUNET_SET_Element *element)
{
- GNUNET_assert (0);
- return GNUNET_YES;
+ elements_received++;
}
static void
GNUNET_assert (GNUNET_NO == called);
called = GNUNET_YES;
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "insert done\n");
- GNUNET_CONSENSUS_conclude (consensus, GNUNET_TIME_UNIT_SECONDS, 0, &conclude_done, NULL);
+ GNUNET_CONSENSUS_conclude (consensus, GNUNET_TIME_UNIT_SECONDS, &conclude_done, NULL);
}
{
char *str = "foo";
- struct GNUNET_CONSENSUS_Element el1 = {"foo", 4, 0};
- struct GNUNET_CONSENSUS_Element el2 = {"bar", 4, 0};
+ struct GNUNET_SET_Element el1 = {4, 0, "foo"};
+ struct GNUNET_SET_Element el2 = {5, 0, "quux"};
GNUNET_log_setup ("test_consensus_api",
"INFO",
* @param element new element, NULL on error
*/
typedef void (*GNUNET_CONSENSUS_ElementCallback) (void *cls,
- const struct GNUNET_SET_Element *element);
+ const struct GNUNET_SET_Element *element);
{
struct GNUNET_SET_Element element;
-
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initializing set 2\n");
+ element.type = 0;
+
element.data = "hello";
element.size = strlen(element.data);
GNUNET_SET_add_element (set2, &element, NULL, NULL);
{
struct GNUNET_SET_Element element;
+ element.type = 0;
+
element.data = "hello";
element.size = strlen(element.data);
GNUNET_SET_add_element (set1, &element, NULL, NULL);