
    bf                         U d dl Z d dlZd dlmZmZmZmZmZmZ ddl	m
Z
 ddlmZ dZ	 d dlZn# e$ r dZY nw xY wdZ G d d	e
          Z G d
 de
          Zeeeef                  ZereneZeed<   dS )    N)AnyDictListOptionalTypeUnion   )AbstractResolver)get_running_loop)ThreadedResolverAsyncResolverDefaultResolverFc                       e Zd ZdZddeej                 dd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dS )r   zThreaded resolver.

    Uses an Executor for synchronous getaddrinfo() calls.
    concurrent.futures.ThreadPoolExecutor is used by default.
    Nloopreturnc                 .    t          |          | _        d S N)r   _loop)selfr   s     J/var/www/html/Alfredo/env/lib/python3.11/site-packages/aiohttp/resolver.py__init__zThreadedResolver.__init__   s    %d++


    r   hostnameportfamilyc           
        K   | j                             ||t          j        |t          j                   d {V }g }|D ]\  }}}}}|t          j        k    rit          |          dk     r,|d         r?t          j        |t          j        t          j	        z            \  }	}
t          |
          }n%|d d         \  }	}n|t          j        k    sJ |\  }	}|                    ||	|||t          j        t          j        z  d           |S )N)typer   flags      r   hostr   r   protor   )r   getaddrinfosocketSOCK_STREAMAI_ADDRCONFIGAF_INET6lengetnameinfoNI_NUMERICHOSTNI_NUMERICSERVintAF_INETappendAI_NUMERICHOSTAI_NUMERICSERV)r   r   r   r   infoshosts_r#   addressr"   _ports              r   resolvezThreadedResolver.resolve   sV      j,,#& - 
 
 
 
 
 
 
 
 ,1 	 	(FAua((w<<!## 1: 	- #)"4!69N!N# #KD% u::DD!(!JD$$////$
dLL (  $"#2V5JJ 	 	 	 	 r   c                 
   K   d S r    r   s    r   closezThreadedResolver.closeJ   s      r   r   r   N)__name__
__module____qualname____doc__r   asyncioAbstractEventLoopr   r%   r.   strr-   r   r   r   r7   r;   r9   r   r   r   r      s         , ,Xg&?@ ,D , , , , *+&.* **#&*47*	d38n	* * * *X     r   r   c                       e Zd ZdZ	 ddeej                 dededdfdZde	j
        fd	ed
ededeeeef                  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dS )r   z9Use the `aiodns` package to make asynchronous DNS lookupsNr   argskwargsr   c                     t           t          d          t          |          | _        t          j        |d|i|| _        t          | j        d          s| j        | _        d S d S )Nz Resolver requires aiodns libraryr   gethostbyname)	aiodnsRuntimeErrorr   r   DNSResolver	_resolverhasattr_resolve_with_queryr7   )r   r   rE   rF   s       r   r   zAsyncResolver.__init__Q   so     >ABBB%d++
+TGGGGt~77 	43DLLL	4 	4r   r   r"   r   r   c           
        K   	 | j                             ||           d {V }nS# t          j        j        $ r<}t          |j                  dk    r|j        d         nd}t          |          |d }~ww xY wg }|j        D ]5}|	                    ||||dt          j        t          j        z  d           6|st          d          |S )Nr	   DNS lookup failedr   r!   )rL   rH   rI   errorDNSErrorr)   rE   OSError	addressesr/   r%   r0   r1   )	r   r"   r   r   respexcmsgr3   r5   s	            r   r7   zAsyncResolver.resolvea   s     	(55dFCCCCCCCCDD|$ 	( 	( 	(!$SX!!3!3#(1++9LC#,,C'	( ~ 
	 
	GLL $# $#2V5JJ 	 	 	 	  	/-...s   !& A67A11A6c           
        K   |t           j        k    rd}nd}	 | j                            ||           d {V }nS# t          j        j        $ r<}t          |j                  dk    r|j        d         nd}t          |          |d }~ww xY wg }|D ]-}	|
                    ||	j        ||dt           j        d           .|st          d          |S )NAAAAAr	   rP   r   r!   )r%   r(   rL   queryrI   rQ   rR   r)   rE   rS   r/   r"   r0   )
r   r"   r   r   qtyperU   rV   rW   r3   rrs
             r   rN   z!AsyncResolver._resolve_with_query{   s      V_$$EEE	(--dE::::::::DD|$ 	( 	( 	(!$SX!!3!3#(1++9LC#,,C'	(  
	 
	BLL $G $#2 	 	 	 	  	/-...s   !; B7BBc                 <   K   | j                                          d S r   )rL   cancelr:   s    r   r;   zAsyncResolver.close   s       r   r   r<   )r=   r>   r?   r@   r   rA   rB   r   r   r%   r.   rC   r-   r   r   r7   rN   r;   r9   r   r   r   r   N   s       CC 594 4w014 4 	4
 
4 4 4 4" &'fn "03	d38n	   6 &'fn "03	d38n	   @           r   r   r   )rA   r%   typingr   r   r   r   r   r   abcr
   helpersr   __all__rI   ImportErroraiodns_defaultr   r   _DefaultTyper   __annotations__r9   r   r   <module>rh      sF     9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ! ! ! ! ! ! % % % % % %
BMMMM    FFF 7 7 7 7 7' 7 7 7tN  N  N  N  N $ N  N  N b E-)99:;1? UEU U U U U Us   . 88