From 3e364247caed8c0bbe0e81531473b6c6b86506c4 Mon Sep 17 00:00:00 2001 From: Kazu Yamamoto Date: Wed, 17 Oct 2012 10:28:45 +0900 Subject: Using conduit. --- Network/DNS/Decode.hs | 18 +++++++----------- Network/DNS/Resolver.hs | 3 +-- Network/DNS/StateBinary.hs | 8 ++++---- dns.cabal | 12 ++++++------ 4 files changed, 18 insertions(+), 23 deletions(-) diff --git a/Network/DNS/Decode.hs b/Network/DNS/Decode.hs index b598d97..b99fc44 100644 --- a/Network/DNS/Decode.hs +++ b/Network/DNS/Decode.hs @@ -11,23 +11,21 @@ import Data.Bits import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy as BL -import Data.Enumerator (Enumerator, run_, ($$)) +import Data.Conduit +import Data.Conduit.Network import Data.IP import Data.Maybe import Network import Network.DNS.Internal import Network.DNS.StateBinary -import Network.Socket.Enumerator ---------------------------------------------------------------- {-| Receiving DNS data from 'Socket' and parse it. The second argument is a buffer size for the socket. -} -receive :: Socket -> Integer -> IO DNSFormat -receive sock bufsize = receiveDNSFormat responseEnum - where - responseEnum = enumSocket bufsize sock +receive :: Socket -> IO DNSFormat +receive sock = receiveDNSFormat $ sourceSocket sock ---------------------------------------------------------------- @@ -37,12 +35,10 @@ decode :: BL.ByteString -> Either String DNSFormat decode bs = fst <$> runSGet decodeResponse bs ---------------------------------------------------------------- - -receiveDNSFormat :: Enumerator ByteString IO (DNSFormat, PState) - -> IO DNSFormat -receiveDNSFormat enum = fst <$> run_ (enum $$ iter) +receiveDNSFormat :: Source (ResourceT IO) ByteString -> IO DNSFormat +receiveDNSFormat src = fst <$> runResourceT (src $$ sink) where - iter = iterSGet decodeResponse + sink = sinkSGet decodeResponse ---------------------------------------------------------------- diff --git a/Network/DNS/Resolver.hs b/Network/DNS/Resolver.hs index 195ce39..fab99e2 100644 --- a/Network/DNS/Resolver.hs +++ b/Network/DNS/Resolver.hs @@ -173,10 +173,9 @@ lookupRaw :: Resolver -> Domain -> TYPE -> IO (Maybe DNSFormat) lookupRaw rlv dom typ = do seqno <- genId rlv sendAll sock (composeQuery seqno [q]) - (>>= check seqno) <$> timeout tm (receive sock bufsize) + (>>= check seqno) <$> timeout tm (receive sock) where sock = dnsSock rlv - bufsize = dnsBufsize rlv tm = dnsTimeout rlv q = makeQuestion dom typ check seqno res = do diff --git a/Network/DNS/StateBinary.hs b/Network/DNS/StateBinary.hs index 6b3fb6c..0389e71 100644 --- a/Network/DNS/StateBinary.hs +++ b/Network/DNS/StateBinary.hs @@ -6,11 +6,11 @@ import Control.Applicative import Control.Monad.State import Data.Attoparsec.ByteString import qualified Data.Attoparsec.ByteString.Lazy as AL -import Data.Attoparsec.Enumerator import Data.ByteString (ByteString) import qualified Data.ByteString as BS (unpack, length) import qualified Data.ByteString.Lazy as BL (ByteString) -import Data.Enumerator (Iteratee) +import Data.Conduit +import Data.Conduit.Attoparsec import Data.Int import Data.IntMap (IntMap) import qualified Data.IntMap as IM (insert, lookup, empty) @@ -159,8 +159,8 @@ getNByteString n = lift (take n) <* addPosition n initialState :: PState initialState = PState IM.empty 0 -iterSGet :: Monad m => SGet a -> Iteratee ByteString m (a, PState) -iterSGet parser = iterParser (runStateT parser initialState) +sinkSGet :: SGet a -> Sink ByteString (ResourceT IO) (a, PState) +sinkSGet parser = sinkParser (runStateT parser initialState) runSGet :: SGet a -> BL.ByteString -> Either String (a, PState) runSGet parser bs = AL.eitherResult $ AL.parse (runStateT parser initialState) bs diff --git a/dns.cabal b/dns.cabal index 8a4fdfa..83e4bfb 100644 --- a/dns.cabal +++ b/dns.cabal @@ -23,31 +23,31 @@ library if impl(ghc >= 7) Build-Depends: base >= 4 && < 5 , attoparsec - , attoparsec-enumerator + , attoparsec-conduit , binary , blaze-builder , bytestring + , conduit , containers - , enumerator , iproute >= 1.2.4 , mtl , network >= 2.3 - , network-enumerator + , network-conduit , random else Build-Depends: base >= 4 && < 5 , attoparsec - , attoparsec-enumerator + , attoparsec-conduit , binary , blaze-builder , bytestring + , conduit , containers - , enumerator , iproute >= 1.2.4 , mtl , network , network-bytestring - , network-enumerator + , network-conduit , random Source-Repository head Type: git -- cgit v1.2.3