aboutsummaryrefslogtreecommitdiff
path: root/src/multicast/test_multicast_multipeer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/multicast/test_multicast_multipeer.c')
-rw-r--r--src/multicast/test_multicast_multipeer.c312
1 files changed, 159 insertions, 153 deletions
diff --git a/src/multicast/test_multicast_multipeer.c b/src/multicast/test_multicast_multipeer.c
index 5f4493993..7df1a8213 100644
--- a/src/multicast/test_multicast_multipeer.c
+++ b/src/multicast/test_multicast_multipeer.c
@@ -35,9 +35,10 @@
35 35
36#define PEERS_REQUESTED 12 36#define PEERS_REQUESTED 12
37 37
38struct multicast_peer 38struct MulticastPeerContext
39{ 39{
40 int peer; /* peer number */ 40 int peer; /* peer number */
41 struct GNUNET_CRYPTO_EcdsaPrivateKey *key;
41 const struct GNUNET_PeerIdentity *id; 42 const struct GNUNET_PeerIdentity *id;
42 struct GNUNET_TESTBED_Operation *op; /* not yet in use */ 43 struct GNUNET_TESTBED_Operation *op; /* not yet in use */
43 struct GNUNET_TESTBED_Operation *pi_op; /* not yet in use */ 44 struct GNUNET_TESTBED_Operation *pi_op; /* not yet in use */
@@ -61,7 +62,7 @@ static void service_connect (void *cls,
61 void *ca_result, 62 void *ca_result,
62 const char *emsg); 63 const char *emsg);
63 64
64static struct multicast_peer **mc_peers; 65static struct MulticastPeerContext **multicast_peers;
65static struct GNUNET_TESTBED_Peer **peers; 66static struct GNUNET_TESTBED_Peer **peers;
66 67
67// FIXME: refactor 68// FIXME: refactor
@@ -69,18 +70,14 @@ static struct GNUNET_TESTBED_Operation *op[PEERS_REQUESTED];
69static struct GNUNET_TESTBED_Operation *pi_op[PEERS_REQUESTED]; 70static struct GNUNET_TESTBED_Operation *pi_op[PEERS_REQUESTED];
70 71
71static struct GNUNET_MULTICAST_Origin *origin; 72static struct GNUNET_MULTICAST_Origin *origin;
72static struct GNUNET_MULTICAST_Member *member[PEERS_REQUESTED]; /* first element always empty */ 73static struct GNUNET_MULTICAST_Member *members[PEERS_REQUESTED]; /* first element always empty */
73 74
74static struct GNUNET_SCHEDULER_Task *timeout_tid; 75static struct GNUNET_SCHEDULER_Task *timeout_tid;
75 76
76static struct GNUNET_CRYPTO_EddsaPrivateKey group_key; 77//static struct GNUNET_CRYPTO_EddsaPrivateKey *group_key;
77static struct GNUNET_CRYPTO_EddsaPublicKey group_pub_key; 78static struct GNUNET_CRYPTO_EddsaPublicKey group_pub_key;
78static struct GNUNET_HashCode group_pub_key_hash; 79static struct GNUNET_HashCode group_pub_key_hash;
79 80
80static struct GNUNET_CRYPTO_EcdsaPrivateKey *member_key[PEERS_REQUESTED];
81static struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key[PEERS_REQUESTED];
82
83
84/** 81/**
85 * Global result for testcase. 82 * Global result for testcase.
86 */ 83 */
@@ -93,6 +90,8 @@ static int result;
93static void 90static void
94shutdown_task (void *cls) 91shutdown_task (void *cls)
95{ 92{
93 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
94 "shutdown_task!\n");
96 for (int i=0;i<PEERS_REQUESTED;i++) 95 for (int i=0;i<PEERS_REQUESTED;i++)
97 { 96 {
98 if (NULL != op[i]) 97 if (NULL != op[i])
@@ -107,14 +106,16 @@ shutdown_task (void *cls)
107 } 106 }
108 } 107 }
109 108
110 if (NULL != mc_peers) 109 if (NULL != multicast_peers)
111 { 110 {
112 for (int i=0; i < PEERS_REQUESTED; i++) 111 for (int i=0; i < PEERS_REQUESTED; i++)
113 { 112 {
114 GNUNET_free (mc_peers[i]); 113 GNUNET_free (multicast_peers[i]->key);
115 mc_peers[i] = NULL; 114 GNUNET_free (multicast_peers[i]);
115 multicast_peers[i] = NULL;
116 } 116 }
117 GNUNET_free (mc_peers); 117 GNUNET_free (multicast_peers);
118 multicast_peers = NULL;
118 } 119 }
119 120
120 if (NULL != timeout_tid) 121 if (NULL != timeout_tid)
@@ -141,11 +142,11 @@ member_join_request (void *cls,
141 const struct GNUNET_MessageHeader *join_msg, 142 const struct GNUNET_MessageHeader *join_msg,
142 struct GNUNET_MULTICAST_JoinHandle *jh) 143 struct GNUNET_MULTICAST_JoinHandle *jh)
143{ 144{
144 struct multicast_peer *mc_peer = (struct multicast_peer*)cls; 145 struct MulticastPeerContext *mc_peer = (struct MulticastPeerContext*)cls;
145 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 146 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
146 "Peer #%u (%s) sent a join request.\n", 147 "Peer #%u (%s) sent a join request.\n",
147 mc_peer->peer, 148 mc_peer->peer,
148 GNUNET_i2s (mc_peers[mc_peer->peer]->id)); 149 GNUNET_i2s (multicast_peers[mc_peer->peer]->id));
149} 150}
150 151
151 152
@@ -154,7 +155,7 @@ notify (void *cls,
154 size_t *data_size, 155 size_t *data_size,
155 void *data) 156 void *data)
156{ 157{
157 struct multicast_peer *mc_peer = (struct multicast_peer*)cls; 158 struct MulticastPeerContext *mc_peer = (struct MulticastPeerContext*)cls;
158 159
159 struct pingpong_msg *pp_msg = GNUNET_new (struct pingpong_msg); 160 struct pingpong_msg *pp_msg = GNUNET_new (struct pingpong_msg);
160 pp_msg->peer = mc_peer->peer; 161 pp_msg->peer = mc_peer->peer;
@@ -178,18 +179,18 @@ member_join_decision (void *cls,
178 const struct GNUNET_PeerIdentity *relays, 179 const struct GNUNET_PeerIdentity *relays,
179 const struct GNUNET_MessageHeader *join_msg) 180 const struct GNUNET_MessageHeader *join_msg)
180{ 181{
181 struct multicast_peer *mc_peer = (struct multicast_peer*)cls; 182 struct MulticastPeerContext *mc_peer = (struct MulticastPeerContext*)cls;
182 struct GNUNET_MULTICAST_MemberTransmitHandle *req; 183 struct GNUNET_MULTICAST_MemberTransmitHandle *req;
183 184
184 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 185 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
185 "Peer #%u (%s) received a decision from origin: %s\n", 186 "Peer #%u (%s) received a decision from origin: %s\n",
186 mc_peer->peer, 187 mc_peer->peer,
187 GNUNET_i2s (mc_peers[mc_peer->peer]->id), 188 GNUNET_i2s (multicast_peers[mc_peer->peer]->id),
188 (GNUNET_YES == is_admitted)?"accepted":"rejected"); 189 (GNUNET_YES == is_admitted)?"accepted":"rejected");
189 190
190 if (GNUNET_YES == is_admitted) 191 if (GNUNET_YES == is_admitted)
191 { 192 {
192 req = GNUNET_MULTICAST_member_to_origin (member[mc_peer->peer], 193 req = GNUNET_MULTICAST_member_to_origin (members[mc_peer->peer],
193 0, 194 0,
194 notify, 195 notify,
195 cls); 196 cls);
@@ -215,10 +216,32 @@ member_replay_msg ()
215 216
216 217
217static void 218static void
219origin_disconnected_cb (void *cls)
220{
221 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
222 "Origin disconnected. Shutting down.\n");
223 result = GNUNET_YES;
224 GNUNET_SCHEDULER_shutdown ();
225}
226
227
228static void
229member_disconnected_cb (void *cls)
230{
231 for (int i = 1; i < PEERS_REQUESTED; ++i)
232 if (GNUNET_NO == multicast_peers[i]->test_ok)
233 return;
234 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
235 "All member disconnected. Stopping origin.\n");
236 GNUNET_MULTICAST_origin_stop (origin, origin_disconnected_cb, cls);
237}
238
239
240static void
218member_message (void *cls, 241member_message (void *cls,
219 const struct GNUNET_MULTICAST_MessageHeader *msg) 242 const struct GNUNET_MULTICAST_MessageHeader *msg)
220{ 243{
221 struct multicast_peer *mc_peer = (struct multicast_peer*)cls; 244 struct MulticastPeerContext *mc_peer = (struct MulticastPeerContext*)cls;
222 struct pingpong_msg *pp_msg = (struct pingpong_msg*) &(msg[1]); 245 struct pingpong_msg *pp_msg = (struct pingpong_msg*) &(msg[1]);
223 246
224 if (PONG == pp_msg->msg && mc_peer->peer == pp_msg->peer) 247 if (PONG == pp_msg->msg && mc_peer->peer == pp_msg->peer)
@@ -226,18 +249,15 @@ member_message (void *cls,
226 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 249 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
227 "peer #%i (%s) receives a pong\n", 250 "peer #%i (%s) receives a pong\n",
228 mc_peer->peer, 251 mc_peer->peer,
229 GNUNET_i2s (mc_peers[mc_peer->peer]->id)); 252 GNUNET_i2s (multicast_peers[mc_peer->peer]->id));
230
231 mc_peer->test_ok = GNUNET_OK; 253 mc_peer->test_ok = GNUNET_OK;
232 } 254 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
233 255 "peer #%u (%s) parting from multicast group\n",
234 // Test for completeness of received PONGs 256 mc_peer->peer,
235 for (int i=1; i<PEERS_REQUESTED; i++) 257 GNUNET_i2s (multicast_peers[mc_peer->peer]->id));
236 if (GNUNET_NO == mc_peers[i]->test_ok)
237 return;
238 258
239 result = GNUNET_YES; 259 GNUNET_MULTICAST_member_part (members[mc_peer->peer], member_disconnected_cb, cls);
240 GNUNET_SCHEDULER_shutdown(); 260 }
241} 261}
242 262
243 263
@@ -349,81 +369,53 @@ origin_message (void *cls,
349 369
350 370
351static void 371static void
352multicast_da (void *cls, 372multicast_disconnect (void *cls,
353 void *op_result) 373 void *op_result)
354{ 374{
355 struct multicast_peer *mc_peer = (struct multicast_peer*)cls;
356 375
357 if (0 == mc_peer->peer)
358 {
359 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
360 "Origin closes multicast group\n");
361
362 GNUNET_MULTICAST_origin_stop (origin, NULL, cls);
363 }
364 else
365 {
366 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
367 "peer #%u (%s) parting from multicast group\n",
368 mc_peer->peer,
369 GNUNET_i2s (mc_peers[mc_peer->peer]->id));
370
371 GNUNET_MULTICAST_member_part (member[mc_peer->peer], NULL, cls);
372 }
373} 376}
374 377
375 378
376static void * 379static void *
377multicast_ca (void *cls, 380multicast_connect (void *cls,
378 const struct GNUNET_CONFIGURATION_Handle *cfg) 381 const struct GNUNET_CONFIGURATION_Handle *cfg)
379{ 382{
380 struct multicast_peer *mc_peer = (struct multicast_peer*)cls; 383 struct MulticastPeerContext *multicast_peer = cls;
381 struct GNUNET_MessageHeader *join_msg; 384 struct GNUNET_MessageHeader *join_msg;
382 char data[64]; 385 char data[64];
383 386
384 if (0 == mc_peer->peer) 387 multicast_peer->key = GNUNET_CRYPTO_ecdsa_key_create ();
388 if (0 == multicast_peer->peer)
385 { 389 {
386 struct GNUNET_CRYPTO_EddsaPrivateKey *key = GNUNET_CRYPTO_eddsa_key_create (); 390 GNUNET_CRYPTO_eddsa_key_get_public (multicast_peer->key, &group_pub_key);
387 GNUNET_CRYPTO_eddsa_key_get_public (key, &group_pub_key);
388 GNUNET_CRYPTO_hash (&group_pub_key, sizeof (group_pub_key), &group_pub_key_hash); 391 GNUNET_CRYPTO_hash (&group_pub_key, sizeof (group_pub_key), &group_pub_key_hash);
389
390 group_key = *key;
391
392 origin = GNUNET_MULTICAST_origin_start (cfg, 392 origin = GNUNET_MULTICAST_origin_start (cfg,
393 &group_key, 393 multicast_peer->key,
394 0, 394 0,
395 origin_join_request, 395 origin_join_request,
396 origin_replay_frag, 396 origin_replay_frag,
397 origin_replay_msg, 397 origin_replay_msg,
398 origin_request, 398 origin_request,
399 origin_message, 399 origin_message,
400 cls); 400 cls);
401 401 if (NULL == origin)
402 if (NULL == origin) { 402 {
403 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 403 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
404 "Peer #%u could not create a multicast group", 404 "Peer #%u could not create a multicast group",
405 mc_peer->peer); 405 multicast_peer->peer);
406 return NULL; 406 return NULL;
407 } 407 }
408
409 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 408 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
410 "Peer #%u connected as origin to group %s\n", 409 "Peer #%u connected as origin to group %s\n",
411 mc_peer->peer, 410 multicast_peer->peer,
412 GNUNET_h2s (&group_pub_key_hash)); 411 GNUNET_h2s (&group_pub_key_hash));
413
414 return origin; 412 return origin;
415 } 413 }
416 else 414 else
417 { 415 {
418 // Get members keys
419 member_pub_key[mc_peer->peer] = GNUNET_new (struct GNUNET_CRYPTO_EcdsaPublicKey);
420 member_key[mc_peer->peer] = GNUNET_CRYPTO_ecdsa_key_create ();
421 GNUNET_CRYPTO_ecdsa_key_get_public (member_key[mc_peer->peer],
422 member_pub_key[mc_peer->peer]);
423
424 sprintf(data, "Hi, I am peer #%u (%s). Can I enter?", 416 sprintf(data, "Hi, I am peer #%u (%s). Can I enter?",
425 mc_peer->peer, 417 multicast_peer->peer,
426 GNUNET_i2s (mc_peers[mc_peer->peer]->id)); 418 GNUNET_i2s (multicast_peers[multicast_peer->peer]->id));
427 uint8_t data_size = strlen (data) + 1; 419 uint8_t data_size = strlen (data) + 1;
428 join_msg = GNUNET_malloc (sizeof (join_msg) + data_size); 420 join_msg = GNUNET_malloc (sizeof (join_msg) + data_size);
429 join_msg->size = htons (sizeof (join_msg) + data_size); 421 join_msg->size = htons (sizeof (join_msg) + data_size);
@@ -432,24 +424,25 @@ multicast_ca (void *cls,
432 424
433 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 425 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
434 "Peer #%u (%s) tries to join multicast group %s\n", 426 "Peer #%u (%s) tries to join multicast group %s\n",
435 mc_peer->peer, 427 multicast_peer->peer,
436 GNUNET_i2s (mc_peers[mc_peer->peer]->id), 428 GNUNET_i2s (multicast_peers[multicast_peer->peer]->id),
437 GNUNET_h2s (&group_pub_key_hash)); 429 GNUNET_h2s (&group_pub_key_hash));
438 430
439 member[mc_peer->peer] = GNUNET_MULTICAST_member_join (cfg, 431 members[multicast_peer->peer] =
440 &group_pub_key, 432 GNUNET_MULTICAST_member_join (cfg,
441 member_key[mc_peer->peer], 433 &group_pub_key,
442 mc_peers[0]->id, 434 multicast_peer->key,
443 0, 435 multicast_peers[0]->id,
444 NULL, 436 0,
445 join_msg, /* join message */ 437 NULL,
446 member_join_request, 438 join_msg, /* join message */
447 member_join_decision, 439 member_join_request,
448 member_replay_frag, 440 member_join_decision,
449 member_replay_msg, 441 member_replay_frag,
450 member_message, 442 member_replay_msg,
451 cls); 443 member_message,
452 return member[mc_peer->peer]; 444 cls);
445 return members[multicast_peer->peer];
453 } 446 }
454} 447}
455 448
@@ -460,7 +453,7 @@ peer_information_cb (void *cls,
460 const struct GNUNET_TESTBED_PeerInformation *pinfo, 453 const struct GNUNET_TESTBED_PeerInformation *pinfo,
461 const char *emsg) 454 const char *emsg)
462{ 455{
463 struct multicast_peer *mc_peer = (struct multicast_peer*)cls; 456 struct MulticastPeerContext *mc_peer = (struct MulticastPeerContext*)cls;
464 457
465 if (NULL == pinfo) { 458 if (NULL == pinfo) {
466 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "got no peer information\n"); 459 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "got no peer information\n");
@@ -468,7 +461,7 @@ peer_information_cb (void *cls,
468 GNUNET_SCHEDULER_shutdown (); 461 GNUNET_SCHEDULER_shutdown ();
469 } 462 }
470 463
471 mc_peers[mc_peer->peer]->id = pinfo->result.id; 464 multicast_peers[mc_peer->peer]->id = pinfo->result.id;
472 465
473 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 466 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
474 "Got peer information of %s (%s)\n", 467 "Got peer information of %s (%s)\n",
@@ -478,22 +471,28 @@ peer_information_cb (void *cls,
478 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 471 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
479 "Create peer #%u (%s)\n", 472 "Create peer #%u (%s)\n",
480 mc_peer->peer, 473 mc_peer->peer,
481 GNUNET_i2s (mc_peers[mc_peer->peer]->id)); 474 GNUNET_i2s (multicast_peers[mc_peer->peer]->id));
482 475
483 if (0 != mc_peer->peer) 476 if (0 != mc_peer->peer)
484 { 477 {
485 /* connect to multicast service of members */ 478 /* connect to multicast service of members */
486 op[mc_peer->peer] = GNUNET_TESTBED_service_connect (NULL, /* Closure for operation */ 479 op[mc_peer->peer] =
487 peers[mc_peer->peer], /* The peer whose service to connect to */ 480 GNUNET_TESTBED_service_connect (/* Closure for operation */
488 "multicast", /* The name of the service */ 481 NULL,
489 service_connect, /* callback to call after a handle to service 482 /* The peer whose service to connect to */
490 is opened */ 483 peers[mc_peer->peer],
491 cls, /* closure for the above callback */ 484 /* The name of the service */
492 multicast_ca, /* callback to call with peer's configuration; 485 "multicast",
493 this should open the needed service connection */ 486 /* called after a handle to service is opened */
494 multicast_da, /* callback to be called when closing the 487 service_connect,
495 opened service connection */ 488 /* closure for the above callback */
496 cls); /* closure for the above two callbacks */ 489 cls,
490 /* called when opening the service connection */
491 multicast_connect,
492 /* called when closing the service connection */
493 multicast_disconnect,
494 /* closure for the above two callbacks */
495 cls);
497 } 496 }
498} 497}
499 498
@@ -504,14 +503,14 @@ service_connect (void *cls,
504 void *ca_result, 503 void *ca_result,
505 const char *emsg) 504 const char *emsg)
506{ 505{
507 struct multicast_peer *mc_peer = (struct multicast_peer*)cls; 506 struct MulticastPeerContext *mc_peer = (struct MulticastPeerContext*)cls;
508 507
509 if (NULL == ca_result) 508 if (NULL == ca_result)
510 { 509 {
511 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 510 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
512 "Connection adapter not created for peer #%u (%s)\n", 511 "Connection adapter not created for peer #%u (%s)\n",
513 mc_peer->peer, 512 mc_peer->peer,
514 GNUNET_i2s (mc_peers[mc_peer->peer]->id)); 513 GNUNET_i2s (multicast_peers[mc_peer->peer]->id));
515 514
516 result = GNUNET_SYSERR; 515 result = GNUNET_SYSERR;
517 GNUNET_SCHEDULER_shutdown(); 516 GNUNET_SCHEDULER_shutdown();
@@ -525,7 +524,7 @@ service_connect (void *cls,
525 pi_op[i] = GNUNET_TESTBED_peer_get_information (peers[i], 524 pi_op[i] = GNUNET_TESTBED_peer_get_information (peers[i],
526 GNUNET_TESTBED_PIT_IDENTITY, 525 GNUNET_TESTBED_PIT_IDENTITY,
527 peer_information_cb, 526 peer_information_cb,
528 mc_peers[i]); 527 multicast_peers[i]);
529 } 528 }
530 } 529 }
531} 530}
@@ -549,50 +548,51 @@ service_connect (void *cls,
549 * @param links_failed number of links testbed was unable to establish 548 * @param links_failed number of links testbed was unable to establish
550 */ static void 549 */ static void
551testbed_master (void *cls, 550testbed_master (void *cls,
552 struct GNUNET_TESTBED_RunHandle *h, 551 struct GNUNET_TESTBED_RunHandle *h,
553 unsigned int num_peers, 552 unsigned int num_peers,
554 struct GNUNET_TESTBED_Peer **p, 553 struct GNUNET_TESTBED_Peer **p,
555 unsigned int links_succeeded, 554 unsigned int links_succeeded,
556 unsigned int links_failed) 555 unsigned int links_failed)
557{ 556{
558 /* Testbed is ready with peers running and connected in a pre-defined overlay 557 /* Testbed is ready with peers running and connected in a pre-defined overlay
559 topology (FIXME) */ 558 topology (FIXME) */
560
561 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
562 "Connected to testbed_master()\n");
563
564 peers = p; 559 peers = p;
565 560 multicast_peers = GNUNET_new_array (PEERS_REQUESTED, struct MulticastPeerContext*);
566 mc_peers = GNUNET_new_array (PEERS_REQUESTED, struct multicast_peer*);
567 561
568 // Create test contexts for members 562 // Create test contexts for members
569 for (int i = 0; i<PEERS_REQUESTED; i++) 563 for (int i = 0; i<PEERS_REQUESTED; i++)
570 { 564 {
571 mc_peers[i] = GNUNET_new (struct multicast_peer); 565 multicast_peers[i] = GNUNET_new (struct MulticastPeerContext);
572 mc_peers[i]->peer = i; 566 multicast_peers[i]->peer = i;
573 mc_peers[i]->test_ok = GNUNET_NO; 567 multicast_peers[i]->test_ok = GNUNET_NO;
574 } 568 }
575
576 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 569 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
577 "Create origin peer\n"); 570 "Create origin peer\n");
578 571 op[0] =
579 op[0] = GNUNET_TESTBED_service_connect (NULL, /* Closure for operation */ 572 GNUNET_TESTBED_service_connect (/* Closure for operation */
580 peers[0], /* The peer whose service to connect to */ 573 NULL,
581 "multicast", /* The name of the service */ 574 /* The peer whose service to connect to */
582 service_connect, /* callback to call after a handle to service 575 peers[0],
583 is opened */ 576 /* The name of the service */
584 mc_peers[0], /* closure for the above callback */ 577 "multicast",
585 multicast_ca, /* callback to call with peer's configuration; 578 /* called after a handle to service is opened */
586 this should open the needed service connection */ 579 service_connect,
587 multicast_da, /* callback to be called when closing the 580 /* closure for the above callback */
588 opened service connection */ 581 multicast_peers[0],
589 mc_peers[0]); /* closure for the above two callbacks */ 582 /* called when opening the service connection */
590 583 multicast_connect,
591 GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); /* Schedule a new task on shutdown */ 584 /* called when closing the service connection */
592 585 multicast_disconnect,
586 /* closure for the above two callbacks */
587 multicast_peers[0]);
588 /* Schedule a new task on shutdown */
589 GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
593 /* Schedule the shutdown task with a delay of a few Seconds */ 590 /* Schedule the shutdown task with a delay of a few Seconds */
594 timeout_tid = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 400), 591 timeout_tid =
595 &timeout_task, NULL); 592 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
593 (GNUNET_TIME_UNIT_SECONDS, 400),
594 &timeout_task,
595 NULL);
596} 596}
597 597
598 598
@@ -616,15 +616,21 @@ main (int argc, char *argv[])
616 } 616 }
617 617
618 result = GNUNET_SYSERR; 618 result = GNUNET_SYSERR;
619 ret = GNUNET_TESTBED_test_run 619 ret =
620 ("test-multicast-multipeer", /* test case name */ 620 GNUNET_TESTBED_test_run ("test-multicast-multipeer",
621 config_file, /* template configuration */ 621 config_file,
622 PEERS_REQUESTED, /* number of peers to start */ 622 /* number of peers to start */
623 0LL, /* Event mask - set to 0 for no event notifications */ 623 PEERS_REQUESTED,
624 NULL, /* Controller event callback */ 624 /* Event mask - set to 0 for no event notifications */
625 NULL, /* Closure for controller event callback */ 625 0LL,
626 testbed_master, /* continuation callback to be called when testbed setup is complete */ 626 /* Controller event callback */
627 NULL); /* Closure for the test_master callback */ 627 NULL,
628 /* Closure for controller event callback */
629 NULL,
630 /* called when testbed setup is complete */
631 testbed_master,
632 /* Closure for the test_master callback */
633 NULL);
628 if ( (GNUNET_OK != ret) || (GNUNET_OK != result) ) 634 if ( (GNUNET_OK != ret) || (GNUNET_OK != result) )
629 return 1; 635 return 1;
630 return 0; 636 return 0;