summaryrefslogtreecommitdiffhomepage
path: root/Network
diff options
context:
space:
mode:
authorGravatar Kazu Yamamoto <kazu@iij.ad.jp>2010-03-17 18:05:25 +0900
committerGravatar Kazu Yamamoto <kazu@iij.ad.jp>2010-03-17 18:05:25 +0900
commit8923a95ae272bb6565962803d533f26a52b6463c (patch)
treee0b5b271c7fd5e8540d526d3b7ed95cf6eddb670 /Network
parent510f31b3e1de263a2da95217cc9a8b440a769691 (diff)
supporting CNAME
Diffstat (limited to 'Network')
-rw-r--r--Network/DNS/Internal.hs14
-rw-r--r--Network/DNS/Response.hs3
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