Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
idna / lib / python2.7 / site-packages / eventlet / support / dns / resolver.pyc
Size: Mime:
ó
 ‹EYc@s¯dZddlZddlZddlZddlZyddlZWnek
reddlZnXddl	Z
ddlZ
ddlZ
ddl
Z
ddlZ
ddlZ
ddlZ
ddlZ
ddlZ
ddlZ
ddlZ
ddlZ
ddlmZmZejdkrNyddlZWnek
rJddlZnXnde
jjfd„ƒYZde
jjfd	„ƒYZe
jj Z d
e
jjfd„ƒYZ!de
jjfd
„ƒYZ"de
jjfd„ƒYZ#de
jjfd„ƒYZ$de
jjfd„ƒYZ%de&fd„ƒYZ'de&fd„ƒYZ(de&fd„ƒYZ)de&fd„ƒYZ*de&fd„ƒYZ+e,a-d„Z.d„Z/e
j0j1e
j2j3e4e,e5d d!„Z6e
j2j3e4e,d"„Z7iej8gej96ej:gej;6Z<e,a=ej>Z?ej@ZAejBZCejDZEejFZGejHZIe,e,ejJd d d d#„ZKd d$„ZLe,d%„ZMd&„ZNd'„ZOd(„ZPe,d)„ZQd*„ZRdS(+s{DNS stub resolver.

