[erlang-questions] Code critique please
Jarrod Roberson
jarrod@REDACTED
Wed Dec 2 06:45:38 CET 2009
On Tue, Dec 1, 2009 at 9:36 AM, Hynek Vychodil <vychodil.hynek@REDACTED> wrote:
>
> I would prefer something like this:
>
> process_dnsrec(Sub,{ok,#dns_rec{anlist=Responses}}) ->
> dict:map(fun(S, V) -> process_responses(S, V, Responses) end, Sub).
>
> % process the list of resource records one at a time
> process_responses(S, Value, Responses) ->
> lists:foldl(fun(#dns_rr{domain = Domain} = Response, Val) ->
> process_response(lists:suffix(S, Domain), Response, Val)
> end, Value, Responses).
>
> process_response(false, _Response, Val) -> Val;
> process_response(true, #dns_rr{ttl = TTL} = Response, Val) when TTL == 0 ->
> dict:new();
> process_response(true, #dns_rr{domain = Domain, type = Type, class =
> Class} = Response) ->
> NewRR = Response#dns_rr{tm=get_timestamp()},
> dict:store({Domain, Type, Class}, NewRR, Val).
>
> You have got pull request on hithub ;-)
>
thanks for the help, this really set off a lightbulb for me!
I was able to add TXT record data parsing with your example and the
other foldl example from Zoltan Lajos Kis
I came up with this on my own.
process_response(true, #dns_rr{domain = Domain, type = Type, class =
Class} = Response, Val) when Type == txt ->
DTXT = lists:foldl(fun(T,D) -> [K,V] =
re:split(T,"=",[{return,list}]),dict:store(K,V,D)
end,dict:new(),Response#dns_rr.data),
NewRR = Response#dns_rr{tm=get_timestamp(),data=DTXT},
dict:store({Domain,Type,Class},NewRR,Val);
note: I had to get rid of the string:tokens since I ended up getting
things like "url=" and I was getting "bad_match" errors. So I had to
learn
someelse new, the re module! Next up is actually sending the Queries
to generate the responses without having to get iChat to broadcast
manually.
-- Jarrod Roberson
www.vertigrated.com/blog/
More information about the erlang-questions
mailing list