
     j{*                        U d dl Z d dlZd dlZd dlZd dlmZmZmZ ddlm	Z	m
Z
 dZ	 d dlZ eej                  d      Zej"                  ej$                  z  Zej(                  ej*                  z  Zej.                  Z eed      reej2                  z  Zej4                  d	k(  Zd
edefdZ G d de	      Z G d de	      Z  G d d      Z!e"e ez     Z#ere neZ$e#e%d<   y# e$ r dZdZY w xY w)    N)AnyFinalOptional   )AbstractResolverResolveResult)ThreadedResolverAsyncResolverDefaultResolvergetaddrinfoFAI_MASKwin32hostreturnc                 V    t         xr" | j                  d      j                         dk(  S )N.	localhost)_IS_WINDOWSrstripcasefold)r   s    C/var/www/html/venv/lib/python3.12/site-packages/aiohttp/resolver.py_is_windows_localhostr      s$    E4;;s+446+EE    c            
           e Zd ZdZddej
                  dz  ddfdZdej                  fde	de
d	ej                  dee   fd
ZddZy)r	   zThreaded resolver.

    Uses an Executor for synchronous getaddrinfo() calls.
    concurrent.futures.ThreadPoolExecutor is used by default.
    Nloopr   c                 >    |xs t        j                         | _        y N)asyncioget_running_loop_loop)selfr   s     r   __init__zThreadedResolver.__init__(   s    7W557
r   r   r   portfamilyc                   K   	 | j                   j                  ||t        j                  |t               d {   }g }|D ]  \  }}}}}|t        j                  k(  rTt        |      dk  r+|d   r7| j                   j                  |t               d {   \  }	}
t        |
      }n#|d d \  }	}n|t        j                  k(  sJ |\  }	}|j                  t        ||	|||t                      |S 7 # t        j
                  $ rG t        |      s | j                   j                  ||t        j                  |d       d {  7  }Y w xY w7 w)N)typer$   flagsr         hostnamer   r#   r$   protor'   )r    r   socketSOCK_STREAM_AI_ADDRCONFIGgaierrorr   AF_INET6lengetnameinfo_NAME_SOCKET_FLAGSintAF_INETappendr   _NUMERIC_SOCKET_FLAGS)r!   r   r#   r$   infoshosts_r,   addressresolved_host_ports              r   resolvezThreadedResolver.resolve+   sp    	**00''$ 1  E$ &(,1 	(FAua(w<!# 1: 261G1G!32 ,(M5 u:D*1"1+'M4///&-#tLL!&!/	'	< c  		(.**00'' 1   E		,,sR   E5C6 C4C6 AEEAE4C6 6AEE	EEEEc                    K   y wr    r!   s    r   closezThreadedResolver.closeb   s	     s   r   r   N)__name__
__module____qualname____doc__r   AbstractEventLoopr"   r-   r6   strr5   AddressFamilylistr   r?   rC   rA   r   r   r	   r	   !   sf    8W66= 8 8 &'v~~55"5060D0D5	m	5nr   r	   c                       e Zd ZdZ	 ddej
                  dz  dededdfdZdej                  fd	e
d
edej                  dee   fdZdej                  fd	e
d
ededeee
ef      fdZddZy)r
   z9Use the `aiodns` package to make asynchronous DNS lookupsNr   argskwargsr   c                 p   t         t        d      |xs t        j                         | _        d | _        |s|rt        j                  |i || _        y t               | _        | j
                  j                  | | j                        | _        t        | j                  d      s| j                  | _        y y )Nz Resolver requires aiodns librarygethostbyname)aiodnsRuntimeErrorr   r   r    _managerDNSResolver	_resolver_DNSResolverManagerget_resolverhasattr_resolve_with_queryr?   )r!   r   rN   rO   s       r   r"   zAsyncResolver.__init__i   s     >ABB7W557
