diff options
author | Kazu Yamamoto <kazu@iij.ad.jp> | 2011-08-30 14:32:46 +0900 |
---|---|---|
committer | Kazu Yamamoto <kazu@iij.ad.jp> | 2011-08-30 14:32:46 +0900 |
commit | 0fa5d283af40eb6d994dde824f3e3beea1dc070b (patch) | |
tree | aef8c807d27ffc0cdc11c4893081911549f521f4 /Network/DNS/Response.hs | |
parent | e20884198d8765d05b75db1db2cd785d3983649c (diff) |
Domain -> ByteString.
Diffstat (limited to 'Network/DNS/Response.hs')
-rw-r--r-- | Network/DNS/Response.hs | 13 |
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 |