diff options
Diffstat (limited to 'src/transport/transport-testing-main.c')
-rw-r--r-- | src/transport/transport-testing-main.c | 69 |
1 files changed, 51 insertions, 18 deletions
diff --git a/src/transport/transport-testing-main.c b/src/transport/transport-testing-main.c index b8dbb9c03..de2ec3d0c 100644 --- a/src/transport/transport-testing-main.c +++ b/src/transport/transport-testing-main.c | |||
@@ -83,6 +83,11 @@ do_shutdown (void *cls) | |||
83 | GNUNET_SCHEDULER_cancel (ccc->timeout_task); | 83 | GNUNET_SCHEDULER_cancel (ccc->timeout_task); |
84 | ccc->timeout_task = NULL; | 84 | ccc->timeout_task = NULL; |
85 | } | 85 | } |
86 | if (NULL != ccc->connect_task) | ||
87 | { | ||
88 | GNUNET_SCHEDULER_cancel (ccc->connect_task); | ||
89 | ccc->connect_task = NULL; | ||
90 | } | ||
86 | while (NULL != (crl = ccc->crl_head)) | 91 | while (NULL != (crl = ccc->crl_head)) |
87 | { | 92 | { |
88 | GNUNET_CONTAINER_DLL_remove (ccc->crl_head, | 93 | GNUNET_CONTAINER_DLL_remove (ccc->crl_head, |
@@ -263,33 +268,23 @@ my_rec (void *cls, | |||
263 | 268 | ||
264 | 269 | ||
265 | /** | 270 | /** |
266 | * Function called once we have successfully launched a peer. | 271 | * Connect the peers as a clique. |
267 | * Once all peers have been launched, we connect all of them | ||
268 | * in a clique. | ||
269 | * | 272 | * |
270 | * @param p peer that was launched (redundant, kill ASAP) | 273 | * @param cls our `struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext` |
271 | * @param cls our `struct GNUNET_TRANSPORT_TESTING_InternalPeerContext *` | ||
272 | */ | 274 | */ |
273 | static void | 275 | static void |
274 | start_cb (struct GNUNET_TRANSPORT_TESTING_PeerContext *p, | 276 | do_connect (void *cls) |
275 | void *cls) | ||
276 | { | 277 | { |
277 | struct GNUNET_TRANSPORT_TESTING_InternalPeerContext *ipi = cls; | 278 | struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext *ccc = cls; |
278 | struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext *ccc = ipi->ccc; | ||
279 | |||
280 | ccc->started++; | ||
281 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
282 | "Peer %u (`%s') started\n", | ||
283 | p->no, | ||
284 | GNUNET_i2s (&p->id)); | ||
285 | if (ccc->started != ccc->num_peers) | ||
286 | return; | ||
287 | 279 | ||
280 | ccc->connect_task = NULL; | ||
288 | for (unsigned int i=0;i<ccc->num_peers;i++) | 281 | for (unsigned int i=0;i<ccc->num_peers;i++) |
289 | for (unsigned int j=i+1;j<ccc->num_peers;j++) | 282 | for (unsigned int j=(ccc->bi_directional ? 0 : i+1);j<ccc->num_peers;j++) |
290 | { | 283 | { |
291 | struct GNUNET_TRANSPORT_TESTING_ConnectRequestList *crl; | 284 | struct GNUNET_TRANSPORT_TESTING_ConnectRequestList *crl; |
292 | 285 | ||
286 | if (i == j) | ||
287 | continue; | ||
293 | crl = GNUNET_new (struct GNUNET_TRANSPORT_TESTING_ConnectRequestList); | 288 | crl = GNUNET_new (struct GNUNET_TRANSPORT_TESTING_ConnectRequestList); |
294 | GNUNET_CONTAINER_DLL_insert (ccc->crl_head, | 289 | GNUNET_CONTAINER_DLL_insert (ccc->crl_head, |
295 | ccc->crl_tail, | 290 | ccc->crl_tail, |
@@ -317,6 +312,44 @@ start_cb (struct GNUNET_TRANSPORT_TESTING_PeerContext *p, | |||
317 | 312 | ||
318 | 313 | ||
319 | /** | 314 | /** |
315 | * Function called once we have successfully launched a peer. | ||
316 | * Once all peers have been launched, we connect all of them | ||
317 | * in a clique. | ||
318 | * | ||
319 | * @param p peer that was launched (redundant, kill ASAP) | ||
320 | * @param cls our `struct GNUNET_TRANSPORT_TESTING_InternalPeerContext *` | ||
321 | */ | ||
322 | static void | ||
323 | start_cb (struct GNUNET_TRANSPORT_TESTING_PeerContext *p, | ||
324 | void *cls) | ||
325 | { | ||
326 | struct GNUNET_TRANSPORT_TESTING_InternalPeerContext *ipi = cls; | ||
327 | struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext *ccc = ipi->ccc; | ||
328 | |||
329 | ccc->started++; | ||
330 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
331 | "Peer %u (`%s') started\n", | ||
332 | p->no, | ||
333 | GNUNET_i2s (&p->id)); | ||
334 | if (ccc->started != ccc->num_peers) | ||
335 | return; | ||
336 | if (NULL != ccc->pre_connect_task) | ||
337 | { | ||
338 | /* Run the custom per-connect job, then give it a second to | ||
339 | go into effect before we continue connecting peers. */ | ||
340 | ccc->pre_connect_task (ccc->pre_connect_task_cls); | ||
341 | ccc->connect_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, | ||
342 | &do_connect, | ||
343 | ccc); | ||
344 | } | ||
345 | else | ||
346 | { | ||
347 | do_connect (ccc); | ||
348 | } | ||
349 | } | ||
350 | |||
351 | |||
352 | /** | ||
320 | * Function run from #GNUNET_TRANSPORT_TESTING_connect_check | 353 | * Function run from #GNUNET_TRANSPORT_TESTING_connect_check |
321 | * once the scheduler is up. Should launch the peers and | 354 | * once the scheduler is up. Should launch the peers and |
322 | * then in the continuations try to connect them. | 355 | * then in the continuations try to connect them. |