48 6#//@@DN+-33D$**Et~~733DL 8r   r   r   r#   r$   c                 p  K   	 	 | j                   j                  ||t        j                  |t               d {   }g }|j                  D ]  }|j                  }	|j                  t        j                  k(  r{t        |	      dkD  rS|	d   rN| j                   j!                  |	d   j#                  d      g|	dd  t$               d {   }
|
j&                  }nR|	d   j#                  d      }|	d   }n8|j                  t        j(                  k(  sJ |	d   j#                  d      }|	d   }|j+                  t-        ||||j                  dt.                      |st        d d      |S 7 4# t
        j                  j                  $ rG t        |      s | j                   j                  ||t        j                  |d       d {  7  }Y w xY w# t
        j                  j                  $ r;}t        |j                        dk\  r|j                  d   nd}t        d |      |d }~ww xY w7 jw)N)r#   r&   r$   r'   r   r   DNS lookup failedr(   asciir*   )rV   r   r-   r.   r/   rR   errorDNSErrorr   r2   rN   OSErrornodesaddrr$   r1   r3   decoder4   noder6   r7   r   r8   )r!   r   r#   r$   respexcmsgr:   rd   r<   resultr=   s               r   r?   zAsyncResolver.resolve   s    	.!^^77++!( 8  ( &(JJ 	DGKyyG{{foo-w<!#
 $(>>#=#= **73BgabkB*$ F %+KKM$+AJ$5$5g$>M"1:D{{fnn444 '
 1 1' :qzLL!&;;/	'	< $ 344m <<(( 	,T2!^^77++! 8   	 ||$$ 	.!$SXX!!3#((1+9LC$$#-	.sj   H65E1 E.E1 B
H6	H3
B$H6.E1 1AGGGG GG H056H++H00H6c           
        K   |t         j                  k(  rdnd}	 | j                  j                  ||       d {   }g }|D ]2  }	|j                  ||	j                  ||dt         j                  d       4 |st        d d      |S 7 M# t        j
                  j                  $ r;}t        |j                        dk\  r|j                  d   nd}t        d |      |d }~ww xY ww)NAAAAAr   r\   r   r*   )r-   r1   rV   queryrR   r^   r_   r2   rN   r`   r7   r   AI_NUMERICHOST)
r!   r   r#   r$   qtypere   rf   rg   r:   rrs
             r   rZ   z!AsyncResolver._resolve_with_query   s      "(6??!:v	.--dE::D
  
	BLL $GG $#22	
	 $ 344+ ;||$$ 	.!$SXX!!3#((1+9LC$$#-	.s8   C%B
 BB
 A	C%B
 
C"'6CC""C%c                    K   | j                   r5| j                   j                  | | j                         d | _         d | _        y | j                  | j                  j	                          d | _        y wr   )rT   release_resolverr    rV   cancelrB   s    r   rC   zAsyncResolver.close   sW     ==MM**4< DM!DN>>%NN!!#s   A0A2r   rD   )rE   rF   rG   rH   r   rI   r   r"   r-   r6   rJ   r5   rK   rL   r   r?   dictrZ   rC   rA   r   r   r
   r
   f   s    C 264''$.4 4 	4
 
44 &'v~~;;";060D0D;	m	;| &'fnn"03	d38n	:
r   r
   c                        e Zd ZU dZdZed    ed<   d fdZddZddd	e	j                  dd
fdZddd	e	j                  ddfdZ xZS )rW   zManager for aiodns.DNSResolver objects.

    This class manages shared aiodns.DNSResolver instances
    with no custom arguments across different event loops.
    N	_instancer   c                     | j                   .t        | 	  |       | _         | j                   j                          | j                   S r   )ru   super__new___init)cls	__class__s    r   rx   z_DNSResolverManager.__new__   s7    == !GOC0CMMM!}}r   c                 6    t        j                         | _        y r   )weakrefWeakKeyDictionary
_loop_datarB   s    r   ry   z_DNSResolverManager._init   s    
 %%' 	r   clientr
   r   zaiodns.DNSResolverc                     || j                   vr<t        j                  |      }t        j                         }||f| j                   |<   n| j                   |   \  }}|j                  |       |S )a&  Get or create the shared aiodns.DNSResolver instance for a specific event loop.

        Args:
            client: The AsyncResolver instance requesting the resolver.
                   This is required to track resolver usage.
            loop: The event loop to use for the resolver.
        )r   )r   rR   rU   r}   WeakSetadd)r!   r   r   resolver
client_sets        r   rX   z _DNSResolverManager.get_resolver   sg     t&))t4H9@9JJ%-z$:DOOD! $(??4#8 Hj 	vr   c                     | j                   j                  |      }|y|\  }}|j                  |       |s ||j                          | j                   |= yy)zRelease the resolver for an AsyncResolver client when it's closed.

        Args:
            client: The AsyncResolver instance to release.
            loop: The event loop the resolver was using.
        N)r   getdiscardrr   )r!   r   r   current_loop_datar   r   s         r   rq   z$_DNSResolverManager.release_resolver  s^     !OO//5$0*6"#!% r   )r   rW   rD   )rE   rF   rG   rH   ru   r   __annotations__rx   ry   r   rI   rX   rq   __classcell__)r{   s   @r   rW   rW      sj     26Ix-.5(%-4-F-F	.&%&-4-F-F&	&r   rW   r   )&r   r-   sysr}   typingr   r   r   abcr   r   __all__rR   rY   rU   aiodns_defaultImportErrorrm   AI_NUMERICSERVr8   NI_NUMERICHOSTNI_NUMERICSERVr4   AI_ADDRCONFIGr/   r   platformr   rJ   boolr   r	   r
   rW   r&   _DefaultTyper   r   rA   r   r   <module>r      s     
  ' ' 0
BV//?N --0E0EE **V-B-BB %%
69fnn$Nllg%F F FB' BJ@$ @F@& @&F M$4451?EU U{  FNs   C 	C+*C+