aboutsummaryrefslogtreecommitdiff
path: root/src/consensus/consensus_api.c
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2013-01-17 00:53:11 +0000
committerFlorian Dold <florian.dold@gmail.com>2013-01-17 00:53:11 +0000
commit21273cba1880b1081b4152ee45b2f4ad6768e639 (patch)
tree325c93f75c67456b6729e581b9b69cc0bc52df48 /src/consensus/consensus_api.c
parentbdee53dd2cb760e9acd601e251ba59c42c98c02f (diff)
downloadgnunet-21273cba1880b1081b4152ee45b2f4ad6768e639.tar.gz
gnunet-21273cba1880b1081b4152ee45b2f4ad6768e639.zip
- gnunet-consensus now profiling tool
- work on service implementation, not working yet
Diffstat (limited to 'src/consensus/consensus_api.c')
-rw-r--r--src/consensus/consensus_api.c50
1 files changed, 24 insertions, 26 deletions
diff --git a/src/consensus/consensus_api.c b/src/consensus/consensus_api.c
index 25c76b358..5c0494254 100644
--- a/src/consensus/consensus_api.c
+++ b/src/consensus/consensus_api.c
@@ -54,11 +54,6 @@ struct QueuedMessage
54 struct GNUNET_MessageHeader *msg; 54 struct GNUNET_MessageHeader *msg;
55 55
56 /** 56 /**
57 * Size of the message in msg.
58 */
59 size_t size;
60
61 /**
62 * Will be called after transmit, if not NULL 57 * Will be called after transmit, if not NULL
63 */ 58 */
64 GNUNET_CONSENSUS_InsertDoneCallback idc; 59 GNUNET_CONSENSUS_InsertDoneCallback idc;
@@ -154,7 +149,7 @@ struct GNUNET_CONSENSUS_Handle
154 * @param consensus consensus handle 149 * @param consensus consensus handle
155 */ 150 */
156static void 151static void
157schedule_transmit (struct GNUNET_CONSENSUS_Handle *consensus); 152send_next (struct GNUNET_CONSENSUS_Handle *consensus);
158 153
159 154
160/** 155/**
@@ -168,16 +163,17 @@ schedule_transmit (struct GNUNET_CONSENSUS_Handle *consensus);
168 * @param buf where the callee should write the message 163 * @param buf where the callee should write the message
169 * @return number of bytes written to buf 164 * @return number of bytes written to buf
170 */ 165 */
171static size_t transmit_queued (void *cls, size_t size, 166static size_t
172 void *buf) 167transmit_queued (void *cls, size_t size,
168 void *buf)
173{ 169{
174 struct GNUNET_CONSENSUS_Handle *consensus; 170 struct GNUNET_CONSENSUS_Handle *consensus;
175 struct QueuedMessage *qmsg; 171 struct QueuedMessage *qmsg;
176 size_t ret_size; 172 size_t msg_size;
177
178 printf("transmitting queued\n");
179 173
180 consensus = (struct GNUNET_CONSENSUS_Handle *) cls; 174 consensus = (struct GNUNET_CONSENSUS_Handle *) cls;
175 consensus->th = NULL;
176
181 qmsg = consensus->messages_head; 177 qmsg = consensus->messages_head;
182 GNUNET_CONTAINER_DLL_remove (consensus->messages_head, consensus->messages_tail, qmsg); 178 GNUNET_CONTAINER_DLL_remove (consensus->messages_head, consensus->messages_tail, qmsg);
183 GNUNET_assert (qmsg); 179 GNUNET_assert (qmsg);
@@ -188,10 +184,14 @@ static size_t transmit_queued (void *cls, size_t size,
188 { 184 {
189 qmsg->idc (qmsg->idc_cls, GNUNET_YES); 185 qmsg->idc (qmsg->idc_cls, GNUNET_YES);
190 } 186 }
187 return 0;
191 } 188 }
192 189
193 memcpy (buf, qmsg->msg, qmsg->size); 190 msg_size = ntohs (qmsg->msg->size);
194 ret_size = qmsg->size; 191
192 GNUNET_assert (size >= msg_size);
193
194 memcpy (buf, qmsg->msg, msg_size);
195 if (NULL != qmsg->idc) 195 if (NULL != qmsg->idc)
196 { 196 {
197 qmsg->idc (qmsg->idc_cls, GNUNET_YES); 197 qmsg->idc (qmsg->idc_cls, GNUNET_YES);
@@ -199,9 +199,9 @@ static size_t transmit_queued (void *cls, size_t size,
199 GNUNET_free (qmsg->msg); 199 GNUNET_free (qmsg->msg);
200 GNUNET_free (qmsg); 200 GNUNET_free (qmsg);
201 201
202 schedule_transmit (consensus); 202 send_next (consensus);
203 203
204 return ret_size; 204 return msg_size;
205} 205}
206 206
207 207
@@ -211,7 +211,7 @@ static size_t transmit_queued (void *cls, size_t size,
211 * @param consensus consensus handle 211 * @param consensus consensus handle
212 */ 212 */
213static void 213static void
214schedule_transmit (struct GNUNET_CONSENSUS_Handle *consensus) 214send_next (struct GNUNET_CONSENSUS_Handle *consensus)
215{ 215{
216 if (NULL != consensus->th) 216 if (NULL != consensus->th)
217 return; 217 return;
@@ -219,9 +219,10 @@ schedule_transmit (struct GNUNET_CONSENSUS_Handle *consensus)
219 if (NULL != consensus->messages_head) 219 if (NULL != consensus->messages_head)
220 { 220 {
221 LOG (GNUNET_ERROR_TYPE_INFO, "scheduling queued\n"); 221 LOG (GNUNET_ERROR_TYPE_INFO, "scheduling queued\n");
222 GNUNET_CLIENT_notify_transmit_ready (consensus->client, consensus->messages_head->size, 222 consensus->th =
223 GNUNET_TIME_UNIT_FOREVER_REL, 223 GNUNET_CLIENT_notify_transmit_ready (consensus->client, ntohs (consensus->messages_head->msg->size),
224 GNUNET_NO, &transmit_queued, consensus); 224 GNUNET_TIME_UNIT_FOREVER_REL,
225 GNUNET_NO, &transmit_queued, consensus);
225 } 226 }
226} 227}
227 228
@@ -270,8 +271,7 @@ handle_conclude_done (struct GNUNET_CONSENSUS_Handle *consensus,
270 struct GNUNET_CONSENSUS_ConcludeDoneMessage *msg) 271 struct GNUNET_CONSENSUS_ConcludeDoneMessage *msg)
271{ 272{
272 GNUNET_assert (NULL != consensus->conclude_cb); 273 GNUNET_assert (NULL != consensus->conclude_cb);
273 consensus->conclude_cb (consensus->conclude_cls, 274 consensus->conclude_cb (consensus->conclude_cls, NULL);
274 0, NULL);
275 consensus->conclude_cb = NULL; 275 consensus->conclude_cb = NULL;
276} 276}
277 277
@@ -356,7 +356,7 @@ transmit_join (void *cls, size_t size, void *buf)
356 consensus->peers, 356 consensus->peers,
357 consensus->num_peers * sizeof (struct GNUNET_PeerIdentity)); 357 consensus->num_peers * sizeof (struct GNUNET_PeerIdentity));
358 358
359 schedule_transmit (consensus); 359 send_next (consensus);
360 360
361 GNUNET_CLIENT_receive (consensus->client, &message_handler, consensus, 361 GNUNET_CLIENT_receive (consensus->client, &message_handler, consensus,
362 GNUNET_TIME_UNIT_FOREVER_REL); 362 GNUNET_TIME_UNIT_FOREVER_REL);
@@ -454,13 +454,12 @@ GNUNET_CONSENSUS_insert (struct GNUNET_CONSENSUS_Handle *consensus,
454 454
455 qmsg = GNUNET_malloc (sizeof (struct QueuedMessage)); 455 qmsg = GNUNET_malloc (sizeof (struct QueuedMessage));
456 qmsg->msg = (struct GNUNET_MessageHeader *) element_msg; 456 qmsg->msg = (struct GNUNET_MessageHeader *) element_msg;
457 qmsg->size = element_msg_size;
458 qmsg->idc = idc; 457 qmsg->idc = idc;
459 qmsg->idc_cls = idc_cls; 458 qmsg->idc_cls = idc_cls;
460 459
461 GNUNET_CONTAINER_DLL_insert_tail (consensus->messages_head, consensus->messages_tail, qmsg); 460 GNUNET_CONTAINER_DLL_insert_tail (consensus->messages_head, consensus->messages_tail, qmsg);
462 461
463 schedule_transmit (consensus); 462 send_next (consensus);
464} 463}
465 464
466 465
@@ -500,11 +499,10 @@ GNUNET_CONSENSUS_conclude (struct GNUNET_CONSENSUS_Handle *consensus,
500 499
501 qmsg = GNUNET_malloc (sizeof (struct QueuedMessage)); 500 qmsg = GNUNET_malloc (sizeof (struct QueuedMessage));
502 qmsg->msg = (struct GNUNET_MessageHeader *) conclude_msg; 501 qmsg->msg = (struct GNUNET_MessageHeader *) conclude_msg;
503 qmsg->size = sizeof (struct GNUNET_CONSENSUS_ConcludeMessage);
504 502
505 GNUNET_CONTAINER_DLL_insert_tail (consensus->messages_head, consensus->messages_tail, qmsg); 503 GNUNET_CONTAINER_DLL_insert_tail (consensus->messages_head, consensus->messages_tail, qmsg);
506 504
507 schedule_transmit (consensus); 505 send_next (consensus);
508} 506}
509 507
510 508