
    *Gj&                        U 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n# e$ r dZdZY nw xY wej        ej        z  Zej        ej        z  Zej        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z           ZereneZeed<   dS )    N)AnyFinalOptional   )AbstractResolverResolveResult)ThreadedResolverAsyncResolverDefaultResolvergetaddrinfoFAI_MASKc            
       z    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dS )r	   zThreaded resolver.

    Uses an Executor for synchronous getaddrinfo() calls.
    concurrent.futures.ThreadPoolExecutor is used by default.
    Nloopreturnc                 :    |pt          j                    | _        d S N)asyncioget_running_loop_loop)selfr   s     X/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/aiohttp/resolver.py__init__zThreadedResolver.__init__"   s    7W577


    r   hostportfamilyc                   K   | j                             ||t          j        |t                     d {V }g }|D ]\  }}}}}|t          j        k    rct          |          dk     r,|d         r9| j                             |t                     d {V \  }	}
t          |
          }n%|d d         \  }	}n|t          j
        k    sJ |\  }	}|                    t          ||	|||t                               |S )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%   sl      j,,#  - 
 
 
 
 
 
 
 
 &(,1 	 	(FAua((w<<!## 1: 	6 261G1G!32 2 , , , , , ,(M5 u::DD*1"1"+'M44////&-#tLL!&!/  	 	 	 	 r   c                 
   K   d S r    r   s    r   closezThreadedResolver.closeQ   s      r   r   r   N)__name__
__module____qualname____doc__r   AbstractEventLoopr   r%   r-   strr,   AddressFamilylistr   r6   r:   r8   r   r   r	   r	      s         8 8W6= 8 8 8 8 8 &'v~* **"*060D*	m	* * * *X     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dS )r
   z9Use the `aiodns` package to make asynchronous DNS lookupsNr   argskwargsr   c                 b   t           t          d          |pt          j                    | _        d | _        |s|rt          j        |i || _        d S t                      | _        | j        	                    | | j                  | _        t          | j        d          s| j        | _        d S d S )Nz Resolver requires aiodns librarygethostbyname)aiodnsRuntimeErrorr   r   r   _managerDNSResolver	_resolver_DNSResolverManagerget_resolverhasattr_resolve_with_queryr6   )r   r   rE   rF   s       r   r   zAsyncResolver.__init__X   s     >ABBB7W577
48  	6 	#/@@@DNF+--33D$*EEt~77 	43DLLL	4 	4r   r   r   r   r   c                   K   	 | j                             ||t          j        |t                     d {V }nT# t
          j        j        $ r=}t          |j	                  dk    r|j	        d         nd}t          d |          |d }~ww xY wg }|j        D ]}|j        }	|j        t          j        k    rt          |	          dk    r[|	d         rS| j                             |	d                             d          g|	dd          R t"                     d {V }
|
j        }n^|	d                             d          }|	d         }n:|j        t          j        k    sJ |	d                             d          }|	d         }|                    t+          ||||j        dt,                               |st          d d          |S )N)r   r   r   r   r   DNS lookup failedr    r   asciir"   )rM   r   r%   r&   r'   rI   errorDNSErrorr)   rE   OSErrornodesaddrr   r(   r*   decoder+   noder-   r.   r   r/   )r   r   r   r   respexcmsgr1   r[   r3   resultr4   s               r   r6   zAsyncResolver.resolveq   s      
	.33'$ 4        DD |$ 	. 	. 	.!$SX!!3!3#(1++9LC$$$#-	. &(J 	 	DGKyG{fo--w<<!##
# $(>#=#= **733BgabbkBB*$ $      F %+KMM$+AJ$5$5g$>$>M"1:DD{fn4444 '
 1 1' : :qzLL!&;/  	 	 	 	  	5$ 3444s   49 B
8BB
c           
        K   |t           j        k    rdnd}	 | j                            ||           d {V }nT# t          j        j        $ r=}t          |j                  dk    r|j        d         nd}t          d |          |d }~ww xY wg }|D ]-}	|
                    ||	j        ||dt           j        d           .|st          d d          |S )NAAAAAr   rS   r   r"   )r%   r(   rM   queryrI   rU   rV   r)   rE   rW   r.   r   AI_NUMERICHOST)
r   r   r   r   qtyper\   r]   r^   r1   rrs
             r   rQ   z!AsyncResolver._resolve_with_query   s      "(6?!:!:vv	.--dE::::::::DD|$ 	. 	. 	.!$SX!!3!3#(1++9LC$$$#-	.  
	 
	BLL $G $#2 	 	 	 	  	5$ 3444s   !: B8BBc                    K   | j         r0| j                             | | j                   d | _         d | _        d S | j        | j                                         d | _        d S r   )rK   release_resolverr   rM   cancelr9   s    r   r:   zAsyncResolver.close   sd      = 	M**4<<< DM!DNF>%N!!###r   r   r;   )r<   r=   r>   r?   r   r@   r   r   r%   r-   rA   r,   rB   rC   r   r6   dictrQ   r:   r8   r   r   r
   r
   U   s       CC 264 4'$.4 4 	4
 
4 4 4 44 &'v~0 00"0060D0	m	0 0 0 0f &'fn "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 )rN   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         S r   )rl   super__new___init)cls	__class__s    r   ro   z_DNSResolverManager.__new__   s>    = !GGOOC00CMM!!!}r   c                 6    t          j                    | _        d S r   )weakrefWeakKeyDictionary
_loop_datar9   s    r   rp   z_DNSResolverManager._init   s    
 %'' 	r   clientr
   r   zaiodns.DNSResolverc                     || j         vr5t          j        |          }t          j                    }||f| j         |<   n| 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   )rv   rI   rL   rt   WeakSetadd)r   rw   r   resolver
client_sets        r   rO   z _DNSResolverManager.get_resolver   sq     t&&)t444H9@9J9JJ%-z$:DOD!! $(?4#8 Hj 	vr   c                     | j                             |          }|dS |\  }}|                    |           |s ||                                 | j         |= dS dS )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)rv   getdiscardri   )r   rw   r   current_loop_datar{   r|   s         r   rh   z$_DNSResolverManager.release_resolver   s{     !O//55$F0*6""" 	&#!!!%%%	& 	&r   )r   rN   r;   )r<   r=   r>   r?   rl   r   __annotations__ro   rp   r   r@   rO   rh   __classcell__)rr   s   @r   rN   rN      s           26Ix-.555     ( ( ( (%-4-F	   .&%&-4-F&	& & & & & & & &r   rN   r   ) r   r%   rt   typingr   r   r   abcr   r   __all__rI   rP   rL   aiodns_defaultImportErrorrd   AI_NUMERICSERVr/   NI_NUMERICHOSTNI_NUMERICSERVr+   AI_ADDRCONFIGr'   r   r	   r
   rN   r   _DefaultTyper   r   r8   r   r   <module>r      s      ' ' ' ' ' ' ' ' ' ' 0 0 0 0 0 0 0 0
BMMMWV/??NN   FNNN
 -0EE *V-BB %
769 %fn$N7 7 7 7 7' 7 7 7tu u u u u$ u u up@& @& @& @& @& @& @& @&F M$4451? UEU U U U U Us   9 	AA