
    <|hP                        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@                  jB                  Z"dded d d e jF                   e$edd       fdZ#e#e _#        dZ% G d dej@                  jL                        Z' G d de(      Z) G d de(      Z*d Z+ G d de      Z,y)     )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                      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                 (    j                  | d      S )N )get)mod_nameextrass    X/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/resolver/dnspython.py	extra_allz_patch_dns.<locals>.extra_allp   s    zz(B''    c                 v   | j                   }|j                  }	 t        | j                  j                        }	 t        | j                  j                        }|D ]  }|D ]  } |||         y # t
        $ r | j                  j                  }Y Yw xY w# t
        $ r | j                  j                  }Y ^w xY w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!#..";";<N
	4 !8!89M & 	1G' 101	1  	6 ^^55N	6  	4MM33M	4s"   A1 B 1BBB87B8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   sW    : 0&()	F(1: ui):;G
..C /CIIJr)   	exc_clearc                       y r+   r#   r#   r)   r'   <lambda>rE      s    r)   c                     |t         j                  t         j                  z  z  dk7  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      sW     $$v'9'99:a? oof//00
D'68UE
BCLJr)   g     r@c                       e Zd ZddZy)_HostsAnswerc                    d | _         || _        || _        || _        || _        |s |rt
        j                  j                         || _        t        |d      r't        j                         |j                  z   | _        y d| _        y )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__   su    
#+,,''))
(/u(=  99; 99%CD 	r)   N)T)__name__
__module____qualname__rd   r#   r)   r'   rW   rW      s    
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y)_HostsResolverz'
    Class to parse the hosts file
    Nc                 @    t        |      | _        || _        d| _        y rG   )r   
hosts_fileinterval
_last_load)rb   fnamerl   s      r'   rd   z_HostsResolver.__init__   s    #E* r)   FTc                    t        j                          }| j                  }| j                  | j                  z   |k  r|| _        |j	                          t
        j                  j                  }t        |t              r"|}	t
        j                  j                  |      }nt        |      }	|	j                         }	t
        j                  j                  |||      }
| j                  | j                  z   |z
  |
_        d }d }|t
        j"                  j$                  k(  r;|j&                  }t
        j(                  j                  j$                  j$                  }n|t
        j"                  j*                  k(  r;|j,                  }t
        j(                  j                  j*                  j*                  }nY|t
        j"                  j.                  k(  r|j0                  }d }n,|t
        j"                  j2                  k(  r|j4                  }d }|j7                  |	      }|s$|j9                         r|j7                  |	d d       }|r|
j;                   ||||             t=        ||||
|      S )Nc                     t         j                  j                  j                  j                  | |t         j                  j                  |            S r+   )r!   r   r   CNAMEr;   	from_textctaddrs      r'   rE   z&_HostsResolver.query.<locals>.<lambda>   s3    ckkoo&;&;&A&A!QHZHZ[_H`&a r)   c                     t         j                  j                  j                  j                  | |t         j                  j                  |            S r+   )r!   r   r   r    r;   rr   rs   s      r'   rE   z&_HostsResolver.query.<locals>.<lambda>  s3    ckkoo&9&9&=&=aCHHDVDVW[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    iik__
??T]]*S0!DOOO..##e\*DHH&&u-Eu:Dzz|		w7OOdmm3c9	S]]__$ mmG;;>>##%%Ds}}))) mmG;;>>&&++Ds}}*** ((GaDs}}((( ((G]D {{4 ))+;;tCRy)DIId7FD12E67E;MNNr)   c                     | j                   j                  }g }||v r||   }n|}|j                  |       t        |      D ]  \  }}||k(  s|j                  |        |j	                  |       |S r+   )rk   r   appendr   remove)rb   hostnamer   resultcannonaliascnames          r'   
getaliasesz_HostsResolver.getaliases  sy     //))wX&F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      s?     "I 
 #&--//3>>;L;L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y)_DualResolverc                     t               | _        t        j                         | _        t        j                         | j                  _        y r+   )ri   hosts_resolverr   get_default_resolvernetwork_resolverLRUCachecacherb   s    r'   rd   z_DualResolver.__init__   s5    ,. ( = = ?&.&7&7&9#r)   FNTc                    |d}t        |t              s!t        |t              r|j                  d      }t        |t              r t        j
                  j                  |d       }t        |t              rt        j                  j                  |      }|t        j                  j                  k(  r1||v r-	 | j                  j                  ||d      }|j                  r|S | j&                  j                  ||||||      S # t        $ r3 ddlm}	   |	       j                   | gt#        j$                           Y \w xY w)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%  s    =E%.%'V,e\*HH&&ud3Efl+]],,V4Fcnn'''Fn,D",,225&UZ2[
 <<!M$$**5&'+.K] + _ 	_  >*&	&&t=clln=>s   7D 9E ?E )re   rf   rg   rd   r!   r2   r   r.   r   r   r    r   r#   r)   r'   r   r     sS    :
 #&--//3>>;L;L!mmoos}}/A/A3==CTCTU _r)   r   c                    | t         j                  k(  rt        j                  j                  }|S | t         j
                  k(  rt        j                  j                  }|S t        j                  t         j                  d      )NzAddress family not supported)	rH   r
   r!   r2   r   r   r   r   r   )rN   r7   s     r'   _family_to_rdtyper   G  sd     M 
