/*
This file is part of GNUnet.
- (C) 2012 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2012 Christian Grothoff (and other contributing authors)
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.
*/
/**
= (const struct GNUNET_CONSENSUS_ElementMessage *) mh;
struct GNUNET_SET_Element element;
- LOG (GNUNET_ERROR_TYPE_DEBUG, "received new element\n");
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "received new element\n");
- element.type = msg->element_type;
+ element.element_type = msg->element_type;
element.size = ntohs (msg->header.size) - sizeof (struct GNUNET_CONSENSUS_ElementMessage);
element.data = &msg[1];
GNUNET_CONSENSUS_ConcludeCallback cc;
+ GNUNET_MQ_destroy (consensus->mq);
+ consensus->mq = NULL;
+
+ GNUNET_CLIENT_disconnect (consensus->client);
+ consensus->client = NULL;
+
+
GNUNET_assert (NULL != (cc = consensus->conclude_cb));
consensus->conclude_cb = NULL;
cc (consensus->conclude_cls);
}
+/**
+ * Generic error handler, called with the appropriate
+ * error code and the same closure specified at the creation of
+ * the message queue.
+ * Not every message queue implementation supports an error handler.
+ *
+ * @param cls closure, same closure as for the message handlers
+ * @param error error code
+ */
+static void
+mq_error_handler (void *cls, enum GNUNET_MQ_Error error)
+{
+ LOG (GNUNET_ERROR_TYPE_WARNING, "consensus service disconnected us\n");
+}
+
+
/**
* Create a consensus session.
*
consensus->session_id = *session_id;
consensus->client = GNUNET_CLIENT_connect ("consensus", cfg);
consensus->mq = GNUNET_MQ_queue_for_connection_client (consensus->client,
- mq_handlers, NULL, consensus);
+ mq_handlers, mq_error_handler, consensus);
GNUNET_assert (consensus->client != NULL);
void
GNUNET_CONSENSUS_destroy (struct GNUNET_CONSENSUS_Handle *consensus)
{
- if (consensus->client != NULL)
+ if (NULL != consensus->mq)
+ {
+ GNUNET_MQ_destroy (consensus->mq);
+ consensus->mq = NULL;
+ }
+ if (NULL != consensus->client)
{
GNUNET_CLIENT_disconnect (consensus->client);
consensus->client = NULL;