aboutsummaryrefslogtreecommitdiff
path: root/src/gnsrecord
diff options
context:
space:
mode:
authorMartin Schanzenbach <schanzen@gnunet.org>2022-02-06 14:30:00 +0100
committerMartin Schanzenbach <schanzen@gnunet.org>2022-02-06 14:30:00 +0100
commit215032563755ba48d4e871b82c9c6697611726f8 (patch)
tree51123c26b3d1418d0d400593438e23da48a8b4c8 /src/gnsrecord
parentd322de96b95a7afad7f5bd255bf70642840a3778 (diff)
downloadgnunet-215032563755ba48d4e871b82c9c6697611726f8.tar.gz
gnunet-215032563755ba48d4e871b82c9c6697611726f8.zip
-simlify and correct tombstone logic
Diffstat (limited to 'src/gnsrecord')
-rw-r--r--src/gnsrecord/gnsrecord_misc.c54
-rw-r--r--src/gnsrecord/gnunet-gnsrecord-tvg.c6
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 */
156struct GNUNET_TIME_Absolute 147struct GNUNET_TIME_Absolute
157GNUNET_GNSRECORD_record_get_expiration_time (unsigned int rd_count, 148GNUNET_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
402unsigned int
403GNUNET_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,