aboutsummaryrefslogtreecommitdiff
path: root/src/dht/gnunet-service-dht_routing.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2017-02-20 17:19:47 +0100
committerChristian Grothoff <christian@grothoff.org>2017-02-20 17:19:47 +0100
commitf6f7fbbe98c110867febbcca647da8308be123c7 (patch)
treeaf69447cf4f08c417197685855c097c132aea8a1 /src/dht/gnunet-service-dht_routing.c
parenta3882b58f1c5976677aa65b0af8a48e8e946b06e (diff)
downloadgnunet-f6f7fbbe98c110867febbcca647da8308be123c7.tar.gz
gnunet-f6f7fbbe98c110867febbcca647da8308be123c7.zip
completed big block refactoring in preparation for SET-BLOCK integration
Diffstat (limited to 'src/dht/gnunet-service-dht_routing.c')
-rw-r--r--src/dht/gnunet-service-dht_routing.c56
1 files changed, 22 insertions, 34 deletions
diff --git a/src/dht/gnunet-service-dht_routing.c b/src/dht/gnunet-service-dht_routing.c
index 71240a503..252995737 100644
--- a/src/dht/gnunet-service-dht_routing.c
+++ b/src/dht/gnunet-service-dht_routing.c
@@ -58,9 +58,9 @@ struct RecentRequest
58 struct GNUNET_CONTAINER_HeapNode *heap_node; 58 struct GNUNET_CONTAINER_HeapNode *heap_node;
59 59
60 /** 60 /**
61 * Bloomfilter for replies to drop. 61 * Block group for filtering replies.
62 */ 62 */
63 struct GNUNET_CONTAINER_BloomFilter *reply_bf; 63 struct GNUNET_BLOCK_Group *bg;
64 64
65 /** 65 /**
66 * Type of the requested block. 66 * Type of the requested block.
@@ -79,11 +79,6 @@ struct RecentRequest
79 size_t xquery_size; 79 size_t xquery_size;
80 80
81 /** 81 /**
82 * Mutator value for the reply_bf, see gnunet_block_lib.h
83 */
84 uint32_t reply_bf_mutator;
85
86 /**
87 * Request options. 82 * Request options.
88 */ 83 */
89 enum GNUNET_DHT_RouteOption options; 84 enum GNUNET_DHT_RouteOption options;
@@ -207,10 +202,9 @@ process (void *cls,
207 eval 202 eval
208 = GNUNET_BLOCK_evaluate (GDS_block_context, 203 = GNUNET_BLOCK_evaluate (GDS_block_context,
209 pc->type, 204 pc->type,
205 rr->bg,
210 GNUNET_BLOCK_EO_NONE, 206 GNUNET_BLOCK_EO_NONE,
211 eval_key, 207 eval_key,
212 &rr->reply_bf,
213 rr->reply_bf_mutator,
214 rr->xquery, 208 rr->xquery,
215 rr->xquery_size, 209 rr->xquery_size,
216 pc->data, 210 pc->data,
@@ -343,7 +337,7 @@ expire_oldest_entry ()
343 recent_req = GNUNET_CONTAINER_heap_peek (recent_heap); 337 recent_req = GNUNET_CONTAINER_heap_peek (recent_heap);
344 GNUNET_assert (recent_req != NULL); 338 GNUNET_assert (recent_req != NULL);
345 GNUNET_CONTAINER_heap_remove_node (recent_req->heap_node); 339 GNUNET_CONTAINER_heap_remove_node (recent_req->heap_node);
346 GNUNET_CONTAINER_bloomfilter_free (recent_req->reply_bf); 340 GNUNET_BLOCK_group_destroy (recent_req->bg);
347 GNUNET_assert (GNUNET_YES == 341 GNUNET_assert (GNUNET_YES ==
348 GNUNET_CONTAINER_multihashmap_remove (recent_map, 342 GNUNET_CONTAINER_multihashmap_remove (recent_map,
349 &recent_req->key, 343 &recent_req->key,
@@ -379,18 +373,10 @@ try_combine_recent (void *cls,
379 rr->xquery, 373 rr->xquery,
380 in->xquery_size)) ) 374 in->xquery_size)) )
381 return GNUNET_OK; 375 return GNUNET_OK;
382 if (in->reply_bf_mutator != rr->reply_bf_mutator) 376 GNUNET_break (GNUNET_SYSERR !=
383 { 377 GNUNET_BLOCK_group_merge (in->bg,
384 rr->reply_bf_mutator = in->reply_bf_mutator; 378 rr->bg));
385 GNUNET_CONTAINER_bloomfilter_free (rr->reply_bf); 379 rr->bg = in->bg;
386 rr->reply_bf = in->reply_bf;
387 }
388 else
389 {
390 GNUNET_CONTAINER_bloomfilter_or2 (rr->reply_bf,
391 in->reply_bf);
392 GNUNET_CONTAINER_bloomfilter_free (in->reply_bf);
393 }
394 GNUNET_free (in); 380 GNUNET_free (in);
395 return GNUNET_SYSERR; 381 return GNUNET_SYSERR;
396} 382}
@@ -411,12 +397,11 @@ try_combine_recent (void *cls,
411void 397void
412GDS_ROUTING_add (const struct GNUNET_PeerIdentity *sender, 398GDS_ROUTING_add (const struct GNUNET_PeerIdentity *sender,
413 enum GNUNET_BLOCK_Type type, 399 enum GNUNET_BLOCK_Type type,
400 struct GNUNET_BLOCK_Group *bg,
414 enum GNUNET_DHT_RouteOption options, 401 enum GNUNET_DHT_RouteOption options,
415 const struct GNUNET_HashCode *key, 402 const struct GNUNET_HashCode *key,
416 const void *xquery, 403 const void *xquery,
417 size_t xquery_size, 404 size_t xquery_size)
418 const struct GNUNET_CONTAINER_BloomFilter *reply_bf,
419 uint32_t reply_bf_mutator)
420{ 405{
421 struct RecentRequest *recent_req; 406 struct RecentRequest *recent_req;
422 407
@@ -424,17 +409,19 @@ GDS_ROUTING_add (const struct GNUNET_PeerIdentity *sender,
424 expire_oldest_entry (); 409 expire_oldest_entry ();
425 GNUNET_STATISTICS_update (GDS_stats, 410 GNUNET_STATISTICS_update (GDS_stats,
426 gettext_noop ("# Entries added to routing table"), 411 gettext_noop ("# Entries added to routing table"),
427 1, GNUNET_NO); 412 1,
413 GNUNET_NO);
428 recent_req = GNUNET_malloc (sizeof (struct RecentRequest) + xquery_size); 414 recent_req = GNUNET_malloc (sizeof (struct RecentRequest) + xquery_size);
429 recent_req->peer = *sender; 415 recent_req->peer = *sender;
430 recent_req->key = *key; 416 recent_req->key = *key;
431 recent_req->reply_bf = GNUNET_CONTAINER_bloomfilter_copy (reply_bf); 417 recent_req->bg = bg;
432 recent_req->type = type; 418 recent_req->type = type;
433 recent_req->options = options; 419 recent_req->options = options;
434 recent_req->xquery = &recent_req[1]; 420 recent_req->xquery = &recent_req[1];
435 GNUNET_memcpy (&recent_req[1], xquery, xquery_size); 421 GNUNET_memcpy (&recent_req[1],
422 xquery,
423 xquery_size);
436 recent_req->xquery_size = xquery_size; 424 recent_req->xquery_size = xquery_size;
437 recent_req->reply_bf_mutator = reply_bf_mutator;
438 if (GNUNET_SYSERR == 425 if (GNUNET_SYSERR ==
439 GNUNET_CONTAINER_multihashmap_get_multiple (recent_map, 426 GNUNET_CONTAINER_multihashmap_get_multiple (recent_map,
440 key, 427 key,
@@ -447,13 +434,14 @@ GDS_ROUTING_add (const struct GNUNET_PeerIdentity *sender,
447 1, GNUNET_NO); 434 1, GNUNET_NO);
448 return; 435 return;
449 } 436 }
450 recent_req->heap_node = 437 recent_req->heap_node
451 GNUNET_CONTAINER_heap_insert (recent_heap, recent_req, 438 = GNUNET_CONTAINER_heap_insert (recent_heap,
439 recent_req,
452 GNUNET_TIME_absolute_get ().abs_value_us); 440 GNUNET_TIME_absolute_get ().abs_value_us);
453 GNUNET_CONTAINER_multihashmap_put (recent_map, key, recent_req, 441 GNUNET_CONTAINER_multihashmap_put (recent_map,
442 key,
443 recent_req,
454 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 444 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
455
456
457} 445}
458 446
459 447