diff options
author | Arthur Dewarumez <arthur.dewarumez@etudiant.univ-lille1.fr> | 2015-04-30 08:57:59 +0000 |
---|---|---|
committer | Arthur Dewarumez <arthur.dewarumez@etudiant.univ-lille1.fr> | 2015-04-30 08:57:59 +0000 |
commit | 3393c742cb57c9b036853ca8b426ed3fdf2357fd (patch) | |
tree | 5b3c6c72b97fec11aa7f0d86b5749250b4e4e2de /src/dht | |
parent | 66872cf6ba34329254c82cf948fef333e5dc4c9c (diff) | |
download | gnunet-3393c742cb57c9b036853ca8b426ed3fdf2357fd.tar.gz gnunet-3393c742cb57c9b036853ca8b426ed3fdf2357fd.zip |
Add delete_trail function.
Diffstat (limited to 'src/dht')
-rw-r--r-- | src/dht/gnunet-service-wdht_neighbours.c | 125 |
1 files changed, 123 insertions, 2 deletions
diff --git a/src/dht/gnunet-service-wdht_neighbours.c b/src/dht/gnunet-service-wdht_neighbours.c index 3ce65978d..68b05d2eb 100644 --- a/src/dht/gnunet-service-wdht_neighbours.c +++ b/src/dht/gnunet-service-wdht_neighbours.c | |||
@@ -620,7 +620,129 @@ delete_trail (struct Trail *trail, | |||
620 | int inform_pred, | 620 | int inform_pred, |
621 | int inform_succ) | 621 | int inform_succ) |
622 | { | 622 | { |
623 | // ... FIXME | 623 | struct FriendInfo *friend; |
624 | struct GNUNET_MQ_Envelope *env; | ||
625 | struct TrailDestroyMessage *tdm; | ||
626 | struct Trail *current; | ||
627 | |||
628 | tdm = GNUNET_new(struct TrailDestroyMessage); | ||
629 | current = trail; | ||
630 | |||
631 | if (inform_pred) | ||
632 | { | ||
633 | struct Trail *previous_pred; | ||
634 | struct Trail *next_pred; | ||
635 | tdm->trail_id = current->pred_id; | ||
636 | friend = current->pred; | ||
637 | |||
638 | while( NULL != current) | ||
639 | { | ||
640 | if (NULL != friend) | ||
641 | { | ||
642 | env = GNUNET_MQ_msg (tdm, | ||
643 | GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY); | ||
644 | GNUNET_MQ_send (friend->mq, | ||
645 | env); | ||
646 | } | ||
647 | |||
648 | next_pred = current->next_pred; | ||
649 | previous_pred = current->prev_pred; | ||
650 | |||
651 | /* Freeing current trail memory */ | ||
652 | GNUNET_free(current); | ||
653 | |||
654 | /* Destroying the next successor list */ | ||
655 | while(NULL != previous_pred) | ||
656 | { | ||
657 | struct Trail *tmp; | ||
658 | if (NULL != friend) | ||
659 | { | ||
660 | env = GNUNET_MQ_msg (tdm, | ||
661 | GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY); | ||
662 | GNUNET_MQ_send (friend->mq, | ||
663 | env); | ||
664 | } | ||
665 | |||
666 | tmp = next_pred; | ||
667 | next_pred = next_pred->next_pred; | ||
668 | GNUNET_free(tmp); | ||
669 | } | ||
670 | |||
671 | /* Destroying the next predecessor list */ | ||
672 | while(NULL != next_pred) | ||
673 | { | ||
674 | struct Trail *tmp; | ||
675 | if (NULL != friend) | ||
676 | { | ||
677 | env = GNUNET_MQ_msg (tdm, | ||
678 | GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY); | ||
679 | GNUNET_MQ_send (friend->mq, | ||
680 | env); | ||
681 | } | ||
682 | |||
683 | tmp = next_pred; | ||
684 | next_pred = next_pred->next_pred; | ||
685 | GNUNET_free(tmp); | ||
686 | } | ||
687 | } | ||
688 | } | ||
689 | |||
690 | if (inform_succ) | ||
691 | { | ||
692 | struct Trail *previous_succ; | ||
693 | struct Trail *next_succ; | ||
694 | tdm->trail_id = current->succ_id; | ||
695 | friend = current->succ; | ||
696 | |||
697 | while( NULL != current) | ||
698 | { | ||
699 | if (NULL != friend) | ||
700 | { | ||
701 | env = GNUNET_MQ_msg (tdm, | ||
702 | GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY); | ||
703 | GNUNET_MQ_send (friend->mq, | ||
704 | env); | ||
705 | } | ||
706 | |||
707 | next_succ = current->next_succ; | ||
708 | previous_succ = current->prev_succ; | ||
709 | |||
710 | /* Freeing current trail memory */ | ||
711 | GNUNET_free(current); | ||
712 | |||
713 | /* Destroying the next successor list */ | ||
714 | while(NULL != previous_succ) | ||
715 | { | ||
716 | struct Trail *tmp; | ||
717 | if (NULL != friend) | ||
718 | { | ||
719 | env = GNUNET_MQ_msg (tdm, | ||
720 | GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY); | ||
721 | GNUNET_MQ_send (friend->mq, | ||
722 | env); | ||
723 | } | ||
724 | tmp = next_succ; | ||
725 | previous_succ = previous_succ->prev_succ; | ||
726 | GNUNET_free(tmp); | ||
727 | } | ||
728 | |||
729 | /* Destroying the next successor list */ | ||
730 | while(NULL != next_succ) | ||
731 | { | ||
732 | struct Trail *tmp; | ||
733 | if (NULL != friend) | ||
734 | { | ||
735 | env = GNUNET_MQ_msg (tdm, | ||
736 | GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY); | ||
737 | GNUNET_MQ_send (friend->mq, | ||
738 | env); | ||
739 | } | ||
740 | tmp = next_succ; | ||
741 | next_succ = next_succ->next_pred; | ||
742 | GNUNET_free(tmp); | ||
743 | } | ||
744 | } | ||
745 | } | ||
624 | } | 746 | } |
625 | 747 | ||
626 | 748 | ||
@@ -655,7 +777,6 @@ GDS_NEIGHBOURS_send_get_result (const struct GNUNET_HashCode *key, | |||
655 | // the lookup... | 777 | // the lookup... |
656 | } | 778 | } |
657 | 779 | ||
658 | |||
659 | /** | 780 | /** |
660 | * Method called whenever a peer disconnects. | 781 | * Method called whenever a peer disconnects. |
661 | * | 782 | * |