/*
This file is part of GNUnet.
- (C) 2009-2013 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2009-2013 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
/**
char *
GNUNET_GNSRECORD_string_to_lowercase (const char *src)
{
- GNUNET_assert (NULL != src);
- char *res = strdup (src);
- /* normalize */
- GNUNET_STRINGS_utf8_tolower(src, &res);
+ char *res;
+
+ res = GNUNET_strdup (src);
+ GNUNET_STRINGS_utf8_tolower (src, res);
return res;
}
const struct GNUNET_GNSRECORD_Data *rd)
{
unsigned int c;
+ unsigned int c2;
struct GNUNET_TIME_Absolute expire;
struct GNUNET_TIME_Absolute at;
struct GNUNET_TIME_Relative rt;
+ struct GNUNET_TIME_Absolute at_shadow;
+ struct GNUNET_TIME_Relative rt_shadow;
if (NULL == rd)
return GNUNET_TIME_UNIT_ZERO_ABS;
{
at.abs_value_us = rd[c].expiration_time;
}
+
+ for (c2 = 0; c2 < rd_count; c2++)
+ {
+ /* Check for shadow record */
+ if ((c == c2) ||
+ (rd[c].record_type != rd[c2].record_type) ||
+ (0 == (rd[c2].flags & GNUNET_GNSRECORD_RF_SHADOW_RECORD)))
+ continue;
+ /* We have a shadow record */
+ if (0 != (rd[c2].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION))
+ {
+ rt_shadow.rel_value_us = rd[2].expiration_time;
+ at_shadow = GNUNET_TIME_relative_to_absolute (rt_shadow);
+ }
+ else
+ {
+ at_shadow.abs_value_us = rd[c2].expiration_time;
+ }
+ at = GNUNET_TIME_absolute_max (at, at_shadow);
+ }
expire = GNUNET_TIME_absolute_min (at, expire);
}
LOG (GNUNET_ERROR_TYPE_DEBUG,