dns 0.2.0 → 0.2.1
raw patch · 5 files changed
+62/−3 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Network.DNS.Lookup: lookupPTR :: Resolver -> Domain -> IO (Maybe [Domain])
+ Network.DNS.Lookup: lookupSRV :: Resolver -> Domain -> IO (Maybe [(Int, Int, Int, Domain)])
+ Network.DNS.Types: PTR :: TYPE
+ Network.DNS.Types: RD_PTR :: Domain -> RDATA
+ Network.DNS.Types: RD_SRV :: Int -> Int -> Int -> Domain -> RDATA
+ Network.DNS.Types: SRV :: TYPE
Files
- Network/DNS/Internal.hs +7/−2
- Network/DNS/Lookup.hs +26/−0
- Network/DNS/Response.hs +9/−0
- Test.hs +19/−0
- dns.cabal +1/−1
Network/DNS/Internal.hs view
@@ -18,7 +18,7 @@ {-| Types for resource records. -}-data TYPE = A | AAAA | NS | TXT | MX | CNAME | SOA+data TYPE = A | AAAA | NS | TXT | MX | CNAME | SOA | PTR | SRV | UNKNOWN Int deriving (Eq, Show, Read) rrDB :: [(TYPE, Int)]@@ -27,9 +27,11 @@ , (NS, 2) , (CNAME, 5) , (SOA, 6)+ , (PTR, 12) , (MX, 15) , (TXT, 16) , (AAAA, 28)+ , (SRV, 33) ] rookup :: (Eq b) => b -> [(a,b)] -> Maybe a@@ -125,9 +127,10 @@ {-| Raw data format for each type. -}-data RDATA = RD_NS Domain | RD_CNAME Domain | RD_MX Int Domain+data RDATA = RD_NS Domain | RD_CNAME Domain | RD_MX Int Domain | RD_PTR Domain | RD_SOA Domain Domain Int Int Int Int Int | RD_A IPv4 | RD_AAAA IPv6 | RD_TXT ByteString+ | RD_SRV Int Int Int Domain | RD_OTH [Int] deriving (Eq) instance Show RDATA where@@ -138,6 +141,8 @@ show (RD_AAAA aaaa) = show aaaa show (RD_TXT txt) = BS.unpack txt show (RD_SOA mn _ _ _ _ _ mi) = BS.unpack mn ++ " " ++ show mi+ show (RD_PTR dom) = BS.unpack dom+ show (RD_SRV pri wei prt dom) = show pri ++ " " ++ show wei ++ " " ++ show prt ++ BS.unpack dom show (RD_OTH is) = show is ----------------------------------------------------------------
Network/DNS/Lookup.hs view
@@ -6,6 +6,8 @@ lookupA, lookupAAAA , lookupMX, lookupAviaMX, lookupAAAAviaMX , lookupTXT+ , lookupPTR+ , lookupSRV ) where import Control.Applicative@@ -82,3 +84,27 @@ toTXT = maybe Nothing (Just . map unTag) unTag (RD_TXT x) = x unTag _ = error "lookupTXT"++----------------------------------------------------------------++{-|+ Resolving 'Domain' and its preference by 'PTR'.+-}+lookupPTR :: Resolver -> Domain -> IO (Maybe [Domain])+lookupPTR rlv dom = toPTR <$> DNS.lookup rlv dom PTR+ where+ toPTR = maybe Nothing (Just . map unTag)+ unTag (RD_PTR dm) = dm+ unTag _ = error "lookupPTR"++----------------------------------------------------------------++{-|+ Resolving 'Domain' and its preference by 'SRV'.+-}+lookupSRV :: Resolver -> Domain -> IO (Maybe [(Int,Int,Int,Domain)])+lookupSRV rlv dom = toSRV <$> DNS.lookup rlv dom SRV+ where+ toSRV = maybe Nothing (Just . map unTag)+ unTag (RD_SRV pri wei prt dm) = (pri,wei,prt,dm)+ unTag _ = error "lookupSRV"
Network/DNS/Response.hs view
@@ -126,6 +126,15 @@ decodeRetry = getInt32 decodeExpire = getInt32 decodeMinumun = getInt32+decodeRData PTR _ = RD_PTR <$> decodeDomain+decodeRData SRV _ = RD_SRV <$> decodePriority+ <*> decodeWeight+ <*> decodePort+ <*> decodeDomain+ where+ decodePriority = getInt16+ decodeWeight = getInt16+ decodePort = getInt16 decodeRData _ len = RD_OTH <$> getNBytes len
Test.hs view
@@ -7,6 +7,7 @@ import Test.Framework (defaultMain, testGroup, Test) import Test.Framework.Providers.HUnit import Test.HUnit hiding (Test)+import qualified Data.ByteString.Char8 as BS tests :: [Test] tests = [@@ -16,6 +17,8 @@ , testCase "lookupTXT" test_lookupTXT , testCase "lookupAviaMX" test_lookupAviaMX , testCase "lookupAviaCNAME" test_lookupAviaCNAME+ , testCase "lookupPTR" test_lookupPTR+ , testCase "lookupSRV" test_lookupSRV ] ] @@ -59,6 +62,22 @@ rs <- makeResolvSeed defaultResolvConf withResolver rs $ \resolver -> DNS.lookupA resolver "ghs.google.com" ??= ["72.14.203.121"]++test_lookupPTR :: IO ()+test_lookupPTR = do+ rs <- makeResolvSeed defaultResolvConf+ withResolver rs $ \resolver ->+ DNS.lookupPTR resolver rev ?= Just ["www-v4.iij.ad.jp."]+ where+ target = "210.130.137.80"+ rev = BS.intercalate "." (reverse (BS.split '.' target))+ `BS.append` ".in-addr.arpa"++test_lookupSRV :: IO ()+test_lookupSRV = do+ rs <- makeResolvSeed defaultResolvConf+ withResolver rs $ \resolver ->+ DNS.lookupSRV resolver "_sip._tcp.cisco.com" ?= Just [(1,0,5060,"vcsgw.cisco.com.")] main :: IO () main = defaultMain tests
dns.cabal view
@@ -1,5 +1,5 @@ Name: dns-Version: 0.2.0+Version: 0.2.1 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: Kazu Yamamoto <kazu@iij.ad.jp> License: BSD3