packages feed

hsdns-cache 1.0.1 → 1.0.2

raw patch · 2 files changed

+24/−8 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ ADNS.Cache: resolveCachedA :: DnsCache -> HostName -> IO (Maybe (Either String HostAddress))

Files

ADNS/Cache.hs view
@@ -29,7 +29,7 @@     , stopDnsCache        -- * DNS lookup-    , resolveA+    , resolveA, resolveCachedA        -- * Utils     , showHostAddress@@ -91,8 +91,23 @@  -- | Resolve A DNS record. resolveA :: DnsCache -> HostName -> IO (Either String HostAddress)-resolveA d@(DnsCache {..}) domain-    | isIPAddr domain = return $ Right $ ipToWord32 domain+resolveA d domain = do+    r <- tryResolveA' d domain+    either id return r++-- | Resolve cached A DNS record.+-- Returns Nothing if host name is not yet cached.+resolveCachedA :: DnsCache -> HostName -> IO (Maybe (Either String HostAddress))+resolveCachedA d domain = do+    r <- tryResolveA' d domain+    return $ either (const Nothing) Just r++type ResultA = Either String HostAddress++-- | Returns action to resolve A or cached resolved action+tryResolveA' :: DnsCache -> HostName -> IO (Either (IO ResultA) ResultA)+tryResolveA' d@(DnsCache {..}) domain+    | isIPAddr domain = return $ Right $ Right $ ipToWord32 domain     | otherwise = do     t <- getPOSIXTime     mbr <- modifyMVar cache $ \ c ->@@ -102,13 +117,13 @@                                insRot False c expT a              _ -> return (c, Nothing)     case mbr of-        Just r -> return r-        _ -> do+        Just r -> return $ Right r+        _ -> return $ Left $ do             ra <- MSem.with sem $ resolveA' d [] domain             modifyMVar cache $ \ m ->                 case ra of-                    Left e -> insRot True m (t+60) $ Left $ T.pack e-                    Right (max (t+60) -> et, rras) ->+                    Left e -> insRot True m (t+600) $ Left $ T.pack e+                    Right (max (t+600) -> et, rras) ->                         insRot True m et $ Right $ listQ [a | RRAddr a <- rras]     where key = T.pack domain           err False m _ e = return (m, Left $ T.unpack e)@@ -185,6 +200,7 @@     rn 10 "wordpress.com"     rn 10 "feedburner.com"     rn 10 "feeds.feedburner.com"+    print =<< resolveCachedA c "feeds.feedburner.com" --     replicateM_ 1000 $ do --         resolveA c "www.blogger.com" --         resolveA c "google.com"
hsdns-cache.cabal view
@@ -1,6 +1,6 @@ cabal-version:  >= 1.6 name:           hsdns-cache-version:        1.0.1+version:        1.0.2 copyright:      Vladimir Shabanov 2013 author:         Vladimir Shabanov <vshabanoff@gmail.com> maintainer:     Vladimir Shabanov <vshabanoff@gmail.com>