aboutsummaryrefslogtreecommitdiff
path: root/src/consensus/consensus_api.c
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2013-01-24 02:55:31 +0000
committerFlorian Dold <florian.dold@gmail.com>2013-01-24 02:55:31 +0000
commitf7eb3ed6bb391e9f87bcb3535bf04c4aeec2f7c1 (patch)
tree33a7d6f9fecf0c260a1b5b57403a9d13c6bbc859 /src/consensus/consensus_api.c
parentd6a27b576d197ac823e8494f351d43a78125a35f (diff)
downloadgnunet-f7eb3ed6bb391e9f87bcb3535bf04c4aeec2f7c1.tar.gz
gnunet-f7eb3ed6bb391e9f87bcb3535bf04c4aeec2f7c1.zip
implemented value exchange, various fixes
Diffstat (limited to 'src/consensus/consensus_api.c')
-rw-r--r--src/consensus/consensus_api.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/consensus/consensus_api.c b/src/consensus/consensus_api.c
index 5c0494254..ba0e69e48 100644
--- a/src/consensus/consensus_api.c
+++ b/src/consensus/consensus_api.c
@@ -176,7 +176,6 @@ transmit_queued (void *cls, size_t size,
176 176
177 qmsg = consensus->messages_head; 177 qmsg = consensus->messages_head;
178 GNUNET_CONTAINER_DLL_remove (consensus->messages_head, consensus->messages_tail, qmsg); 178 GNUNET_CONTAINER_DLL_remove (consensus->messages_head, consensus->messages_tail, qmsg);
179 GNUNET_assert (qmsg);
180 179
181 if (NULL == buf) 180 if (NULL == buf)
182 { 181 {
@@ -196,8 +195,8 @@ transmit_queued (void *cls, size_t size,
196 { 195 {
197 qmsg->idc (qmsg->idc_cls, GNUNET_YES); 196 qmsg->idc (qmsg->idc_cls, GNUNET_YES);
198 } 197 }
199 GNUNET_free (qmsg->msg); 198
200 GNUNET_free (qmsg); 199 /* FIXME: free the messages */
201 200
202 send_next (consensus); 201 send_next (consensus);
203 202
@@ -218,7 +217,6 @@ send_next (struct GNUNET_CONSENSUS_Handle *consensus)
218 217
219 if (NULL != consensus->messages_head) 218 if (NULL != consensus->messages_head)
220 { 219 {
221 LOG (GNUNET_ERROR_TYPE_INFO, "scheduling queued\n");
222 consensus->th = 220 consensus->th =
223 GNUNET_CLIENT_notify_transmit_ready (consensus->client, ntohs (consensus->messages_head->msg->size), 221 GNUNET_CLIENT_notify_transmit_ready (consensus->client, ntohs (consensus->messages_head->msg->size),
224 GNUNET_TIME_UNIT_FOREVER_REL, 222 GNUNET_TIME_UNIT_FOREVER_REL,
@@ -226,6 +224,15 @@ send_next (struct GNUNET_CONSENSUS_Handle *consensus)
226 } 224 }
227} 225}
228 226
227static void
228queue_message (struct GNUNET_CONSENSUS_Handle *consensus, struct GNUNET_MessageHeader *msg)
229{
230 struct QueuedMessage *qm;
231 qm = GNUNET_malloc (sizeof *qm);
232 qm->msg = msg;
233 GNUNET_CONTAINER_DLL_insert_tail (consensus->messages_head, consensus->messages_tail, qm);
234}
235
229 236
230/** 237/**
231 * Called when the server has sent is a new element 238 * Called when the server has sent is a new element
@@ -239,23 +246,24 @@ handle_new_element (struct GNUNET_CONSENSUS_Handle *consensus,
239{ 246{
240 struct GNUNET_CONSENSUS_Element element; 247 struct GNUNET_CONSENSUS_Element element;
241 struct GNUNET_CONSENSUS_AckMessage *ack_msg; 248 struct GNUNET_CONSENSUS_AckMessage *ack_msg;
242 struct QueuedMessage *queued_msg;
243 int ret; 249 int ret;
244 250
251 LOG (GNUNET_ERROR_TYPE_INFO, "received new element\n");
252
245 element.type = msg->element_type; 253 element.type = msg->element_type;
246 element.size = msg->header.size - sizeof (struct GNUNET_CONSENSUS_ElementMessage); 254 element.size = ntohs (msg->header.size) - sizeof (struct GNUNET_CONSENSUS_ElementMessage);
247 element.data = &msg[1]; 255 element.data = &msg[1];
248 256
249 ret = consensus->new_element_cb (consensus->new_element_cls, &element); 257 ret = consensus->new_element_cb (consensus->new_element_cls, &element);
250 258
251 queued_msg = GNUNET_malloc (sizeof (struct QueuedMessage) + sizeof (struct GNUNET_CONSENSUS_AckMessage)); 259 ack_msg = GNUNET_malloc (sizeof *ack_msg);
252 queued_msg->msg = (struct GNUNET_MessageHeader *) &queued_msg[1]; 260 ack_msg->header.size = htons (sizeof *ack_msg);
253 261 ack_msg->header.type = htons (GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_ACK);
254 ack_msg = (struct GNUNET_CONSENSUS_AckMessage *) queued_msg->msg;
255 ack_msg->keep = ret; 262 ack_msg->keep = ret;
256 263
257 GNUNET_CONTAINER_DLL_insert_tail (consensus->messages_head, consensus->messages_tail, 264 queue_message (consensus, (struct GNUNET_MessageHeader *) ack_msg);
258 queued_msg); 265
266 send_next (consensus);
259} 267}
260 268
261 269