aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSupriti Singh <supritisingh08@gmail.com>2014-08-21 12:55:17 +0000
committerSupriti Singh <supritisingh08@gmail.com>2014-08-21 12:55:17 +0000
commit5ac199dcc8af3a7052086087d36feda38bc4b4de (patch)
treeaffa693795bee216ed960b048847fbbf0bdd58c0 /src
parent967ed6ed4721a97d4d741820483149e9bda96f0b (diff)
downloadgnunet-5ac199dcc8af3a7052086087d36feda38bc4b4de.tar.gz
gnunet-5ac199dcc8af3a7052086087d36feda38bc4b4de.zip
Changing the logic to check for circle completion
Diffstat (limited to 'src')
-rw-r--r--src/dht/gnunet_dht_profiler.c78
1 files changed, 54 insertions, 24 deletions
diff --git a/src/dht/gnunet_dht_profiler.c b/src/dht/gnunet_dht_profiler.c
index 7889042e0..9fa9f33c4 100644
--- a/src/dht/gnunet_dht_profiler.c
+++ b/src/dht/gnunet_dht_profiler.c
@@ -802,37 +802,47 @@ successor_stats_cont (void *cls,
802{ 802{
803 struct GNUNET_HashCode *val; 803 struct GNUNET_HashCode *val;
804 struct GNUNET_HashCode *start_val; 804 struct GNUNET_HashCode *start_val;
805 int count = 0;
806 struct GNUNET_HashCode *key; 805 struct GNUNET_HashCode *key;
807 806 int count;
807
808 /* Don't schedule the task till we are looking for circle here. */
808 successor_stats_task = GNUNET_SCHEDULER_NO_TASK; 809 successor_stats_task = GNUNET_SCHEDULER_NO_TASK;
809 GNUNET_TESTBED_operation_done (successor_stats_op); 810 GNUNET_TESTBED_operation_done (successor_stats_op);
810 successor_stats_op = NULL; 811 successor_stats_op = NULL;
811 start_val =(struct GNUNET_HashCode *) GNUNET_CONTAINER_multihashmap_get(successor_peer_hashmap, 812
813 start_val =
814 (struct GNUNET_HashCode *) GNUNET_CONTAINER_multihashmap_get(successor_peer_hashmap,
812 start_key); 815 start_key);
813
814 val = GNUNET_new(struct GNUNET_HashCode); 816 val = GNUNET_new(struct GNUNET_HashCode);
817 key = GNUNET_new(struct GNUNET_HashCode);
815 val = start_val; 818 val = start_val;
816 while (count < num_peers) 819 for (count = 0; count < num_peers; count++)
817 { 820 {
818 key = GNUNET_new(struct GNUNET_HashCode);
819 key = val; 821 key = val;
820 val = GNUNET_CONTAINER_multihashmap_get (successor_peer_hashmap, 822 val = GNUNET_CONTAINER_multihashmap_get (successor_peer_hashmap,
821 key); 823 key);
822 //FIXME: REMOVE ENTRY FROM HASHMAP
823 GNUNET_assert(NULL != val); 824 GNUNET_assert(NULL != val);
824 count++; 825 /* Remove the entry from hashmap. This is done to take care of loop. */
826 if (GNUNET_NO ==
827 GNUNET_CONTAINER_multihashmap_remove (successor_peer_hashmap,
828 key, val))
829 {
830 DEBUG ("Failed to remove entry from hashmap\n");
831 break;
832 }
833 /* If a peer has its own identity as its successor. */
834 if (0 == memcmp(&key, &val, sizeof (struct GNUNET_HashCode)))
835 {
836 break;
837 }
825 } 838 }
826 839
827 if (start_val == val) 840 if ((start_val == val) && (count == num_peers))
828 { 841 {
829 DEBUG("CIRCLE COMPLETED after %u tries", tries); 842 DEBUG("CIRCLE COMPLETED after %u tries", tries);
830 843 //FIXME: FREE HASHMAP.
831 if(GNUNET_SCHEDULER_NO_TASK == successor_stats_task) 844 if(GNUNET_SCHEDULER_NO_TASK == successor_stats_task)
832 {
833 start_profiling(); 845 start_profiling();
834 }
835
836 return; 846 return;
837 } 847 }
838 else 848 else
@@ -843,12 +853,11 @@ successor_stats_cont (void *cls,
843 "Maximum tries %u exceeded while checking successor TOTAL TRIES %u" 853 "Maximum tries %u exceeded while checking successor TOTAL TRIES %u"
844 " cirle formation. Exiting\n", 854 " cirle formation. Exiting\n",
845 max_searches,tries); 855 max_searches,tries);
856 //FIXME: FREE HASHMAP
846 if (GNUNET_SCHEDULER_NO_TASK != successor_stats_task) 857 if (GNUNET_SCHEDULER_NO_TASK != successor_stats_task)
847 { 858 {
848 successor_stats_task = GNUNET_SCHEDULER_NO_TASK; 859 successor_stats_task = GNUNET_SCHEDULER_NO_TASK;
849 //FIXME: FREE HASHMAP
850 } 860 }
851
852 if(GNUNET_SCHEDULER_NO_TASK == successor_stats_task) 861 if(GNUNET_SCHEDULER_NO_TASK == successor_stats_task)
853 { 862 {
854 start_profiling(); 863 start_profiling();
@@ -857,7 +866,7 @@ successor_stats_cont (void *cls,
857 return; 866 return;
858 } 867 }
859 868
860 //FIXME: change delay use exponential back off. 869 flag = 0;
861 successor_stats_task = GNUNET_SCHEDULER_add_delayed (delay, &collect_stats, cls); 870 successor_stats_task = GNUNET_SCHEDULER_add_delayed (delay, &collect_stats, cls);
862 } 871 }
863} 872}
@@ -911,6 +920,8 @@ successor_stats_iterator (void *cls,
911 start_key = my_id_key; 920 start_key = my_id_key;
912 flag = 1; 921 flag = 1;
913 } 922 }
923 /* FIXME: GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE do not free the value
924 which is replaced, need to free it. */
914 GNUNET_CONTAINER_multihashmap_put (successor_peer_hashmap, 925 GNUNET_CONTAINER_multihashmap_put (successor_peer_hashmap,
915 my_id_key, (void *)succ_key, 926 my_id_key, (void *)succ_key,
916 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); 927 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
@@ -932,12 +943,7 @@ collect_stats (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
932 return; 943 return;
933 944
934 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Start collecting statistics...\n"); 945 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Start collecting statistics...\n");
935 DEBUG("num_peers = %d", num_peers);
936 GNUNET_assert(NULL != testbed_handles); 946 GNUNET_assert(NULL != testbed_handles);
937
938
939 /* Check for successor pointer, don't start put till the virtual ring topology
940 is not created. */
941 successor_stats_op = 947 successor_stats_op =
942 GNUNET_TESTBED_get_statistics (num_peers, testbed_handles, 948 GNUNET_TESTBED_get_statistics (num_peers, testbed_handles,
943 "dht", NULL, 949 "dht", NULL,
@@ -947,6 +953,30 @@ collect_stats (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
947 GNUNET_assert(NULL != successor_stats_op); 953 GNUNET_assert(NULL != successor_stats_op);
948} 954}
949 955
956
957#if ENABLE_MALICIOUS
958/**
959 * Set the malicious variable in peer malicious context.
960 */
961static void
962set_malicious()
963{
964 unsigned int i;
965 DEBUG ("Setting %u peers malicious");
966 for(i = 0; i < n_malicious; i++)
967 {
968 struct MaliciousContext *mc = &a_mc[i];
969 mc->ctx->op =
970 GNUNET_TESTBED_service_connect (ac->ctx,
971 ac->ctx->peer,
972 "dht",
973 &dht_set_malicious, mc,
974 &dht_connect,
975 &dht_finish,
976 mc);
977 }
978}
979#endif
950/** 980/**
951 * Callback called when DHT service on the peer is started 981 * Callback called when DHT service on the peer is started
952 * 982 *
@@ -969,9 +999,9 @@ service_started (void *cls,
969 DEBUG("Peers Started = %d; num_peers = %d \n", peers_started, num_peers); 999 DEBUG("Peers Started = %d; num_peers = %d \n", peers_started, num_peers);
970 if (GNUNET_SCHEDULER_NO_TASK == successor_stats_task && peers_started == num_peers) 1000 if (GNUNET_SCHEDULER_NO_TASK == successor_stats_task && peers_started == num_peers)
971 { 1001 {
972 //FIXME: Here we have started service on all the peers, now we should first 1002#if ENABLE_MALICIOUS
973 // call act malicious API on malicious peer context. it will just set, 1003 set_malicious();
974 // act_malicious to 1 in the selected peers. and then it exists 1004#endif
975 DEBUG("successor_stats_task \n"); 1005 DEBUG("successor_stats_task \n");
976 struct Collect_Stat_Context *collect_stat_cls = GNUNET_new(struct Collect_Stat_Context); 1006 struct Collect_Stat_Context *collect_stat_cls = GNUNET_new(struct Collect_Stat_Context);
977 collect_stat_cls->service_connect_ctx = cls; 1007 collect_stat_cls->service_connect_ctx = cls;