gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r35684 - gnunet/src/dht


From: gnunet
Subject: [GNUnet-SVN] r35684 - gnunet/src/dht
Date: Thu, 30 Apr 2015 10:57:59 +0200

Author: arthur
Date: 2015-04-30 10:57:59 +0200 (Thu, 30 Apr 2015)
New Revision: 35684

Modified:
   gnunet/src/dht/gnunet-service-wdht_neighbours.c
Log:
Add delete_trail function.


Modified: gnunet/src/dht/gnunet-service-wdht_neighbours.c
===================================================================
--- gnunet/src/dht/gnunet-service-wdht_neighbours.c     2015-04-30 08:00:51 UTC 
(rev 35683)
+++ gnunet/src/dht/gnunet-service-wdht_neighbours.c     2015-04-30 08:57:59 UTC 
(rev 35684)
@@ -620,7 +620,129 @@
               int inform_pred,
               int inform_succ)
 {
-  // ... FIXME
+  struct FriendInfo *friend;
+  struct GNUNET_MQ_Envelope *env;
+  struct TrailDestroyMessage *tdm;
+  struct Trail *current;
+
+  tdm = GNUNET_new(struct TrailDestroyMessage);
+  current = trail;
+
+  if (inform_pred)
+  {
+    struct Trail *previous_pred;
+    struct Trail *next_pred;
+    tdm->trail_id = current->pred_id;
+    friend = current->pred;
+
+    while( NULL != current)
+    {
+      if (NULL != friend)
+      {
+        env = GNUNET_MQ_msg (tdm,
+                             GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY);
+        GNUNET_MQ_send (friend->mq,
+                        env);
+      }
+
+      next_pred = current->next_pred;
+      previous_pred = current->prev_pred;
+
+      /* Freeing current trail memory */
+      GNUNET_free(current);
+
+      /* Destroying the next successor list */
+      while(NULL != previous_pred)
+      {
+        struct Trail *tmp;
+        if (NULL != friend)
+        {
+          env = GNUNET_MQ_msg (tdm,
+                               GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY);
+          GNUNET_MQ_send (friend->mq,
+                          env);
+        }
+
+        tmp = next_pred;
+        next_pred = next_pred->next_pred;
+        GNUNET_free(tmp);
+      }
+
+      /* Destroying the next predecessor list */
+      while(NULL != next_pred)
+      {
+        struct Trail *tmp;
+        if (NULL != friend)
+        {
+          env = GNUNET_MQ_msg (tdm,
+                               GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY);
+          GNUNET_MQ_send (friend->mq,
+                          env);
+        }
+
+        tmp = next_pred;
+        next_pred = next_pred->next_pred;
+        GNUNET_free(tmp);
+      }
+    }
+  }
+
+  if (inform_succ)
+  {
+    struct Trail *previous_succ;
+    struct Trail *next_succ;
+    tdm->trail_id = current->succ_id;
+    friend = current->succ;
+
+    while( NULL != current)
+    {
+      if (NULL != friend)
+      {
+        env = GNUNET_MQ_msg (tdm,
+                             GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY);
+        GNUNET_MQ_send (friend->mq,
+                        env);
+      }
+
+      next_succ = current->next_succ;
+      previous_succ = current->prev_succ;
+
+      /* Freeing current trail memory */
+      GNUNET_free(current);
+
+      /* Destroying the next successor list */
+      while(NULL != previous_succ)
+      {
+        struct Trail *tmp;
+        if (NULL != friend)
+        {
+          env = GNUNET_MQ_msg (tdm,
+                               GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY);
+          GNUNET_MQ_send (friend->mq,
+                          env);
+        }
+        tmp = next_succ;
+        previous_succ = previous_succ->prev_succ;
+        GNUNET_free(tmp);
+      }
+
+      /* Destroying the next successor list */
+      while(NULL != next_succ)
+      {
+        struct Trail *tmp;
+        if (NULL != friend)
+        {
+          env = GNUNET_MQ_msg (tdm,
+                               GNUNET_MESSAGE_TYPE_WDHT_TRAIL_DESTROY);
+          GNUNET_MQ_send (friend->mq,
+                          env);
+        }
+        tmp = next_succ;
+        next_succ = next_succ->next_pred;
+        GNUNET_free(tmp);
+      }
+    }
+  }
 }
 
 
@@ -655,7 +777,6 @@
   // the lookup...
 }
 
-
 /**
  * Method called whenever a peer disconnects.
  *




reply via email to

[Prev in Thread] Current Thread [Next in Thread]