
    iP                        d dl mZmZmZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ dgZd Z e            Zej         Z ej         j!        Z"dded d d e j#         e$edd           fdZ#e#e _#        dZ% G d dej         j&                  Z' G d de(          Z) G d de(          Z*d Z+ G d de          Z,dS )     )absolute_importprint_functiondivisionN)error)gaierror)herror)NI_NUMERICSERV)AF_INET)AF_INET6)	AF_UNSPEC)
EAI_NONAME)
EAI_FAMILY)AbstractResolver)	HostsFile)
__import__)string_types)	iteritems)configResolverc                  x    ddl m}  dddddfd}d	 } | d
||          }|j        }d }||j        _        |S )Nr   )import_patched)rdataresolverrdtypes)INANY)AAAAA)SOAPTR)dnszdns.rdtypeszdns.rdtypes.INzdns.rdtypes.ANYc                 0                         | d          S )N )get)mod_nameextrass    D/usr/local/lib/python3.11/dist-packages/gevent/resolver/dnspython.py	extra_allz_patch_dns.<locals>.extra_allp   s    zz(B'''    c                 *   | j         }|j        }	 t          | j        j                  }n# t
          $ r | j        j        }Y nw xY w	 t          | j        j                  }n# t
          $ r | j        j        }Y nw xY w|D ]}|D ]} |||           d S N)	r   get_rdata_classlist
rdataclass
RdataClassAttributeError	_by_value	rdatatype	RdataType)r!   r   r,   rdclass_valuesrdtype_valuesrdclassrdtypes          r'   after_import_hookz%_patch_dns.<locals>.after_import_hooks   s     	/	6!#.";<<NN 	6 	6 	6 ^5NNN	6	4 !899MM 	4 	4 	4M3MMM	4
 & 	1 	1G' 1 100001	1 	1s!   * AAA! !A:9A:r!   c                      t          |           r+   )
ValueError)names    r'   _no_dynamic_importsz'_patch_dns.<locals>._no_dynamic_imports   s    r)   )gevent._patcherr   moduler   r   )importerr(   r8   patchertopr<   r&   s         @r'   
_patch_dnsrB   d   s    :::::: 0&()	 F( ( ( ( (1 1 1: hui):;;G
.C   /CIJr)   	exc_clearc                      d S r+   r#   r#   r)   r'   <lambda>rE      s    d r)   c                     |t           j        t           j        z  z  dk    rt          j        t           j                   || |||||          } |             |S Nr   )socketAI_ADDRCONFIGAI_V4MAPPEDr   
EAI_SYSTEM)	hostservicefamilysocktypeprotoflags	_orig_gai
_exc_clearress	            r'   _getaddrinforU      s]     $v'99:a?? of/000
)D'68UE
B
BCJLLLJr)   g     r@c                       e Zd ZddZdS )_HostsAnswerTc                    d | _         || _        || _        || _        || _        |s |rt
          j                                        || _        t          |d          rt          j
                    |j        z   nd| _        d S )Nttlr   )responseqnamer7   r6   canonical_namer!   r   NoAnswerrrsethasattrtimerY   
expiration)selfr[   r7   r6   r^   raise_on_no_answers         r'   __init__z_HostsAnswer.__init__   s    
# 	*+ 	*,'')))
(/u(=(=E49;; 9% %CD 	r)   N)T)__name__
__module____qualname__rd   r#   r)   r'   rW   rW      s.        
F 
F 
F 
F 
F 
Fr)   rW   c                   ^    e Zd ZdZdefdZej        j        ej	        j
        dddfdZd ZdS )_HostsResolverz'
    Class to parse the hosts file
    Nc                 J    t          |          | _        || _        d| _        d S rG   )r   
hosts_fileinterval
_last_load)rb   fnamerl   s      r'   rd   z_HostsResolver.__init__   s#    #E** r)   FTc                 8   t          j                     }| j        }| j        | j        z   |k     r|| _        |                                 t
          j        j        }t          |t                    r"|}	t
          j
                            |          }nt          |          }	|	                                }	t
          j                            |||          }
| j        | j        z   |z
  |
_        d }d }|t
          j        j        k    r#|j        }t
          j        j        j        j        }nw|t
          j        j        k    r#|j        }t
          j        j        j        j        }n?|t
          j        j        k    r|j        }d }n|t
          j        j        k    r
|j        }d }|                    |	          }|s1|                                r|                    |	d d                   }|r |
                     ||||                     t=          ||||
|          S )Nc                     t           j        j        j                            | |t           j                            |                    S r+   )r!   r   r   CNAMEr;   	from_textctaddrs      r'   rE   z&_HostsResolver.query.<locals>.<lambda>   s0    cko&;&A&A!QHZHZ[_H`H`&a&a r)   c                     t           j        j        j                            | |t           j                            |                    S r+   )r!   r   r   r    r;   rr   rs   s      r'   rE   z&_HostsResolver.query.<locals>.<lambda>  s0    cko&9&=&=aCHDVDVW[D\D\&]&] r)   )r`   rk   rm   rl   loadr!   r.   r   
isinstancer   r;   rr   strlowerr^   RRsetrY   r2   r   v4r   r   v6rq   aliasesr    reverser$   is_absoluteaddrW   )rb   r[   r7   r6   tcpsourcerc   nowrk   r;   r^   mappingkindrv   s                 r'   queryz_HostsResolver.query   s    ikk_
?T]*S00!DOOO.#e\** 	DH&&u--EEu::Dzz||	w77Odm3c9	S]_$$ mG;>#%DDs}))) mG;>&+DDs}*** (GaaDDs}((( (G]]D {{4   	*))++ 	*;;tCRCy))D 	3IIdd7FD11222E67E;MNNNr)   c                     | j         j        }g }||v r	||         }n|}|                    |           t          |          D ] \  }}||k    r|                    |           !|                    |           |S r+   )rk   r   appendr   remove)rb   hostnamer   resultcannonaliascnames          r'   
getaliasesz_HostsResolver.getaliases  s     /)wX&FFFf%g.. 	% 	%LE5e$$$hr)   )re   rf   rg   __doc__	HOSTS_TTLrd   r!   r2   r   r.   r   r   r   r#   r)   r'   ri   ri      sx          "I    
 #&-/3>;L1O 1O 1O 1Of    r)   ri   c                       e Zd Zd Zej        j        ej        j        dddej        j        ej        j	        ej        j
        ffdZdS )_DualResolverc                     t                      | _        t                                          | _        t                                          | j        _        d S r+   )ri   hosts_resolverr   get_default_resolvernetwork_resolverLRUCachecacherb   s    r'   rd   z_DualResolver.__init__   sA    ,.. ( = = ? ?&.&7&7&9&9###r)   FNTc                    |d}t          |t                    s*t          |t                    r|                    d          }t          |t                    r t          j                            |d           }t          |t                    rt          j                            |          }|t          j        j	        k    ri||v re	 | j
                            ||d          }|j        r|S n=# t          $ r0 ddlm}	   |	            j        | gt#          j                    R   Y nw xY w| j                            ||||||          S )Nz0.0.0.0idnaF)rc   r   )get_hub)rz   r   bytesdecoder!   r;   rr   r2   r.   r   r   r   r^   	Exceptiongeventr   handle_errorsysexc_infor   )
rb   r[   r7   r6   r   r   rc   _hosts_rdtypesanswerr   s
             r'   r   z_DualResolver.query%  su    =E%.. 	-%'' -V,,e\** 	4H&&ud33Efl++ 	5],,V44Fcn'''Fn,D,D",225&UZ2[[
 < "!M"	  > > >******&		&t=clnn======> $**5&'+.K] + _ _ 	_s   C. .7D('D()re   rf   rg   rd   r!   r2   r   r.   r   r   r    r   r#   r)   r'   r   r     sl        : : :
 #&-/3>;L!mos}/A3=CTU _  _  _  _  _  _r)   r   c                     | t           j        k    rt          j        j        }nA| t           j        k    rt          j        j        }nt          j        t           j        d          |S )NzAddress family not supported)	rH   r
   r!   r2   r   r   r   r   r   )rN   r7   s     r'   _family_to_rdtyper   G  sT    	6?	"	"#of/<> > 	>Mr)   c                       e Zd ZdZd
