diff options
author | Martin Schanzenbach <schanzen@gnunet.org> | 2022-02-06 14:30:00 +0100 |
---|---|---|
committer | Martin Schanzenbach <schanzen@gnunet.org> | 2022-02-06 14:30:00 +0100 |
commit | 215032563755ba48d4e871b82c9c6697611726f8 (patch) | |
tree | 51123c26b3d1418d0d400593438e23da48a8b4c8 /src/gnsrecord | |
parent | d322de96b95a7afad7f5bd255bf70642840a3778 (diff) | |
download | gnunet-215032563755ba48d4e871b82c9c6697611726f8.tar.gz gnunet-215032563755ba48d4e871b82c9c6697611726f8.zip |
-simlify and correct tombstone logic
Diffstat (limited to 'src/gnsrecord')
-rw-r--r-- | src/gnsrecord/gnsrecord_misc.c | 54 | ||||
-rw-r--r-- | src/gnsrecord/gnunet-gnsrecord-tvg.c | 6 |
2 files changed, 48 insertions, 12 deletions
diff --git a/src/gnsrecord/gnsrecord_misc.c b/src/gnsrecord/gnsrecord_misc.c index 61604c730..5c20dbedc 100644 --- a/src/gnsrecord/gnsrecord_misc.c +++ b/src/gnsrecord/gnsrecord_misc.c | |||
@@ -144,19 +144,11 @@ GNUNET_GNSRECORD_records_cmp (const struct GNUNET_GNSRECORD_Data *a, | |||
144 | } | 144 | } |
145 | 145 | ||
146 | 146 | ||
147 | /** | ||
148 | * Returns the expiration time of the given block of records. The block | ||
149 | * expiration time is the expiration time of the record with smallest | ||
150 | * expiration time. | ||
151 | * | ||
152 | * @param rd_count number of records given in @a rd | ||
153 | * @param rd array of records | ||
154 | * @return absolute expiration time | ||
155 | */ | ||
156 | struct GNUNET_TIME_Absolute | 147 | struct GNUNET_TIME_Absolute |
157 | GNUNET_GNSRECORD_record_get_expiration_time (unsigned int rd_count, | 148 | GNUNET_GNSRECORD_record_get_expiration_time (unsigned int rd_count, |
158 | const struct | 149 | const struct |
159 | GNUNET_GNSRECORD_Data *rd) | 150 | GNUNET_GNSRECORD_Data *rd, |
151 | struct GNUNET_TIME_Absolute min) | ||
160 | { | 152 | { |
161 | struct GNUNET_TIME_Absolute expire; | 153 | struct GNUNET_TIME_Absolute expire; |
162 | struct GNUNET_TIME_Absolute at; | 154 | struct GNUNET_TIME_Absolute at; |
@@ -202,6 +194,7 @@ GNUNET_GNSRECORD_record_get_expiration_time (unsigned int rd_count, | |||
202 | expire = GNUNET_TIME_absolute_min (at, | 194 | expire = GNUNET_TIME_absolute_min (at, |
203 | expire); | 195 | expire); |
204 | } | 196 | } |
197 | expire = GNUNET_TIME_absolute_min (expire, min); | ||
205 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 198 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
206 | "Determined expiration time for block with %u records to be %s\n", | 199 | "Determined expiration time for block with %u records to be %s\n", |
207 | rd_count, | 200 | rd_count, |
@@ -406,5 +399,46 @@ GNUNET_GNSRECORD_record_to_identity_key (const struct GNUNET_GNSRECORD_Data *rd, | |||
406 | 399 | ||
407 | } | 400 | } |
408 | 401 | ||
402 | unsigned int | ||
403 | GNUNET_GNSRECORD_convert_records_for_export (const struct GNUNET_GNSRECORD_Data *rd, | ||
404 | unsigned int rd_count, | ||
405 | struct GNUNET_GNSRECORD_Data *rd_public, | ||
406 | struct GNUNET_TIME_Absolute *expiry) | ||
407 | { | ||
408 | struct GNUNET_TIME_Absolute expiry_tombstone; | ||
409 | struct GNUNET_TIME_Absolute now; | ||
410 | struct GNUNET_TIME_Absolute minimum_expiration; | ||
411 | unsigned int rd_public_count; | ||
412 | |||
413 | rd_public_count = 0; | ||
414 | minimum_expiration = GNUNET_TIME_UNIT_FOREVER_ABS; | ||
415 | now = GNUNET_TIME_absolute_get (); | ||
416 | for (unsigned int i = 0; i < rd_count; i++) | ||
417 | { | ||
418 | if (GNUNET_GNSRECORD_TYPE_TOMBSTONE == rd[i].record_type) | ||
419 | { | ||
420 | minimum_expiration.abs_value_us = rd[i].expiration_time; | ||
421 | continue; | ||
422 | } | ||
423 | if (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_PRIVATE)) | ||
424 | continue; | ||
425 | if ((0 == (rd[i].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION)) && | ||
426 | (rd[i].expiration_time < now.abs_value_us)) | ||
427 | continue; /* record already expired, skip it */ | ||
428 | rd_public[rd_public_count] = rd[i]; | ||
429 | /* Make sure critical record types are published as such */ | ||
430 | if (GNUNET_YES == GNUNET_GNSRECORD_is_critical (rd[i].record_type)) | ||
431 | rd_public[rd_public_count].flags |= GNUNET_GNSRECORD_RF_CRITICAL; | ||
432 | rd_public_count++; | ||
433 | } | ||
434 | |||
435 | *expiry = GNUNET_GNSRECORD_record_get_expiration_time (rd_public_count, | ||
436 | rd_public, | ||
437 | minimum_expiration); | ||
438 | |||
439 | return rd_public_count; | ||
440 | } | ||
441 | |||
442 | |||
409 | 443 | ||
410 | /* end of gnsrecord_misc.c */ | 444 | /* end of gnsrecord_misc.c */ |
diff --git a/src/gnsrecord/gnunet-gnsrecord-tvg.c b/src/gnsrecord/gnunet-gnsrecord-tvg.c index f9b83e48b..dec0855eb 100644 --- a/src/gnsrecord/gnunet-gnsrecord-tvg.c +++ b/src/gnsrecord/gnunet-gnsrecord-tvg.c | |||
@@ -212,7 +212,8 @@ run_pkey (void) | |||
212 | fprintf (stdout, "RDATA:\n"); | 212 | fprintf (stdout, "RDATA:\n"); |
213 | print_bytes (rdata, rdata_size, 8); | 213 | print_bytes (rdata, rdata_size, 8); |
214 | fprintf (stdout, "\n"); | 214 | fprintf (stdout, "\n"); |
215 | expire = GNUNET_GNSRECORD_record_get_expiration_time (TEST_RRCOUNT, rd); | 215 | expire = GNUNET_GNSRECORD_record_get_expiration_time (TEST_RRCOUNT, rd, |
216 | GNUNET_TIME_UNIT_FOREVER_ABS); | ||
216 | GNR_derive_block_aes_key (ctr, | 217 | GNR_derive_block_aes_key (ctr, |
217 | skey, | 218 | skey, |
218 | TEST_RECORD_LABEL, | 219 | TEST_RECORD_LABEL, |
@@ -348,7 +349,8 @@ run_edkey (void) | |||
348 | rdata_size = GNUNET_GNSRECORD_records_get_size (TEST_RRCOUNT, | 349 | rdata_size = GNUNET_GNSRECORD_records_get_size (TEST_RRCOUNT, |
349 | rd); | 350 | rd); |
350 | expire = GNUNET_GNSRECORD_record_get_expiration_time (TEST_RRCOUNT, | 351 | expire = GNUNET_GNSRECORD_record_get_expiration_time (TEST_RRCOUNT, |
351 | rd); | 352 | rd, |
353 | GNUNET_TIME_UNIT_FOREVER_ABS); | ||
352 | rdata = GNUNET_malloc (rdata_size); | 354 | rdata = GNUNET_malloc (rdata_size); |
353 | GNUNET_GNSRECORD_records_serialize (2, | 355 | GNUNET_GNSRECORD_records_serialize (2, |
354 | rd, | 356 | rd, |