dns 2.0.1 → 2.0.2
raw patch · 4 files changed
+28/−1 lines, 4 filesdep ~bytestringPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: bytestring
API changes (from Hackage documentation)
+ Network.DNS.Decode: decodeMany :: ByteString -> Either String ([DNSMessage], ByteString)
Files
- Changelog +4/−0
- Network/DNS/Decode.hs +16/−0
- Network/DNS/StateBinary.hs +7/−0
- dns.cabal +1/−1
Changelog view
@@ -1,3 +1,7 @@+2.0.2+ - Providing a new API: decodeMany.+2.0.1+ - Updating document. 2.0.0 - DNSMessage is now monomorphic - RDATA is now monomorphic
Network/DNS/Decode.hs view
@@ -2,9 +2,11 @@ module Network.DNS.Decode ( decode+ , decodeMany , receive ) where +import Control.Applicative (many) import Control.Monad (replicateM) import Control.Monad.Trans.Resource (ResourceT, runResourceT) import qualified Control.Exception as ControlException@@ -45,6 +47,20 @@ decode :: BL.ByteString -> Either String DNSMessage decode bs = fst <$> runSGet decodeResponse bs++-- | Parse many length-encoded DNS records, for example, from TCP traffic.++decodeMany :: BL.ByteString -> Either String ([DNSMessage], BL.ByteString)+decodeMany bs = do+ ((bss, _), leftovers) <- runSGetWithLeftovers lengthEncoded bs+ msgs <- mapM decode bss+ return (msgs, leftovers)+ where+ -- Read a list of length-encoded lazy bytestrings+ lengthEncoded :: SGet [BL.ByteString]+ lengthEncoded = many $ do+ len <- getInt16+ fmap BL.fromStrict (getNByteString len) ---------------------------------------------------------------- receiveDNSFormat :: Source (ResourceT IO) ByteString -> IO DNSMessage
Network/DNS/StateBinary.hs view
@@ -168,5 +168,12 @@ runSGet :: SGet a -> BL.ByteString -> Either String (a, PState) runSGet parser bs = AL.eitherResult $ AL.parse (ST.runStateT parser initialState) bs +runSGetWithLeftovers :: SGet a -> BL.ByteString -> Either String ((a, PState), BL.ByteString)+runSGetWithLeftovers parser bs = toResult $ AL.parse (ST.runStateT parser initialState) bs+ where+ toResult :: AL.Result r -> Either String (r, BL.ByteString)+ toResult (AL.Done i r) = Right (r, i)+ toResult (AL.Fail _ _ err) = Left err+ runSPut :: SPut -> BL.ByteString runSPut = BB.toLazyByteString . BB.fromWrite . flip ST.evalState initialWState
dns.cabal view
@@ -1,5 +1,5 @@ Name: dns-Version: 2.0.1+Version: 2.0.2 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: Kazu Yamamoto <kazu@iij.ad.jp> License: BSD3