aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2014-01-16 09:14:05 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2014-01-16 09:14:05 +0000
commit23a5ebdcbcffd87533bccd48efb99942eb60cdd7 (patch)
treebd1a5538f70fa818f6e54ddffae767038a591475 /src
parent202940f94609fe47c450455b98f3d410d7e2422d (diff)
downloadgnunet-23a5ebdcbcffd87533bccd48efb99942eb60cdd7.tar.gz
gnunet-23a5ebdcbcffd87533bccd48efb99942eb60cdd7.zip
printing validation information with cli
Diffstat (limited to 'src')
-rw-r--r--src/transport/gnunet-transport.c197
-rw-r--r--src/transport/transport_api_monitoring.c157
2 files changed, 268 insertions, 86 deletions
diff --git a/src/transport/gnunet-transport.c b/src/transport/gnunet-transport.c
index c8408b757..8311c1d72 100644
--- a/src/transport/gnunet-transport.c
+++ b/src/transport/gnunet-transport.c
@@ -316,13 +316,13 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
316 } 316 }
317} 317}
318 318
319static struct ResolutionContext *rc_head; 319static struct PeerResolutionContext *rc_head;
320static struct ResolutionContext *rc_tail; 320static struct PeerResolutionContext *rc_tail;
321 321
322struct ResolutionContext 322struct PeerResolutionContext
323{ 323{
324 struct ResolutionContext *next; 324 struct PeerResolutionContext *next;
325 struct ResolutionContext *prev; 325 struct PeerResolutionContext *prev;
326 struct GNUNET_PeerIdentity id; 326 struct GNUNET_PeerIdentity id;
327 struct GNUNET_HELLO_Address *addrcp; 327 struct GNUNET_HELLO_Address *addrcp;
328 struct GNUNET_TRANSPORT_AddressToStringContext *asc; 328 struct GNUNET_TRANSPORT_AddressToStringContext *asc;
@@ -332,11 +332,32 @@ struct ResolutionContext
332 int printed; 332 int printed;
333}; 333};
334 334
335static struct ValidationResolutionContext *vc_head;
336static struct ValidationResolutionContext *vc_tail;
337
338struct ValidationResolutionContext
339{
340 struct ValidationResolutionContext *next;
341 struct ValidationResolutionContext *prev;
342
343 struct GNUNET_PeerIdentity id;
344 struct GNUNET_HELLO_Address *addrcp;
345 struct GNUNET_TIME_Absolute last_validation;
346 struct GNUNET_TIME_Absolute valid_until;
347 struct GNUNET_TIME_Absolute next_validation;
348 enum GNUNET_TRANSPORT_ValidationState state;
349
350 struct GNUNET_TRANSPORT_AddressToStringContext *asc;
351
352 char *transport;
353 int printed;
354};
355
335static void 356static void
336operation_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 357operation_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
337{ 358{
338 struct ResolutionContext *cur; 359 struct PeerResolutionContext *cur;
339 struct ResolutionContext *next; 360 struct PeerResolutionContext *next;
340 op_timeout = GNUNET_SCHEDULER_NO_TASK; 361 op_timeout = GNUNET_SCHEDULER_NO_TASK;
341 if ((try_connect) || (benchmark_send) || (benchmark_receive)) 362 if ((try_connect) || (benchmark_send) || (benchmark_receive))
342 { 363 {
@@ -442,6 +463,126 @@ fail_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
442 display_test_result (tstc, GNUNET_NO); 463 display_test_result (tstc, GNUNET_NO);
443} 464}
444 465
466
467static void
468resolve_validation_address (const struct GNUNET_PeerIdentity *id,
469 const struct GNUNET_HELLO_Address *address, int numeric,
470 struct GNUNET_TIME_Absolute last_validation,
471 struct GNUNET_TIME_Absolute valid_until,
472 struct GNUNET_TIME_Absolute next_validation,
473 enum GNUNET_TRANSPORT_ValidationState state);
474
475static void
476process_validation_string (void *cls, const char *address)
477{
478 struct ValidationResolutionContext *vc = cls;
479 char *s_valid;
480 char *s_last;
481 char *s_next;
482
483 if (address != NULL )
484 {
485 if (GNUNET_TIME_UNIT_ZERO_ABS.abs_value_us == vc->valid_until.abs_value_us)
486 s_valid = GNUNET_strdup("never");
487 else
488 s_valid = GNUNET_strdup(GNUNET_STRINGS_absolute_time_to_string (vc->valid_until));
489
490 if (GNUNET_TIME_UNIT_ZERO_ABS.abs_value_us == vc->last_validation.abs_value_us)
491 s_last = GNUNET_strdup("never");
492 else
493 s_last = GNUNET_strdup(GNUNET_STRINGS_absolute_time_to_string (vc->last_validation));
494
495 if (GNUNET_TIME_UNIT_ZERO_ABS.abs_value_us == vc->next_validation.abs_value_us)
496 s_next = GNUNET_strdup("never");
497 else
498 s_next = GNUNET_strdup(GNUNET_STRINGS_absolute_time_to_string (vc->next_validation));
499
500 FPRINTF (stdout,
501 _("Peer `%s' %s `%s'\n\t%s%s\n\t%s%s\n\t%s%s\n"),
502 GNUNET_i2s (&vc->id), address, GNUNET_TRANSPORT_vs2s (vc->state),
503 "Valid until : ", s_valid,
504 "Last validation: ",s_last,
505 "Next validation: ", s_next);
506 GNUNET_free (s_valid);
507 GNUNET_free (s_last);
508 GNUNET_free (s_next);
509 vc->printed = GNUNET_YES;
510 }
511 else
512 {
513 /* done */
514 GNUNET_assert(address_resolutions > 0);
515 address_resolutions--;
516 if (GNUNET_NO == vc->printed)
517 {
518 if (numeric == GNUNET_NO)
519 {
520 /* Failed to resolve address, try numeric lookup */
521 resolve_validation_address (&vc->id, vc->addrcp, GNUNET_NO,
522 vc->last_validation, vc->valid_until, vc->next_validation,
523 vc->state);
524 }
525 else
526 {
527 FPRINTF (stdout, _("Peer `%s' %s `%s' \n"),
528 GNUNET_i2s (&vc->id), "<unable to resolve address>",
529 GNUNET_TRANSPORT_vs2s (vc->state));
530 }
531 }
532 GNUNET_free (vc->transport);
533 GNUNET_free (vc->addrcp);
534 GNUNET_CONTAINER_DLL_remove(vc_head, vc_tail, vc);
535 GNUNET_free(vc);
536 if ((0 == address_resolutions) && (iterate_validation))
537 {
538 if (GNUNET_SCHEDULER_NO_TASK != end)
539 {
540 GNUNET_SCHEDULER_cancel (end);
541 end = GNUNET_SCHEDULER_NO_TASK;
542 }
543 if (GNUNET_SCHEDULER_NO_TASK != op_timeout)
544 {
545 GNUNET_SCHEDULER_cancel (op_timeout);
546 op_timeout = GNUNET_SCHEDULER_NO_TASK;
547 }
548 ret = 0;
549 end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL );
550 }
551 }
552}
553
554
555
556static void
557resolve_validation_address (const struct GNUNET_PeerIdentity *id,
558 const struct GNUNET_HELLO_Address *address, int numeric,
559 struct GNUNET_TIME_Absolute last_validation,
560 struct GNUNET_TIME_Absolute valid_until,
561 struct GNUNET_TIME_Absolute next_validation,
562 enum GNUNET_TRANSPORT_ValidationState state)
563{
564 struct ValidationResolutionContext *vc;
565
566 vc = GNUNET_new (struct ValidationResolutionContext);
567 GNUNET_assert(NULL != vc);
568 GNUNET_CONTAINER_DLL_insert(vc_head, vc_tail, vc);
569 address_resolutions++;
570
571 vc->id = (*id);
572 vc->transport = GNUNET_strdup(address->transport_name);
573 vc->addrcp = GNUNET_HELLO_address_copy (address);
574 vc->printed = GNUNET_NO;
575 vc->state = state;
576 vc->last_validation = last_validation;
577 vc->valid_until = valid_until;
578 vc->next_validation = next_validation;
579
580 /* Resolve address to string */
581 vc->asc = GNUNET_TRANSPORT_address_to_string (cfg, address, numeric,
582 RESOLUTION_TIMEOUT, &process_validation_string, vc);
583}
584
585
445void process_validation_cb (void *cls, 586void process_validation_cb (void *cls,
446 const struct GNUNET_PeerIdentity *peer, 587 const struct GNUNET_PeerIdentity *peer,
447 const struct GNUNET_HELLO_Address *address, 588 const struct GNUNET_HELLO_Address *address,
@@ -450,7 +591,27 @@ void process_validation_cb (void *cls,
450 struct GNUNET_TIME_Absolute next_validation, 591 struct GNUNET_TIME_Absolute next_validation,
451 enum GNUNET_TRANSPORT_ValidationState state) 592 enum GNUNET_TRANSPORT_ValidationState state)
452{ 593{
453 GNUNET_break (0); 594 if ((NULL == peer) && (NULL == address))
595 {
596 /* done */
597 vic = NULL;
598 if (GNUNET_SCHEDULER_NO_TASK != end)
599 GNUNET_SCHEDULER_cancel (end);
600 end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL );
601 return;
602 }
603 if ((NULL == peer) || (NULL == address))
604 {
605 /* invalid response */
606 vic = NULL;
607 if (GNUNET_SCHEDULER_NO_TASK != end)
608 GNUNET_SCHEDULER_cancel (end);
609 end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL );
610 return;
611 }
612 resolve_validation_address (peer, address,
613 numeric, last_validation,
614 valid_until, next_validation, state);
454} 615}
455 616
456/** 617/**
@@ -701,7 +862,7 @@ notify_receive (void *cls, const struct GNUNET_PeerIdentity *peer,
701} 862}
702 863
703static void 864static void
704resolve_address (const struct GNUNET_PeerIdentity *id, 865resolve_peer_address (const struct GNUNET_PeerIdentity *id,
705 const struct GNUNET_HELLO_Address *address, int numeric, 866 const struct GNUNET_HELLO_Address *address, int numeric,
706 enum GNUNET_TRANSPORT_PeerState state, 867 enum GNUNET_TRANSPORT_PeerState state,
707 struct GNUNET_TIME_Absolute state_timeout); 868 struct GNUNET_TIME_Absolute state_timeout);
@@ -729,9 +890,9 @@ print_info (const struct GNUNET_PeerIdentity *id, const char *transport,
729} 890}
730 891
731static void 892static void
732process_string (void *cls, const char *address) 893process_peer_string (void *cls, const char *address)
733{ 894{
734 struct ResolutionContext *rc = cls; 895 struct PeerResolutionContext *rc = cls;
735 896
736 if (address != NULL ) 897 if (address != NULL )
737 { 898 {
@@ -748,7 +909,7 @@ process_string (void *cls, const char *address)
748 if (numeric == GNUNET_NO) 909 if (numeric == GNUNET_NO)
749 { 910 {
750 /* Failed to resolve address, try numeric lookup */ 911 /* Failed to resolve address, try numeric lookup */
751 resolve_address (&rc->id, rc->addrcp, GNUNET_YES, 912 resolve_peer_address (&rc->id, rc->addrcp, GNUNET_YES,
752 rc->state, rc->state_timeout); 913 rc->state, rc->state_timeout);
753 } 914 }
754 else 915 else
@@ -780,14 +941,14 @@ process_string (void *cls, const char *address)
780} 941}
781 942
782static void 943static void
783resolve_address (const struct GNUNET_PeerIdentity *id, 944resolve_peer_address (const struct GNUNET_PeerIdentity *id,
784 const struct GNUNET_HELLO_Address *address, int numeric, 945 const struct GNUNET_HELLO_Address *address, int numeric,
785 enum GNUNET_TRANSPORT_PeerState state, 946 enum GNUNET_TRANSPORT_PeerState state,
786 struct GNUNET_TIME_Absolute state_timeout) 947 struct GNUNET_TIME_Absolute state_timeout)
787{ 948{
788 struct ResolutionContext *rc; 949 struct PeerResolutionContext *rc;
789 950
790 rc = GNUNET_new (struct ResolutionContext); 951 rc = GNUNET_new (struct PeerResolutionContext);
791 GNUNET_assert(NULL != rc); 952 GNUNET_assert(NULL != rc);
792 GNUNET_CONTAINER_DLL_insert(rc_head, rc_tail, rc); 953 GNUNET_CONTAINER_DLL_insert(rc_head, rc_tail, rc);
793 address_resolutions++; 954 address_resolutions++;
@@ -800,7 +961,7 @@ resolve_address (const struct GNUNET_PeerIdentity *id,
800 rc->state_timeout = state_timeout; 961 rc->state_timeout = state_timeout;
801 /* Resolve address to string */ 962 /* Resolve address to string */
802 rc->asc = GNUNET_TRANSPORT_address_to_string (cfg, address, numeric, 963 rc->asc = GNUNET_TRANSPORT_address_to_string (cfg, address, numeric,
803 RESOLUTION_TIMEOUT, &process_string, rc); 964 RESOLUTION_TIMEOUT, &process_peer_string, rc);
804} 965}
805 966
806/** 967/**
@@ -843,7 +1004,7 @@ process_peer_iteration_cb (void *cls, const struct GNUNET_PeerIdentity *peer,
843 GNUNET_i2s (peer), address->transport_name); 1004 GNUNET_i2s (peer), address->transport_name);
844 1005
845 if (NULL != address) 1006 if (NULL != address)
846 resolve_address (peer, address, numeric, state, state_timeout); 1007 resolve_peer_address (peer, address, numeric, state, state_timeout);
847 else 1008 else
848 print_info (peer, NULL, NULL, state, state_timeout); 1009 print_info (peer, NULL, NULL, state, state_timeout);
849} 1010}
@@ -915,7 +1076,7 @@ process_peer_monitoring_cb (void *cls, const struct GNUNET_PeerIdentity *peer,
915 m->state_timeout = state_timeout; 1076 m->state_timeout = state_timeout;
916 1077
917 if (NULL != address) 1078 if (NULL != address)
918 resolve_address (peer, m->address, numeric, m->state, m->state_timeout); 1079 resolve_peer_address (peer, m->address, numeric, m->state, m->state_timeout);
919 else 1080 else
920 print_info (peer, NULL, NULL, m->state, m->state_timeout); 1081 print_info (peer, NULL, NULL, m->state, m->state_timeout);
921} 1082}
diff --git a/src/transport/transport_api_monitoring.c b/src/transport/transport_api_monitoring.c
index 9820151d5..9d74eb114 100644
--- a/src/transport/transport_api_monitoring.c
+++ b/src/transport/transport_api_monitoring.c
@@ -348,7 +348,7 @@ do_connect (void *cls,
348 * @param pal_ctx our context 348 * @param pal_ctx our context
349 */ 349 */
350static void 350static void
351reconnect (struct GNUNET_TRANSPORT_PeerMonitoringContext *pal_ctx) 351reconnect_peer_ctx (struct GNUNET_TRANSPORT_PeerMonitoringContext *pal_ctx)
352{ 352{
353 GNUNET_assert (GNUNET_NO == pal_ctx->one_shot); 353 GNUNET_assert (GNUNET_NO == pal_ctx->one_shot);
354 GNUNET_CLIENT_disconnect (pal_ctx->client); 354 GNUNET_CLIENT_disconnect (pal_ctx->client);
@@ -360,6 +360,23 @@ reconnect (struct GNUNET_TRANSPORT_PeerMonitoringContext *pal_ctx)
360} 360}
361 361
362/** 362/**
363 * Cut the existing connection and reconnect.
364 *
365 * @param pal_ctx our context
366 */
367static void
368reconnect_val_ctx (struct GNUNET_TRANSPORT_ValidationMonitoringContext *val_ctx)
369{
370 GNUNET_assert (GNUNET_NO == val_ctx->one_shot);
371 GNUNET_CLIENT_disconnect (val_ctx->client);
372 val_ctx->client = NULL;
373 val_ctx->backoff = GNUNET_TIME_STD_BACKOFF (val_ctx->backoff);
374 val_ctx->reconnect_task = GNUNET_SCHEDULER_add_delayed (val_ctx->backoff,
375 &do_connect,
376 val_ctx);
377}
378
379/**
363 * Function called with responses from the service. 380 * Function called with responses from the service.
364 * 381 *
365 * @param cls our 'struct GNUNET_TRANSPORT_PeerMonitoringContext*' 382 * @param cls our 'struct GNUNET_TRANSPORT_PeerMonitoringContext*'
@@ -370,7 +387,14 @@ static void
370val_response_processor (void *cls, const struct GNUNET_MessageHeader *msg) 387val_response_processor (void *cls, const struct GNUNET_MessageHeader *msg)
371{ 388{
372 struct GNUNET_TRANSPORT_ValidationMonitoringContext *val_ctx = cls; 389 struct GNUNET_TRANSPORT_ValidationMonitoringContext *val_ctx = cls;
373 GNUNET_break (0); 390 struct ValidationIterateResponseMessage *vr_msg;
391 struct GNUNET_HELLO_Address *address;
392 const char *addr;
393 const char *transport_name;
394 size_t size;
395 size_t tlen;
396 size_t alen;
397
374 if (msg == NULL) 398 if (msg == NULL)
375 { 399 {
376 GNUNET_break (0); 400 GNUNET_break (0);
@@ -380,93 +404,87 @@ val_response_processor (void *cls, const struct GNUNET_MessageHeader *msg)
380 val_ctx->cb (val_ctx->cb_cls, NULL, NULL, 404 val_ctx->cb (val_ctx->cb_cls, NULL, NULL,
381 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TIME_UNIT_ZERO_ABS, 405 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TIME_UNIT_ZERO_ABS,
382 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TRANSPORT_VS_TIMEOUT); 406 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TRANSPORT_VS_TIMEOUT);
383 GNUNET_TRANSPORT_monitor_peers_cancel (val_ctx); 407 GNUNET_TRANSPORT_monitor_validation_entries_cancel (val_ctx);
384 } 408 }
385 else 409 else
386 { 410 {
387 reconnect (val_ctx); 411 reconnect_val_ctx (val_ctx);
388 } 412 }
389 return; 413 return;
390 } 414 }
391
392 /* expect more replies */
393 GNUNET_CLIENT_receive (val_ctx->client, &val_response_processor,
394 val_ctx, GNUNET_TIME_absolute_get_remaining (val_ctx->timeout));
395
396 return;
397
398 struct ValidationIterateResponseMessage *vir_msg;
399 struct GNUNET_HELLO_Address *address;
400 const char *addr;
401 const char *transport_name;
402 uint16_t size;
403 size_t alen;
404 size_t tlen;
405#if 0
406
407 size = ntohs (msg->size); 415 size = ntohs (msg->size);
408 GNUNET_break (ntohs (msg->type) == 416 GNUNET_break (ntohs (msg->type) ==
409 GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PEER_RESPONSE); 417 GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_VALIDATION_RESPONSE);
410 if (size == sizeof (struct GNUNET_MessageHeader)) 418 if (size == sizeof (struct GNUNET_MessageHeader))
411 { 419 {
412 /* Done! */ 420 /* Done! */
413 if (pal_ctx->one_shot) 421 if (val_ctx->one_shot)
414 { 422 {
415 pal_ctx->cb (pal_ctx->cb_cls, NULL, NULL, 423 val_ctx->cb (val_ctx->cb_cls, NULL, NULL,
416 GNUNET_TRANSPORT_PS_NOT_CONNECTED, GNUNET_TIME_UNIT_ZERO_ABS); 424 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TIME_UNIT_ZERO_ABS,
417 GNUNET_TRANSPORT_monitor_peers_cancel (pal_ctx); 425 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TRANSPORT_VS_NONE);
426 GNUNET_TRANSPORT_monitor_validation_entries_cancel (val_ctx);
418 } 427 }
419 else 428 else
420 { 429 {
421 reconnect (pal_ctx); 430 reconnect_val_ctx (val_ctx);
422 } 431 }
423 return; 432 return;
424 } 433 }
425 434
426 if ((size < sizeof (struct PeerIterateResponseMessage)) || 435 if ((size < sizeof (struct ValidationIterateResponseMessage)) ||
427 (ntohs (msg->type) != 436 (ntohs (msg->type) != GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_VALIDATION_RESPONSE))
428 GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PEER_RESPONSE))
429 { 437 {
430 GNUNET_break (0); 438 GNUNET_break (0);
431 if (pal_ctx->one_shot) 439 if (val_ctx->one_shot)
432 { 440 {
433 pal_ctx->cb (pal_ctx->cb_cls, NULL, NULL, 441 val_ctx->cb (val_ctx->cb_cls, NULL, NULL,
434 GNUNET_TRANSPORT_PS_NOT_CONNECTED, GNUNET_TIME_UNIT_ZERO_ABS); 442 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TIME_UNIT_ZERO_ABS,
435 GNUNET_TRANSPORT_monitor_peers_cancel (pal_ctx); 443 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TRANSPORT_VS_NONE);
444 GNUNET_TRANSPORT_monitor_validation_entries_cancel (val_ctx);
436 } 445 }
437 else 446 else
438 { 447 {
439 reconnect (pal_ctx); 448 reconnect_val_ctx (val_ctx);
440 } 449 }
441 return; 450 return;
442 } 451 }
443 452
444 pir_msg = (struct PeerIterateResponseMessage *) msg; 453 vr_msg = (struct ValidationIterateResponseMessage *) msg;
445 tlen = ntohl (pir_msg->pluginlen); 454 tlen = ntohl (vr_msg->pluginlen);
446 alen = ntohl (pir_msg->addrlen); 455 alen = ntohl (vr_msg->addrlen);
447 456
448 if (size != sizeof (struct PeerIterateResponseMessage) + tlen + alen) 457 if (size != sizeof (struct ValidationIterateResponseMessage) + tlen + alen)
449 { 458 {
450 GNUNET_break (0); 459 GNUNET_break (0);
451 if (pal_ctx->one_shot) 460 if (val_ctx->one_shot)
452 { 461 {
453 pal_ctx->cb (pal_ctx->cb_cls, NULL, NULL, 462 val_ctx->cb (val_ctx->cb_cls, NULL, NULL,
454 GNUNET_TRANSPORT_PS_NOT_CONNECTED, GNUNET_TIME_UNIT_ZERO_ABS); 463 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TIME_UNIT_ZERO_ABS,
455 GNUNET_TRANSPORT_monitor_peers_cancel (pal_ctx); 464 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TRANSPORT_VS_NONE);
465 GNUNET_TRANSPORT_monitor_validation_entries_cancel (val_ctx);
456 } 466 }
457 else 467 else
458 { 468 {
459 reconnect (pal_ctx); 469 reconnect_val_ctx (val_ctx);
460 } 470 }
461 return; 471 return;
462 } 472 }
463
464 if ( (0 == tlen) && (0 == alen) ) 473 if ( (0 == tlen) && (0 == alen) )
465 { 474 {
466 /* No address available */ 475 GNUNET_break (0);
467 pal_ctx->cb (pal_ctx->cb_cls, &pir_msg->peer, NULL, 476 if (val_ctx->one_shot)
468 ntohl(pir_msg->state), 477 {
469 GNUNET_TIME_absolute_ntoh (pir_msg->state_timeout)); 478 val_ctx->cb (val_ctx->cb_cls, NULL, NULL,
479 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TIME_UNIT_ZERO_ABS,
480 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TRANSPORT_VS_NONE);
481 GNUNET_TRANSPORT_monitor_validation_entries_cancel (val_ctx);
482 }
483 else
484 {
485 reconnect_val_ctx (val_ctx);
486 }
487 return;
470 } 488 }
471 else 489 else
472 { 490 {
@@ -475,36 +493,40 @@ val_response_processor (void *cls, const struct GNUNET_MessageHeader *msg)
475 GNUNET_break (0); /* This must not happen: address without plugin */ 493 GNUNET_break (0); /* This must not happen: address without plugin */
476 return; 494 return;
477 } 495 }
478 addr = (const char *) &pir_msg[1]; 496 addr = (const char *) &vr_msg[1];
479 transport_name = &addr[alen]; 497 transport_name = &addr[alen];
480 498
481 if (transport_name[tlen - 1] != '\0') 499 if (transport_name[tlen - 1] != '\0')
482 { 500 {
483 /* Corrupt plugin name */ 501 /* Corrupt plugin name */
484 GNUNET_break (0); 502 GNUNET_break (0);
485 if (pal_ctx->one_shot) 503 if (val_ctx->one_shot)
486 { 504 {
487 pal_ctx->cb (pal_ctx->cb_cls, NULL, NULL, 505 val_ctx->cb (val_ctx->cb_cls, NULL, NULL,
488 GNUNET_TRANSPORT_PS_NOT_CONNECTED, GNUNET_TIME_UNIT_ZERO_ABS); 506 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TIME_UNIT_ZERO_ABS,
489 GNUNET_TRANSPORT_monitor_peers_cancel (pal_ctx); 507 GNUNET_TIME_UNIT_ZERO_ABS, GNUNET_TRANSPORT_VS_NONE);
508 GNUNET_TRANSPORT_monitor_validation_entries_cancel (val_ctx);
490 } 509 }
491 else 510 else
492 { 511 {
493 reconnect (pal_ctx); 512 reconnect_val_ctx (val_ctx);
494 } 513 }
495 return; 514 return;
496 } 515 }
497 516
498 /* notify client */ 517 /* notify client */
499 address = GNUNET_HELLO_address_allocate (&pir_msg->peer, 518 address = GNUNET_HELLO_address_allocate (&vr_msg->peer,
500 transport_name, addr, alen, ntohl(pir_msg->local_address_info)); 519 transport_name, addr, alen, ntohl(vr_msg->local_address_info));
501 pal_ctx->cb (pal_ctx->cb_cls, &pir_msg->peer, address, 520 val_ctx->cb (val_ctx->cb_cls, &vr_msg->peer, address,
502 ntohl(pir_msg->state), 521 GNUNET_TIME_absolute_ntoh(vr_msg->last_validation),
503 GNUNET_TIME_absolute_ntoh (pir_msg->state_timeout)); 522 GNUNET_TIME_absolute_ntoh(vr_msg->valid_until),
523 GNUNET_TIME_absolute_ntoh(vr_msg->next_validation),
524 ntohl(vr_msg->state));
504 GNUNET_HELLO_address_free (address); 525 GNUNET_HELLO_address_free (address);
505 } 526 }
506#endif 527 /* expect more replies */
507 528 GNUNET_CLIENT_receive (val_ctx->client, &val_response_processor,
529 val_ctx, GNUNET_TIME_absolute_get_remaining (val_ctx->timeout));
508} 530}
509 531
510 532
@@ -538,7 +560,7 @@ peer_response_processor (void *cls, const struct GNUNET_MessageHeader *msg)
538 } 560 }
539 else 561 else
540 { 562 {
541 reconnect (pal_ctx); 563 reconnect_peer_ctx (pal_ctx);
542 } 564 }
543 return; 565 return;
544 } 566 }
@@ -556,14 +578,13 @@ peer_response_processor (void *cls, const struct GNUNET_MessageHeader *msg)
556 } 578 }
557 else 579 else
558 { 580 {
559 reconnect (pal_ctx); 581 reconnect_peer_ctx (pal_ctx);
560 } 582 }
561 return; 583 return;
562 } 584 }
563 585
564 if ((size < sizeof (struct PeerIterateResponseMessage)) || 586 if ((size < sizeof (struct PeerIterateResponseMessage)) ||
565 (ntohs (msg->type) != 587 (ntohs (msg->type) != GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PEER_RESPONSE))
566 GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PEER_RESPONSE))
567 { 588 {
568 GNUNET_break (0); 589 GNUNET_break (0);
569 if (pal_ctx->one_shot) 590 if (pal_ctx->one_shot)
@@ -574,7 +595,7 @@ peer_response_processor (void *cls, const struct GNUNET_MessageHeader *msg)
574 } 595 }
575 else 596 else
576 { 597 {
577 reconnect (pal_ctx); 598 reconnect_peer_ctx (pal_ctx);
578 } 599 }
579 return; 600 return;
580 } 601 }
@@ -594,7 +615,7 @@ peer_response_processor (void *cls, const struct GNUNET_MessageHeader *msg)
594 } 615 }
595 else 616 else
596 { 617 {
597 reconnect (pal_ctx); 618 reconnect_peer_ctx (pal_ctx);
598 } 619 }
599 return; 620 return;
600 } 621 }
@@ -628,7 +649,7 @@ peer_response_processor (void *cls, const struct GNUNET_MessageHeader *msg)
628 } 649 }
629 else 650 else
630 { 651 {
631 reconnect (pal_ctx); 652 reconnect_peer_ctx (pal_ctx);
632 } 653 }
633 return; 654 return;
634 } 655 }