static int
cache_is_expired(time_t t, uint32_t ttl, int frac)
{
- if (time(NULL) - t >= ttl * frac / 100)
+ if (monotonic_time() - t >= ttl * frac / 100)
return 1;
return 0;
avl_for_each_element_safe(&services, s, avl, t)
if (!strcmp(s->entry, entry)) {
s->refresh = 50;
- s->time = time(NULL);
+ s->time = monotonic_time();
return s;
}
&host_buf, hlen ? hlen + 1 : 0);
s->avl.key = s->entry = strcpy(entry_buf, entry);
- s->time = time(NULL);
+ s->time = monotonic_time();
s->ttl = ttl;
s->iface = iface;
s->refresh = 50;
return;
port = be16_to_cpu(dsd->port);
+ memcpy(rdata_buffer, dsd, sizeof(*dsd));
+ if (dn_expand(base, base + blen, (const uint8_t*)&dsd[1],
+ &rdata_buffer[sizeof(*dsd)], MAX_DATA_LEN - sizeof(*dsd)) < 0) {
+ perror("process_answer/dn_expand");
+ return;
+ }
+ dlen = sizeof(*dsd) + strlen(&rdata_buffer[sizeof(*dsd)]) + 1;
+ rdata = (uint8_t*)rdata_buffer;
break;
case TYPE_TXT:
if (r) {
if (!a->ttl) {
DBG(1, "D -> %s %s ttl:%d\n", dns_type_string(r->type), r->record, r->ttl);
- r->time = time(0) + 1 - r->ttl;
+ r->time = monotonic_time() + 1 - r->ttl;
} else {
r->ttl = a->ttl;
DBG(1, "A -> %s %s ttl:%d\n", dns_type_string(r->type), r->record, r->ttl);
r->ttl = a->ttl;
r->port = port;
r->rdlength = dlen;
- r->time = time(NULL);
+ r->time = monotonic_time();
r->iface = iface;
if (tlen)