dZed             Zd Zd Zd Z	d Z
d	 Z ej        ej                  Z ej        ej                  Z ej        ej                  Z ej        ej                  ZdS )r   a   
    An *experimental* resolver that uses `dnspython`_.

    This is typically slower than the default threaded resolver
    (unless there's a cache hit, in which case it can be much faster).
    It is usually much faster than the c-ares resolver. It tends to
    scale well as more concurrent resolutions are attempted.

    Under Python 2, if the ``idna`` package is installed, this
    resolver can resolve Unicode host names that the system resolver
    cannot.

    .. note::

        This **does not** use dnspython's default resolver object, or share any
        classes with ``import dns``. A separate copy of the objects is imported to
        be able to function in a non monkey-patched process. The documentation for the resolver
        object still applies.

        The resolver that we use is available as the :attr:`resolver` attribute
        of this object (typically ``gevent.get_hub().resolver.resolver``).

    .. caution::

        Many of the same caveats about DNS results apply here as are documented
        for :class:`gevent.resolver.ares.Resolver`. In addition, the handling of
        symbolic scope IDs in IPv6 addresses passed to ``getaddrinfo`` exhibits
        some differences.

        On PyPy, ``getnameinfo`` can produce results when CPython raises
        ``socket.error``, and gevent's DNSPython resolver also
        raises ``socket.error``.

    .. caution::

        This resolver is experimental. It may be removed or modified in
        the future. As always, feedback is welcome.

    .. versionadded:: 1.3a2

    .. versionchanged:: 20.5.0
       The errors raised are now much more consistent with those
       raised by the standard library resolvers.

       Handling of localhost and broadcast names is now more consistent.

    .. _dnspython: http://www.dnspython.org
    Nc                 H   t           j        ct                      x}t           _        t          j        rt          j        |j        j        d d <   t          j        rt          j        |j        _        t          t           j        t                    sJ t           j        | _        d S r+   )
