summaryrefslogtreecommitdiffhomepage
path: root/Network/DNS/Response.hs
diff options
context:
space:
mode:
authorGravatar Kazu Yamamoto <kazu@iij.ad.jp>2011-08-30 14:32:46 +0900
committerGravatar Kazu Yamamoto <kazu@iij.ad.jp>2011-08-30 14:32:46 +0900
commit0fa5d283af40eb6d994dde824f3e3beea1dc070b (patch)
treeaef8c807d27ffc0cdc11c4893081911549f521f4 /Network/DNS/Response.hs
parente20884198d8765d05b75db1db2cd785d3983649c (diff)
Domain -> ByteString.
Diffstat (limited to 'Network/DNS/Response.hs')
-rw-r--r--Network/DNS/Response.hs13
1 files changed, 6 insertions, 7 deletions
diff --git a/Network/DNS/Response.hs b/Network/DNS/Response.hs
index c62f497..629cd92 100644
--- a/Network/DNS/Response.hs
+++ b/Network/DNS/Response.hs
@@ -1,9 +1,11 @@
+{-# LANGUAGE OverloadedStrings #-}
+
module Network.DNS.Response (parseResponse) where
import Control.Monad
import Data.Bits
+import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy.Char8 as L
-import Data.Char
import Data.IP
import Data.Maybe
import Network.DNS.Internal
@@ -100,7 +102,7 @@ decodeRData MX _ = RD_MX <$> decodePreference <*> decodeDomain
decodeRData CNAME _ = RD_CNAME <$> decodeDomain
decodeRData TXT len = (RD_TXT . ignoreLength) <$> getNByteString len
where
- ignoreLength = L.tail
+ ignoreLength = BS.tail
decodeRData A len = (RD_A . toIPv4) <$> getNBytes len
decodeRData AAAA len = (RD_AAAA . toIPv6 . combine) <$> getNBytes len
where
@@ -139,17 +141,14 @@ decodeDomain = do
let offset = n * 256 + d
fromMaybe (error $ "decodeDomain: " ++ show offset) <$> pop offset
else do
- hs <- decodeString n
+ hs <- getNByteString n
ds <- decodeDomain
- let dom = hs ++ "." ++ ds
+ let dom = hs `BS.append` "." `BS.append` ds
push pos dom
return dom
where
getValue c = c .&. 0x3f
isPointer c = testBit c 7 && testBit c 6
-decodeString :: Int -> SGet String
-decodeString n = map chr <$> getNBytes n
-
ignoreClass :: SGet ()
ignoreClass = () <$ get16