diff options
author | Christian Grothoff <christian@grothoff.org> | 2017-02-20 17:19:47 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2017-02-20 17:19:47 +0100 |
commit | f6f7fbbe98c110867febbcca647da8308be123c7 (patch) | |
tree | af69447cf4f08c417197685855c097c132aea8a1 /src/dht/gnunet-service-dht_routing.c | |
parent | a3882b58f1c5976677aa65b0af8a48e8e946b06e (diff) | |
download | gnunet-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.c | 56 |
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, | |||
411 | void | 397 | void |
412 | GDS_ROUTING_add (const struct GNUNET_PeerIdentity *sender, | 398 | GDS_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 | ||