packages feed

dns 2.0.4 → 2.0.5

raw patch · 8 files changed

+89/−32 lines, 8 filesdep +bytestring-builderdep −blaze-builderPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: bytestring-builder

Dependencies removed: blaze-builder

API changes (from Hackage documentation)

+ Network.DNS.Encode: composeQueryAD :: Int -> [Question] -> ByteString
+ Network.DNS.Resolver: lookupRawAD :: Resolver -> Domain -> TYPE -> IO (Either DNSError DNSMessage)
+ Network.DNS.Types: RD_TLSA :: Int -> Int -> Int -> ByteString -> RData
+ Network.DNS.Types: TLSA :: TYPE
+ Network.DNS.Types: [authenData] :: DNSFlags -> Bool
- Network.DNS.Types: DNSFlags :: QorR -> OPCODE -> Bool -> Bool -> Bool -> Bool -> RCODE -> DNSFlags
+ Network.DNS.Types: DNSFlags :: QorR -> OPCODE -> Bool -> Bool -> Bool -> Bool -> RCODE -> Bool -> DNSFlags

Files

Network/DNS/Decode.hs view
@@ -98,6 +98,7 @@                         (getRecDesired flgs)                         (getRecAvailable flgs)                         rcode_+                        (getAuthenData flgs)     getQorR w = if testBit w 15 then QR_Response else QR_Query     getOpcode w = Safe.toEnumMay (fromIntegral (shiftR w 11 .&. 0x0f))     getAuthAnswer w = testBit w 10@@ -105,6 +106,7 @@     getRecDesired w = testBit w 8     getRecAvailable w = testBit w 7     getRcode w = Safe.toEnumMay (fromIntegral (w .&. 0x0f))+    getAuthenData w = testBit w 5  ---------------------------------------------------------------- @@ -229,6 +231,16 @@             optLen <- getInt16             dat <- decodeOData optCode optLen             (dat:) <$> decode' (l - optLen - 4)+--+decodeRData TLSA len = RD_TLSA <$> decodeUsage+                               <*> decodeSelector+                               <*> decodeMType+                               <*> decodeADF+  where+    decodeUsage    = getInt8+    decodeSelector = getInt8+    decodeMType    = getInt8+    decodeADF      = getNByteString (len - 3) decodeRData _  len = RD_OTH <$> getNByteString len  decodeOData :: OPTTYPE -> Int -> SGet OData
Network/DNS/Encode.hs view
@@ -3,14 +3,16 @@ module Network.DNS.Encode (     encode   , composeQuery+  , composeQueryAD   ) where -import qualified Blaze.ByteString.Builder as BB import Control.Monad (when) import Control.Monad.State (State, modify, execState, gets) import Data.Binary (Word16) import Data.Bits ((.|.), bit, shiftL, setBit)+import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Char8 as BS+import qualified Data.ByteString.Lazy as BL import Data.ByteString.Lazy.Char8 (ByteString) import Data.IP (IP(..),fromIPv4, fromIPv6b) import Data.List (dropWhileEnd)@@ -37,6 +39,21 @@       , question = qs       } +composeQueryAD :: Int -> [Question] -> ByteString+composeQueryAD idt qs = encode qry+  where+      hdr = header defaultQuery+      flg = flags hdr+      qry = defaultQuery {+          header = hdr {+              identifier = idt,+              flags = flg {+                  authenData = True+              }+           }+        , question = qs+        }+ ----------------------------------------------------------------  -- | Composing DNS data.@@ -83,6 +100,7 @@     st :: State Word16 ()     st = sequence_               [ set (word16 rcode)+              , when authenData          $ set (bit 5)               , when recAvailable        $ set (bit 7)               , when recDesired          $ set (bit 8)               , when trunCation          $ set (bit 9)@@ -101,10 +119,11 @@ putRData :: RData -> SPut putRData rd = do     addPositionW 2 -- "simulate" putInt16-    rDataWrite <- encodeRDATA rd-    let rdataLength = fromIntegral . BS.length . BB.toByteString . BB.fromWrite $ rDataWrite-    let rlenWrite = BB.writeInt16be rdataLength-    return rlenWrite <> return rDataWrite+    rDataBuilder <- encodeRDATA rd+    -- fixmed: SPut must hold length+    let rdataLength = fromIntegral . BL.length . BB.toLazyByteString $ rDataBuilder+    let rlenBuilder = BB.int16BE rdataLength+    return rlenBuilder <> return rDataBuilder  encodeRR :: ResourceRecord -> SPut encodeRR ResourceRecord{..} = mconcat [ encodeDomain rrname@@ -149,6 +168,12 @@         , putInt16 weight         , putInt16 port         , encodeDomain dom+        ]+    (RD_TLSA u s m d) -> mconcat+        [ putInt8 u+        , putInt8 s+        , putInt8 m+        , putByteString d         ]  encodeOData :: OData -> SPut
Network/DNS/Internal.hs view
@@ -5,6 +5,8 @@ import Control.Exception (Exception) import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as BS+import qualified Data.ByteString.Builder as L+import qualified Data.ByteString.Lazy as L import Data.IP (IP, IPv4, IPv6) import Data.Maybe (fromMaybe) import Data.Typeable (Typeable)@@ -28,6 +30,7 @@           | SRV           | DNAME           | OPT+          | TLSA           | UNKNOWN Int deriving (Eq, Show, Read)  rrDB :: [(TYPE, Int)]@@ -43,6 +46,7 @@   , (SRV,   33)   , (DNAME, 39) -- RFC 2672   , (OPT,   41) -- RFC 6891+  , (TLSA,  52) -- RFC 6898   ]  data OPTTYPE = ClientSubnet@@ -137,6 +141,7 @@   , recDesired   :: Bool   , recAvailable :: Bool   , rcode        :: RCODE+  , authenData   :: Bool   } deriving (Eq, Show)  ----------------------------------------------------------------@@ -201,6 +206,7 @@            | RD_SRV Int Int Int Domain            | RD_OPT [OData]            | RD_OTH ByteString+           | RD_TLSA Int Int Int ByteString     deriving (Eq)  instance Show RData where@@ -216,6 +222,7 @@   show (RD_SRV pri wei prt dom) = show pri ++ " " ++ show wei ++ " " ++ show prt ++ BS.unpack dom   show (RD_OPT od) = show od   show (RD_OTH is) = show is+  show (RD_TLSA use sel mtype dgst) = show use ++ " " ++ show sel ++ " " ++ show mtype ++ " " ++ (BS.unpack $ L.toStrict . L.toLazyByteString . L.byteStringHex $ dgst)   data OData = OD_ClientSubnet Int Int IP@@ -236,6 +243,7 @@          , recDesired   = True          , recAvailable = False          , rcode        = NoErr+         , authenData   = False          }      }   , question   = []@@ -254,6 +262,7 @@               qOrR = QR_Response             , authAnswer = True             , recAvailable = True+            , authenData = False             }         }       }
Network/DNS/Lookup.hs view
@@ -197,8 +197,7 @@ lookupAAAAviaMX :: Resolver -> Domain -> IO (Either DNSError [IPv6]) lookupAAAAviaMX rlv dom = lookupXviaMX rlv dom (lookupAAAA rlv) -lookupXviaMX :: Show a-             => Resolver+lookupXviaMX :: Resolver              -> Domain              -> (Domain -> IO (Either DNSError [a]))              -> IO (Either DNSError [a])
Network/DNS/Resolver.hs view
@@ -14,6 +14,7 @@   , lookupAuth   -- ** Raw looking up function   , lookupRaw+  , lookupRawAD   , fromDNSMessage   , fromDNSFormat   ) where@@ -27,7 +28,7 @@ import Network.DNS.Encode import Network.DNS.Internal import qualified Data.ByteString.Char8 as BS-import Network.Socket (HostName, Socket, SocketType(Datagram), sClose, socket, connect)+import Network.Socket (HostName, Socket, SocketType(Datagram), close, socket, connect) import Network.Socket (AddrInfoFlag(..), AddrInfo(..), SockAddr(..), PortNumber(..), defaultHints, getAddrInfo) import Prelude hiding (lookup) import System.Random (getStdRandom, randomR)@@ -166,7 +167,7 @@ --   'Resolver'. If multiple 'Resolver's are necessary for --   concurrent purpose, use 'withResolvers'. withResolver :: ResolvSeed -> (Resolver -> IO a) -> IO a-withResolver seed func = bracket (openSocket seed) sClose $ \sock -> do+withResolver seed func = bracket (openSocket seed) close $ \sock -> do     connectSocket sock seed     func $ makeResolver seed sock @@ -181,7 +182,7 @@     func resolvs   where     openSockets = mapM openSocket seeds-    closeSockets = mapM sClose+    closeSockets = mapM close  openSocket :: ResolvSeed -> IO Socket openSocket seed = socket (addrFamily ai) (addrSocketType ai) (addrProtocol ai)@@ -291,7 +292,9 @@ --                                      trunCation = False, --                                      recDesired = True, --                                      recAvailable = True,---                                      rcode = NoErr },+--                                      rcode = NoErr,+--                                      authenData = False+--                                    }, --                        }, --             question = [Question { qname = \"www.example.com.\", --                                    qtype = A}],@@ -305,19 +308,25 @@ --  @ -- lookupRaw :: Resolver -> Domain -> TYPE -> IO (Either DNSError DNSMessage)-lookupRaw = lookupRawInternal receive+lookupRaw = lookupRawInternal receive False +lookupRawAD :: Resolver -> Domain -> TYPE -> IO (Either DNSError DNSMessage)+lookupRawAD = lookupRawInternal receive True+++ lookupRawInternal ::     (Socket -> IO DNSMessage)+    -> Bool     -> Resolver     -> Domain     -> TYPE     -> IO (Either DNSError DNSMessage)-lookupRawInternal _ _   dom _+lookupRawInternal _ _ _   dom _   | isIllegal dom     = return $ Left IllegalDomain-lookupRawInternal rcv rlv dom typ = do+lookupRawInternal rcv ad rlv dom typ = do     seqno <- genId rlv-    let query = composeQuery seqno [q]+    let query = (if ad then composeQueryAD else composeQuery) seqno [q]         checkSeqno = check seqno     loop query checkSeqno 0 False   where
Network/DNS/StateBinary.hs view
@@ -1,8 +1,6 @@ {-# LANGUAGE TypeSynonymInstances, FlexibleInstances, CPP #-} module Network.DNS.StateBinary where -import Blaze.ByteString.Builder (Write)-import qualified Blaze.ByteString.Builder as BB import Control.Monad.State (State, StateT) import qualified Control.Monad.State as ST import Control.Monad.Trans.Resource (ResourceT)@@ -11,6 +9,8 @@ import qualified Data.Attoparsec.Types as T import Data.ByteString (ByteString) import qualified Data.ByteString as BS+import Data.ByteString.Builder (Builder)+import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Lazy as BL import Data.Conduit (Sink) import Data.Conduit.Attoparsec (sinkParser)@@ -28,7 +28,7 @@  ---------------------------------------------------------------- -type SPut = State WState Write+type SPut = State WState Builder  data WState = WState {     wsDomain :: Map Domain Int@@ -43,36 +43,36 @@     mappend a b = mconcat <$> sequence [a, b]  put8 :: Word8 -> SPut-put8 = fixedSized 1 BB.writeWord8+put8 = fixedSized 1 BB.word8  put16 :: Word16 -> SPut-put16 = fixedSized 2 BB.writeWord16be+put16 = fixedSized 2 BB.word16BE  put32 :: Word32 -> SPut-put32 = fixedSized 4 BB.writeWord32be+put32 = fixedSized 4 BB.word32BE  putInt8 :: Int -> SPut-putInt8 = fixedSized 1 (BB.writeInt8 . fromIntegral)+putInt8 = fixedSized 1 (BB.int8 . fromIntegral)  putInt16 :: Int -> SPut-putInt16 = fixedSized 2 (BB.writeInt16be . fromIntegral)+putInt16 = fixedSized 2 (BB.int16BE . fromIntegral)  putInt32 :: Int -> SPut-putInt32 = fixedSized 4 (BB.writeInt32be . fromIntegral)+putInt32 = fixedSized 4 (BB.int32BE . fromIntegral)  putByteString :: ByteString -> SPut-putByteString = writeSized BS.length BB.writeByteString+putByteString = writeSized BS.length BB.byteString  addPositionW :: Int -> State WState () addPositionW n = do     (WState m cur) <- ST.get     ST.put $ WState m (cur+n) -fixedSized :: Int -> (a -> Write) -> a -> SPut+fixedSized :: Int -> (a -> Builder) -> a -> SPut fixedSized n f a = do addPositionW n                       return (f a) -writeSized :: Show a => (a -> Int) -> (a -> Write) -> a -> SPut+writeSized :: (a -> Int) -> (a -> Builder) -> a -> SPut writeSized n f a = do addPositionW (n a)                       return (f a) @@ -176,4 +176,4 @@     toResult (AL.Fail _ _ err) = Left err  runSPut :: SPut -> BL.ByteString-runSPut = BB.toLazyByteString . BB.fromWrite . flip ST.evalState initialWState+runSPut = BB.toLazyByteString . flip ST.evalState initialWState
dns.cabal view
@@ -1,5 +1,5 @@ Name:                   dns-Version:                2.0.4+Version:                2.0.5 Author:                 Kazu Yamamoto <kazu@iij.ad.jp> Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp> License:                BSD3@@ -29,8 +29,8 @@     Build-Depends:      base >= 4 && < 5                       , attoparsec                       , binary-                      , blaze-builder                       , bytestring+                      , bytestring-builder                       , conduit >= 1.1                       , conduit-extra >= 1.1                       , containers@@ -44,8 +44,8 @@     Build-Depends:      base >= 4 && < 5                       , attoparsec                       , binary-                      , blaze-builder                       , bytestring+                      , bytestring-builder                       , conduit >= 1.1                       , conduit-extra >= 1.1                       , containers@@ -67,6 +67,7 @@   Build-Depends:        dns                       , base                       , bytestring+                      , bytestring-builder                       , hspec  Test-Suite spec@@ -80,8 +81,8 @@   Build-Depends:        base                       , attoparsec                       , binary-                      , blaze-builder                       , bytestring+                      , bytestring-builder                       , conduit >= 1.1                       , conduit-extra >= 1.1                       , containers
test/EncodeSpec.hs view
@@ -67,6 +67,7 @@          , recDesired = True          , recAvailable = True          , rcode = NoErr+         , authenData = False          }        }   , question = [Question {@@ -175,6 +176,7 @@          , recDesired = True          , recAvailable = True          , rcode = NoErr+         , authenData = False          }        }   , question = [Question {