gnunet-svn
[Top][All Lists]
Advanced

[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 (&current_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 (&current_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))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]