6??	"## M oof//<> 	>r)   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y)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                    t         j                  {t               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                  | _        y r+   )
r   	_resolverr   r   resolver_nameserversr   nameserversresolver_timeoutlifetimerz   )rb   hubr   s      r'   rd   zResolver.__init__  s    %-:_<I***<B<W<W	**66q9&&6<6M6M	**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                      y r+   r#   r   s    r'   closezResolver.close  s    r)   c                    t        |t              s!t        |t              r|j                  d      }| j                  j
                  j                  |      }| j                  j                  }t        |      }	 	 |j                  |t        j                  j                  |      }|j                  d |j                  D               |d   j                  }^# t        j                   j"                  t        j                   j$                  t        j                   j&                  f$ r Y |S t(        $ r Y |S t*        $ r#}|t        |t,              rt/        |       d }~ww xY w)Nr   c              3   F   K   | ]  }t        |j                          y wr+   )r{   target).0rrs     r'   	<genexpr>z'Resolver._getaliases.<locals>.<genexpr>  s     B"s299~Bs   !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  s"   (C((E*#??62..//::8D~~66"6*)"((3==3F3FO B		BBq6==  LL))3<<+@+@#,,B\B\]      " #z(C'@#B-'s%   :+C AE *E 5E =EE c           
         t        |t              s|j                  | j                        }|dk(  rd}|t        k(  r	 t        ||||||      S 	 t        ||||||      S # t        $ r= 	 t        ||t        |||      cY S # t        $ r t        ||t        |||      cY cY S w xY ww xY w# t        $ rL}|j                  d   t        k(  r0|| 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  s   *c*#**4+A+ABJ// 0JY[#JfhuUU#JfhuUU  [['
D(HeUZ[[ ['
D'8UTYZZ[[  771:+d>W>W0W  *4+>+>?BG)BHsH   A B' 	B$(A>;B$>B B$B  B$'	C<0AC77C<c                     	 t         j                  ||      S # t        $ r! |st         j                  |t              cY S Y y w xY wr+   )r   _getnameinfor   r	   )rb   address_bytesr   sockaddrrQ   s        r'   r   zResolver._getnameinfo  sI    	G((599 	G  ,,X~FF	 	Gs    %AAc                     	 t         j                  |      S # t        $ r(}|j                  d   t        k(  rt        dd       d }~ww xY w)Nr      zUnknown host)r   _gethostbyaddrr   r   r   r   )rb   ip_address_bytesr   s      r'   r   zResolver._gethostbyaddr  sK    
	**+;<< 	wwqzZ' 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
, / /.)VG 2"112B2N2NOK3$334D4R4RSM6'667G7X7XY1"112B2N2NOKr)   )-
__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 2 ' $ ! 5n l<<<< DQ#00#ClC % 	F3<<&& F NV N`'_F '_RmP mPr)   