summaryrefslogtreecommitdiffhomepage
path: root/Network/DNS/Query.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Network/DNS/Query.hs')
-rw-r--r--Network/DNS/Query.hs19
1 files changed, 6 insertions, 13 deletions
diff --git a/Network/DNS/Query.hs b/Network/DNS/Query.hs
index 3c4852e..12343d9 100644
--- a/Network/DNS/Query.hs
+++ b/Network/DNS/Query.hs
@@ -1,6 +1,7 @@
module Network.DNS.Query (composeQuery) where
-import qualified Data.ByteString.Lazy.Char8 as L
+import qualified Data.ByteString.Lazy.Char8 as BL (ByteString)
+import qualified Data.ByteString.Char8 as BS (length, split, unpack, null)
import Data.Char
import Network.DNS.StateBinary
import Network.DNS.Internal
@@ -11,7 +12,7 @@ import Data.Monoid
----------------------------------------------------------------
-composeQuery :: Int -> [Question] -> L.ByteString
+composeQuery :: Int -> [Question] -> BL.ByteString
composeQuery idt qs = runSPut (encodeQuery qry)
where
hdr = header defaultQuery
@@ -63,15 +64,7 @@ encodeQuestion qs = encodeDomain dom
encodeDomain :: Domain -> SPut
encodeDomain dom = foldr (+++) (put8 0) (map encodeSubDomain $ zip ls ss)
where
- ss = split '.' dom
- ls = map length ss
+ ss = filter (not . BS.null) $ BS.split '.' dom
+ ls = map BS.length ss
encodeSubDomain (len,sub) = putInt8 (fromIntegral len)
- +++ foldr (+++) mempty (map (putInt8 . fromIntegral . ord) sub)
-
-split :: Char -> String -> [String]
-split _ "" = []
-split c cs
- | null rest = s : split c rest
- | otherwise = s : split c (tail rest)
- where
- (s,rest) = break (c ==) cs
+ +++ foldr (+++) mempty (map (putInt8 . fromIntegral . ord) (BS.unpack sub))