gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r35661 - gnunet/src/dht
Date: Tue, 28 Apr 2015 15:21:44 +0200

Author: grothoff
Date: 2015-04-28 15:21:44 +0200 (Tue, 28 Apr 2015)
New Revision: 35661

Modified:
   gnunet/src/dht/gnunet-service-wdht_neighbours.c
Log:
-sending messages / starting random walks

Modified: gnunet/src/dht/gnunet-service-wdht_neighbours.c
===================================================================
--- gnunet/src/dht/gnunet-service-wdht_neighbours.c     2015-04-28 09:33:05 UTC 
(rev 35660)
+++ gnunet/src/dht/gnunet-service-wdht_neighbours.c     2015-04-28 13:21:44 UTC 
(rev 35661)
@@ -407,9 +407,8 @@
 
   /**
    * Core handle for sending messages to this friend.
-   * FIXME: use MQ?
    */
-  struct GNUNET_CORE_TransmitHandle *th;
+  struct GNUNET_MQ_Handle *mq;
 
 };
 
@@ -421,6 +420,11 @@
 static struct GNUNET_SCHEDULER_Task *trail_timeout_task;
 
 /**
+ * Task to perform random walks.
+ */
+static struct GNUNET_SCHEDULER_Task *random_walk_task;
+
+/**
  * Identity of this peer.
  */
 static struct GNUNET_PeerIdentity my_identity;
@@ -554,10 +558,44 @@
                                                        peer,
                                                        remove_friend));
   /* FIXME: do stuff */
+  GNUNET_MQ_destroy (remove_friend->mq);
+  GNUNET_free (remove_friend);
+  if (0 ==
+      GNUNET_CONTAINER_multipeermap_size (friend_peermap))
+  {
+    GNUNET_SCHEDULER_cancel (random_walk_task);
+    random_walk_task = NULL;
+  }
 }
 
 
 /**
+ * Initiate a random walk.
+ *
+ * @param cls NULL
+ * @param tc unused
+ */
+static void
+do_random_walk (void *cls,
+                const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  struct FriendInfo *friend;
+  struct GNUNET_MQ_Envelope *env;
+  struct FingerSetupMessage *fsm;
+
+  friend = NULL; // FIXME: pick at random...
+  env = GNUNET_MQ_msg (fsm,
+                       GNUNET_MESSAGE_TYPE_WDHT_FINGER_SETUP);
+  fsm->hops_task = htons (0);
+  fsm->layer = htons (0); // FIXME: not always 0...
+  GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_NONCE,
+                                    &fsm->finger_id);
+  GNUNET_MQ_send (friend->mq,
+                  env);
+}
+
+
+/**
  * Method called whenever a peer connects.
  *
  * @param cls closure
@@ -586,13 +624,21 @@
 
   friend = GNUNET_new (struct FriendInfo);
   friend->id = *peer_identity;
-
+  friend->mq = GNUNET_CORE_mq_create (core_api,
+                                      peer_identity);
   GNUNET_assert (GNUNET_OK ==
                  GNUNET_CONTAINER_multipeermap_put (friend_peermap,
                                                     peer_identity,
                                                     friend,
                                                     
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
   /* do work? */
+
+  if (NULL == random_walk_task)
+  {
+    /* start random walks! */
+    random_walk_task = GNUNET_SCHEDULER_add_now (&do_random_walk,
+                                                 NULL);
+  }
 }
 
 
@@ -824,6 +870,7 @@
   return GNUNET_OK;
 }
 
+
 /**
  * Handle a `struct PeerPutMessage`.
  *
@@ -850,6 +897,7 @@
   return GNUNET_OK;
 }
 
+
 /**
  * Initialize neighbours subsystem.
  * @return #GNUNET_OK on success, #GNUNET_SYSERR on error




reply via email to

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