| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Network.DNS.Resolver
Contents
Description
DNS Resolver and generic (lower-level) lookup functions.
- data FileOrNumericHost
- data ResolvConf = ResolvConf {}
- defaultResolvConf :: ResolvConf
- data ResolvSeed
- makeResolvSeed :: ResolvConf -> IO ResolvSeed
- data Resolver = Resolver {}
- withResolver :: ResolvSeed -> (Resolver -> IO a) -> IO a
- withResolvers :: [ResolvSeed] -> ([Resolver] -> IO a) -> IO a
- lookup :: Resolver -> Domain -> TYPE -> IO (Either DNSError [RDATA])
- lookupAuth :: Resolver -> Domain -> TYPE -> IO (Either DNSError [RDATA])
- lookupRaw :: Resolver -> Domain -> TYPE -> IO (Either DNSError DNSFormat)
- lookupRaw' :: Resolver -> Domain -> TYPE -> IO (Either DNSError (DNSMessage (RD ByteString)))
- fromDNSFormat :: DNSFormat -> (DNSFormat -> a) -> Either DNSError a
Documentation
Configuration for resolver
data FileOrNumericHost Source
Union type for FilePath and HostName. Specify FilePath to
"resolv.conf" or numeric IP address in String form.
Warning: Only numeric IP addresses are valid RCHostNames.
Example (using Google's public DNS cache):
>>>let cache = RCHostName "8.8.8.8"
Constructors
| RCFilePath FilePath | A path for "resolv.conf" |
| RCHostName HostName | A numeric IP address |
| RCHostPort HostName PortNumber | A numeric IP address and port number |
data ResolvConf Source
Type for resolver configuration. The easiest way to construct a
ResolvConf object is to modify the defaultResolvConf.
Constructors
| ResolvConf | |
Fields
| |
defaultResolvConf :: ResolvConf Source
Return a default ResolvConf:
resolvInfoisRCFilePath"/etc/resolv.conf".resolvTimeoutis 3,000,000 micro seconds.resolvRetryis 3.resolvBufsizeis 512. (obsoleted)
Example (use Google's public DNS cache instead of resolv.conf):
>>>let cache = RCHostName "8.8.8.8">>>let rc = defaultResolvConf { resolvInfo = cache }
Intermediate data type for resolver
data ResolvSeed Source
Abstract data type of DNS Resolver seed. When implementing a DNS cache, this should be re-used.
Type and function for resolver
Abstract data type of DNS Resolver When implementing a DNS cache, this MUST NOT be re-used.
withResolver :: ResolvSeed -> (Resolver -> IO a) -> IO a Source
Giving a thread-safe Resolver to the function of the second
argument. A socket for UDP is opened inside and is surely closed.
withResolvers :: [ResolvSeed] -> ([Resolver] -> IO a) -> IO a Source
Giving thread-safe Resolvers to the function of the second
argument. Sockets for UDP are opened inside and are surely closed.
Looking up functions
lookup :: Resolver -> Domain -> TYPE -> IO (Either DNSError [RDATA]) Source
Look up resource records for a domain, collecting the results from the ANSWER section of the response.
We repeat an example from Network.DNS.Lookup:
>>>let hostname = Data.ByteString.Char8.pack "www.example.com">>>rs <- makeResolvSeed defaultResolvConf>>>withResolver rs $ \resolver -> lookup resolver hostname ARight [93.184.216.119]
lookupAuth :: Resolver -> Domain -> TYPE -> IO (Either DNSError [RDATA]) Source
Look up resource records for a domain, collecting the results from the AUTHORITY section of the response.
Raw looking up function
lookupRaw :: Resolver -> Domain -> TYPE -> IO (Either DNSError DNSFormat) Source
Look up a name and return the entire DNS Response. Sample output is included below, however it is not tested -- the sequence number is unpredictable (it has to be!).
The example code:
let hostname = Data.ByteString.Char8.pack "www.example.com" rs <- makeResolvSeed defaultResolvConf withResolver rs $ resolver -> lookupRaw resolver hostname A
And the (formatted) expected output:
Right (DNSFormat
{ header = DNSHeader
{ identifier = 1,
flags = DNSFlags
{ qOrR = QR_Response,
opcode = OP_STD,
authAnswer = False,
trunCation = False,
recDesired = True,
recAvailable = True,
rcode = NoErr },
qdCount = 1,
anCount = 1,
nsCount = 0,
arCount = 0},
question = [Question { qname = "www.example.com.",
qtype = A}],
answer = [ResourceRecord {rrname = "www.example.com.",
rrtype = A,
rrttl = 800,
rdlen = 4,
rdata = 93.184.216.119}],
authority = [],
additional = []})
lookupRaw' :: Resolver -> Domain -> TYPE -> IO (Either DNSError (DNSMessage (RD ByteString))) Source