diff --git a/apps/dns_proxy/src/dns_cache.erl b/apps/dns_proxy/src/dns_cache.erl index 86d20d4..a46f3b4 100644 --- a/apps/dns_proxy/src/dns_cache.erl +++ b/apps/dns_proxy/src/dns_cache.erl @@ -29,20 +29,33 @@ lookup(#dns_query{name = Qname, type = QType, class = QClass}) -> insert(#dns_query{name = Qname, type = QType, class = QClass}, #dns_message{answers = Answers, authority = Authority, additional = Additional, aa = AA}) -> + TTLs = lists:foldl(fun(Term, Acc) -> + case Term of + #dns_rr{ttl = TTL} -> + [TTL|Acc]; + _ -> + Acc + end + end, [], Answers ++ Authority ++ Additional), + case length(TTLs) > 0 of + true -> + TTL = lists:min(TTLs), + ExpireAt = os:system_time(second) + TTL, - TTLs = [RR#dns_rr.ttl || RR <- Answers] ++ [RR#dns_rr.ttl || RR <- Authority] ++ [RR#dns_rr.ttl || RR <- Additional], - TTL = lists:min(TTLs), - ExpireAt = os:system_time(second) + TTL, + lager:debug("min ttl is: ~p, expire_at: ~p", [TTL, ExpireAt]), - Key = {Qname, QType, QClass}, - Cache = #dns_cache{ - key = Key, - answers = Answers, - authority = Authority, - additional = Additional, - rcode = 0, - flags = #{aa => AA}, - % unix time - expire_at = ExpireAt - }, - true = ets:insert(?TABLE, Cache). + Key = {Qname, QType, QClass}, + Cache = #dns_cache{ + key = Key, + answers = Answers, + authority = Authority, + additional = Additional, + rcode = 0, + flags = #{aa => AA}, + % unix time + expire_at = ExpireAt + }, + true = ets:insert(?TABLE, Cache); + false -> + ok + end. \ No newline at end of file