@var default_resolver: The default resolver object
@type default_resolver: dns.resolver.Resolver objectiÿÿÿÿNi(txrangetstring_typestwin32tNXDOMAINcBs_eZdZeddgƒZd	Zd	d„Zd„Zd„Z	e
e	ddƒZ	d„ZRS(
s"The DNS query name does not exist.tqnamest	responsescCs”t|tttfƒs'tdƒ‚nt|ƒdkrHtdƒ‚n|dkr]i}nt|tƒs{tdƒ‚ntd|d|ƒ}|S(Ns#qnames must be a list, tuple or setis(qnames must contain at least one elements(responses must be a dict(qname=response)RR(t
isinstancetlistttupletsettAttributeErrortlentNonetdict(tselfRRtkwargs((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt
_check_kwargs9s	cCs}d|jkr"tt|ƒjƒS|jd}t|ƒdkrJd}n
|jd }djtt|ƒƒ}d||fS(NRisNone of DNS query names existiÿÿÿÿs, s%s: %s(	RtsuperRt__str__Rt__doc__tjointmaptstr(RRtmsg((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyREs
	
cCsÞd|jkrtdƒ‚ntjj}tjj}d}x|jdD]}|jd|}xK|jD]@}|j	|ksk|j
|kr•qkn|jdjj
ƒ}qkW|dk	rJtjj|ƒSqJW|jddS(NRsparametrized exception requiredRi(Rt	TypeErrortdnst
rdataclasstINt	rdatatypetCNAMERtanswertrdtypetrdclasstitemsttargettto_texttnamet	from_text(RRRtcnametqnametresponseR((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pytcanonical_namePstdocs%Return the unresolved canonical name.cCs·t|jjdgƒƒ}t|jjdiƒƒ}|jjdiƒ}xV|jjdgƒD]?}||krƒ|j|ƒn||kra||||<qaqaWtd|d|ƒS(s3Augment by results from another NXDOMAIN exception.RR(RRtgetR
tappendR(Rte_nxtqnames0t
responses0t
responses1tqname1((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt__add__bsN(t__name__t
__module__RR	tsupp_kwargsRtfmtRRR)tpropertyR2(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR3s				tYXDOMAINcBseZdZRS(s8The DNS query name is too long after DNAME substitution.(R3R4R(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR8ostNoAnswercBs0eZdZddZedgƒZd„ZRS(s<The DNS response does not contain an answer to the question.s,The DNS response does not contain an answer sto the question: {query}R(cKs tt|ƒjd|djƒS(NtqueryR((RR9t_fmt_kwargstquestion(RR((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR;s(R3R4RR6R	R5R;(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR9zs
t
NoNameserverscBs=eZdZdZded ZeddgƒZd„ZRS(sôAll nameservers failed to answer the query.

    errors: list of servers and respective errors
    The type of errors is
    [(server ip address, any object convertible to string)].
    Non-empty errors list will add explanatory message ()
    s+All nameservers failed to answer the query.s%s {query}: {errors}iÿÿÿÿtrequestterrorscKsƒg}xK|dD]?}|jd|d|dr7dnd|d|dfƒqWtt|ƒjd	|d
jddj|ƒƒS(NR?s Server %s %s port %s answered %siitTCPtUDPiiR:R>s; (R,RR=R;R<R(RRtsrv_msgsterr((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR;”s-(R3R4RRR6R	R5R;(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR=†s
tNotAbsolutecBseZdZRS(sEAn absolute domain name is required but a relative name was provided.(R3R4R(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRDst	NoRootSOAcBseZdZRS(sBThere is no SOA RR at the DNS root name. This should never happen!(R3R4R(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRE¢st
NoMetaqueriescBseZdZRS(s DNS metaqueries are not allowed.(R3R4R(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRF§stAnswercBsGeZdZed„Zd„Zd„Zd„Zd„Zd„Z	RS(s9DNS stub resolver answer

    Instances of this class bundle up the result of a successful DNS
    resolution.

    For convenience, the answer object implements much of the sequence
    protocol, forwarding to its rrset.  E.g. "for a in answer" is
    equivalent to "for a in answer.rrset", "answer[i]" is equivalent
    to "answer.rrset[i]", and "answer[i:j]" is equivalent to
    "answer.rrset[i:j]".

    Note that CNAMEs or DNAMEs in the response may mean that answer
    node's name might not be the query name.

    @ivar qname: The query name
    @type qname: dns.name.Name object
    @ivar rdtype: The query type
    @type rdtype: int
    @ivar rdclass: The query class
    @type rdclass: int
    @ivar response: The response message
    @type response: dns.message.Message object
    @ivar rrset: The answer
    @type rrset: dns.rrset.RRset object
    @ivar expiration: The time when the answer expires
    @type expiration: float (seconds since the epoch)
    @ivar canonical_name: The canonical name of the query name
    @type canonical_name: dns.name.Name object
    cCsz||_||_||_||_d}d}x5tddƒD]$}yG|j|j|||ƒ}|dks|j|kr‹|j}nPWq@t	k
rc|t
jjkrHyj|j|j||t
jjƒ}	|dksî|	j|krú|	j}nx|	D]}
|
j
}PqWw@WqHt	k
rD|rEtd|ƒ‚qEqHXn|rdtd|ƒ‚qdq@Xq@W|dkrŒ|rŒtd|ƒ‚n||_||_|dkrcx¶yp|j|j||t
jjƒ}|dksì|j|krø|j}n|dj|kr|dj}nPWq­t	k
r[y|jƒ}Wq\t
jjk
rWPq\Xq­Xq­Wntjƒ||_dS(NiÿÿÿÿiiR((R'RR R(RRt
find_rrsetRtttltKeyErrorRRRR"R9R)trrsett	authoritytSOAtminimumtparentR$tNoParentttimet
expiration(RR'RR R(traise_on_no_answertmin_ttlRKtcounttcrrsettrdtsrrset((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt__init__Ìsf				

	
		
cCs~|dkr|jjS|dkr,|jjS|dkrB|jjS|dkrX|jjS|dkrn|jjSt|ƒ‚dS(NR$RItcoversR R(RKR$RIRZR RR
(Rtattr((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt__getattr__s




cCs|jrt|jƒpdS(Ni(RKR(R((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt__len__scCs%|jrt|jƒp$ttƒƒS(N(RKtiterR(R((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt__iter__scCs|j|S(N(RK(Rti((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt__getitem__scCs|j|=dS(N(RK(RR`((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt__delitem__s(
R3R4RtTrueRYR\R]R_RaRb(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRG¬s7				tCachecBsAeZdZdd„Zd„Zd„Zd„Zdd„ZRS(sqSimple DNS answer cache.

    @ivar data: A dictionary of cached data
    @type data: dict
    @ivar cleaning_interval: The number of seconds between cleanings.  The
    default is 300 (5 minutes).
    @type cleaning_interval: float
    @ivar next_cleaning: The time the cache should next be cleaned (in seconds
    since the epoch.)
    @type next_cleaning: float
    gÀr@cCs;i|_||_tjƒ|j|_tjƒ|_dS(s»Initialize a DNS cache.

        @param cleaning_interval: the number of seconds between periodic
        cleanings.  The default is 300.0
        @type cleaning_interval: float.
        N(tdatatcleaning_intervalRQt
next_cleaningt
_threadingtLocktlock(RRf((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRY-s		cCsžtjƒ}|j|kršg}x<|jjƒD]+\}}|j|kr1|j|ƒq1q1Wx|D]}|j|=qgWtjƒ}||j|_ndS(s&Clean the cache if it's time to do so.N(RQRgReR!RRR,Rf(Rtnowtkeys_to_deletetktv((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt_maybe_clean:s
cCskzV|jjƒ|jƒ|jj|ƒ}|dksM|jtjƒkrQdS|SWd|jjƒXdS(s)Get the answer associated with I{key}.  Returns None if
        no answer is cached for the key.
        @param key: the key
        @type key: (dns.name.Name, int, int) tuple whose values are the
        query name, rdtype, and rdclass.
        @rtype: dns.resolver.Answer object or None
        N(	RjtacquireRoReR+RRRRQtrelease(RtkeyRn((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR+Hs	

!cCs=z(|jjƒ|jƒ||j|<Wd|jjƒXdS(sAssociate key and value in the cache.
        @param key: the key
        @type key: (dns.name.Name, int, int) tuple whose values are the
        query name, rdtype, and rdclass.
        @param value: The answer being cached
        @type value: dns.resolver.Answer object
        N(RjRpRoReRq(RRrtvalue((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pytput[s
	

cCspz[|jjƒ|dk	r;||jkrZ|j|=qZni|_tjƒ|j|_Wd|jjƒXdS(sæFlush the cache.

        If I{key} is specified, only that item is flushed.  Otherwise
        the entire cache is flushed.

        @param key: the key to flush
        @type key: (dns.name.Name, int, int) tuple or None
        N(RjRpRReRQRfRgRq(RRr((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pytflushks

	N(	R3R4RRYRoR+RtRRu(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRds
			tLRUCacheNodecBs2eZdZd„Zd„Zd„Zd„ZRS(sLRUCache node.
    cCs(||_||_||_||_dS(N(RrRstprevtnext(RRrRs((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRY†s			cCs.|j|_||_||j_||_dS(N(RwRx(Rtnode((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pytlink_beforeŒs	cCs.||_|j|_||j_||_dS(N(RwRx(RRy((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt
link_after’s	cCs"|j|j_|j|j_dS(N(RwRx(R((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pytunlink˜s(R3R4RRYRzR{R|(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRvs
			tLRUCachecBsAeZdZdd„Zd„Zd„Zd„Zdd„ZRS(sOBounded least-recently-used DNS answer cache.

    This cache is better than the simple cache (above) if you're
    running a web crawler or other process that does a lot of
    resolutions.  The LRUCache has a maximum number of nodes, and when
    it is full, the least-recently used node is removed to make space
    for a new one.

    @ivar data: A dictionary of cached data
    @type data: dict
    @ivar sentinel: sentinel node for circular doubly linked list of nodes
    @type sentinel: LRUCacheNode object
    @ivar max_size: The maximum number of nodes
    @type max_size: int
    i †cCs;i|_|j|ƒtddƒ|_tjƒ|_dS(s´Initialize a DNS cache.

        @param max_size: The maximum number of nodes to cache; the default is
        100,000. Must be greater than 1.
        @type max_size: int
        N(Retset_max_sizeRvRtsentinelRhRiRj(Rtmax_size((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRY¯s	
cCs"|dkrd}n||_dS(Ni(R€(RR€((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR~»s	cCs’z}|jjƒ|jj|ƒ}|dkr2dS|jƒ|jjtjƒkre|j|j	=dS|j
|jƒ|jSWd|jjƒXdS(s)Get the answer associated with I{key}.  Returns None if
        no answer is cached for the key.
        @param key: the key
        @type key: (dns.name.Name, int, int) tuple whose values are the
        query name, rdtype, and rdclass.
        @rtype: dns.resolver.Answer object or None
        N(
RjRpReR+RR|RsRRRQRrR{RRq(RRrRy((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR+Às


cCsÌz·|jjƒ|jj|ƒ}|dk	rH|jƒ|j|j=nx?t|jƒ|jkr‰|j	j
}|jƒ|j|j=qKWt||ƒ}|j|j	ƒ||j|<Wd|jj
ƒXdS(sAssociate key and value in the cache.
        @param key: the key
        @type key: (dns.name.Name, int, int) tuple whose values are the
        query name, rdtype, and rdclass.
        @param value: The answer being cached
        @type value: dns.resolver.Answer object
        N(RjRpReR+RR|RrRR€RRwRvR{Rq(RRrRsRy((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRtØs


cCs¹z¤|jjƒ|dk	rW|jj|ƒ}|dk	r£|jƒ|j|j=q£nL|jj}x4||jkr™|j}d|_	d|_|}qfWi|_Wd|jj
ƒXdS(sæFlush the cache.

        If I{key} is specified, only that item is flushed.  Otherwise
        the entire cache is flushed.

        @param key: the key to flush
        @type key: (dns.name.Name, int, int) tuple or None
        N(RjRpRReR+R|RrRRxRwRq(RRrRyRx((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRuðs	

			

N(	R3R4RRYR~R+RtRRu(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR}s			tResolvercBsÅeZdZded„Zd„Zd„Zd„Zd„Zd„Z	d„Z
d	„Zd
„Zd„Z
d„Zejjejjeded
d„Zdejjd„Zd„Zd„ZRS(s-DNS stub resolver

    @ivar domain: The domain of this host
    @type domain: dns.name.Name object
    @ivar nameservers: A list of nameservers to query.  Each nameserver is
    a string which contains the IP address of a nameserver.
    @type nameservers: list of strings
    @ivar search: The search list.  If the query name is a relative name,
    the resolver will construct an absolute query name by appending the search
    names one by one to the query name.
    @type search: list of dns.name.Name objects
    @ivar port: The port to which to send queries.  The default is 53.
    @type port: int
    @ivar timeout: The number of seconds to wait for a response from a
    server, before timing out.
    @type timeout: float
    @ivar lifetime: The total number of seconds to spend trying to get an
    answer to the question.  If the lifetime expires, a Timeout exception
    will occur.
    @type lifetime: float
    @ivar keyring: The TSIG keyring to use.  The default is None.
    @type keyring: dict
    @ivar keyname: The TSIG keyname to use.  The default is None.
    @type keyname: dns.name.Name object
    @ivar keyalgorithm: The TSIG key algorithm to use.  The default is
    dns.tsig.default_algorithm.
    @type keyalgorithm: string
    @ivar edns: The EDNS level to use.  The default is -1, no Edns.
    @type edns: int
    @ivar ednsflags: The EDNS flags
    @type ednsflags: int
    @ivar payload: The EDNS payload size.  The default is 0.
    @type payload: int
    @ivar flags: The message flags to use.  The default is None (i.e. not
    overwritten)
    @type flags: int
    @ivar cache: The cache to use.  The default is None.
    @type cache: dns.resolver.Cache object
    @ivar retry_servfail: should we retry a nameserver if it says SERVFAIL?
    The default is 'false'.
    @type retry_servfail: bool
    s/etc/resolv.confcCsâd|_d|_d|_d|_d|_d|_d|_d|_d|_	d|_
d|_d|_d|_
d|_d|_t|_t|_|jƒ|rÞtjdkrÅ|jƒqÞ|rÞ|j|ƒqÞndS(sJInitialize a resolver instance.

        @param filename: The filename of a configuration file in
        standard /etc/resolv.conf format.  This parameter is meaningful
        only when I{configure} is true and the platform is POSIX.
        @type filename: string or file object
        @param configure: If True (the default), the resolver instance
        is configured in the normal fashion for the operating system
        the resolver is running on.  (I.e. a /etc/resolv.conf file on
        POSIX systems and from the registry on Windows systems.)
        @type configure: boolRN(Rtdomaintnameserverstnameserver_portstporttsearchttimeouttlifetimetkeyringtkeynametkeyalgorithmtednst	ednsflagstpayloadtcachetflagstFalsetretry_servfailtrotatetresettsystplatformt
read_registrytread_resolv_conf(Rtfilenamet	configure((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRY9s.
																	

cCsìtjjtjjtjƒƒdƒ|_t|jƒdkrRtjj|_ng|_	i|_
d|_g|_d|_
d|_d|_d|_tjj|_d|_d|_d|_d|_d|_t|_t|_dS(s1Reset all resolver configuration to the defaults.iii5g@g>@iÿÿÿÿN(RR$tNameR%tsockettgethostnameR‚RtrootRƒR„R…R†R‡RˆRR‰RŠttsigtdefault_algorithmR‹RŒRRŽRRR‘R’R“(R((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR”_s&+														cCsÌt|tƒrLyt|dƒ}Wntk
rBdg|_dSXt}nt}z7x0|D](}t|ƒdks\|ddks\|ddkršq\n|jƒ}t|ƒdkr¾q\n|ddkrå|jj	|d	ƒq\|dd
krt
jj|d	ƒ|_
q\|ddkrUx`|d	D]"}|jj	t
jj|ƒƒq,Wq\|ddkr\d
|d	kr„t|_q„q\q\WWd|rŸ|jƒnXt|jƒdkrÈ|jj	dƒndS(s®Process f as a file in the /etc/resolv.conf format.  If f is
        a string, it is used as the name of the file to open; otherwise it
        is treated as the file itself.trs	127.0.0.1Nit#t;it
nameserveriR‚R†toptionsR“(RRtopentIOErrorRƒRcR‘RtsplitR,RR$R%R‚R†R“tclose(Rtft
want_closetlttokenstsuffix((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR˜vs:
	
2#cCsF|jdƒdkrd}n$|jdƒdkr<d}nd}|S(Nt it,(tfind(Rtentryt
split_char((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt_determine_split_charŸs		cCsat|ƒ}|j|ƒ}|j|ƒ}x0|D](}||jkr1|jj|ƒq1q1WdS(s&Configure a NameServer registry entry.N(RR´R¨RƒR,(RRƒR³tns_listtns((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt_config_win32_nameservers®s
cCstjjt|ƒƒ|_dS(s"Configure a Domain registry entry.N(RR$R%RR‚(RR‚((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt_config_win32_domain¸scCsmt|ƒ}|j|ƒ}|j|ƒ}x<|D]4}||jkr1|jjtjj|ƒƒq1q1WdS(s"Configure a Search registry entry.N(RR´R¨R†R,RR$R%(RR†R³tsearch_listts((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt_config_win32_search½s
cCstytj|dƒ\}}Wntk
r5d}nX|r’|j|ƒy2tj|dƒ\}}|rz|j|ƒnWq$tk
rŽq$Xn’ytj|dƒ\}}Wntk
rÇd}nX|r$|j|ƒy2tj|dƒ\}}|r|j|ƒnWq$tk
r q$Xnytj|dƒ\}}Wntk
rYd}nX|rp|j|ƒndS(s%Extract DNS info from a registry key.t
NameServertDomaintDhcpNameServert
DhcpDomaint
SearchListN(t_winregtQueryValueExtWindowsErrorRR·R¸R»(RRrtserverstrtypetdomR†((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt_config_win32_fromkeyÇs<









cCsStjdtjƒ}t}z&ytj|dƒ}t}Wn#tk
r_tj|dƒ}nXz|j|ƒWd|j	ƒX|r@tj|dƒ}z˜d}x‹tr-yltj
||ƒ}|d7}tj||ƒ}|j|||ƒsõw£nz|j|ƒWd|j	ƒXWq£tk
r)Pq£Xq£WWd|j	ƒXnWd|j	ƒXdS(s9Extract resolver configuration from the Windows registry.s2SYSTEM\CurrentControlSet\Services\Tcpip\Parameterss+SYSTEM\CurrentControlSet\Services\VxD\MSTCPNs=SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfacesii(RÁtConnectRegistryRtHKEY_LOCAL_MACHINER‘tOpenKeyRctEnvironmentErrorRÇtClosetEnumKeyt_win32_is_nic_enabled(Rtlmt	want_scant
tcp_paramst
interfacesR`tguidRr((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR—és@		

	
			


c
Csy½tj|d|ƒ}z•tj|dƒ\}}|tjkrLt‚ntj|d|ƒ}z=tj|dƒ\}}|tjkr•t‚n|d@SWd|jƒXWd|jƒXWnRttfk
ry&tj|dƒ\}	}|	dk	SWqt	k
r
t
SXnXdS(Ns]SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\%s\Connectiont
PnpInstanceIDs SYSTEM\CurrentControlSet\Enum\%stConfigFlagsitNTEContextList(RÁRÊRÂtREG_SZt
ValueErrort	REG_DWORDRÌRËRRÃR‘(
RRÏRÓt
interface_keytconnection_keytpnp_idtttypet
device_keyRtnte((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRÎs6
		
	
cCstjƒ}||}|dkrI|dkr@td|ƒ‚qI|}n||jkrjtd|ƒ‚nt|j||jƒS(NiiÿÿÿÿR‡(RQtTimeoutRˆtminR‡(RtstartRktduration((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt_compute_timeoutMs
	icCs‰t|tƒr'tjj|d
ƒ}nt|tƒrKtjj|ƒ}ntjj|ƒrft‚nt|tƒrŠtj	j|ƒ}ntj	j
|ƒr¥t‚ng}|jƒrÇ|j|ƒn€t
|ƒdkrø|j|jtjjƒƒn|jr.xC|jD]}	|j|j|	ƒƒqWn|j|j|jƒƒt}
i}tjƒ}d
}
x¿|D]·}
|jrÖ|jj|
||fƒ}|d
k	rÖ|jd
krÌ|rÌtd|jƒ‚qÓ|SqÖntjj|
||ƒ}|jd
k	r|j|j|jd|jƒn|j|j |j!|j"ƒ|j#d
k	rY|j#|_#nd
}|j$}g}|j%rˆt&j'|ƒnd}xc|d
krót
|ƒdkrÇt(d|d|ƒ‚nxÌ|D]Ã}|j)|ƒ}|j*j||j+ƒ}y³|}|r5tj,j-||||d|d	|ƒ}nytj,j.||||d|d	|ƒ}|j#tj#j/@r®t}|j)|ƒ}tj,j-||||d|d	|ƒ}nWnt0j1tj2j3fk
rø}|j|||||fƒd
}qÏnÌtj,j4k
r5}|j|||||fƒd
}qÏntj2j5k
r}|j6|ƒ|j|||||fƒd
}qÏnEt7k
rÃ}|j6|ƒ|j|||||fƒd
}qÏnX|j8ƒ}|tj8j9krt9ƒ}|j|||||fƒ|‚n|tj8j:ks4|tj8j;kr8Pn|tj8j<ksT|j=rd|j6|ƒn|j|||tj8j>|ƒ|fƒd
}qÏW|d
k	r¦Pnt
|ƒdkr‘|j)|ƒ}t?||ƒ}|d
9}tj@|ƒq‘q‘W|j8ƒtj8j;kr|||
<qlntA}
PqlW|
rEt;d|d|ƒ‚ntB|
||||ƒ}|jr…|jjC|
||f|ƒn|S(sQuery nameservers to find the answer to the question.

        The I{qname}, I{rdtype}, and I{rdclass} parameters may be objects
        of the appropriate type, or strings that can be converted into objects
        of the appropriate type.  E.g. For I{rdtype} the integer 2 and the
        the string 'NS' both mean to query for records with DNS rdata type NS.

        @param qname: the query name
        @type qname: dns.name.Name object or string
        @param rdtype: the query type
        @type rdtype: int or string
        @param rdclass: the query class
        @type rdclass: int or string
        @param tcp: use TCP to make the query (default is False).
        @type tcp: bool
        @param source: bind to this IP address (defaults to machine default
        IP).
        @type source: IP address in dotted quad notation
        @param raise_on_no_answer: raise NoAnswer if there's no answer
        (defaults is True).
        @type raise_on_no_answer: bool
        @param source_port: The port from which to send the message.
        The default is 0.
        @type source_port: int
        @rtype: dns.resolver.Answer instance
        @raises Timeout: no answers could be found in the specified lifetime
        @raises NXDOMAIN: the query name does not exist
        @raises YXDOMAIN: the query name is too long after DNAME substitution
        @raises NoAnswer: the response did not contain an answer and
        raise_on_no_answer is True.
        @raises NoNameservers: no non-broken nameservers are available to
        answer the question.iR(t	algorithmgš™™™™™¹?iR>R?tsourcetsource_portiRRN(DRRRR$R%RRtis_metatypeRFRtis_metaclasstis_absoluteR,RtconcatenateRžR†R‚RcRQRR+RKR9R(tmessaget
make_queryRŠtuse_tsigR‰R‹tuse_ednsRŒRRŽRRƒR“trandomtshuffleR=RäR„R…R:ttcptudptTCRœterrort	exceptionRàtUnexpectedSourcet	FormErrortremovetEOFErrortrcodeR8tNOERRORRtSERVFAILR’R#RátsleepR‘RGRt(RR'RR RòRæRSRçt
qnames_to_tryR®tall_nxdomaintnxdomain_responsesRât_qnameRR>R(RƒR?tbackoffR¤R‡R…ttcp_attempttexRût
sleep_time((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR:]sô#			
	


					





	
	


		cCsJ||_|dkr4t|jjƒƒd|_n	||_||_dS(sÄAdd a TSIG signature to the query.

        @param keyring: The TSIG keyring to use; defaults to None.
        @type keyring: dict
        @param keyname: The name of the TSIG key to use; defaults to None.
        The key must be defined in the keyring.  If a keyring is specified
        but a keyname is not, then the key used will be the first key in the
        keyring.  Note that the order of keys in a dictionary is not defined,
        so applications should supply a keyname when a keyring is used, unless
        they know the keyring contains only one key.
        @param algorithm: The TSIG key algorithm to use.  The default
        is dns.tsig.default_algorithm.
        @type algorithm: stringiN(R‰RRtkeysRŠR‹(RR‰RŠRå((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRî"s
		cCs4|dkrd}n||_||_||_dS(sConfigure Edns.

        @param edns: The EDNS level to use.  The default is -1, no Edns.
        @type edns: int
        @param ednsflags: The EDNS flags
        @type ednsflags: int
        @param payload: The EDNS payload size.  The default is 0.
        @type payload: intiÿÿÿÿN(RRŒRRŽ(RRŒRRŽ((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRï8s

			cCs
||_dS(sOverrides the default flags with your own

        @param flags: The flags to overwrite the default with
        @type flags: intN(R(RR((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt	set_flagsHsN(R3R4RRcRYR”R˜R´R·R¸R»RÇR—RÎRäRRtARRR‘RR:RŸR RîRïR(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRs$+&		)		
		
	"	-	7	Ä	cCstdkrtƒntS(s7Get the default resolver, initializing it if necessary.N(tdefault_resolverRtreset_default_resolver(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pytget_default_resolverRs
cCs
tƒadS(sSRe-initialize default resolver.

    resolv.conf will be re-read immediatelly.
    N(RR
(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRYsicCs"tƒj|||||||ƒS(sëQuery nameservers to find the answer to the question.

    This is a convenience function that uses the default resolver
    object to make the query.
    @see: L{dns.resolver.Resolver.query} for more information on the
    parameters.(RR:(R'RR RòRæRSRç((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyR:bs	cCsùt|tƒr-tjj|tjjƒ}n|dkrEtƒ}n|jƒs`t	|ƒ‚nx’y8|j
|tjj||ƒ}|j
j|krš|SWn#tjjtjjfk
rÀnXy|jƒ}Wqctjjk
rðt‚qcXqcWdS(sžFind the name of the zone which contains the specified name.

    @param name: the query name
    @type name: absolute dns.name.Name object or string
    @param rdclass: The query class
    @type rdclass: int
    @param tcp: use TCP to make the query (default is False).
    @type tcp: bool
    @param resolver: the resolver to use
    @type resolver: dns.resolver.Resolver object or None
    @rtype: dns.name.NameN(RRRR$R%RžRRRêRDR:RRMRKtresolverRR9RORPRE(R$R RòR
R((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt
zone_for_nameos"
cCs|tjtjB@dkr#t‚n|dkrP|dkrPtjtjƒ‚ng}g}d}y¼|dkrÄd}|tj@dkr§|jdƒ|jdƒq|jdƒ|jdƒnY|j	dƒ}	t
|	ƒdkrò|	d}
n|}
tjj
|
ƒ}|j|ƒ|}WnÌtk
rìy)tjj
|ƒ}|j|ƒ|}Wqítk
rè|tj@dkréy$|tjks›|tjkr
tj|tjjd	tƒ}|j}|jjtƒ}|jdk	r
x$|jD]}
|j|
jƒqíWq
n|tjks+|tjkrtj|tjjd	tƒ}|j}|jjtƒ}|jdk	rx$|jD]}
|j|
jƒq}WqnWqåtj j!k
rÉtjtjƒ‚qåtjtj"ƒ‚qåXqéqíXnXd}y%|dkrd}nt#|ƒ}WnNtk
rh|tj$@dkriytj%|ƒ}Wqetk
raqeXqinX|dkrŠtjtjƒ‚ng}|dkr±tj&tj'g}n	|g}|tj(@dkrÖ|}nd
}|tjksú|tjkr_xb|D]W}xN|D]F}x=t)|D]1}|jtj|||||ddffƒqWqWqWn|tjks}|tjkrÜx\|D]Q}xH|D]@}x7t)|D]+}|jtj|||||ffƒq¢Wq‘Wq„Wnt
|ƒdkrtjtjƒ‚n|S(Nit	localhosts::s0.0.0.0s::1s	127.0.0.1t%iRSt(*Rœt
AI_ADDRCONFIGtAI_V4MAPPEDtNotImplementedErrorRtgaierrort
EAI_NONAMEt
AI_PASSIVER,R¨RRtipv6t	inet_atont	Exceptiontipv4tAI_NUMERICHOSTtAF_INET6t	AF_UNSPECt	_resolverR:RtAAAAR‘R'R)R#RcRKtaddresstAF_INETR	R
Rt
EAI_SYSTEMtinttAI_NUMERICSERVt
getservbynamet
SOCK_DGRAMtSOCK_STREAMtAI_CANONNAMEt_protocols_for_socktype(thosttservicetfamilytsocktypetprotoRtv6addrstv4addrsR)tpartstahosttaddrtv6trdatatv4R…ttuplest	socktypesR&((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt_getaddrinfo¢sª	








				!	

		

(

"c
Csç|d}|d}t|ƒdkr<|d}tj}nd}tj}t|||tjtjdƒ}t|ƒdkrtjdƒ‚n|ddd}|tj	@r¸d}nd}t
jj|ƒ}	|tj
@dkr†y/tj|	dƒ}
|
jdjjtƒ}Wq¯t
jjt
jjfk
r‚|tj@rVtjtjƒ‚n|}|dk	rƒ|d	t|ƒ7}qƒq¯Xn)|}|dk	r¯|d	t|ƒ7}n|tj@rËt|ƒ}ntj||ƒ}||fS(
Niiiis'sockaddr resolved to multiple addressesRóRòtPTRR(RRœRRR"R:R(tSOL_TCPRõtNI_DGRAMRtreversenametfrom_addresstNI_NUMERICHOSTRR:RKR"R#RcR
RR9tNI_NAMEREQDRRRtNI_NUMERICSERVt
getservbyport(
tsockaddrRR+R…tscopeR-R8R4tpnameR'RthostnameR,((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt_getnameinfosB


	
	

cCsW|dkrtjƒ}ny#tt|dƒddƒdSWntk
rR|SXdS(NiPii(RRœRRHR:R(R$((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt_getfqdn.s#
cCst|ƒddS(Nii(t_gethostbyname_ex(R$((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt_gethostbyname7scCstg}g}t|dtjtjtjtjƒ}|dd}x#|D]}|j|ddƒqHW|||fS(Niii(R:RœR"R(R<R)R,(R$taliasest	addressesR8t	canonicaltitem((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyRJ;s
c
Csáy/tjj|ƒ|dddf}tj}Wn&tk
rW|df}tj}nXt|tjƒ\}}g}g}t	|d|tj
tjtjƒ}|dd}x#|D]}	|j
|	ddƒqµW|||fS(NiPiii(RRRRœRRR"RHRAR:R(R<R)R,(
tipRDR-R$R…RLRMR8RNRO((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt_gethostbyaddrGs 



cCsX|dkrtƒ}n|att_tt_tt_	t
t_tt_
tt_dS(sûOverride the system resolver routines in the socket module with
    versions which use dnspython's resolver.

    This can be useful in testing situations where you want to control
    the resolution behavior of python code without having to change
    the system's resolver settings (e.g. /etc/resolv.conf).

    The resolver to use may be specified; if it's not, the default
    resolver will be used.

    @param resolver: the resolver to use
    @type resolver: dns.resolver.Resolver object or None
    N(RRRR:RœtgetaddrinfoRHtgetnameinfoRItgetfqdnRKt
gethostbynameRJtgethostbyname_exRQt
gethostbyaddr(R
((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pytoverride_system_resolver[s					cCs@datt_tt_tt_t	t_
tt_t
t_dS(s4Undo the effects of override_system_resolver().
    N(RRt_original_getaddrinfoRœRRt_original_getnameinfoRSt_original_getfqdnRTt_original_gethostbynameRUt_original_gethostbyname_exRVt_original_gethostbyaddrRW(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pytrestore_system_resolverus					(SRRœR•RQRðt	threadingRhtImportErrortdummy_threadingt
dns.exceptionRt	dns.flagstdns.ipv4tdns.ipv6tdns.messagetdns.namet	dns.queryt	dns.rcodetdns.rdataclasst
dns.rdatatypetdns.reversenametdns.tsigt_compatRRR–twinregRÁRötDNSExceptionRR8RàR9R=RDRERFtobjectRGRdRvR}RRR
RRRR	RRR‘RcR:RtSOL_UDPR'R<R(R*RRRRYRSRZRTR[RUR\RVR]RWR^RR:RHRIRKRJRQRXR_(((sR/home/tvault/.virtenv/lib/python2.7/site-packages/eventlet/support/dns/resolver.pyt<module>s†

<sboÿÿE				%						c(