diff options
author | Florian Dold <florian.dold@gmail.com> | 2013-01-24 02:55:31 +0000 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2013-01-24 02:55:31 +0000 |
commit | f7eb3ed6bb391e9f87bcb3535bf04c4aeec2f7c1 (patch) | |
tree | 33a7d6f9fecf0c260a1b5b57403a9d13c6bbc859 /src/consensus/consensus_api.c | |
parent | d6a27b576d197ac823e8494f351d43a78125a35f (diff) | |
download | gnunet-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.c | 32 |
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 | ||
227 | static void | ||
228 | queue_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 | ||