diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2014-01-16 09:14:05 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2014-01-16 09:14:05 +0000 |
commit | 23a5ebdcbcffd87533bccd48efb99942eb60cdd7 (patch) | |
tree | bd1a5538f70fa818f6e54ddffae767038a591475 /src | |
parent | 202940f94609fe47c450455b98f3d410d7e2422d (diff) | |
download | gnunet-23a5ebdcbcffd87533bccd48efb99942eb60cdd7.tar.gz gnunet-23a5ebdcbcffd87533bccd48efb99942eb60cdd7.zip |
printing validation information with cli
Diffstat (limited to 'src')
-rw-r--r-- | src/transport/gnunet-transport.c | 197 | ||||
-rw-r--r-- | src/transport/transport_api_monitoring.c | 157 |
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 | ||
319 | static struct ResolutionContext *rc_head; | 319 | static struct PeerResolutionContext *rc_head; |
320 | static struct ResolutionContext *rc_tail; | 320 | static struct PeerResolutionContext *rc_tail; |
321 | 321 | ||
322 | struct ResolutionContext | 322 | struct 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 | ||
335 | static struct ValidationResolutionContext *vc_head; | ||
336 | static struct ValidationResolutionContext *vc_tail; | ||
337 | |||
338 | struct 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 | |||
335 | static void | 356 | static void |
336 | operation_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | 357 | operation_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 | |||
467 | static void | ||
468 | resolve_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 | |||
475 | static void | ||
476 | process_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 | |||
556 | static void | ||
557 | resolve_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 | |||
445 | void process_validation_cb (void *cls, | 586 | void 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 | ||
703 | static void | 864 | static void |
704 | resolve_address (const struct GNUNET_PeerIdentity *id, | 865 | resolve_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 | ||
731 | static void | 892 | static void |
732 | process_string (void *cls, const char *address) | 893 | process_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 | ||
782 | static void | 943 | static void |
783 | resolve_address (const struct GNUNET_PeerIdentity *id, | 944 | resolve_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 | */ |
350 | static void | 350 | static void |
351 | reconnect (struct GNUNET_TRANSPORT_PeerMonitoringContext *pal_ctx) | 351 | reconnect_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 | */ | ||
367 | static void | ||
368 | reconnect_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 | |||
370 | val_response_processor (void *cls, const struct GNUNET_MessageHeader *msg) | 387 | val_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 | } |