-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | DNS library in Haskell -- -- DNS library for clients and servers. @package dns @version 0.3.3 -- | Data types for DNS Query and Response. For more information, see -- http://www.ietf.org/rfc/rfc1035. module Network.DNS.Types -- | Type for domain. type Domain = ByteString -- | Types for resource records. data TYPE A :: TYPE AAAA :: TYPE NS :: TYPE TXT :: TYPE MX :: TYPE CNAME :: TYPE SOA :: TYPE PTR :: TYPE SRV :: TYPE UNKNOWN :: Int -> TYPE intToType :: Int -> TYPE typeToInt :: TYPE -> Int toType :: String -> TYPE -- | Raw data format for DNS Query and Response. data DNSFormat DNSFormat :: DNSHeader -> [Question] -> [ResourceRecord] -> [ResourceRecord] -> [ResourceRecord] -> DNSFormat header :: DNSFormat -> DNSHeader question :: DNSFormat -> [Question] answer :: DNSFormat -> [ResourceRecord] authority :: DNSFormat -> [ResourceRecord] additional :: DNSFormat -> [ResourceRecord] -- | Raw data format for the header of DNS Query and Response. data DNSHeader DNSHeader :: Int -> DNSFlags -> Int -> Int -> Int -> Int -> DNSHeader identifier :: DNSHeader -> Int flags :: DNSHeader -> DNSFlags qdCount :: DNSHeader -> Int anCount :: DNSHeader -> Int nsCount :: DNSHeader -> Int arCount :: DNSHeader -> Int -- | Raw data format for the flags of DNS Query and Response. data DNSFlags DNSFlags :: QorR -> OPCODE -> Bool -> Bool -> Bool -> Bool -> RCODE -> DNSFlags qOrR :: DNSFlags -> QorR opcode :: DNSFlags -> OPCODE authAnswer :: DNSFlags -> Bool trunCation :: DNSFlags -> Bool recDesired :: DNSFlags -> Bool recAvailable :: DNSFlags -> Bool rcode :: DNSFlags -> RCODE data QorR QR_Query :: QorR QR_Response :: QorR data OPCODE OP_STD :: OPCODE OP_INV :: OPCODE OP_SSR :: OPCODE data RCODE NoErr :: RCODE FormatErr :: RCODE ServFail :: RCODE NameErr :: RCODE NotImpl :: RCODE Refused :: RCODE -- | Raw data format for resource records. data ResourceRecord ResourceRecord :: Domain -> TYPE -> Int -> Int -> RDATA -> ResourceRecord rrname :: ResourceRecord -> Domain rrtype :: ResourceRecord -> TYPE rrttl :: ResourceRecord -> Int rdlen :: ResourceRecord -> Int rdata :: ResourceRecord -> RDATA -- | Raw data format for DNS questions. data Question Question :: Domain -> TYPE -> Question qname :: Question -> Domain qtype :: Question -> TYPE -- | Making Question. makeQuestion :: Domain -> TYPE -> Question -- | Raw data format for each type. data RDATA RD_NS :: Domain -> RDATA RD_CNAME :: Domain -> RDATA RD_MX :: Int -> Domain -> RDATA RD_PTR :: Domain -> RDATA RD_SOA :: Domain -> Domain -> Int -> Int -> Int -> Int -> Int -> RDATA RD_A :: IPv4 -> RDATA RD_AAAA :: IPv6 -> RDATA RD_TXT :: ByteString -> RDATA RD_SRV :: Int -> Int -> Int -> Domain -> RDATA RD_OTH :: [Int] -> RDATA responseA :: Int -> Question -> IPv4 -> DNSFormat responseAAAA :: Int -> Question -> IPv6 -> DNSFormat module Network.DNS.Decode -- | Parsing DNS data. decode :: ByteString -> Either String DNSFormat -- | Receiving DNS data from Socket and parse it. The second -- argument is a buffer size for the socket. receive :: Socket -> Integer -> IO DNSFormat module Network.DNS.Encode -- | Composing DNS data. encode :: DNSFormat -> ByteString -- | Composing query. First argument is a number to identify response. composeQuery :: Int -> [Question] -> ByteString -- | DNS Resolver and lookup functions. -- -- Sample code: -- --
-- import qualified Network.DNS as DNS (lookup) -- import Network.DNS hiding (lookup) -- main :: IO () -- main = do -- rs <- makeResolvSeed defaultResolvConf -- withResolver rs $ \resolver -> do -- DNS.lookup resolver "www.example.com" A >>= print --module Network.DNS.Resolver -- | Union type for FilePath and HostName. Specify -- FilePath to "resolv.conf" or numeric IP address in -- String form. data FileOrNumericHost RCFilePath :: FilePath -> FileOrNumericHost RCHostName :: HostName -> FileOrNumericHost -- | Type for resolver configuration data ResolvConf ResolvConf :: FileOrNumericHost -> Int -> Integer -> ResolvConf resolvInfo :: ResolvConf -> FileOrNumericHost resolvTimeout :: ResolvConf -> Int resolvBufsize :: ResolvConf -> Integer -- | Default ResolvConf. resolvInfo is RCFilePath -- "/etc/resolv.conf". resolvTimeout is 3,000,000 micro seconds. -- resolvBufsize is 512. defaultResolvConf :: ResolvConf -- | Abstract data type of DNS Resolver seed data ResolvSeed -- | Making ResolvSeed from an IP address of a DNS cache server. makeResolvSeed :: ResolvConf -> IO ResolvSeed -- | Abstract data type of DNS Resolver data Resolver Resolver :: IO Int -> Socket -> Int -> Integer -> Resolver genId :: Resolver -> IO Int dnsSock :: Resolver -> Socket dnsTimeout :: Resolver -> Int dnsBufsize :: Resolver -> Integer -- | Giving a thread-safe Resolver to the function of the second -- argument. withResolver should be passed to forkIO. withResolver :: ResolvSeed -> (Resolver -> IO a) -> IO a -- | Looking up resource records of a domain. lookup :: Resolver -> Domain -> TYPE -> IO (Maybe [RDATA]) -- | Looking up a domain and returning an entire DNS Response. lookupRaw :: Resolver -> Domain -> TYPE -> IO (Maybe DNSFormat) -- | Upper level DNS lookup functions. module Network.DNS.Lookup -- | Resolving IPv4 by A. lookupA :: Resolver -> Domain -> IO (Maybe [IPv4]) -- | Resolving IPv6 by AAAA. lookupAAAA :: Resolver -> Domain -> IO (Maybe [IPv6]) -- | Resolving Domain and its preference by MX. lookupMX :: Resolver -> Domain -> IO (Maybe [(Domain, Int)]) -- | Resolving IPv4 by A via MX. lookupAviaMX :: Resolver -> Domain -> IO (Maybe [IPv4]) -- | Resolving IPv6 by AAAA via MX. lookupAAAAviaMX :: Resolver -> Domain -> IO (Maybe [IPv6]) -- | Resolving String by TXT. lookupTXT :: Resolver -> Domain -> IO (Maybe [ByteString]) -- | Resolving Domain and its preference by PTR. lookupPTR :: Resolver -> Domain -> IO (Maybe [Domain]) -- | Resolving Domain and its preference by SRV. lookupSRV :: Resolver -> Domain -> IO (Maybe [(Int, Int, Int, Domain)]) -- | Thread-safe DNS library written in Haskell. -- -- This code is written in Haskell, not using FFI. -- -- Sample code for DNS lookup: -- --
-- import qualified Network.DNS as DNS (lookup) -- import Network.DNS hiding (lookup) -- main :: IO () -- main = do -- rs <- makeResolvSeed defaultResolvConf -- withResolver rs $ \resolver -> do -- DNS.lookup resolver "www.example.com" A >>= print --module Network.DNS