diff options
author | Supriti Singh <supritisingh08@gmail.com> | 2014-08-10 21:25:18 +0000 |
---|---|---|
committer | Supriti Singh <supritisingh08@gmail.com> | 2014-08-10 21:25:18 +0000 |
commit | d53ccdd5d7a7d663345c346c5d6d3a336ac997d1 (patch) | |
tree | a38cc8f675e327a55a6f28093e9f22bd9339f6f5 | |
parent | 1dc9a701235a792e0766fb9f93ffa7a7e6790173 (diff) | |
download | gnunet-d53ccdd5d7a7d663345c346c5d6d3a336ac997d1.tar.gz gnunet-d53ccdd5d7a7d663345c346c5d6d3a336ac997d1.zip |
Xvine: Fixes
-rw-r--r-- | src/dht/gnunet-service-xdht_neighbours.c | 195 |
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 | */ | ||
1725 | void | ||
1726 | test_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 | */ |
1724 | static void | 1747 | static 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 | ¤t_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 (¤t_predecessor.finger_identity, | 4788 | if (0 != (GNUNET_CRYPTO_cmp_peer_identity (¤t_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 | ¤t_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, ¤t_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 | ¤t_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 | ¤t_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 | ¤t_successor->finger_identity, | 4913 | ¤t_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, |