fix error
This commit is contained in:
parent
b02d335057
commit
76d403e9eb
@ -80,13 +80,12 @@ handle_cast({handle_ip_packet, Sock, SrcIp, SrcPort, IpPacket}, State) ->
|
|||||||
case resolver(UdpPayload) of
|
case resolver(UdpPayload) of
|
||||||
{ok, DnsResp} ->
|
{ok, DnsResp} ->
|
||||||
RespIpPacket = build_ip_packet(ReqDAddr, ReqSAddr, ReqDPort, ReqSPort, DnsResp),
|
RespIpPacket = build_ip_packet(ReqDAddr, ReqSAddr, ReqDPort, ReqSPort, DnsResp),
|
||||||
lager:debug("[dns_handler] ip packet: ~p", [RespIpPacket]),
|
|
||||||
gen_udp:send(Sock, SrcIp, SrcPort, RespIpPacket);
|
gen_udp:send(Sock, SrcIp, SrcPort, RespIpPacket);
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
lager:debug("[dns_handler] resolver get error: ~p", [Reason])
|
lager:notice("[dns_handler] resolver get error: ~p", [Reason])
|
||||||
end;
|
end;
|
||||||
false ->
|
false ->
|
||||||
lager:debug("[dns_handler] resolver invalid protocol: ~p", [Protocol])
|
lager:notice("[dns_handler] resolver invalid protocol: ~p", [Protocol])
|
||||||
end,
|
end,
|
||||||
{stop, normal, State}.
|
{stop, normal, State}.
|
||||||
|
|
||||||
@ -147,25 +146,25 @@ resolver0(Packet, QueryMsg = #dns_message{qc = 1, questions = [Question = #dns_q
|
|||||||
authority = [],
|
authority = [],
|
||||||
additional = []
|
additional = []
|
||||||
},
|
},
|
||||||
lager:debug("[dns_handler] inbuilt qnanme: ~p, ip: ~p", [QName, Ip]),
|
lager:debug("[dns_handler] punchnet inbuilt qnanme: ~p, ip: ~p", [QName, Ip]),
|
||||||
{ok, dns:encode_message(RespMsg)};
|
{ok, dns:encode_message(RespMsg)};
|
||||||
error ->
|
error ->
|
||||||
%% 是否命中内部的域名后缀
|
%% 是否命中内部的域名后缀
|
||||||
EmptyDnsResp = dns:encode_message(build_nxdomain_response(QueryMsg)),
|
EmptyDnsResp = dns:encode_message(build_nxdomain_response(QueryMsg)),
|
||||||
case sdlan_domain_regedit:maybe_domain(QName) of
|
case sdlan_domain_regedit:maybe_domain(QName) of
|
||||||
true ->
|
true ->
|
||||||
lager:debug("[dns_handler] inbuilt qnanme: ~p, domain not exits", [QName]),
|
lager:debug("[dns_handler] punchnet inbuilt qnanme: ~p, nxdomain", [QName]),
|
||||||
{ok, EmptyDnsResp};
|
{ok, EmptyDnsResp};
|
||||||
false ->
|
false ->
|
||||||
case dns_cache:lookup(Question) of
|
case dns_cache:lookup(Question) of
|
||||||
{hit, Cache} ->
|
{hit, Cache} ->
|
||||||
lager:debug("[dns_handler] question: ~p, hit cache answers: ~p", [Question, Cache#dns_cache.answers]),
|
lager:debug("[dns_handler] qname: ~p, hit cache answers: ~p", [QName, Cache#dns_cache.answers]),
|
||||||
RespMsg = build_response(QueryMsg, Cache),
|
RespMsg = build_response(QueryMsg, Cache),
|
||||||
{ok, dns:encode_message(RespMsg)};
|
{ok, dns:encode_message(RespMsg)};
|
||||||
miss ->
|
miss ->
|
||||||
lager:debug("[dns_handler] cache is miss"),
|
|
||||||
Ref = make_ref(),
|
Ref = make_ref(),
|
||||||
forward_to_upstream(Ref, Packet, QueryMsg),
|
forward_to_upstream(Ref, Packet, QueryMsg),
|
||||||
|
lager:debug("[dns_handler] cache is miss, forward_to_upstream"),
|
||||||
receive
|
receive
|
||||||
{dns_resolver_reply, Ref, Resp} ->
|
{dns_resolver_reply, Ref, Resp} ->
|
||||||
case dns:decode_message(Resp) of
|
case dns:decode_message(Resp) of
|
||||||
|
|||||||
@ -98,13 +98,13 @@ handle_cast({forward, ReceiverPid, Ref, Request, #dns_message{id = TxId, questio
|
|||||||
{noreply, NewState :: #state{}, timeout() | hibernate} |
|
{noreply, NewState :: #state{}, timeout() | hibernate} |
|
||||||
{stop, Reason :: term(), NewState :: #state{}}).
|
{stop, Reason :: term(), NewState :: #state{}}).
|
||||||
handle_info({udp, Socket, TargetIp, TargetPort, Resp}, State = #state{tid = Tid, socket = Socket}) ->
|
handle_info({udp, Socket, TargetIp, TargetPort, Resp}, State = #state{tid = Tid, socket = Socket}) ->
|
||||||
case dns:decode_message(Resp) of
|
try dns:decode_message(Resp) of
|
||||||
#dns_message{id = TxId, questions = [#dns_query{name = QName, type = QType, class = QClass}|_]} ->
|
#dns_message{id = TxId, questions = [#dns_query{name = QName, type = QType, class = QClass}|_]} ->
|
||||||
Key = {TxId, TargetIp, TargetPort, QName, QType, QClass},
|
Key = {TxId, TargetIp, TargetPort, QName, QType, QClass},
|
||||||
Records = ets:take(Tid, Key),
|
Records = ets:take(Tid, Key),
|
||||||
resolver_reply(Records, Resp);
|
resolver_reply(Records, Resp)
|
||||||
_ ->
|
catch error:_ ->
|
||||||
ok
|
ok
|
||||||
end,
|
end,
|
||||||
{noreply, State};
|
{noreply, State};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user