return ret;
}
+ /* Mark as expiring if it has less than 1% TTL (or less than 5s) */
+ if (is_expiring(&cache_rr, drift)) {
+ if (qry->flags & QUERY_NO_EXPIRING) {
+ return kr_error(ENOENT);
+ } else {
+ qry->flags |= QUERY_EXPIRING;
+ }
+ }
+
/* Update packet question */
if (!knot_dname_is_equal(knot_pkt_qname(pkt), name)) {
KR_PKT_RECYCLE(pkt);
knot_pkt_put_question(pkt, qry->sname, qry->sclass, qry->stype);
}
- /* Mark as expiring if it has less than 1% TTL (or less than 5s) */
- if (is_expiring(&cache_rr, drift)) {
- qry->flags |= QUERY_EXPIRING;
- }
-
/* Update packet answer */
knot_rrset_t rr_copy;
ret = kr_cache_materialize(&rr_copy, &cache_rr, drift, &pkt->mm);
X(AWAIT_CUT , 1 << 6) /**< Query is waiting for zone cut lookup */ \
X(SAFEMODE , 1 << 7) /**< Don't use fancy stuff (EDNS...) */ \
X(CACHED , 1 << 8) /**< Query response is cached. */ \
- X(EXPIRING , 1 << 9) /**< Query response is cached, but expiring. */
+ X(EXPIRING , 1 << 9) /**< Query response is cached, but expiring. */ \
+ X(NO_EXPIRING, 1 << 10) /**< Do not use expiring cached records. */ \
/** Query flags */
enum kr_query_flag {