diff options
author | Christian Grothoff <christian@grothoff.org> | 2015-04-28 13:21:44 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2015-04-28 13:21:44 +0000 |
commit | 553909348c19833330ad94d7a1064eaf48f97e3f (patch) | |
tree | cae16ee9cc81edb93e38903c952b0a3e2a6576af /src/dht | |
parent | 8b0472be26c33243e4867f8fab2a865b0e2084d9 (diff) | |
download | gnunet-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.c | 54 |
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 | |||
421 | static struct GNUNET_SCHEDULER_Task *trail_timeout_task; | 420 | static struct GNUNET_SCHEDULER_Task *trail_timeout_task; |
422 | 421 | ||
423 | /** | 422 | /** |
423 | * Task to perform random walks. | ||
424 | */ | ||
425 | static struct GNUNET_SCHEDULER_Task *random_walk_task; | ||
426 | |||
427 | /** | ||
424 | * Identity of this peer. | 428 | * Identity of this peer. |
425 | */ | 429 | */ |
426 | static struct GNUNET_PeerIdentity my_identity; | 430 | static 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 | */ | ||
578 | static void | ||
579 | do_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 |