diff options
author | Kazu Yamamoto <kazu@iij.ad.jp> | 2010-03-17 18:05:25 +0900 |
---|---|---|
committer | Kazu Yamamoto <kazu@iij.ad.jp> | 2010-03-17 18:05:25 +0900 |
commit | 8923a95ae272bb6565962803d533f26a52b6463c (patch) | |
tree | e0b5b271c7fd5e8540d526d3b7ed95cf6eddb670 /Network | |
parent | 510f31b3e1de263a2da95217cc9a8b440a769691 (diff) |
supporting CNAME
Diffstat (limited to 'Network')
-rw-r--r-- | Network/DNS/Internal.hs | 14 | ||||
-rw-r--r-- | Network/DNS/Response.hs | 3 |
2 files changed, 14 insertions, 3 deletions
diff --git a/Network/DNS/Internal.hs b/Network/DNS/Internal.hs index ceedb2b..ac6b8ba 100644 --- a/Network/DNS/Internal.hs +++ b/Network/DNS/Internal.hs @@ -5,12 +5,13 @@ import Data.IP ---------------------------------------------------------------- -data TYPE = A | AAAA | NS | TXT | MX | UNKNOWN deriving (Eq, Show, Read) +data TYPE = A | AAAA | NS | TXT | MX | CNAME | UNKNOWN deriving (Eq, Show, Read) rrDB :: [(TYPE, Int)] rrDB = [ (A, 1) , (NS, 2) + , (CNAME, 5) , (MX, 15) , (TXT, 16) , (AAAA, 28) @@ -59,7 +60,16 @@ data ResourceRecord = ResourceRecord { , rdata :: RDATA } deriving (Eq, Show) -data RDATA = RD_NS Domain | RD_A IPv4 | RD_AAAA IPv6 | RD_OTH [Int] deriving (Eq, Show) +data RDATA = RD_NS Domain | RD_CNAME Domain + | RD_A IPv4 | RD_AAAA IPv6 + | RD_OTH [Int] deriving (Eq) + +instance Show RDATA where + show (RD_NS dom) = dom + show (RD_CNAME dom) = dom + show (RD_A a) = show a + show (RD_AAAA aaaa) = show aaaa + show (RD_OTH is) = show is ---------------------------------------------------------------- diff --git a/Network/DNS/Response.hs b/Network/DNS/Response.hs index d3a7a22..1ef8973 100644 --- a/Network/DNS/Response.hs +++ b/Network/DNS/Response.hs @@ -99,6 +99,7 @@ decodeRData AAAA len = (RD_AAAA . toIPv6 . combine) <$> getNBytes len combine [] = [] combine [_] = error "combine" combine (a:b:cs) = a * 256 + b : combine cs +decodeRData CNAME _ = RD_CNAME <$> decodeDomain decodeRData _ len = RD_OTH <$> getNBytes len ---------------------------------------------------------------- @@ -115,7 +116,7 @@ decodeDomain = do then do d <- getInt8 let offset = n * 256 + d - maybe (error "decodeDomain") id <$> pop offset + maybe (error $ "decodeDomain: " ++ show offset) id <$> pop offset else do hs <- decodeString n ds <- decodeDomain |