module Network.DNS.Types
( DNSType(..)
, ResponseCode(..)
, RR(..)
, rrToType
) where
import qualified Data.ByteString as B
import Network.Socket (HostAddress, HostAddress6)
import Data.Word (Word32)
data DNSType = A | NS | CNAME | SOA | PTR | MX | TXT | AAAA
| UnknownDNSType
deriving (Show, Eq, Ord)
instance Enum DNSType where
fromEnum A = 1
fromEnum NS = 2
fromEnum CNAME = 5
fromEnum SOA = 6
fromEnum PTR = 12
fromEnum MX = 15
fromEnum TXT = 16
fromEnum AAAA = 28
fromEnum UnknownDNSType = error "fromEnum of UnknownDNSType"
toEnum 1 = A
toEnum 2 = NS
toEnum 5 = CNAME
toEnum 6 = SOA
toEnum 12 = PTR
toEnum 15 = MX
toEnum 16 = TXT
toEnum 28 = AAAA
toEnum _ = UnknownDNSType
data ResponseCode = NoError
| FormatError
| ServerError
| NXDomain
| NotImplemented
| AccessDenied
deriving (Show, Eq, Enum, Bounded)
data RR = RRCNAME [String]
| RRMX [(Int, [String])]
| RRNS [String]
| RRPTR [String]
| RRSOA { soaName :: [String]
, soaRname :: [String]
, soaSerial :: Word32
, soaRefresh :: Word32
, soaRetry :: Word32
, soaExpire :: Word32
, soaMinTTL :: Word32 }
| RRTXT B.ByteString
| RRA [HostAddress]
| RRAAAA [HostAddress6]
deriving (Show)
rrToType :: RR -> DNSType
rrToType (RRCNAME _) = CNAME
rrToType (RRMX _) = MX
rrToType (RRNS _) = NS
rrToType (RRPTR _) = PTR
rrToType (RRSOA { }) = SOA
rrToType (RRTXT _) = TXT
rrToType (RRA _) = A
rrToType (RRAAAA _) = AAAA