From 7b0a7042bd85a5e4dd3021e0245ced21fffe634f Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 17 Sep 2011 21:36:49 +0000 Subject: [PATCH] fixing 1776 --- do not check uid in client and don't put it into recent --- src/dht/dht.h | 2 +- src/dht/dht_api.c | 2 ++ src/dht/gnunet-service-dht.c | 31 +++++++++++++++++++++++-------- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/dht/dht.h b/src/dht/dht.h index 9fb71a8d1..4832df490 100644 --- a/src/dht/dht.h +++ b/src/dht/dht.h @@ -34,7 +34,7 @@ * Should NEVER be enabled in production and makes the DHT incompatible * (since this changes the message format). */ -#define HAVE_UID_FOR_TESTING GNUNET_YES +#define HAVE_UID_FOR_TESTING GNUNET_NO /** * Needs to be GNUNET_YES for logging to dhtlog to work! diff --git a/src/dht/dht_api.c b/src/dht/dht_api.c index 1b0840110..88ed4ed9d 100644 --- a/src/dht/dht_api.c +++ b/src/dht/dht_api.c @@ -433,12 +433,14 @@ process_reply (void *cls, const GNUNET_HashCode * key, void *value) char *path_offset; uid = GNUNET_ntohll (dht_msg->unique_id); +#if HAVE_UID_FOR_TESTING if (uid != rh->uid) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Reply UID did not match request UID\n"); return GNUNET_YES; } +#endif enc_msg = (const struct GNUNET_MessageHeader *) &dht_msg[1]; enc_size = ntohs (enc_msg->size); if (enc_size < sizeof (struct GNUNET_MessageHeader)) diff --git a/src/dht/gnunet-service-dht.c b/src/dht/gnunet-service-dht.c index 489d51440..14aabd79d 100644 --- a/src/dht/gnunet-service-dht.c +++ b/src/dht/gnunet-service-dht.c @@ -568,16 +568,16 @@ struct FindPeerMessageContext */ struct DHTResults { - /* + /** * Min heap for removal upon reaching limit */ struct GNUNET_CONTAINER_Heap *minHeap; - /* + + /** * Hashmap for fast key based lookup */ struct GNUNET_CONTAINER_MultiHashMap *hashmap; - }; @@ -586,15 +586,18 @@ struct DHTResults */ struct RecentRequests { - /* + /** * Min heap for removal upon reaching limit */ struct GNUNET_CONTAINER_Heap *minHeap; - /* +#if HAVE_UID_FOR_TESTING > 1 + /** * Hashmap for key based lookup */ struct GNUNET_CONTAINER_MultiHashMap *hashmap; +#endif + }; @@ -3035,9 +3038,11 @@ remove_recent (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_assert (req != NULL); hash_from_uid (req->uid, &hash); +#if HAVE_UID_FOR_TESTING > 1 GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove (recent.hashmap, &hash, req)); +#endif GNUNET_CONTAINER_heap_remove_node (req->heap_node); GNUNET_CONTAINER_bloomfilter_free (req->bloom); GNUNET_free (req); @@ -3181,7 +3186,9 @@ route_message (const struct GNUNET_MessageHeader *msg, unsigned int target_forward_count; unsigned int forward_count; struct RecentRequest *recent_req; +#if HAVE_UID_FOR_TESTING > 1 GNUNET_HashCode unique_hash; +#endif char *stat_forward_count; char *temp_stat_str; @@ -3245,8 +3252,9 @@ route_message (const struct GNUNET_MessageHeader *msg, GNUNET_CONTAINER_bloomfilter_add (msg_ctx->bloom, &my_identity.hashPubKey); +#if HAVE_UID_FOR_TESTING > 1 /* BUG HERE: recent uses unique_id! So if all unique-IDs are 0, we get - easily into trouble!!! FIXME! */ + easily into trouble!!! Also, this should not even be necessary... */ hash_from_uid (msg_ctx->unique_id, &unique_hash); if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains (recent.hashmap, &unique_hash)) @@ -3264,6 +3272,7 @@ route_message (const struct GNUNET_MessageHeader *msg, } } else +#endif { recent_req = GNUNET_malloc (sizeof (struct RecentRequest)); recent_req->uid = msg_ctx->unique_id; @@ -3276,11 +3285,13 @@ route_message (const struct GNUNET_MessageHeader *msg, GNUNET_TIME_absolute_get ().abs_value); recent_req->bloom = GNUNET_CONTAINER_bloomfilter_init (NULL, DHT_BLOOM_SIZE, DHT_BLOOM_K); +#if HAVE_UID_FOR_TESTING > 1 GNUNET_CONTAINER_multihashmap_put (recent.hashmap, &unique_hash, recent_req, - GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); +#endif } - if (GNUNET_CONTAINER_multihashmap_size (recent.hashmap) > DHT_MAX_RECENT) + if (GNUNET_CONTAINER_heap_get_size (recent.minHeap) > DHT_MAX_RECENT) { recent_req = GNUNET_CONTAINER_heap_peek (recent.minHeap); GNUNET_assert (recent_req != NULL); @@ -4740,7 +4751,9 @@ main (int argc, char *const *argv) { int ret; +#if HAVE_UID_FOR_TESTING > 1 recent.hashmap = GNUNET_CONTAINER_multihashmap_create (DHT_MAX_RECENT / 2); +#endif recent.minHeap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); recent_find_peer_requests = @@ -4749,9 +4762,11 @@ main (int argc, char *const *argv) (GNUNET_OK == GNUNET_SERVICE_run (argc, argv, "dht", GNUNET_SERVICE_OPTION_NONE, &run, NULL)) ? 0 : 1; +#if HAVE_UID_FOR_TESTING > 1 GNUNET_assert (0 == GNUNET_CONTAINER_multihashmap_size (recent.hashmap)); GNUNET_CONTAINER_multihashmap_destroy (recent.hashmap); recent.hashmap = NULL; +#endif GNUNET_assert (0 == GNUNET_CONTAINER_heap_get_size (recent.minHeap)); GNUNET_CONTAINER_heap_destroy (recent.minHeap); recent.minHeap = NULL; -- 2.25.1