[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r34208 - gnunet/src/dht
From: |
gnunet |
Subject: |
[GNUnet-SVN] r34208 - gnunet/src/dht |
Date: |
Sat, 23 Aug 2014 10:16:28 +0200 |
Author: supriti
Date: 2014-08-23 10:16:27 +0200 (Sat, 23 Aug 2014)
New Revision: 34208
Modified:
gnunet/src/dht/gnunet-service-xdht_neighbours.c
Log:
Change in put/get logic
Modified: gnunet/src/dht/gnunet-service-xdht_neighbours.c
===================================================================
--- gnunet/src/dht/gnunet-service-xdht_neighbours.c 2014-08-22 23:29:31 UTC
(rev 34207)
+++ gnunet/src/dht/gnunet-service-xdht_neighbours.c 2014-08-23 08:16:27 UTC
(rev 34208)
@@ -3565,9 +3565,12 @@
{
struct PeerPutMessage *put;
struct GNUNET_PeerIdentity *put_path;
+ struct GNUNET_PeerIdentity current_best_known_dest;
struct GNUNET_PeerIdentity best_known_dest;
+ struct GNUNET_HashCode received_intermediate_trail_id;
struct GNUNET_HashCode intermediate_trail_id;
struct GNUNET_PeerIdentity *next_hop;
+ struct GNUNET_PeerIdentity *next_routing_hop;
enum GNUNET_DHT_RouteOption options;
struct GNUNET_HashCode test_key;
void *payload;
@@ -3609,11 +3612,11 @@
("# Bytes received from other peers"), (int64_t)
msize,
GNUNET_NO);
- best_known_dest = put->best_known_destination;
+ current_best_known_dest = put->best_known_destination;
put_path = (struct GNUNET_PeerIdentity *) &put[1];
payload = &put_path[putlen];
options = ntohl (put->options);
- intermediate_trail_id = put->intermediate_trail_id;
+ received_intermediate_trail_id = put->intermediate_trail_id;
hop_count = ntohl(put->hop_count);
payload_size = msize - (sizeof (struct PeerPutMessage) +
putlen * sizeof (struct GNUNET_PeerIdentity));
@@ -3690,48 +3693,27 @@
putlen = 0;
memcpy (&key_value, &(put->key), sizeof (uint64_t));
- if (0 != (GNUNET_CRYPTO_cmp_peer_identity (&best_known_dest, &my_identity)))
+ struct Closest_Peer successor;
+ key_value = GNUNET_ntohll (key_value);
+ successor = find_local_best_known_next_hop (key_value,
+ GDS_FINGER_TYPE_NON_PREDECESSOR);
+ next_hop = GNUNET_new (struct GNUNET_PeerIdentity);
+ *next_hop = successor.next_hop;
+ intermediate_trail_id = successor.trail_id;
+ best_known_dest = successor.best_known_destination;
+
+ if (0 != (GNUNET_CRYPTO_cmp_peer_identity (¤t_best_known_dest,
&my_identity)))
{
- next_hop = GDS_ROUTING_get_next_hop (intermediate_trail_id,
+ next_routing_hop = GDS_ROUTING_get_next_hop (intermediate_trail_id,
GDS_ROUTING_SRC_TO_DEST);
- if (NULL == next_hop)
+ if (NULL != next_routing_hop)
{
- DEBUG(" NO ENTRY FOUND IN %s ROUTING TABLE for trail id %s, line",
- GNUNET_i2s(&my_identity), GNUNET_h2s(&intermediate_trail_id),
__LINE__);
- GNUNET_STATISTICS_update (GDS_stats,
- gettext_noop ("# Next hop to forward the
packet not found "
- "trail setup request, packet dropped."),
- 1, GNUNET_NO);
-
- GNUNET_break_op (0);
- //Fixme: even after circle is compelte, it fails
- //FIXME: Adding put here,only to ensure that process does not hang. but
- // should not be here. fix the logic.
- GDS_DATACACHE_handle_put (GNUNET_TIME_absolute_ntoh
(put->expiration_time),
- &(put->key),putlen, pp, ntohl
(put->block_type),
- payload_size, payload);
- return GNUNET_OK;
+ next_hop = next_routing_hop;
+ intermediate_trail_id = received_intermediate_trail_id;
+ best_known_dest = current_best_known_dest;
}
- else
- {
- GNUNET_assert (0 != GNUNET_CRYPTO_cmp_peer_identity (&my_identity,
- next_hop));
- }
}
- else
- {
- struct Closest_Peer successor;
- key_value = GNUNET_ntohll (key_value);
- successor = find_local_best_known_next_hop (key_value,
-
GDS_FINGER_TYPE_NON_PREDECESSOR);
- next_hop = GNUNET_new (struct GNUNET_PeerIdentity);
- *next_hop = successor.next_hop;
- intermediate_trail_id = successor.trail_id;
- best_known_dest = successor.best_known_destination;
- }
-
-
GDS_CLIENTS_process_put (options,
ntohl (put->block_type),
hop_count,
@@ -3781,8 +3763,12 @@
const struct PeerGetMessage *get;
const struct GNUNET_PeerIdentity *get_path;
struct GNUNET_PeerIdentity best_known_dest;
+ struct GNUNET_PeerIdentity current_best_known_dest;
struct GNUNET_HashCode intermediate_trail_id;
+ struct GNUNET_HashCode received_intermediate_trail_id;
+ struct Closest_Peer successor;
struct GNUNET_PeerIdentity *next_hop;
+ struct GNUNET_PeerIdentity *next_routing_hop;
uint32_t get_length;
uint64_t key_value;
uint32_t hop_count;
@@ -3805,8 +3791,8 @@
get = (const struct PeerGetMessage *)message;
get_length = ntohl (get->get_path_length);
- best_known_dest = get->best_known_destination;
- intermediate_trail_id = get->intermediate_trail_id;
+ current_best_known_dest = get->best_known_destination;
+ received_intermediate_trail_id = get->intermediate_trail_id;
get_path = (const struct GNUNET_PeerIdentity *)&get[1];
hop_count = get->hop_count;
hop_count++;
@@ -3849,38 +3835,26 @@
get->desired_replication_level,
get->get_path_length,
gp, &get->key);
+
+ successor = find_local_best_known_next_hop (key_value,
+
GDS_FINGER_TYPE_NON_PREDECESSOR);
+ next_hop = GNUNET_new (struct GNUNET_PeerIdentity);
+ *next_hop = successor.next_hop;
+ best_known_dest = successor.best_known_destination;
+ intermediate_trail_id = successor.trail_id;
/* I am not the final destination. I am part of trail to reach final dest. */
- if (0 != (GNUNET_CRYPTO_cmp_peer_identity (&best_known_dest, &my_identity)))
+ if (0 != (GNUNET_CRYPTO_cmp_peer_identity (¤t_best_known_dest,
&my_identity)))
{
- next_hop = GDS_ROUTING_get_next_hop (intermediate_trail_id,
+ next_routing_hop = GDS_ROUTING_get_next_hop
(received_intermediate_trail_id,
GDS_ROUTING_SRC_TO_DEST);
- if (NULL == next_hop)
+ if (NULL != next_routing_hop)
{
- DEBUG(" NO ENTRY FOUND IN %s ROUTING TABLE for trail id %s, line",
- GNUNET_i2s(&my_identity), GNUNET_h2s(&intermediate_trail_id),
__LINE__);
- GNUNET_STATISTICS_update (GDS_stats,
- gettext_noop ("# Next hop to forward the
packet not found "
- "GET request, packet dropped."),
- 1, GNUNET_NO);
- GNUNET_break (0);
- /* We are not able to proceed further*/
- GDS_DATACACHE_handle_get (&(get->key),(get->block_type), NULL, 0, NULL,
0,
- get_length, gp, &gp[get_length - 2],
- &my_identity);
- return GNUNET_OK;
+ next_hop = next_routing_hop;
+ best_known_dest = current_best_known_dest;
+ intermediate_trail_id = received_intermediate_trail_id;
}
}
- else
- {
- struct Closest_Peer successor;
-
- successor = find_local_best_known_next_hop (key_value,
-
GDS_FINGER_TYPE_NON_PREDECESSOR);
- next_hop = GNUNET_new (struct GNUNET_PeerIdentity);
- *next_hop = successor.next_hop;
- best_known_dest = successor.best_known_destination;
- intermediate_trail_id = successor.trail_id;
- }
+
/* I am the final destination. */
if (0 == GNUNET_CRYPTO_cmp_peer_identity(&my_identity, &best_known_dest))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r34208 - gnunet/src/dht,
gnunet <=