
    ;3h&                        U d dl Z d dlZd dlZd dlmZmZmZmZmZ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j0                  ej2                  z  Zej6                  Z eed      reej:                  z  Z G d	 d
e      Z G d de      Z G d d      Z e
eeef      Z!ereneZ"e!e#d<   y# e$ r dZdZY w xY w)    N)AnyDictFinalListOptionalTupleTypeUnion   )AbstractResolverResolveResult)ThreadedResolverAsyncResolverDefaultResolvergetaddrinfoFAI_MASKc            
           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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loopreturnc                 >    |xs t        j                         | _        y N)asyncioget_running_loop_loop)selfr   s     P/var/www/html/audio-gradio/venv/lib/python3.12/site-packages/aiohttp/resolver.py__init__zThreadedResolver.__init__"   s    7W557
    r   host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 7 `w)N)typer!   flags      hostnamer   r    r!   protor$   )r   r   socketSOCK_STREAM_AI_ADDRCONFIG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%   s     jj,,##  - 
 
 &(,1 	(FAua(w<!# 1: 261G1G!32 ,(M5 u:D*1"1+'M4///&-#tLL!&!/	'	< O
&,s#   6C7C3AC7C5AC75C7c                    K   y wr    r   s    r   closezThreadedResolver.closeQ   s	     s   r   r   N)__name__
__module____qualname____doc__r   r   AbstractEventLoopr   r*   r2   strr1   AddressFamilyr   r   r;   r?   r=   r   r   r   r      sf    8Xg&?&?@ 8D 8 &'v~~**"*060D0D*	m	*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	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   rI   rJ   s       r   r   zAsyncResolver.__init__X   s     >ABB7W557
7; 6#//@@DN+-33D$**Et~~733DL 8r   r   r   r    r!   c                 v  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$                  }nH|	d   j!                  d      }|	d   }n.|t        j&                  k(  sJ |	d   j!                  d      }|	d   }|j)                  t+        ||||dt,                      |st        d d      |S 7  # t
        j                  j                  $ r;}t        |j                        dk\  r|j                  d   nd}t        d |      |d }~ww xY w7 w)N)r    r#   r!   r$   r   DNS lookup failedr%   r   asciir'   )rQ   r   r*   r+   r,   rM   errorDNSErrorr.   rI   OSErrornodesaddrr!   r-   r/   decoder0   noder2   r3   r   r4   )r   r   r    r!   respexcmsgr6   r_   r8   resultr9   s               r   r;   zAsyncResolver.resolveq   s    
	.33''$ 4  D &(JJ 	DMQYYG[[F(w<!#
 $(>>#=#= **73BgabkB*$ F %+KKM$+AJ$5$5g$>M"1:D/// '
 1 1' :qzLL!&!/	)	> $ 344[ ||$$ 	.!$SXX!!3#((1+9LC$$#-	.sE   F95E EE BF9	F7
BF9E F496F//F44F9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   rW   r   r'   )r*   r-   rQ   queryrM   rY   rZ   r.   rI   r[   r3   r   AI_NUMERICHOST)
r   r   r    r!   qtyper`   ra   rb   r6   rrs
             r   rU   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   )rO   release_resolverr   rQ   cancelr>   s    r   r?   zAsyncResolver.close   sW     ==MM**4< DM!DN>>%NN!!#s   A0A2r   r@   )rA   rB   rC   rD   r   r   rE   r   r   r*   r2   rF   r1   rG   r   r   r;   r   rU   r?   r=   r   r   r   r   U   s    C 594w0014 4 	4
 
44 &'v~~11"1060D0D1	m	1h &'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 )rR   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   )ro   super__new___init)cls	__class__s    r   rr   z_DNSResolverManager.__new__   s7    == !GOC0CMMM!}}r   c                 6    t        j                         | _        y r   )weakrefWeakKeyDictionary
_loop_datar>   s    r   rs   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   )ry   rM   rP   rw   WeakSetaddr   rz   r   resolver
client_sets        r   rS   z _DNSResolverManager.get_resolver   sg     t&))t4H;B??;LJ%-z$:DOOD! $(??4#8 Hj 	vr   c                     || j                   vry| j                   |   \  }}|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)ry   discardrm   r~   s        r   rl   z$_DNSResolverManager.release_resolver   sX     t&#t4*6"#!% r   )r   rR   r@   )rA   rB   rC   rD   ro   r   __annotations__rr   rs   r   rE   rS   rl   __classcell__)ru   s   @r   rR   rR      sj     26Ix-.5(%-4-F-F	.&%&-4-F-F&	&r   rR   r   )$r   r*   rw   typingr   r   r   r   r   r   r	   r
   abcr   r   __all__rM   rT   rP   aiodns_defaultImportErrorrh   AI_NUMERICSERVr4   NI_NUMERICHOSTNI_NUMERICSERVr0   AI_ADDRCONFIGr,   r   r   r   rR   _DefaultTyper   r   r=   r   r   <module>r      s       G G G 0
BV//?N --0E0EE **V-B-BB %%
69fnn$N7' 7tv$ vr?& ?&D E-)99:;1?EU UE  FNs   C 	CC