r   	_resolverr   r   resolver_nameserversr   nameserversresolver_timeoutlifetimerz   )rb   hubr   s      r'   rd   zResolver.__init__  s    %-:__<I** X<B<W	*6qqq9& N6<6M	*3 (,m<<<<<!+r)   c                     | j         j        S )a  
        The dnspython resolver object we use.

        This object has several useful attributes that can be used to
        adjust the behaviour of the DNS system:

        * ``cache`` is a :class:`dns.resolver.LRUCache`. Its maximum size
          can be configured by calling :meth:`resolver.cache.set_max_size`
        * ``nameservers`` controls which nameservers to talk to
        * ``lifetime`` configures a timeout for each individual query.
        )r   r   r   s    r'   r   zResolver.resolver  s     ~..r)   c                     d S r+   r#   r   s    r'   closezResolver.close  s    r)   c                    t          |t                    s*t          |t                    r|                    d          }| j        j                            |          }| j        j        }t          |          }	 	 |	                    |t          j        j        |          }|                    d |j        D                        |d         j        }nz# t          j        j        t          j        j        t          j        j        f$ r Y nDt(          $ r Y n9t*          $ r,}|t          |t,                    rt/          |           d }~ww xY w|S )Nr      c              3   >   K   | ]}t          |j                  V  d S r+   )r{   target).0rrs     r'   	<genexpr>z'Resolver._getaliases.<locals>.<genexpr>  s*      BB"s29~~BBBBBBr)   r   )rz   r{   r   r   r   r   r   r   r   r   r!   r2   rq   extendr^   r   r   r]   NXDOMAINNoNameserversdTimeoutr0   int	TypeError)rb   r   rN   r   net_resolverr7   ansexs           r'   _getaliaseszResolver._getaliases  sS   (C(( 	3(E** 3#??622./::8DD~6"6**	))"((3=3FOO BB	BBBBBBq6= L)3<+@#,B\]      !   #z(C'@'@##B--'	) s$   <&C 5E	E	E'EEc           
      &   t          |t                    s|                    | j                  }|dk    rd}|t          k    rj	 t          ||||||          S # t          $ rH 	 t          ||t          |||          cY S # t          $ r t          ||t          |||          cY cY S w xY ww xY w	 t          ||||||          S # t          $ rD}|j	        d         t          k    r(|| j        vrt          | j        f|_	        t          |_         d }~ww xY w)Nzff02::1de:c0:face:8Dzff02::1de:c0:face:8dr   )rz   r{   r   HOSTNAME_ENCODINGr   rU   r   r   r
   argsr   _KNOWN_ADDR_FAMILIESr   EAI_FAMILY_MSGerrno)rb   
host_bytesportrN   rO   rP   rQ   r   s           r'   rU   zResolver._getaddrinfo  sd   *c** 	C#**4+ABBJ/// 0JY[#JfhuUUU [ [ [['
D(HeUZ[[[[[ [ [ ['
D'8UTYZZZZZZZ[[#JfhuUUU   71:++d>W0W0W  *4+>?BG)BHsH   A 
B*#A>;B*>#B&!B*%B&&B*.C 
D?DDc                     	 t                               ||          S # t          $ r( |s"t                               |t                    cY S Y d S w xY wr+   )r   _getnameinfor   r	   )rb   address_bytesr   sockaddrrQ   s        r'   r   zResolver._getnameinfo  sv    	G((5999 	G 	G 	G G  ,,X~FFFFF	G G G	Gs    ,AAc                     	 t                               |          S # t          $ r,}|j        d         t          k    rt          dd           d }~ww xY w)Nr   r   zUnknown host)r   _gethostbyaddrr   r   r   r   )rb   ip_address_bytesr   s      r'   r   zResolver._gethostbyaddr  sa    
	**+;<<< 	 	 	wqzZ'' Q///	s    
A'AAr+   )re   rf   rg   r   rd   propertyr   r   r   rU   r   r   r   fixup_gaierrorgetnameinfogethostbyaddrgethostbyname_exgetaddrinfor#   r)   r'   r   r   R  s        / /b
, 
, 
, 
, / / X/    .) ) )VG G G   2"12B2NOOK3$34D4RSSM6'67G7XYY1"12B2NOOKKKr)   )-
__future__r   r   r   r   r`   _socketr   r   r   r	   r
   r   r   r   r   rH   gevent.resolverr   gevent.resolver._hostsfiler   gevent.builtinsr   g_importgevent._compatr   r   gevent._configr   __all__rB   r!   r   Timeoutr   rU   getattrr   AnswerrW   objectri   r   r   r   r#   r)   r'   <module>r      s  z A @ @ @ @ @ @ @ @ @ 



                    " " " " " "                                , , , , , , 0 0 0 0 0 0 2 2 2 2 2 2 ' ' ' ' ' ' $ $ $ $ $ $ ! ! ! ! ! ! 5 5 5n jll<< DQ#0#GCllCC    % 	F F F F F3<& F F F N N N N NV N N N`'_ '_ '_ '_ '_F '_ '_ '_R  mP mP mP mP mP mP mP mP mP mPr)   