fix cache

This commit is contained in:
anlicheng 2025-12-04 12:43:56 +08:00
parent 2a1e39b16e
commit 46ad37c81f

View File

@ -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.