summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Kazu Yamamoto <kazu@iij.ad.jp>2012-10-17 10:28:45 +0900
committerGravatar Kazu Yamamoto <kazu@iij.ad.jp>2012-10-17 10:28:45 +0900
commit3e364247caed8c0bbe0e81531473b6c6b86506c4 (patch)
tree2233f4638b95643f74338fd08fd3e61fadf2f5a7
parentf392aa3a9105af46ee1e7522ad00f3508d068b88 (diff)
Using conduit.
-rw-r--r--Network/DNS/Decode.hs18
-rw-r--r--Network/DNS/Resolver.hs3
-rw-r--r--Network/DNS/StateBinary.hs8
-rw-r--r--dns.cabal12
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