aboutsummaryrefslogtreecommitdiff
path: root/src/dht
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-04-28 13:21:44 +0000
committerChristian Grothoff <christian@grothoff.org>2015-04-28 13:21:44 +0000
commit553909348c19833330ad94d7a1064eaf48f97e3f (patch)
treecae16ee9cc81edb93e38903c952b0a3e2a6576af /src/dht
parent8b0472be26c33243e4867f8fab2a865b0e2084d9 (diff)
downloadgnunet-553909348c19833330ad94d7a1064eaf48f97e3f.tar.gz
gnunet-553909348c19833330ad94d7a1064eaf48f97e3f.zip
-sending messages / starting random walks
Diffstat (limited to 'src/dht')
-rw-r--r--src/dht/gnunet-service-wdht_neighbours.c54
1 files changed, 51 insertions, 3 deletions
diff --git a/src/dht/gnunet-service-wdht_neighbours.c b/src/dht/gnunet-service-wdht_neighbours.c
index 2f48ae387..6c9fd82b1 100644
--- a/src/dht/gnunet-service-wdht_neighbours.c
+++ b/src/dht/gnunet-service-wdht_neighbours.c
@@ -407,9 +407,8 @@ struct FriendInfo
407 407
408 /** 408 /**
409 * Core handle for sending messages to this friend. 409 * Core handle for sending messages to this friend.
410 * FIXME: use MQ?
411 */ 410 */
412 struct GNUNET_CORE_TransmitHandle *th; 411 struct GNUNET_MQ_Handle *mq;
413 412
414}; 413};
415 414
@@ -421,6 +420,11 @@ struct FriendInfo
421static struct GNUNET_SCHEDULER_Task *trail_timeout_task; 420static struct GNUNET_SCHEDULER_Task *trail_timeout_task;
422 421
423/** 422/**
423 * Task to perform random walks.
424 */
425static struct GNUNET_SCHEDULER_Task *random_walk_task;
426
427/**
424 * Identity of this peer. 428 * Identity of this peer.
425 */ 429 */
426static struct GNUNET_PeerIdentity my_identity; 430static struct GNUNET_PeerIdentity my_identity;
@@ -554,6 +558,40 @@ handle_core_disconnect (void *cls,
554 peer, 558 peer,
555 remove_friend)); 559 remove_friend));
556 /* FIXME: do stuff */ 560 /* FIXME: do stuff */
561 GNUNET_MQ_destroy (remove_friend->mq);
562 GNUNET_free (remove_friend);
563 if (0 ==
564 GNUNET_CONTAINER_multipeermap_size (friend_peermap))
565 {
566 GNUNET_SCHEDULER_cancel (random_walk_task);
567 random_walk_task = NULL;
568 }
569}
570
571
572/**
573 * Initiate a random walk.
574 *
575 * @param cls NULL
576 * @param tc unused
577 */
578static void
579do_random_walk (void *cls,
580 const struct GNUNET_SCHEDULER_TaskContext *tc)
581{
582 struct FriendInfo *friend;
583 struct GNUNET_MQ_Envelope *env;
584 struct FingerSetupMessage *fsm;
585
586 friend = NULL; // FIXME: pick at random...
587 env = GNUNET_MQ_msg (fsm,
588 GNUNET_MESSAGE_TYPE_WDHT_FINGER_SETUP);
589 fsm->hops_task = htons (0);
590 fsm->layer = htons (0); // FIXME: not always 0...
591 GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_NONCE,
592 &fsm->finger_id);
593 GNUNET_MQ_send (friend->mq,
594 env);
557} 595}
558 596
559 597
@@ -586,13 +624,21 @@ handle_core_connect (void *cls,
586 624
587 friend = GNUNET_new (struct FriendInfo); 625 friend = GNUNET_new (struct FriendInfo);
588 friend->id = *peer_identity; 626 friend->id = *peer_identity;
589 627 friend->mq = GNUNET_CORE_mq_create (core_api,
628 peer_identity);
590 GNUNET_assert (GNUNET_OK == 629 GNUNET_assert (GNUNET_OK ==
591 GNUNET_CONTAINER_multipeermap_put (friend_peermap, 630 GNUNET_CONTAINER_multipeermap_put (friend_peermap,
592 peer_identity, 631 peer_identity,
593 friend, 632 friend,
594 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); 633 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
595 /* do work? */ 634 /* do work? */
635
636 if (NULL == random_walk_task)
637 {
638 /* start random walks! */
639 random_walk_task = GNUNET_SCHEDULER_add_now (&do_random_walk,
640 NULL);
641 }
596} 642}
597 643
598 644
@@ -824,6 +870,7 @@ handle_dht_p2p_peer_get_result (void *cls,
824 return GNUNET_OK; 870 return GNUNET_OK;
825} 871}
826 872
873
827/** 874/**
828 * Handle a `struct PeerPutMessage`. 875 * Handle a `struct PeerPutMessage`.
829 * 876 *
@@ -850,6 +897,7 @@ handle_dht_p2p_peer_put (void *cls,
850 return GNUNET_OK; 897 return GNUNET_OK;
851} 898}
852 899
900
853/** 901/**
854 * Initialize neighbours subsystem. 902 * Initialize neighbours subsystem.
855 * @return #GNUNET_OK on success, #GNUNET_SYSERR on error 903 * @return #GNUNET_OK on success, #GNUNET_SYSERR on error