@@ -42,7 +42,7 @@ defmodule ExICE.DNS.Message do
4242 { :ok , body , << >> } <- decode_body ( data , header ) do
4343 header = Map . drop ( header , [ :qdcount , :ancount , :nscount , :arcount ] )
4444 msg = Map . merge ( header , body )
45- struct! ( __MODULE__ , msg )
45+ { :ok , struct! ( __MODULE__ , msg ) }
4646 else
4747 _ -> :error
4848 end
@@ -153,37 +153,43 @@ defmodule ExICE.DNS.Message do
153153
154154 defp decode_name ( _ , _ ) , do: :error
155155
156- defp decode_type ( << 1 :: 16 , data :: binary >> ) , do: { :ok , :a , data }
157- defp decode_type ( << 2 :: 16 , data :: binary >> ) , do: { :ok , :ns , data }
158- defp decode_type ( << 3 :: 16 , data :: binary >> ) , do: { :ok , :md , data }
159- defp decode_type ( << 4 :: 16 , data :: binary >> ) , do: { :ok , :mf , data }
160- defp decode_type ( << 5 :: 16 , data :: binary >> ) , do: { :ok , :cname , data }
161- defp decode_type ( << 6 :: 16 , data :: binary >> ) , do: { :ok , :soa , data }
162- defp decode_type ( << 7 :: 16 , data :: binary >> ) , do: { :ok , :mb , data }
163- defp decode_type ( << 8 :: 16 , data :: binary >> ) , do: { :ok , :mg , data }
164- defp decode_type ( << 9 :: 16 , data :: binary >> ) , do: { :ok , :mr , data }
165- defp decode_type ( << 10 :: 16 , data :: binary >> ) , do: { :ok , :null , data }
166- defp decode_type ( << 11 :: 16 , data :: binary >> ) , do: { :ok , :wks , data }
167- defp decode_type ( << 12 :: 16 , data :: binary >> ) , do: { :ok , :ptr , data }
168- defp decode_type ( << 13 :: 16 , data :: binary >> ) , do: { :ok , :hinfo , data }
169- defp decode_type ( << 14 :: 16 , data :: binary >> ) , do: { :ok , :minfo , data }
170- defp decode_type ( << 15 :: 16 , data :: binary >> ) , do: { :ok , :mx , data }
171- defp decode_type ( << 16 :: 16 , data :: binary >> ) , do: { :ok , :txt , data }
172- defp decode_type ( << 252 :: 16 , data :: binary >> ) , do: { :ok , :afxr , data }
173- defp decode_type ( << 253 :: 16 , data :: binary >> ) , do: { :ok , :mailb , data }
174- defp decode_type ( << 254 :: 16 , data :: binary >> ) , do: { :ok , :maila , data }
175- defp decode_type ( << 255 :: 16 , data :: binary >> ) , do: { :ok , :* , data }
156+ defp decode_type ( << type :: 16 , data :: binary >> ) , do: { :ok , do_decode_type ( type ) , data }
176157 defp decode_type ( _ ) , do: :error
177158
159+ defp do_decode_type ( 1 ) , do: :a
160+ defp do_decode_type ( 2 ) , do: :ns
161+ defp do_decode_type ( 3 ) , do: :md
162+ defp do_decode_type ( 4 ) , do: :mf
163+ defp do_decode_type ( 5 ) , do: :cname
164+ defp do_decode_type ( 6 ) , do: :soa
165+ defp do_decode_type ( 7 ) , do: :mb
166+ defp do_decode_type ( 8 ) , do: :mg
167+ defp do_decode_type ( 9 ) , do: :mr
168+ defp do_decode_type ( 10 ) , do: :null
169+ defp do_decode_type ( 11 ) , do: :wks
170+ defp do_decode_type ( 12 ) , do: :ptr
171+ defp do_decode_type ( 13 ) , do: :hinfo
172+ defp do_decode_type ( 14 ) , do: :minfo
173+ defp do_decode_type ( 15 ) , do: :mx
174+ defp do_decode_type ( 16 ) , do: :txt
175+ defp do_decode_type ( 252 ) , do: :afxr
176+ defp do_decode_type ( 253 ) , do: :mailb
177+ defp do_decode_type ( 254 ) , do: :maila
178+ defp do_decode_type ( 255 ) , do: :*
179+
178180 # In mDNS, the top bit has special meaning.
179181 # See RFC 6762, sec. 18.12 and 18.13.
180- defp decode_class ( << top_bit :: 1 , 1 :: 15 , data :: binary >> ) , do: { :ok , top_bit == 1 , :in , data }
181- defp decode_class ( << top_bit :: 1 , 2 :: 15 , data :: binary >> ) , do: { :ok , top_bit == 1 , :cs , data }
182- defp decode_class ( << top_bit :: 1 , 3 :: 15 , data :: binary >> ) , do: { :ok , top_bit == 1 , :ch , data }
183- defp decode_class ( << top_bit :: 1 , 4 :: 15 , data :: binary >> ) , do: { :ok , top_bit == 1 , :hs , data }
184- defp decode_class ( << top_bit :: 1 , 255 :: 15 , data :: binary >> ) , do: { :ok , top_bit == 1 , :* , data }
182+ defp decode_class ( << top_bit :: 1 , class :: 15 , data :: binary >> ) ,
183+ do: { :ok , top_bit == 1 , do_decode_class ( class ) , data }
184+
185185 defp decode_class ( _ ) , do: :error
186186
187+ defp do_decode_class ( 1 ) , do: :in
188+ defp do_decode_class ( 2 ) , do: :cs
189+ defp do_decode_class ( 3 ) , do: :ch
190+ defp do_decode_class ( 4 ) , do: :hs
191+ defp do_decode_class ( 255 ) , do: :*
192+
187193 defp decode_ttl ( << ttl :: 32 , data :: binary >> ) , do: { :ok , ttl , data }
188194 defp decode_ttl ( _ ) , do: :error
189195
0 commit comments