aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSupriti Singh <supritisingh08@gmail.com>2014-08-10 21:25:18 +0000
committerSupriti Singh <supritisingh08@gmail.com>2014-08-10 21:25:18 +0000
commitd53ccdd5d7a7d663345c346c5d6d3a336ac997d1 (patch)
treea38cc8f675e327a55a6f28093e9f22bd9339f6f5
parent1dc9a701235a792e0766fb9f93ffa7a7e6790173 (diff)
downloadgnunet-d53ccdd5d7a7d663345c346c5d6d3a336ac997d1.tar.gz
gnunet-d53ccdd5d7a7d663345c346c5d6d3a336ac997d1.zip
Xvine: Fixes
-rw-r--r--src/dht/gnunet-service-xdht_neighbours.c195
1 files changed, 81 insertions, 114 deletions
diff --git a/src/dht/gnunet-service-xdht_neighbours.c b/src/dht/gnunet-service-xdht_neighbours.c
index c5a89208f..77d2cf275 100644
--- a/src/dht/gnunet-service-xdht_neighbours.c
+++ b/src/dht/gnunet-service-xdht_neighbours.c
@@ -1719,6 +1719,29 @@ select_closest_predecessor (const struct GNUNET_PeerIdentity *peer1,
1719 1719
1720#if 0 1720#if 0
1721/** 1721/**
1722 *
1723 *
1724 */
1725void
1726test_print_trail (struct GNUNET_PeerIdentity *trail,
1727 unsigned int trail_length)
1728{
1729 struct GNUNET_PeerIdentity print_peer;
1730 int i;
1731
1732 FPRINTF (stderr,_("\nSUPU %s, %s, %d,trail_length = %d"),
1733 __FILE__, __func__,__LINE__,trail_length);
1734 for (i =0 ; i< trail_length; i++)
1735 {
1736 print_peer = trail[i];
1737 FPRINTF (stderr,_("\nSUPU %s, %s, %d,trail[%d]=%s"),
1738 __FILE__, __func__,__LINE__,i,GNUNET_i2s(&print_peer));
1739 }
1740}
1741#endif
1742
1743#if 0
1744/**
1722 * This is a test function to print all the entries of friend table. 1745 * This is a test function to print all the entries of friend table.
1723 */ 1746 */
1724static void 1747static void
@@ -4408,7 +4431,7 @@ check_for_duplicate_entries (const struct GNUNET_PeerIdentity *trail_1,
4408 if(0 != GNUNET_CRYPTO_cmp_peer_identity (&trail_1[i],&trail_2[j])) 4431 if(0 != GNUNET_CRYPTO_cmp_peer_identity (&trail_1[i],&trail_2[j]))
4409 continue; 4432 continue;
4410 4433
4411 *joined_trail_len = i + (trail_2_len - j) + 1; 4434 *joined_trail_len = i + (trail_2_len - j);
4412 joined_trail = GNUNET_malloc (*joined_trail_len * 4435 joined_trail = GNUNET_malloc (*joined_trail_len *
4413 sizeof(struct GNUNET_PeerIdentity)); 4436 sizeof(struct GNUNET_PeerIdentity));
4414 4437
@@ -4422,7 +4445,7 @@ check_for_duplicate_entries (const struct GNUNET_PeerIdentity *trail_1,
4422 /* Increment j as entry stored is same as entry stored at i*/ 4445 /* Increment j as entry stored is same as entry stored at i*/
4423 j = j+1; 4446 j = j+1;
4424 4447
4425 /* Copy all the elements from j+1 to trail_2_len-1 to joined trail.*/ 4448 /* Copy all the elements from j to trail_2_len-1 to joined trail.*/
4426 while((k < *joined_trail_len) && (j < trail_2_len)); 4449 while((k < *joined_trail_len) && (j < trail_2_len));
4427 { 4450 {
4428 joined_trail[k] = trail_2[j]; 4451 joined_trail[k] = trail_2[j];
@@ -4438,12 +4461,13 @@ check_for_duplicate_entries (const struct GNUNET_PeerIdentity *trail_1,
4438 *joined_trail_len = trail_1_len + trail_2_len + 1; 4461 *joined_trail_len = trail_1_len + trail_2_len + 1;
4439 joined_trail = GNUNET_malloc (*joined_trail_len * 4462 joined_trail = GNUNET_malloc (*joined_trail_len *
4440 sizeof(struct GNUNET_PeerIdentity)); 4463 sizeof(struct GNUNET_PeerIdentity));
4441 i = 0; 4464
4442 while( i < trail_1_len) 4465
4466 for(i = 0; i < trail_1_len;i++)
4443 { 4467 {
4444 joined_trail[i] = trail_1[i]; 4468 joined_trail[i] = trail_1[i];
4445 i++;
4446 } 4469 }
4470
4447 joined_trail[i] = my_identity; 4471 joined_trail[i] = my_identity;
4448 i++; 4472 i++;
4449 4473
@@ -4451,6 +4475,12 @@ check_for_duplicate_entries (const struct GNUNET_PeerIdentity *trail_1,
4451 { 4475 {
4452 joined_trail[i] = trail_2[j]; 4476 joined_trail[i] = trail_2[j];
4453 } 4477 }
4478
4479 /* THIS CODE IS ONLY FOR TESTNG. FIXME*/
4480 for(i = 0; i < *joined_trail_len; i++)
4481 {
4482 GNUNET_assert(0 != GNUNET_CRYPTO_cmp_peer_identity(&my_identity, &joined_trail[i]));
4483 }
4454 return joined_trail; 4484 return joined_trail;
4455} 4485}
4456 4486
@@ -4475,68 +4505,63 @@ get_trail_src_to_curr_pred (struct GNUNET_PeerIdentity source_peer,
4475 struct GNUNET_PeerIdentity *trail_src_to_curr_pred; 4505 struct GNUNET_PeerIdentity *trail_src_to_curr_pred;
4476 unsigned int trail_me_to_curr_pred_length; 4506 unsigned int trail_me_to_curr_pred_length;
4477 struct FingerInfo *current_predecessor; 4507 struct FingerInfo *current_predecessor;
4478 unsigned int i; 4508 int i;
4479 unsigned int j; 4509 unsigned int j;
4480 4510
4481 current_predecessor = &finger_table[PREDECESSOR_FINGER_ID]; 4511 current_predecessor = &finger_table[PREDECESSOR_FINGER_ID];
4482 trail_me_to_curr_pred = get_shortest_trail (current_predecessor,
4483 &trail_me_to_curr_pred_length);
4484
4485 /* If there is only on element in the trail, and that element is source.*/
4486 if ((trail_me_to_curr_pred_length == 1) &&
4487 (0 == GNUNET_CRYPTO_cmp_peer_identity (&source_peer,
4488 &trail_me_to_curr_pred[0])))
4489 {
4490 *trail_src_to_curr_pred_length = 0;
4491 GNUNET_free_non_null(trail_me_to_curr_pred);
4492 return NULL;
4493 }
4494 4512
4495 /* Check if trail_me_to_curr_pred contains source. */ 4513 /* Check if trail_src_to_me contains current_predecessor. */
4496 if (trail_me_to_curr_pred_length > 1) 4514 for (i = 0; i < trail_src_to_me_len; i++)
4497 { 4515 {
4498 for(i = trail_me_to_curr_pred_length - 1; i > 0; i--) 4516 if(0 != GNUNET_CRYPTO_cmp_peer_identity(&trail_src_to_me[i],
4499 { 4517 &current_predecessor->finger_identity))
4500 if(0 != GNUNET_CRYPTO_cmp_peer_identity (&source_peer,
4501 &trail_me_to_curr_pred[i]))
4502 continue; 4518 continue;
4519
4520
4521 *trail_src_to_curr_pred_length = i;
4522
4523 if(0 == i)
4524 return NULL;
4525
4526 trail_src_to_curr_pred = GNUNET_malloc (*trail_src_to_curr_pred_length *
4527 sizeof(struct GNUNET_PeerIdentity));
4528 for(j = 0; j < i;j++)
4529 trail_src_to_curr_pred[j] = trail_src_to_me[j];
4530 return trail_src_to_curr_pred;
4531 }
4503 4532
4504 /* Source is NOT part of trail. */ 4533
4505 i = i+1; 4534 trail_me_to_curr_pred = get_shortest_trail (current_predecessor,
4535 &trail_me_to_curr_pred_length);
4536
4537 /* Check if trail contains the source_peer. */
4538 for(i = trail_me_to_curr_pred_length - 1; i >= 0; i--)
4539 {
4540 if(0 != GNUNET_CRYPTO_cmp_peer_identity (&source_peer,
4541 &trail_me_to_curr_pred[i]))
4542 continue;
4543
4544 /* Source is NOT part of trail. */
4545 i = i+1;
4506 4546
4507 /* Source is the last element in the trail to reach to my pred. 4547 /* Source is the last element in the trail to reach to my pred.
4508 Source is direct friend of the pred. */ 4548 Source is direct friend of the pred. */
4509 if (trail_me_to_curr_pred_length == i) 4549 if (trail_me_to_curr_pred_length == i)
4510 { 4550 {
4511 *trail_src_to_curr_pred_length = 0; 4551 *trail_src_to_curr_pred_length = 0;
4512 return NULL; 4552 return NULL;
4513 } 4553 }
4514 4554
4515 *trail_src_to_curr_pred_length = trail_me_to_curr_pred_length - i; 4555 *trail_src_to_curr_pred_length = trail_me_to_curr_pred_length - i;
4516 trail_src_to_curr_pred = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity)* 4556 trail_src_to_curr_pred = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity)*
4517 *trail_src_to_curr_pred_length); 4557 *trail_src_to_curr_pred_length);
4518 for(j = 0; j < *trail_src_to_curr_pred_length; i++,j++) 4558
4519 { 4559 for(j = 0; j < *trail_src_to_curr_pred_length; i++,j++)
4520 trail_src_to_curr_pred[j] = trail_me_to_curr_pred[i]; 4560 {
4521 } 4561 trail_src_to_curr_pred[j] = trail_me_to_curr_pred[i];
4522 GNUNET_free_non_null(trail_me_to_curr_pred); 4562 }
4523 return trail_src_to_curr_pred; 4563 GNUNET_free_non_null(trail_me_to_curr_pred);
4524 } 4564 return trail_src_to_curr_pred;
4525 /* Is first element source? Then exclude first element and copy rest of the
4526 trail. */
4527 if(0 == GNUNET_CRYPTO_cmp_peer_identity (&source_peer,
4528 &trail_me_to_curr_pred[0]))
4529 {
4530 *trail_src_to_curr_pred_length = trail_me_to_curr_pred_length - 1;
4531 trail_src_to_curr_pred = GNUNET_malloc(sizeof(struct GNUNET_PeerIdentity)*
4532 *trail_src_to_curr_pred_length);
4533 unsigned int j;
4534 for(j=0; j < *trail_src_to_curr_pred_length;j++)
4535 {
4536 trail_src_to_curr_pred[j] = trail_me_to_curr_pred[j+1];
4537 }
4538 return trail_src_to_curr_pred;
4539 }
4540 } 4565 }
4541 4566
4542 unsigned int len; 4567 unsigned int len;
@@ -4758,42 +4783,16 @@ handle_dht_p2p_verify_successor(void *cls,
4758 * it. */ 4783 * it. */
4759 compare_and_update_predecessor (source_peer, trail, trail_length); 4784 compare_and_update_predecessor (source_peer, trail, trail_length);
4760 current_predecessor = finger_table[PREDECESSOR_FINGER_ID]; 4785 current_predecessor = finger_table[PREDECESSOR_FINGER_ID];
4761 unsigned int flag = 0;
4762 4786
4763 /* Is source of this message NOT my predecessor. */ 4787 /* Is source of this message NOT my predecessor. */
4764 if (0 != (GNUNET_CRYPTO_cmp_peer_identity (&current_predecessor.finger_identity, 4788 if (0 != (GNUNET_CRYPTO_cmp_peer_identity (&current_predecessor.finger_identity,
4765 &source_peer))) 4789 &source_peer)))
4766 { 4790 {
4767 /* Check if trail contains current_predecessor. */ 4791 trail_src_to_curr_pred =
4768 unsigned int i;
4769 for (i = 0; i < trail_length; i++)
4770 {
4771 if(0 != GNUNET_CRYPTO_cmp_peer_identity(&trail[i],
4772 &current_predecessor.finger_identity))
4773 continue;
4774
4775 flag = 1;
4776 trail_src_to_curr_pred_len = i;
4777 trail_src_to_curr_pred = GNUNET_malloc (trail_src_to_curr_pred_len *
4778 sizeof(struct GNUNET_PeerIdentity));
4779 unsigned int k = 0;
4780
4781 while(k < i)
4782 {
4783 trail_src_to_curr_pred[k] = trail[k];
4784 k++;
4785 }
4786 break;
4787 }
4788
4789 if(0 == flag)
4790 {
4791 trail_src_to_curr_pred =
4792 get_trail_src_to_curr_pred (source_peer, 4792 get_trail_src_to_curr_pred (source_peer,
4793 trail, 4793 trail,
4794 trail_length, 4794 trail_length,
4795 &trail_src_to_curr_pred_len); 4795 &trail_src_to_curr_pred_len);
4796 }
4797 } 4796 }
4798 else 4797 else
4799 { 4798 {
@@ -4862,7 +4861,6 @@ check_trail_me_to_probable_succ (struct GNUNET_PeerIdentity probable_successor,
4862 &trail_me_to_probable_successor[i])) 4861 &trail_me_to_probable_successor[i]))
4863 continue; 4862 continue;
4864 4863
4865 j = 0;
4866 *trail_to_new_successor_length = (trail_me_to_probable_successor_len - i); 4864 *trail_to_new_successor_length = (trail_me_to_probable_successor_len - i);
4867 trail_to_new_successor = GNUNET_malloc (sizeof(struct GNUNET_PeerIdentity)* 4865 trail_to_new_successor = GNUNET_malloc (sizeof(struct GNUNET_PeerIdentity)*
4868 *trail_to_new_successor_length); 4866 *trail_to_new_successor_length);
@@ -4879,15 +4877,6 @@ check_trail_me_to_probable_succ (struct GNUNET_PeerIdentity probable_successor,
4879 4877
4880 *trail_to_new_successor_length = trail_me_to_probable_successor_len; 4878 *trail_to_new_successor_length = trail_me_to_probable_successor_len;
4881 return (struct GNUNET_PeerIdentity*)trail_me_to_probable_successor; 4879 return (struct GNUNET_PeerIdentity*)trail_me_to_probable_successor;
4882#if 0
4883 trail_to_new_successor = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity)*
4884 *trail_to_new_successor_length);
4885
4886 for(i = 0; i < *trail_to_new_successor_length; i++)
4887 trail_to_new_successor[i] = trail_me_to_probable_successor[i];
4888
4889 return trail_to_new_successor;
4890#endif
4891} 4880}
4892 4881
4893 4882
@@ -4920,27 +4909,6 @@ compare_and_update_successor (struct GNUNET_PeerIdentity curr_succ,
4920 current_successor = &finger_table[0]; 4909 current_successor = &finger_table[0];
4921 successor_value = compute_finger_identity_value(0); 4910 successor_value = compute_finger_identity_value(0);
4922 4911
4923 /* Have we found some other successor, while waiting for verify successor result
4924 *
4925 * FIXME closest_peer is being overwritten just after the if
4926 */
4927#if 0
4928 if(0 != GNUNET_CRYPTO_cmp_peer_identity(&curr_succ, &current_successor->finger_identity))
4929 {
4930 /* We could have added this new successor, only if it was closer the old one. */
4931 closest_peer = select_closest_peer (&curr_succ,
4932 &current_successor->finger_identity,
4933 successor_value, is_predecessor);
4934
4935 /* FIXME: it may fail in case we have done more number of iterations of
4936 find _finger_trail_task. */
4937 /*GNUNET_assert (0 ==
4938 GNUNET_CRYPTO_cmp_peer_identity (closest_peer,
4939 &current_successor->finger_identity));*/
4940
4941 }
4942#endif
4943
4944 closest_peer = select_closest_peer (&probable_successor, 4912 closest_peer = select_closest_peer (&probable_successor,
4945 &current_successor->finger_identity, 4913 &current_successor->finger_identity,
4946 successor_value, is_predecessor); 4914 successor_value, is_predecessor);
@@ -4978,7 +4946,6 @@ compare_and_update_successor (struct GNUNET_PeerIdentity curr_succ,
4978 } 4946 }
4979 4947
4980 trail_me_to_probable_succ_len = 0; 4948 trail_me_to_probable_succ_len = 0;
4981 /* TODO: Check if the path to reach to probable successor contains a friend. */
4982 trail_me_to_probable_succ = 4949 trail_me_to_probable_succ =
4983 check_trail_me_to_probable_succ (probable_successor, 4950 check_trail_me_to_probable_succ (probable_successor,
4984 trail, trail_length, 4951 trail, trail_length,