| Index: third_party/twisted_8_1/twisted/names/client.py
|
| diff --git a/third_party/twisted_8_1/twisted/names/client.py b/third_party/twisted_8_1/twisted/names/client.py
|
| deleted file mode 100644
|
| index 45e717bb2fef1dcca2b79ec6ee0f4e05fed331e5..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/names/client.py
|
| +++ /dev/null
|
| @@ -1,814 +0,0 @@
|
| -# -*- test-case-name: twisted.names.test.test_names -*-
|
| -# Copyright (c) 2001-2007 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -
|
| -"""
|
| -Asynchronous client DNS
|
| -
|
| -The functions exposed in this module can be used for asynchronous name
|
| -resolution and dns queries.
|
| -
|
| -If you need to create a resolver with specific requirements, such as needing to
|
| -do queries against a particular host, the L{createResolver} function will
|
| -return an C{IResolver}.
|
| -
|
| -Future plans: Proper nameserver acquisition on Windows/MacOS,
|
| -better caching, respect timeouts
|
| -
|
| -@author: U{Jp Calderone<mailto:exarkun@twistedmatrix.com>}
|
| -"""
|
| -
|
| -from __future__ import nested_scopes
|
| -
|
| -import os
|
| -import errno
|
| -
|
| -from zope.interface import implements
|
| -
|
| -# Twisted imports
|
| -from twisted.python.runtime import platform
|
| -from twisted.internet import error, defer, protocol, interfaces
|
| -from twisted.python import log, failure
|
| -from twisted.names import dns, common
|
| -from twisted.names.error import DNSFormatError, DNSServerError, DNSNameError
|
| -from twisted.names.error import DNSNotImplementedError, DNSQueryRefusedError
|
| -from twisted.names.error import DNSUnknownError
|
| -
|
| -
|
| -class Resolver(common.ResolverBase):
|
| - implements(interfaces.IResolver)
|
| -
|
| - index = 0
|
| - timeout = None
|
| -
|
| - factory = None
|
| - servers = None
|
| - dynServers = ()
|
| - pending = None
|
| - protocol = None
|
| - connections = None
|
| -
|
| - resolv = None
|
| - _lastResolvTime = None
|
| - _resolvReadInterval = 60
|
| -
|
| - _errormap = {
|
| - dns.EFORMAT: DNSFormatError,
|
| - dns.ESERVER: DNSServerError,
|
| - dns.ENAME: DNSNameError,
|
| - dns.ENOTIMP: DNSNotImplementedError,
|
| - dns.EREFUSED: DNSQueryRefusedError}
|
| -
|
| - def __init__(self, resolv = None, servers = None, timeout = (1, 3, 11, 45)):
|
| - """
|
| - Construct a resolver which will query domain name servers listed in
|
| - the C{resolv.conf(5)}-format file given by C{resolv} as well as
|
| - those in the given C{servers} list. Servers are queried in a
|
| - round-robin fashion. If given, C{resolv} is periodically checked
|
| - for modification and re-parsed if it is noticed to have changed.
|
| -
|
| - @type servers: C{list} of C{(str, int)} or C{None}
|
| - @param servers: If not C{None}, interpreted as a list of addresses of
|
| - domain name servers to attempt to use for this lookup. Addresses
|
| - should be in dotted-quad form. If specified, overrides C{resolv}.
|
| -
|
| - @type resolv: C{str}
|
| - @param resolv: Filename to read and parse as a resolver(5)
|
| - configuration file.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Default number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @raise ValueError: Raised if no nameserver addresses can be found.
|
| - """
|
| - common.ResolverBase.__init__(self)
|
| -
|
| - self.timeout = timeout
|
| -
|
| - if servers is None:
|
| - self.servers = []
|
| - else:
|
| - self.servers = servers
|
| -
|
| - self.resolv = resolv
|
| -
|
| - if not len(self.servers) and not resolv:
|
| - raise ValueError, "No nameservers specified"
|
| -
|
| - self.factory = DNSClientFactory(self, timeout)
|
| - self.factory.noisy = 0 # Be quiet by default
|
| -
|
| - self.protocol = dns.DNSDatagramProtocol(self)
|
| - self.protocol.noisy = 0 # You too
|
| -
|
| - self.connections = []
|
| - self.pending = []
|
| -
|
| - self.maybeParseConfig()
|
| -
|
| -
|
| - def __getstate__(self):
|
| - d = self.__dict__.copy()
|
| - d['connections'] = []
|
| - d['_parseCall'] = None
|
| - return d
|
| -
|
| -
|
| - def __setstate__(self, state):
|
| - self.__dict__.update(state)
|
| - self.maybeParseConfig()
|
| -
|
| -
|
| - def maybeParseConfig(self):
|
| - if self.resolv is None:
|
| - # Don't try to parse it, don't set up a call loop
|
| - return
|
| -
|
| - try:
|
| - resolvConf = file(self.resolv)
|
| - except IOError, e:
|
| - if e.errno == errno.ENOENT:
|
| - # Missing resolv.conf is treated the same as an empty resolv.conf
|
| - self.parseConfig(())
|
| - else:
|
| - raise
|
| - else:
|
| - mtime = os.fstat(resolvConf.fileno()).st_mtime
|
| - if mtime != self._lastResolvTime:
|
| - log.msg('%s changed, reparsing' % (self.resolv,))
|
| - self._lastResolvTime = mtime
|
| - self.parseConfig(resolvConf)
|
| -
|
| - # Check again in a little while
|
| - from twisted.internet import reactor
|
| - self._parseCall = reactor.callLater(self._resolvReadInterval, self.maybeParseConfig)
|
| -
|
| -
|
| - def parseConfig(self, resolvConf):
|
| - servers = []
|
| - for L in resolvConf:
|
| - L = L.strip()
|
| - if L.startswith('nameserver'):
|
| - resolver = (L.split()[1], dns.PORT)
|
| - servers.append(resolver)
|
| - log.msg("Resolver added %r to server list" % (resolver,))
|
| - elif L.startswith('domain'):
|
| - try:
|
| - self.domain = L.split()[1]
|
| - except IndexError:
|
| - self.domain = ''
|
| - self.search = None
|
| - elif L.startswith('search'):
|
| - try:
|
| - self.search = L.split()[1:]
|
| - except IndexError:
|
| - self.search = ''
|
| - self.domain = None
|
| - if not servers:
|
| - servers.append(('127.0.0.1', dns.PORT))
|
| - self.dynServers = servers
|
| -
|
| -
|
| - def pickServer(self):
|
| - """
|
| - Return the address of a nameserver.
|
| -
|
| - TODO: Weight servers for response time so faster ones can be
|
| - preferred.
|
| - """
|
| - if not self.servers and not self.dynServers:
|
| - return None
|
| - serverL = len(self.servers)
|
| - dynL = len(self.dynServers)
|
| -
|
| - self.index += 1
|
| - self.index %= (serverL + dynL)
|
| - if self.index < serverL:
|
| - return self.servers[self.index]
|
| - else:
|
| - return self.dynServers[self.index - serverL]
|
| -
|
| - def connectionMade(self, protocol):
|
| - self.connections.append(protocol)
|
| - for (d, q, t) in self.pending:
|
| - self.queryTCP(q, t).chainDeferred(d)
|
| - del self.pending[:]
|
| -
|
| -
|
| - def messageReceived(self, message, protocol, address = None):
|
| - log.msg("Unexpected message (%d) received from %r" % (message.id, address))
|
| -
|
| -
|
| - def queryUDP(self, queries, timeout = None):
|
| - """
|
| - Make a number of DNS queries via UDP.
|
| -
|
| - @type queries: A C{list} of C{dns.Query} instances
|
| - @param queries: The queries to make.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - @raise C{twisted.internet.defer.TimeoutError}: When the query times
|
| - out.
|
| - """
|
| - if timeout is None:
|
| - timeout = self.timeout
|
| -
|
| - addresses = self.servers + list(self.dynServers)
|
| - if not addresses:
|
| - return defer.fail(IOError("No domain name servers available"))
|
| -
|
| - # Make sure we go through servers in the list in the order they were
|
| - # specified.
|
| - addresses.reverse()
|
| -
|
| - used = addresses.pop()
|
| - return self.protocol.query(used, queries, timeout[0]
|
| - ).addErrback(self._reissue, addresses, [used], queries, timeout
|
| - )
|
| -
|
| -
|
| - def _reissue(self, reason, addressesLeft, addressesUsed, query, timeout):
|
| - reason.trap(dns.DNSQueryTimeoutError)
|
| -
|
| - # If there are no servers left to be tried, adjust the timeout
|
| - # to the next longest timeout period and move all the
|
| - # "used" addresses back to the list of addresses to try.
|
| - if not addressesLeft:
|
| - addressesLeft = addressesUsed
|
| - addressesLeft.reverse()
|
| - addressesUsed = []
|
| - timeout = timeout[1:]
|
| -
|
| - # If all timeout values have been used, or the protocol has no
|
| - # transport, this query has failed. Tell the protocol we're
|
| - # giving up on it and return a terminal timeout failure to our
|
| - # caller.
|
| - if not timeout or self.protocol.transport is None:
|
| - self.protocol.removeResend(reason.value.id)
|
| - return failure.Failure(defer.TimeoutError(query))
|
| -
|
| - # Get an address to try. Take it out of the list of addresses
|
| - # to try and put it ino the list of already tried addresses.
|
| - address = addressesLeft.pop()
|
| - addressesUsed.append(address)
|
| -
|
| - # Issue a query to a server. Use the current timeout. Add this
|
| - # function as a timeout errback in case another retry is required.
|
| - d = self.protocol.query(address, query, timeout[0], reason.value.id)
|
| - d.addErrback(self._reissue, addressesLeft, addressesUsed, query, timeout)
|
| - return d
|
| -
|
| -
|
| - def queryTCP(self, queries, timeout = 10):
|
| - """
|
| - Make a number of DNS queries via TCP.
|
| -
|
| - @type queries: Any non-zero number of C{dns.Query} instances
|
| - @param queries: The queries to make.
|
| -
|
| - @type timeout: C{int}
|
| - @param timeout: The number of seconds after which to fail.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - if not len(self.connections):
|
| - address = self.pickServer()
|
| - if address is None:
|
| - return defer.fail(IOError("No domain name servers available"))
|
| - host, port = address
|
| - from twisted.internet import reactor
|
| - reactor.connectTCP(host, port, self.factory)
|
| - self.pending.append((defer.Deferred(), queries, timeout))
|
| - return self.pending[-1][0]
|
| - else:
|
| - return self.connections[0].query(queries, timeout)
|
| -
|
| -
|
| - def filterAnswers(self, message):
|
| - """
|
| - Extract results from the given message.
|
| -
|
| - If the message was truncated, re-attempt the query over TCP and return
|
| - a Deferred which will fire with the results of that query.
|
| -
|
| - If the message's result code is not L{dns.OK}, return a Failure
|
| - indicating the type of error which occurred.
|
| -
|
| - Otherwise, return a three-tuple of lists containing the results from
|
| - the answers section, the authority section, and the additional section.
|
| - """
|
| - if message.trunc:
|
| - return self.queryTCP(message.queries).addCallback(self.filterAnswers)
|
| - if message.rCode != dns.OK:
|
| - return failure.Failure(self._errormap.get(message.rCode, DNSUnknownError)(message))
|
| - return (message.answers, message.authority, message.additional)
|
| -
|
| -
|
| - def _lookup(self, name, cls, type, timeout):
|
| - return self.queryUDP(
|
| - [dns.Query(name, type, cls)], timeout
|
| - ).addCallback(self.filterAnswers)
|
| -
|
| -
|
| - # This one doesn't ever belong on UDP
|
| - def lookupZone(self, name, timeout = 10):
|
| - """
|
| - Perform an AXFR request. This is quite different from usual
|
| - DNS requests. See http://cr.yp.to/djbdns/axfr-notes.html for
|
| - more information.
|
| - """
|
| - address = self.pickServer()
|
| - if address is None:
|
| - return defer.fail(IOError('No domain name servers available'))
|
| - host, port = address
|
| - d = defer.Deferred()
|
| - controller = AXFRController(name, d)
|
| - factory = DNSClientFactory(controller, timeout)
|
| - factory.noisy = False #stfu
|
| -
|
| - from twisted.internet import reactor
|
| - connector = reactor.connectTCP(host, port, factory)
|
| - controller.timeoutCall = reactor.callLater(timeout or 10,
|
| - self._timeoutZone,
|
| - d, controller,
|
| - connector,
|
| - timeout or 10)
|
| - return d.addCallback(self._cbLookupZone, connector)
|
| -
|
| - def _timeoutZone(self, d, controller, connector, seconds):
|
| - connector.disconnect()
|
| - controller.timeoutCall = None
|
| - controller.deferred = None
|
| - d.errback(error.TimeoutError("Zone lookup timed out after %d seconds" % (seconds,)))
|
| -
|
| - def _cbLookupZone(self, result, connector):
|
| - connector.disconnect()
|
| - return (result, [], [])
|
| -
|
| -
|
| -class AXFRController:
|
| - timeoutCall = None
|
| -
|
| - def __init__(self, name, deferred):
|
| - self.name = name
|
| - self.deferred = deferred
|
| - self.soa = None
|
| - self.records = []
|
| -
|
| - def connectionMade(self, protocol):
|
| - # dig saids recursion-desired to 0, so I will too
|
| - message = dns.Message(protocol.pickID(), recDes=0)
|
| - message.queries = [dns.Query(self.name, dns.AXFR, dns.IN)]
|
| - protocol.writeMessage(message)
|
| -
|
| - def messageReceived(self, message, protocol):
|
| - # Caveat: We have to handle two cases: All records are in 1
|
| - # message, or all records are in N messages.
|
| -
|
| - # According to http://cr.yp.to/djbdns/axfr-notes.html,
|
| - # 'authority' and 'additional' are always empty, and only
|
| - # 'answers' is present.
|
| - self.records.extend(message.answers)
|
| - if not self.records:
|
| - return
|
| - if not self.soa:
|
| - if self.records[0].type == dns.SOA:
|
| - #print "first SOA!"
|
| - self.soa = self.records[0]
|
| - if len(self.records) > 1 and self.records[-1].type == dns.SOA:
|
| - #print "It's the second SOA! We're done."
|
| - if self.timeoutCall is not None:
|
| - self.timeoutCall.cancel()
|
| - self.timeoutCall = None
|
| - if self.deferred is not None:
|
| - self.deferred.callback(self.records)
|
| - self.deferred = None
|
| -
|
| -
|
| -
|
| -from twisted.internet.base import ThreadedResolver as _ThreadedResolverImpl
|
| -
|
| -class ThreadedResolver(_ThreadedResolverImpl):
|
| - def __init__(self, reactor=None):
|
| - if reactor is None:
|
| - from twisted.internet import reactor
|
| - _ThreadedResolverImpl.__init__(self, reactor)
|
| - # warnings.warn("twisted.names.client.ThreadedResolver is deprecated, use XXX instead.")
|
| -
|
| -class DNSClientFactory(protocol.ClientFactory):
|
| - def __init__(self, controller, timeout = 10):
|
| - self.controller = controller
|
| - self.timeout = timeout
|
| -
|
| -
|
| - def clientConnectionLost(self, connector, reason):
|
| - pass
|
| -
|
| -
|
| - def buildProtocol(self, addr):
|
| - p = dns.DNSProtocol(self.controller)
|
| - p.factory = self
|
| - return p
|
| -
|
| -
|
| -
|
| -def createResolver(servers=None, resolvconf=None, hosts=None):
|
| - """
|
| - Create and return a Resolver.
|
| -
|
| - @type servers: C{list} of C{(str, int)} or C{None}
|
| - @param servers: If not C{None}, interpreted as a list of addresses of
|
| - domain name servers to attempt to use. Addresses should be in dotted-quad
|
| - form.
|
| -
|
| - @type resolvconf: C{str} or C{None}
|
| - @param resolvconf: If not C{None}, on posix systems will be interpreted as
|
| - an alternate resolv.conf to use. Will do nothing on windows systems. If
|
| - C{None}, /etc/resolv.conf will be used.
|
| -
|
| - @type hosts: C{str} or C{None}
|
| - @param hosts: If not C{None}, an alternate hosts file to use. If C{None}
|
| - on posix systems, /etc/hosts will be used. On windows, C:\windows\hosts
|
| - will be used.
|
| -
|
| - @rtype: C{IResolver}
|
| - """
|
| - from twisted.names import resolve, cache, root, hosts as hostsModule
|
| - if platform.getType() == 'posix':
|
| - if resolvconf is None:
|
| - resolvconf = '/etc/resolv.conf'
|
| - if hosts is None:
|
| - hosts = '/etc/hosts'
|
| - theResolver = Resolver(resolvconf, servers)
|
| - hostResolver = hostsModule.Resolver(hosts)
|
| - else:
|
| - if hosts is None:
|
| - hosts = r'c:\windows\hosts'
|
| - from twisted.internet import reactor
|
| - bootstrap = _ThreadedResolverImpl(reactor)
|
| - hostResolver = hostsModule.Resolver(hosts)
|
| - theResolver = root.bootstrap(bootstrap)
|
| -
|
| - L = [hostResolver, cache.CacheResolver(), theResolver]
|
| - return resolve.ResolverChain(L)
|
| -
|
| -theResolver = None
|
| -def getResolver():
|
| - """
|
| - Get a Resolver instance.
|
| -
|
| - Create twisted.names.client.theResolver if it is C{None}, and then return
|
| - that value.
|
| -
|
| - @rtype: C{IResolver}
|
| - """
|
| - global theResolver
|
| - if theResolver is None:
|
| - try:
|
| - theResolver = createResolver()
|
| - except ValueError:
|
| - theResolver = createResolver(servers=[('127.0.0.1', 53)])
|
| - return theResolver
|
| -
|
| -def getHostByName(name, timeout=None, effort=10):
|
| - """
|
| - Resolve a name to a valid ipv4 or ipv6 address.
|
| -
|
| - Will errback with C{DNSQueryTimeoutError} on a timeout, C{DomainError} or
|
| - C{AuthoritativeDomainError} (or subclasses) on other errors.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @type effort: C{int}
|
| - @param effort: How many times CNAME and NS records to follow while
|
| - resolving this name.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().getHostByName(name, timeout, effort)
|
| -
|
| -def lookupAddress(name, timeout=None):
|
| - """
|
| - Perform an A record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupAddress(name, timeout)
|
| -
|
| -def lookupIPV6Address(name, timeout=None):
|
| - """
|
| - Perform an AAAA record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupIPV6Address(name, timeout)
|
| -
|
| -def lookupAddress6(name, timeout=None):
|
| - """
|
| - Perform an A6 record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupAddress6(name, timeout)
|
| -
|
| -def lookupMailExchange(name, timeout=None):
|
| - """
|
| - Perform an MX record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupMailExchange(name, timeout)
|
| -
|
| -def lookupNameservers(name, timeout=None):
|
| - """
|
| - Perform an NS record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupNameservers(name, timeout)
|
| -
|
| -def lookupCanonicalName(name, timeout=None):
|
| - """
|
| - Perform a CNAME record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupCanonicalName(name, timeout)
|
| -
|
| -def lookupMailBox(name, timeout=None):
|
| - """
|
| - Perform an MB record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupMailBox(name, timeout)
|
| -
|
| -def lookupMailGroup(name, timeout=None):
|
| - """
|
| - Perform an MG record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupMailGroup(name, timeout)
|
| -
|
| -def lookupMailRename(name, timeout=None):
|
| - """
|
| - Perform an MR record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupMailRename(name, timeout)
|
| -
|
| -def lookupPointer(name, timeout=None):
|
| - """
|
| - Perform a PTR record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupPointer(name, timeout)
|
| -
|
| -def lookupAuthority(name, timeout=None):
|
| - """
|
| - Perform an SOA record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupAuthority(name, timeout)
|
| -
|
| -def lookupNull(name, timeout=None):
|
| - """
|
| - Perform a NULL record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupNull(name, timeout)
|
| -
|
| -def lookupWellKnownServices(name, timeout=None):
|
| - """
|
| - Perform a WKS record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupWellKnownServices(name, timeout)
|
| -
|
| -def lookupService(name, timeout=None):
|
| - """
|
| - Perform an SRV record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupService(name, timeout)
|
| -
|
| -def lookupHostInfo(name, timeout=None):
|
| - """
|
| - Perform a HINFO record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupHostInfo(name, timeout)
|
| -
|
| -def lookupMailboxInfo(name, timeout=None):
|
| - """
|
| - Perform an MINFO record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupMailboxInfo(name, timeout)
|
| -
|
| -def lookupText(name, timeout=None):
|
| - """
|
| - Perform a TXT record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupText(name, timeout)
|
| -
|
| -def lookupResponsibility(name, timeout=None):
|
| - """
|
| - Perform an RP record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupResponsibility(name, timeout)
|
| -
|
| -def lookupAFSDatabase(name, timeout=None):
|
| - """
|
| - Perform an AFSDB record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupAFSDatabase(name, timeout)
|
| -
|
| -def lookupZone(name, timeout=None):
|
| - """
|
| - Perform an AXFR record lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: C{int}
|
| - @param timeout: When this timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - # XXX: timeout here is not a list of ints, it is a single int.
|
| - return getResolver().lookupZone(name, timeout)
|
| -
|
| -def lookupAllRecords(name, timeout=None):
|
| - """
|
| - ALL_RECORD lookup.
|
| -
|
| - @type name: C{str}
|
| - @param name: DNS name to resolve.
|
| -
|
| - @type timeout: Sequence of C{int}
|
| - @param timeout: Number of seconds after which to reissue the query.
|
| - When the last timeout expires, the query is considered failed.
|
| -
|
| - @rtype: C{Deferred}
|
| - """
|
| - return getResolver().lookupAllRecords(name, timeout)
|
|
|